首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >坚固合同-最好的方式空投一次用户

坚固合同-最好的方式空投一次用户
EN

Ethereum用户
提问于 2021-09-13 12:42:26
回答 1查看 1.4K关注 0票数 0

我有一个非常简单的空投合同如下:

代码语言:javascript
复制
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的影响是什么?

谢谢你的帮助!

EN

回答 1

Ethereum用户

发布于 2021-09-14 05:00:45

最好的方法是在getAirdrop函数和用户地址之间创建一个映射。

然后向getAirdrop函数中添加一个方法,如果空投成功,则布尔值变为true。

  1. 检查地址以前是否做过。

//用户以前有空投吗?

代码语言:javascript
复制
mapping(address => bool) public hasClaimed;
  1. 在空投功能中加入逻辑

然后在getAirdrop函数中添加

代码语言:javascript
复制
 function getAirdrop() public {
 require(hasClaimed[msg.sender] == false) ;
 token.transfer(msg.sender, amount);
 hasClaimed[msg.sender] == true;
}

不幸的是,用户只需创建另一个地址并要求更多的地址,但这是不能仅限于智能契约的事情。

票数 2
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/109851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档