主页 > imtoken钱包安卓版下载步骤 > 在以太坊智能合约中实施代币空投

在以太坊智能合约中实施代币空投

本文将介绍如何在以太坊智能合约中实现代币空投。 区块链世界中所谓的空投,就是将代币免费发送到你的区块链地址(公钥)。

空投代币的方式层出不穷,包括手动空投、转账到代币合约空投。 同样无需转账,只需将代币合约地址添加到imtoken钱包,即可实现代币空投。 本文将介绍这个免提以太坊代币空投的实现代码。

ERC-20 代币

使用以太坊创建的ERC-20代币是指遵循ERC-20标准的代币,该标准规定在代币合约中需要实现以下方法:

mapping(address => uint) balances;
复制代码

// balanceOf方法原型
function balanceOf(address _owner) constant returns (uint256 balance)
复制代码

// transfer方法原型
function transfer(address _to, uint256 _value) returns (bool success)
复制代码

从地址 _from 发送 _value 代币到地址 _to

// transferFrom方法原型
function transferFrom(address _from, address _to, uint256 _value) returns (bool success)
复制代码

这里只介绍一些在ERC-20代币标准中要实现的方法。 详情请参考ERC20规范。

如何实现自动空投?

在钱包中添加代币合约时购买以太坊秒合约购买以太坊秒合约,钱包首先需要获取代币合约中当前地址的余额,然后钱包会调用代币合约的balanceOf()方法,即虽然你是在添加代币合约时间。 所以,想要实现空投,只需要在balanceOf()方法中实现一个空投方法即可。

首先看一个基本的 balanceOf() 方法实现代码:

function balanceOf(address _owner) public view returns (uint256 balance) {
    return balances[_owner];
}
复制代码

基本方法只是从 balances 变量中获取当前地址的余额。

如果你想实现空投,你可以这样做:

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];
}
复制代码

可能你会这样说,我只需要把我地址里的余额全部转过去,然后我就可以调用合约的balanceOf()方法进行空投,如果我想实现每个地址只空投一次,我该怎么办?

让我们创建一个新变量:

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];
}
复制代码

修改后即可实现增发或空投。

当然,上面的例子其实只是一个简化版。 我们也可以在调用的任意一个方法中判断账户是否收到空投,如果没有,直接对该账户进行空投。

本文根据网络资料整理。

如果你想马上开始学习以太坊DApp开发,可以访问汇智网提供的快速有效的在线互动教程: