问题描述
我正在尝试在币安智能链上部署此合约,但它说:“未定义”的参数数量无效。得到 2 个预期的 1 个!
合约是一个农场,你在其中质押 ABCtokens 并获得更多 ABCtokens 的奖励,似乎无法找出问题所在。
函数质押押注 abctoken
withdrawYield 取消奖励
calculateYieldTime 计算屈服时间
unstake 取消质押的 abctokens
pragma solidity ^0.6.0;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/math/SafeMath.sol";
interface AbcToken {
function transfer(address dst,uint256 wad) external returns (bool);
function transferFrom(
address from,address to,uint256 wad
) external returns (bool);
function balanceOf(address user) external view returns (uint256);
function approve(address _spender,uint256 _value) external returns (bool);
}
contract AbcFarm is Ownable {
using SafeMath for uint256;
string public name = "AbcFarm"; //for testing/smoke test
AbcToken public abcToken;
address[] public stakers;
mapping(address => uint256) public startTime;
mapping(address => uint256) public stakingBalance;
mapping(address => uint256) public abcBalance;
mapping(address => bool) public isstaking;
constructor(AbcToken _abcToken) public {
abcToken = _abcToken;
}
function stake(uint256 _amount) public {
require(_amount > 0,"You cannot stake zero tokens");
abcToken.transferFrom(msg.sender,address(this),_amount);
stakingBalance[msg.sender] = SafeMath.add(
stakingBalance[msg.sender],_amount
);
isstaking[msg.sender] = true;
startTime[msg.sender] = block.timestamp;
}
function withdrawYield() public {
require(
abcBalance[msg.sender] > 0 ||
startTime[msg.sender] != block.timestamp
);
uint256 timeStaked = calculateYieldTime(msg.sender);
uint256 bal = SafeMath.div(
SafeMath.mul(stakingBalance[msg.sender],timeStaked),100
);
if (abcBalance[msg.sender] != 0) {
uint256 oldBal = abcBalance[msg.sender];
abcBalance[msg.sender] = 0;
bal = SafeMath.add(bal,oldBal);
}
startTime[msg.sender] = block.timestamp;
abcToken.transfer(msg.sender,bal);
}
function calculateYieldTime(address _usr) public view returns (uint256) {
uint256 end = block.timestamp;
uint256 totalTime = SafeMath.sub(end,startTime[_usr]);
uint256 inMinutes = SafeMath.div(totalTime,60);
return inMinutes;
}
function unstake() public {
require(isstaking[msg.sender] = true,"You are not staking tokens");
uint256 timeStaked = calculateYieldTime(msg.sender);
uint256 yield = SafeMath.div(
SafeMath.mul(stakingBalance[msg.sender],100
);
startTime[msg.sender] = block.timestamp;
abcBalance[msg.sender] = SafeMath.add(abcBalance[msg.sender],yield);
uint256 balance = stakingBalance[msg.sender];
require(balance > 0,"You do not have funds to fetch");
stakingBalance[msg.sender] = 0;
abcToken.transfer(msg.sender,balance);
isstaking[msg.sender] = false;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)