教你如何在几分钟内添加imtoken和空投代币
imToken 是一款全球领先的区块链数字资产管理工具[ZB],帮助你安全管理BTC, ETH, ATOM, EOS, TRX, CKB, BCH, LTC, DOT, KSM, FIL, XTZ 资产,同时支持去中心化币币兑换功能 ...
最近各种项目方的代币空投层出不穷,有的是手动空投imtoken空投,有的是通过转0eth到代币合约中实现空投,不过最近有部分空投是通过将代币合约地址添加到合约中来实现的,不需要转钱。这里很多朋友不明白原理,以为不用做任何操作就可以空投到自己的地址中。下面我来详细讲解一下如何添加和空投代币。
ERC-20 代币
使用以太坊创建的ERC-20代币是指遵循ERC-20标准的代币,该标准规定需要在代币合约中实现以下方法:
余额变量,存储所有拥有代币的地址的余额
mapping(address => uint) balances;
()
返回指定地址的账户余额
// balanceOf方法原型
function balanceOf(address _owner) constant returns (uint256 balance)
()
将token数量转入
// transfer方法原型
function transfer(address _to, uint256 _value) returns (bool success)
()
从地址 _from 向地址 _to 发送一定数量的代币
// transferFrom方法原型
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
关于ERC-20 token标准中需要实现的方法,我只提到了这几种,并不是全部,具体请参见附录中的链接。
如何实现添加和空投?
在钱包中添加 token 合约时,钱包首先需要获取 token 合约中当前地址的余额。关键在于,当你在 token 合约中需要获取自己地址的余额时,其实是调用了 token 合约的 () 方法。也就是说,虽然在添加 token 合约时你以为没有和 token 合约进行交互,但实际上钱包已经和 token 合约进行交互了。如果你想实现空投,只需要在 () 方法中实现一个空投方法即可。
首先我们看一下token最佳实践中的()方法:
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
基本方法只是从变量中获取您当前地址的余额。
如果你想实现空投,你可以这样做:
uint totalSupply = 100000000 ether; // 总发行量
uint currentTotalSupply = 0; // 已经空投数量
uint airdropNum = 1 ether; // 单个账户空投数量
function balanceOf(address _owner) public view returns (uint256 balance) {
// 添加这个方法,当余额为0的时候直接空投
if (balances[_owner] == 0 && currentTotalSupply < totalSupply) {
currentTotalSupply += airdropNum;
balances[_owner] += airdropNum;
}
return balances[_owner];
}
你可能会说我只需要把我地址里的余额全部转走,然后调用合约的()方法空投就可以了,如果我想对每个地址只空投一次,该怎么做呢?
让我们创建一个新变量:
uint totalSupply = 100000000 ether; // 总发行量
uint currentTotalSupply = 0; // 已经空投数量
uint airdropNum = 1 ether; // 单个账户空投数量
// 存储是否空投过
mapping(address => bool) touched;
// 修改后的balanceOf方法
function balanceOf(address _owner) public view returns (uint256 balance) {
// 添加这个方法,当余额为0的时候直接空投
if (!touched[_owner] && currentTotalSupply < totalSupply) {
touched[_owner] = true;
currentTotalSupply += airdropNum;
balances[_owner] += airdropNum;
}
return balances[_owner];
}
修改完之后就可以添加和空投了。
当然上面的例子只是一个简化的版本,我们还可以在任意一个调用的方法中判断该账户是否收到过空投,如果没有,则直接对该账户进行空投。
空投福利
以下是一些已知的空投合约,打开im钱包imToken,点击加号,复制粘贴合约地址,搜索点击添加,币秒到,无需支付以太坊费用。
1.(免费88888.88)合约地址
B2
2.(10,000)合约地址
71
3.PNS(80081枚)合约地址
07
4.发送(276个)合约地址
18
附录:
A. ERC-20 代币标准
B. ERC-20 代币合约的最佳实践代码
C.空投合约源代码