【科学家养成日记#11】部署合约多领空投
昨天,一个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,找个时间试一试,这样技能库又多一个技能