如何解决如何将收获代币添加到农业合同中?
您好,感谢您阅读我的问题。
我正在尝试创建一个抵押农场以学习 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 举报,一经查实,本站将立刻删除。