以太坊代幣空投合約實現

本文將介紹如何在以太坊智能合約中實現代幣的空投。區塊鏈世界中所謂空投(airdrop),就是免費給你的區塊鏈地址(公鑰)發送代幣。java

代幣空投的方式層出不窮,有手工打幣空投的,也有向代幣合約轉帳進行空投的,還能夠無需轉帳,只須要將代幣合約地址添加到imtoken錢包中去,就能夠實現代幣空投。本文將介紹這種無須動手的以太坊代幣空投實現代碼。web

ERC-20代幣

採用以太坊建立的ERC-20代幣,指的是遵循ERC-20標準的代幣,該標準指出,在代幣合約中須要實現如下方法:網絡

  • balances: 餘額變量,該變量裏面存儲了全部擁有代幣的地址的餘額
mapping(address => uint) balances;
  • balanceOf():返回指定地址的帳戶餘額
// balanceOf方法原型
function balanceOf(address _owner) constant returns (uint256 balance)
  • transfer():轉移 _value 數量的token到地址 _to
// transfer方法原型
function transfer(address _to, uint256 _value) returns (bool success)
  • transferFrom()

從地址_from發送數量爲_value的token到地址_toapp

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

這裏僅列出ERC-20的代幣標準中要實現的部分方法,具體能夠查看ERC20規範。學習

如何實現自動空投?

當在錢包中添加一個代幣的合約時,錢包首先須要獲取當前地址在該代幣合約中的餘額,這時錢包會調用了代幣合約的 balanceOf() 方法,也就是雖然你在添加代幣合約的時候。所以想要實現空投,只須要在balanceOf()方法裏面實現一個空投的方法。區塊鏈

首先看一下,一個基本的balanceOf() 方法實現代碼:ui

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

基礎的方法僅從 balances 變量中獲取你當前地址的餘額。3d

若是想要實現空投,能夠這樣:code

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()方法進行空投,若是我想實現給每一個地址僅空投一次,應該如何操做呢?blog

咱們來新建一個變量:

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開發,能夠訪問匯智網提供的最熱門在線互動教程:

其餘更多內容也能夠訪問這個以太坊博客

相關文章
相關標籤/搜索