当我在运行纱线硬帽子编译时收到此错误时,我正在做链接哈克顿课程"DeFi Staking:链接代码“:
ParserError: Expected ',‘但得到’;
错误HH600:编译失败
// 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();
}
}}
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();
}
}}
发布于 2022-05-07 22:55:40
在此:
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()
https://ethereum.stackexchange.com/questions/127764
复制相似问题