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