首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误HH600:编译失败的ParserError: Expected ',‘但得到了’;

错误HH600:编译失败的ParserError: Expected ',‘但得到了’;
EN

Ethereum用户
提问于 2022-05-07 17:33:36
回答 1查看 793关注 0票数 0

当我在运行纱线硬帽子编译时收到此错误时,我正在做链接哈克顿课程"DeFi Staking:链接代码“:

ParserError: Expected ',‘但得到’;

错误HH600:编译失败

代码语言:javascript
复制
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

error Staking__TransferFailed();
error Stakig__NeedsMoteThanZero();


contract Staking {
    IERC20 public s_stakingToken;
    ERC20 public s_rewardToken;
    // somones address -> how much they staked
    mapping(address => uint256) public s_balances;

   // mapping of how much each address has been paid
   mapping(address => uint256) public s_userRewardPerTokenPaid;

   // a mapping of how much rewards each address has to claim
   mapping(address => uint256) public s_rewards;

uint256 public constant REWARD_RATE =100;
uint256 public s_totalSupply;
uint256 public s_rewardPerTokenStored;
uint256 public s_lastUpdateTime;

modifier updateReward(address account){
    s_rewardPerTokenStored = rewardPerToken();
    s_lasrUpdateTime = block.timestamp;
    s_rewards[account] = earned(account);
    s_userRewardPerTokenPaid[account] = s_rewardPerTokenStored;
    _;
}

modifier moreThanZero(uint256 amount){
    if( amount ==0){
        revert Stakig__NeedsMoteThanZero();
    }
    _;

}
    


constructor(address stakingToken, address rewardToken) {
    s_stakingToken = IER20(stakingToken);
    s_rewardToken = IER20(rewardToken);
}

function earned(address account) public view returns (uint256){
    uint256 currentBlanace = s_balances[account];
    // how much they have paid alredy
    uint256 amountPaid = s_userRewardPerToken[account];
    uint256 currentRewardPerToken = rewardPerToken();
    uint256 pastRewards = s_rewards[account];
    uint256 _earned = ((currentBalance *(currentRewardPerToken - amountPaid)/1e18) + 
        pastRewards;
    return _earned; 

}



function rewardPerToken public view returns(uint256) {
    if (s_totalSupply ==0){
        return s_rewardPerTokenStored;
    }
    return s_rewardPerTokenStored + (((block.timestamp -s_lastUpdateTime) * REWARD_RATE * 1e18/ s_totalSupply);
}

function stake(uint256 amount) external updateReward(msg.sender) moreThanZero(amount) {
    s_balances[msg.sender] = s_balances[msg.sender] + amount;
    s_totalSupply = s_totalSupply + amount;
    // emit event
    bool success = s_stakingToken.transferFrom(msg.sender, address(this), amount);
    // require(success, "Failed");
    if(!success) {
        revert Staking__TransferFailed();
    }

}

}

代码语言:javascript
复制
function withdraw(uint256 amount) external updateReward(msg.sender) moreThanZero(amount) {
    s_balances[msg.sender] = s_balances[msg.sender] - amount;
    s_totalSupply = s_totalSupply - amount; 
    bool success = s_stakingToken.transfer(msg.sender, amount);
    if(!success) {
        revert Staking__TransferFailed();
    }

}

function claimReward() external updateReward(msg.sender) {
    uint256 reward = s_rewards[msg.sender];
    bool succes = s_rewardToken.transfer(msg.sender, reward);
    if(!success){
        revert Staking__TransferFailed();
    }
    

}

}

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-05-07 22:55:40

在此:

代码语言:javascript
复制
function rewardPerToken public view returns(uint256) {
    if (s_totalSupply ==0){
        return s_rewardPerTokenStored;
    }
    return s_rewardPerTokenStored + (((block.timestamp -s_lastUpdateTime) *     REWARD_RATE * 1e18/ s_totalSupply);
}

你忘了函数括号。它应该看起来像function rewardPerToken()

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/127764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档