关于ERC20.sol
中的decimals()
函数的理解
这个函数的目的就是告诉别人,合约中运行的计量单位Wei
和程序员显示的计量单位Ethers
之间的数量级关系。相当于我们在电子商城中,内部使用的单位是分,但是外部使用的单位是元,于是我就可以返回2作为进制差异。
在以太坊网络中,内部使用的单位是Wei
,外部使用的单位是Ether
,所以,返回18作为进制差异。
- 关于
view
标识符
其中的view
的目的是控制函数,不可以改变状态。最典型的有下面三个情况:
第一个个毋庸置疑,就是改变状态变量;第二个可以简单归类为view
函数不能发送事件,一旦发送事件,那么以太坊的日志就会改变,所以也不算view
;创建其他合约,以太坊的数据也会改变。
总之,但凡使得以太坊数据可能发生变更的内容,都不可以在view
函数中出现。
- 关于
virtual
标识符
virtual
标识能被子合约继承,override
标识重写了父亲合约。
returns(uint8)
标识返回的内容是uint8类型,uint8
标识无符号的8位整数,也就是能表示0~255的数字,完全足够。
function decimals() public view virtual override returns (uint8) {
return 18;
}
关于balanceOf
函数来获得用户余额
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
注意这个指定账户的余额,是按照单位Wei
进行标识的。这里的external
就是告诉我们,这个是外部函数,但是为什么不用public
呢?
public
表明函数或者变量,对外部和内部都可见;external
表明函数或者变量,只对外部可见,内部不可见。
- 下面这个函数时关于转账的逻辑
transfer
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint25