“未定义”的参数数量无效得到 2 预期 1

问题描述

我正在尝试在币安智能链上部署此合约,但它说:“未定义”的参数数量无效。得到 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...