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