我有一个非常简单的空投合同如下:
contract ERC20 {
function transfer(address _to, uint256 _value)public returns(bool);
function balanceOf(address tokenOwner)public view returns(uint balance);
function transferFrom(address from, address to, uint tokens)public returns(bool success);
}
contract SimpleAirdrop {
ERC20 public token;
uint256 amount = 1000 * 10**18 //18 decimals token
function SimpleAirdrop(address _tokenAddr) public {
token = ERC20(_tokenAddr);
}
function getAirdrop() public {
token.transfer(msg.sender, amount);
}
}我可以使用给定的ERC20地址部署契约,因此我应该能够向该契约发送令牌,用户可以调用getAirdrop()方法并接收1000个令牌
如何防止用户空投次数超过1次?我可以检查用户的平衡,但这并不是说他没有收到空投。我可以存储一个名为空投法的地址列表吗?gaz的影响是什么?
谢谢你的帮助!
发布于 2021-09-14 05:00:45
最好的方法是在getAirdrop函数和用户地址之间创建一个映射。
然后向getAirdrop函数中添加一个方法,如果空投成功,则布尔值变为true。
//用户以前有空投吗?
mapping(address => bool) public hasClaimed;然后在getAirdrop函数中添加
function getAirdrop() public {
require(hasClaimed[msg.sender] == false) ;
token.transfer(msg.sender, amount);
hasClaimed[msg.sender] == true;
}不幸的是,用户只需创建另一个地址并要求更多的地址,但这是不能仅限于智能契约的事情。
https://ethereum.stackexchange.com/questions/109851
复制相似问题