【科学家养成日记#11】部署合约多领空投

in hive-180932 •  2 years ago 

昨天,一个12岁小学生部署的治理币火了。小学生通过视频教学,教大家怎么部署智能合约,同时部署了RND的治理币让大家免费领取: http://therandomdao.com/

这个币任意钱包都可以领取,奇葩的是,领取的币当时还能卖100多u,扣去gas还有点赚的, 所以科学家开始部署合约来多领空投.

这是科学家一个交易里面,创建100个子合约领取了100笔RND空投,领完后全部转回主钱包:

image.png

这个方式比用web3来的省gas。如果用web3, 需要创建新号,然后转账到新号,新号claim后再转回主钱包。这里面并不能确定具体需要多少ETH才够领取和转回主钱包的GAS。而用部署合约的方式,只需主钱包付一次GAS就行了,省下不少GAS

现在来了解怎么写多领合约:

pragma solidity ^0.8.0;

interface airdrop {
    function transfer(address recipient, uint256 amount) external;
    function balanceOf(address account) external view returns (uint256);
    function claim() external;
}
contract multiCall {
//RND的合约地址
    address constant contra = address(0x1c7e83f8c581a967940dbfa7984744646ae46b29);

//创建子合约
    function call(uint256 times) public {
        for(uint i=0;i<times;++i){
            new claimer(contra);
        }
    }
}
contract claimer{
    constructor(address contra){
        //领取空投
        airdrop(contra).claim();
       //获得领取的空投数量
        uint256 balance = airdrop(contra).balanceOf(address(this));
       //把空投的币转回主钱包
        airdrop(contra).transfer(address(tx.origin), balance);
       //销毁子合约
        selfdestruct(payable(address(msg.sender)));
    }
}

(代码来源自: https://github.com/GGCCCC/airdrop_multi_claim)

这个合约先创建子合约,然后子合约领取RND后把币转回主钱包,然后自我销毁子合约(据说会省10%的GAS)

这种创建子合约领取空投的方式并不是第一次出现,之前Adidas的NFT,有人就用这种方式绕过一个号只能mint一个NFT的限制

想了想,之前自动铸造Evmosians NFT也可以用这种方式一键领取多个NFT,找个时间试一试,这样技能库又多一个技能

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  
  ·  2 years ago 

Happy every day, upvoted ,see you 😊! witnesses vote for me get daily upvote. Thank you for your support,Avoid useless information. I won't leave messages often, but I will upvote