以太坊智能合約開發(四):Solidity轉賬智能合約實驗
- 1 合約撰寫
- 2 在線除錯
1 合約撰寫
撰寫一個分布式轉賬智能合約,部署合約的人為合約管理員,只有管理員可以為其他用戶發放代幣,其他用戶之間可以互相轉賬,轉賬的操作以事件的方式被記錄在鏈上,
- 版本宣告和合約創建:
pragma solidity ^0.4.24;
contract coin {
}
- 宣告全域變數manager,作為本合約的管理員:
address public manager; - 宣告映射balances,通過balances[addr]來查看地址余額:
mapping (address => uint) public balances; - 宣告事件Sent,用來記錄轉賬程序:
event Sent (address _From,address _To,uint amount); - 建構式,將呼叫者的地址賦予manager:
constructor() public { manager = msg.sender; } - 自定義修飾符(modifier)isManager,判斷分發代幣的人是否是管理員:
modifier isManager{
require(msg.sender == manager,"you are not the manager!");
_;
}
- 自定義修飾符overflow,因為solidity本身對于數的加法溢位沒有做處理,因此我們需要防備這種情況:
modifier overflow(address receiver,uint amount){
require(balances[receiver] + amount > balances[receiver], "too many balances for receiver");
_;
}
- reward函式,通過管理員為其他賬戶增加余額:
function reward(address receiver,uint amount) public isManager overflow(receiver,amount){
balances[receiver] += amount;
}
- send函式,呼叫時用戶會將自己余額中的部分代幣發送給輸入地址所對應的賬戶:
function send(address receiver,uint amount) public overflow(receiver,amount){
balances[msg.sender] -= amount;
balances[receiver] += amount;
emit Sent(msg.sender, receiver, amount);
}
2 在線除錯
執行上面的智能合約,合約執行成功,

以管理員身份嘗試分發代幣,并通過balances查詢地址余額,


當以非管理員身份呼叫reward函式發放代幣時,顯示報錯并呼叫失敗,

普通用戶之間相互轉賬并查詢地址余額,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/330393.html
標籤:區塊鏈
上一篇:以太坊POA共識演算法決議
