如何将收获代币添加到农业合同中?

问题描述

您好,感谢您阅读我的问题。

我正在尝试创建一个抵押农场以学习 solidity,我意识到这个农场允许用户抵押他们的代币,然后我需要运行一个代码来发放他们的奖励,但我还需要支付 gas 费我自己。

我想要做的是添加一个 Harvest 按钮,这样我就可以将奖励作为津贴发放,而无需将其发送给用户,这样他们就可以随时通过支付 gas 费来收获它们。 任何提示表示赞赏。

pragma solidity ^0.5.0;


import "./DappToken.sol";
import "./DaiToken.sol";

contract TokenFarm {

    string public name = "Dapp Token Farm";
    address public owner;
    DappToken public dappToken;
    DaiToken public daiToken;

    address[] public stakers;
    mapping(address => uint) public stakingBalance;
    mapping(address => bool) public hasstaked;
    mapping(address => bool) public isstaking;

    constructor(DappToken _dappToken,DaiToken _daiToken) public {
        dappToken = _dappToken;
        daiToken = _daiToken;
        owner = msg.sender;
    }
    // 1. stakes tokens (deposit)
    function staketokens(uint _amount) public {

        require(_amount > 0,"amount cannot be 0");

        daiToken.transferFrom(msg.sender,address(this),_amount);

        stakingBalance[msg.sender] = stakingBalance[msg.sender] + _amount;

        if(!hasstaked[msg.sender]) {
            stakers.push(msg.sender);
        }

        isstaking[msg.sender] = true;
        hasstaked[msg.sender] = true;
    }

    // 2.issuing tokens

    function issuetokens() public {
        require(msg.sender == owner,"caller must be the owner");
        for (uint i=0; i<stakers.length; i++) {
            address recipient = stakers[i];
            uint balance = stakingBalance[recipient];
            if(balance > 0) {
                dappToken.transfer(recipient,balance);
            }
        }
    }

     // 3. unstake
    
    function unstaketokens() public {
        uint balance = stakingBalance[msg.sender];
        require(balance > 0,"staking balance cannot be 0");

        daiToken.transfer(msg.sender,balance);
        stakingBalance[msg.sender] = 0;
        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...