此为历史版本和 IPFS 入口查阅区,回到作品页
ericet
IPFS 指纹 这是什么

作品指纹

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

ericet
·

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

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

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


这个方式比用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,找个时间试一试,这样技能库又多一个技能

CC BY-NC-ND 2.0 授权