Solidity語法基礎學習
十、實戰專案(二):
1.實戰準備:
ERC20代幣介面
ERC20 Token Interface介面
Interface IName {……}
·關鍵字:interface
·宣告一個介面,定義了需要滿足的函式與事件
·在介面中的限制:
·所有宣告的函式介面必須是“external”,即使最終在合約使用的是public也一樣。
·不能宣告建構函式(constructor)
·不能宣告在儲存空間的變數(狀態變數,state variables)
·不能宣告修飾符(modifier)
示例程式碼
ERC20介面
Interface IERC20{
event Transfer(address indexed from,address indexed to,uint256 value);
event Approval(address indexed owner,address indexed spender,uint256 value);
funciton totalSupply() external view returns(unit256);
funciton balance0f(address account) external view returns(uint256);
function allowance(address owner,address spender) external view returns(uint256);
function approve(address spender,uint256 amount) external returns(bool);
function transfer(address to,uint256 amount) external returns(bool);
function transferFrom(address to,uint256 amount) external returns(bool);
}
2.分段解讀:
發行量函式
·function totalSupply() external view returns(uint256);
·回傳代幣的發行量
·使用狀態變數uint256_totalSupply來儲存
賬戶函式查詢函式
·function balance0f(address account) external view returns(uint256);
·給定一個賬戶(address),回傳給該賬戶擁有的代幣餘額(uint256)
·因為是個address→uint256的關係,因此使用mapping來儲存:mapping(address => uint256) _balance;
賬戶函式
·function transfer(address to,uint256 amount) external returns(bool);
·呼叫者“msg.sender”,轉移“amount”數量的代幣給特定賬戶“to”
·成功時回傳true,反之,回傳false
轉賬事件
·event Transfer(address indexed from,address indexed to,uint256 value);
·當發生代幣轉移時,必須觸發此事件,即使轉移的數量為“0”也是
授權函式
·function approve(address spender,uint256 amount) external returns(bool);
·呼叫者“msg.sender”,授權“amount”數量的代幣給第三方賬戶“spender”使用
·成功時回傳true,反之,回傳false
授權事件
·event Approval(address indexed owner,address indexed spender,uint256 value);
·當授權函式被使用時,必須觸發授權事件,即使授權的數量“value”為“0”也是。
授權數量查詢函式
·function allowance(address owner,address spender) external view returns(uint256);
·回傳代幣擁有者“owner”授權給第三方賬戶“spender”的代幣數量
·我們可以觀察到授權的行為是owner→spender→uint256
·因此在儲存授權的資訊時,會使用
·mapping(address => mapping(address => uint256))
第三方轉賬函式
·function transferFrom(address from,address to,uint256 amount) external returns(bool);
·呼叫者為“被授權的第三方賬戶”,從授權者“from”轉移“amount”數量的代幣給接收者“to”
·成功時回傳true,反之,回傳false