Ethereum Token - ERC20 mint 跟 burn
這篇會著重在erc20 smart contract實作mint跟burn的部分,所以需要先了解erc20喔!
erc20 token在設計上可以a.預先產生,b.產生部分然後部分用挖的(mint)或是c.都用挖的。當然在應用上跟token屬性有關,例如是屬於security token或是utility token。簡單來說,像是股票可以獲利或是配息概念的算是security token,需要受各國法令監管,那utility token就比較像是點數的概念,至於細節怎麼分不是本篇重點。
mint的使用時機,例如在crowd sale時,每一筆進入crowd sale的錢,crowd sale 的contract 就會呼叫token contract去產生某個數量的token,這個動作就可以稱作mint。也有不用挖的,一開始就產生好,例如秘銀(MITH),從etherscan可以看到token contract怎麼寫的,這裡可以看到MITH的contract。當然你想產多少就多少,不過就看有沒有人買單 XD
回到正題,要"挖"聽起來,就覺得很複雜,但其實smart contract的本質就是記帳,所以其實就只是數字上的加減而已,下面是範例程式
function mint(address _to, uint256 _amount) public
{
totalSupply_ = totalSupply_.add(_amount);
balances[_to] = balances[_to].add(_amount);
emit Mint(_to, _amount);
}
function _burn(address _who, uint256 _value) public
{
balances[_who] = balances[_who].sub(_value);
totalSupply_ = totalSupply_.sub(_value);
emit Burn(_who, _value);
}
這是基本的mint跟burn,至於在應用上有需要其他邏輯,就是基於這個在往上堆疊。例如可以多加Transfer的event(erc20 標準中的Transfer event),在mint時from就是0x0,burn就是to為0x0,在應用上如果要追蹤token數量,就會比較方便。
最後在分享openzeppelin-solidity這個github repository,在看網路上很多的sample code常會看到SafeMath或是Ownable這兩個contract,其實都是出自於openzeppelin,裡面還有很多contract的範例可以參考或是使用,最棒的是他們有在follow 最新solidity的版本,所以都會根據新的語法做更新。他們把module切得相當的細,非常的OO,不過在看的時候會比較難一口氣看完,這也是Vyper開發者覺得solidity需要改善的其中一個點 -「可讀性」。因為可讀性越差,可稽核性就越差,相較之下安全性就越差。
* Vyper是類Python語法的新一代smart contract語言,目前還在beta(0.1.0-beta.2),不過Casper的smart contract已經是用Vyper寫的囉!看來Ethereum foundation的開發者是傾向往這邊走。
有錯誤或是不同看法,歡迎指教喔!
Lucky Club Casino Site - Casino - Lucky Club Live
回覆刪除Lucky Club Casino is a casino in Minsk, Belarus. luckyclub Established in 2008, the casino is an online sports betting site. It offers a variety of sports betting options.