如何快速领取十二岁天才的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费用

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

 

 

 

上一篇:第63篇-解释器与编译器适配(二)


下一篇:Java 异常