以太坊合约精度本质上代表代币可拆分到的小数位数,它决定了链上整数余额如何换算成人们看到的代币数量。对erc-20代币而言,常见的参数是decimals(),例如精度为6,意味着链上每1,000,000个最小单位显示为1枚代币;精度为18,则每1,000,000,000,000,000,000个最小单位显示为1枚代币。这个参数不是价格精度,也不是合约交易中的杠杆倍数,而是资产计量方式。

以太坊虚拟机的底层计算主要使用整数,不直接处理带小数点的代币余额。假设某代币精度为6,用户转账1.25枚,合约实际收到的参数通常是1,250,000;钱包、交易所或区块浏览器再按照10的6次方进行展示。精度为18的代币,转账1.25枚对应的链上数值则是1.25乘以10的18次方。也就是说,精度改变的是人类单位和最小单位之间的比例,并不会凭空增加资产价值,也不会让价格走势更精确。

ETH本身也存在类似的单位换算,只是它不依赖ERC-20代币合约的decimals()函数。以太坊网络把Wei作为ETH的最小单位,1 ETH等于10的18次方Wei,Gas费用常用Gwei表示,1 Gwei等于10的9次方Wei。钱包显示余额时,会把链上的Wei转换为ETH;交易执行、账户余额和原生ETH转账,则以Wei作为底层记账单位。代币精度与ETH的18位单位逻辑相似,但两者属于不同层面的规则。

实际使用中,精度最容易影响的是转账、授权、兑换和前端报价。调用transfer或approve时,参数往往必须填写最小单位数量,直接把钱包里看到的100枚当成链上数值,可能导致金额放大或缩小数百万、数万亿倍。去中心化交易所还要同时处理代币精度、池中储备量、价格预言机精度和报价精度,任何一个换算环节出错,都可能出现余额显示异常、兑换数量不对,甚至因授权额度不足导致交易失败。
需要留意的是,ERC-20规范将decimals()定义为可选接口,标准示例说明精度为8时,应将链上数量除以100,000,000后得到用户看到的数量,但并非所有合约都必须提供这一函数,外部程序也不能对所有代币机械地假设精度一定是18。OpenZeppelin的ERC-20实现默认使用18位,但开发者可以覆写这一设置。查询一个新代币时,不能只看名称、价格或总供应量,还应核对合约返回的精度、余额原始值和前端换算结果。理解这一点,才能判断代币数量是否真实,也能减少交互智能合约时因单位错误产生的资金风险。
10-26
UDS并不是美金,它是一款诞生
比特币仍有反弹机会,但机会不等
北交所50万元个人开户资金门槛
加密货币交易核心规则分为四大板