在以太坊乃至整个区块链生态中,创建代币(俗称“发币”)是许多项目方、开发者或技术爱好者迈出的第一步,从撰写白皮书到编写智能合约,每一个环节都至关重要,而在智能合约,尤其是遵循ERC-20标准的代币合约中,一个常被初问及,也容易因疏忽而产生实际影响的细节便是:小数位(Decimals)到底写不写?写多少才合适?

“小数位”指的是代币价格可以分割到小数点后多少位,比特币(BTC)的小数位是8,意味着其最小单位是0.00000001 BTC,即1聪,以太坊(ETH)本身的小数位也是18。

“写不写”?—— 实质上是“必须写”,且有默认值

对于ERC-20代币合约而言,decimals变量不是“可选项”,而是“必选项”,它是一个uint8类型的变量,在合约部署时就需要确定其值。

  • 如果不显式设置会怎样? 虽然ERC-20标准没有强制要求必须在构造函数中初始化decimals,但最佳实践和大多数模板都会进行初始化,如果你完全忽略它,它可能会被默认赋值为0(这取决于Solidity的编译器和具体实现)。decimals设为0意味着代币不能分割,最小单位就是1个代币,这通常不是我们想要的结果,除非你有特殊需求(比如代表某种不可分割的权益凭证)。

  • 为什么必须写? decimals的主要作用是配图