EVM 代币精度
静默的精度不匹配是导致余额或美元价值出现数量级偏差且不抛出错误的最常见原因之一。
适用场景
- 在 Python、TypeScript 或 Solidity 中读取 ERC-20 余额
- 根据链上余额计算法币价值
- 跨多条 EVM 链比较代币数量
- 处理跨链桥接资产
- 构建投资组合追踪器、机器人或聚合器
工作原理
切勿假设稳定币在所有链上使用相同的精度。在运行时查询 decimals(),按 (chain_id, token_address) 进行缓存,并使用精度安全的数学运算进行价值计算。
示例
运行时查询精度
不要硬编码 1_000_000,因为同名代币在其他链上通常有 6 位小数。
按链和代币缓存
防御性处理异常代币
记录回退值并保持可见。旧版或非标准代币仍然存在。
在 Solidity 中归一化为 18 位 WAD 精度
使用 ethers 的 TypeScript 示例
快速链上检查
规则
- 始终在运行时查询
decimals() - 按链加代币地址进行缓存,而非按代币符号
- 使用
Decimal、BigInt或等效的精确数学运算,避免使用浮点数 - 在跨链桥接或代币包装变更后重新查询精度
- 在比较或定价前,始终将内部记账归一化为一致精度


