iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 19
0
自我挑戰組

區塊鏈報明牌系列 第 19

[區塊鏈報明牌]Day 19 Ethereum(2)-報明牌代幣

  • 分享至 

  • xImage
  •  

雖然網路上有很多關於以太坊智能合約的文章介紹,不過看了許久總是有種一知半解的感覺,看來必須要動手做才行。

筆者照著這篇文章的步驟拿到了一些以太坊測試網路的乙太幣,要是真的乙太幣該有多好/images/emoticon/emoticon39.gif

不過該文章的作者似乎還沒有寫接下來的教學,所以就直接來看ethereum官網的智能合約教學

ERC-20

ERC-20是一套在乙太坊中以智能合約發行代幣的標準,簡單來說你必須在智能合約中定義代幣發行量、轉移、查詢等功能,除了ERC-20標準的定義當然也可以自己加些額外的功能。

官網的教學就給出了一個ERC-20代幣的範例程式,以solidity撰寫智能合約並且放入乙太坊中執行。

來看幾個合約中的功能:

定義了發行代幣的總量、代幣名稱、代幣符號,然後合約的創造者一開始持有所有的代幣。

/**
 * Constrctor function
 *
 * Initializes contract with initial supply tokens to the creator of the contract
 */
function TokenERC20(
    uint256 initialSupply,
    string tokenName,
    string tokenSymbol
) public {
    totalSupply = initialSupply * 10 ** uint256(decimals);  // Update total supply with the decimal amount
    balanceOf[msg.sender] = totalSupply;                // Give the creator all initial tokens
    name = tokenName;                                   // Set the name for display purposes
    symbol = tokenSymbol;                               // Set the symbol for display purposes
}

將代幣從一個地址轉移到其他的地址,在轉移前也要確認餘額夠不夠、目標地址是否有效等等:


/**
 * Internal transfer, only can be called by this contract
 */
function _transfer(address _from, address _to, uint _value) internal {
    // Prevent transfer to 0x0 address. Use burn() instead
    require(_to != 0x0);
    // Check if the sender has enough
    require(balanceOf[_from] >= _value);
    // Check for overflows
    require(balanceOf[_to] + _value > balanceOf[_to]);
    // Save this for an assertion in the future
    uint previousBalances = balanceOf[_from] + balanceOf[_to];
    // Subtract from the sender
    balanceOf[_from] -= _value;
    // Add the same to the recipient
    balanceOf[_to] += _value;
    Transfer(_from, _to, _value);
    // Asserts are used to use static analysis to find bugs in your code. They should never fail
    assert(balanceOf[_from] + balanceOf[_to] == previousBalances);
}

報明牌代幣

現在來執行這個符合ERC-20標準的智能合約來創造自己的代幣,就取叫lottery token吧。

合約被測試網路接受,現在筆者有100億的代幣了,可以看到同時乙太幣的數量減少了,這是因為執行合約和把合約收入區塊鏈需要花費一定數量的gas,gas是另一種乙太幣的計算單位,之所以要分兩種單位是為了避免乙太幣價格波動造成的影響。

現在對於乙太坊中的智能合約脈絡有點清晰了,我們可以在乙太坊上撰寫智能合約來定義一些事情,例如自己的代幣,而智能合約的執行需要消耗乙太幣,之後就來用報明牌代幣做點事吧,希望不會食言/images/emoticon/emoticon13.gif

相關參考資源:

以太坊智能合約編程 Solidity — 新手教程 (第一章)
https://medium.com/taipei-ethereum-meetup/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%99%BA%E8%83%BD%E5%90%88%E7%B4%84%E7%B7%A8%E7%A8%8B-solidity-%E6%96%B0%E6%89%8B%E6%95%99%E7%A8%8B-%E7%AC%AC%E4%B8%80%E7%AB%A0-2a0803a5ae04
ethereum token
https://www.ethereum.org/token
ERC20 Token Standard
https://theethereum.wiki/w/index.php/ERC20_Token_Standard
Solidity
https://solidity.readthedocs.io/en/develop/


上一篇
[區塊鏈報明牌]Day 18 Ethereum(1)-智能合約
下一篇
[區塊鏈報明牌]Day 20 Ethereum(3)-DAO
系列文
區塊鏈報明牌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言