iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
Blockchain

以太坊-探索智能合約的多種面向系列 第 11

Day 11 智能合約(二) - Coin

Day 11 :
規格書中簡易的造幣合約,藉由這個合約,學習幾個新的識別字與其功能。

pragma solidity ^0.4.22;
        contract Coin {

            address public minter;
            mapping (address => uint) public balances;

            event Sent(address from, address to, uint amount);


            function coin() public {
                minter = msg.sender;
            }

            function mint(address receiver, uint amount) public {
                if (msg.sender != minter) return;
                balances[receiver] += amount;
            }
            function send(address receiver, uint amount) public {
                if (balances[msg.sender] < amount) return;
                balances[msg.sender] -= amount;
                balances[receiver] += amount;
                emit Sent(msg.sender, receiver, amount);
            }
        }

address :
以太方中的地址,佔有20個位元組,address不能做任何算術運算,也可以用uint160表示。

mappimg :
映射,對應類型的變數,以Coin合約中的程式碼舉例 :
amount = 2; address = 某個帳戶地址,
balances[address] += amount 則 balances[address] = 2。

msg.sender :
呼叫者的帳戶地址。

event :
事件,簡要的來說就是追蹤交易並紀錄傳進event的參數,觸發event要使用emit參數。

Function 說明 :
coin : 將帳戶設定成minter
當某個帳戶呼叫時,會將minter設定成呼叫coin的帳戶地址。

mint : 製造錢幣
• 判斷 呼叫mint的帳戶是不是minter,若不是直接返回。
• 若呼叫mint的帳戶是minter,將執行以下敘述。

send : 將錢幣給予某個帳戶
• 傳入(收款帳戶地址,發送金額)。
• 判斷呼叫者的餘額是否大於或等於發送金額,若小於直接返回。
• 若大於或等於,將呼叫者的餘額減掉發送金額。
• 將發送金額給予收款帳戶地址。
• 發送事件紀錄傳進的參數(呼叫者的帳戶,收款者的帳戶,發送金額)。


上一篇
Day 10 Smart Contract (一) - Simple Example
下一篇
Day 12 智能合約(三) - 編譯 - 使用solc
系列文
以太坊-探索智能合約的多種面向20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言