區塊鏈特輯——solidity語言基礎(六)

wybsignal發表於2023-01-20

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

相關文章