Runes 的 divisibility 与符号:链上整数怎么变成带小数点的展示 图 1
Runes 的 divisibility 与符号:链上整数怎么变成带小数点的展示 · 图 1

Runes 的 divisibility 与符号:链上整数怎么变成带小数点的展示

账本里没有小数,小数是”演”出来的

比特币脚本的世界里只有整数,Runes 也不例外:雕字交易写下的数量、mint 时派发的余额、转账 edict 指定的分配,全部是整数。但你在水滴面板或钱包界面看到的余额常常带小数点——这中间发生了一次由雕字方单方面决定的换算。规范把这个换算定义得很死:Divisibility 字段的值作为十的指数,规定一个”超级单位”包含多少子单位。举例是规范原文的表格:同样一个数值 1234,divisibility 为 0 时显示 1234,为 1 显示 123.4,为 2 显示 12.34,为 3 显示 1.234。Symbol 字段则规定展示后缀:规范示例说,若符号是 #、精度为 2,数量 1234 应显示为 12.34 #。

换句话说,雕字那一刻,这个代币”长什么样”就被永久锁进历史区块:多少个整数算一个”币”、尾巴挂什么符号,从此每次展示都由索引器照着执行。

数量级事故从哪里来

同一份 100 万整数的余额,在 divisibility 为 0 的币里叫”一百万个”,在精度 8 的币里只是”0.01 个”。事故有几种经典剧本。第一种,把雕字前的宣传数字当作展示单位:宣传说”发行 10 亿”,如果部署方按精度 8 雕字,链上整数其实只有 10 亿分之一换算后的十亿——但粗心的核对者可能把整数总量直接读成十亿枚,供应判断差出八个数量级。第二种,把带精度的余额当整数下单:edict 里指定转移数量用的是整数子单位,少乘一个十的幂等于只转了零头,多写几位则可能触发余额不足的失败。第三种跨索引器口径:规范的换算规则只有一条,但展示层实现(要不要四舍五入、截断还是补齐)各家不同,大额转账前后以链上原始交易复核为准。

顺带一提,雕字字段家族里还有个容易混的:spacers 字段只用于在名字里插入视觉分隔符(比如把 TOKEN 显示成 TO.KEN),与数量无关,也常被新手误当精度。

核对清单

读任何 Runes 代币的数量之前:在 ord 或雕字交易原文里查 divisibility 的实际值与 symbol;把界面数字乘回整数单位,与雕字里的 premine、cap、amount 逐项对表;用 mint 条款换算”全部铸满后的整数总量”,再换算成宣传里的单位看是否自洽;交易签名前检查 edict 数量字段的位数。所有分歧以 ord 对原始交易的解码为仲裁,面板数字只是展示层产物。

把数字读对的最短取证路径

先把两步对上的心算技巧记住:面板显示值乘以十的精度次幂,结果应当是一个”眼熟”的整数——与雕字里的 premine 或 mint 条款 amount 处于同一量级。如果乘出来的整数带着零碎尾数,或比雕字总量大了几个数量级,多半是面板与链上字段的精度对不上,先怀疑展示层再怀疑自己。

对任何一笔 Runes 余额或转账做判断时,取证顺序应该是:先用 ord 的解码工具读出雕字交易,记下 divisibility、premine、terms 的原始整数;再读余额查询返回的整数;两边换算后再看面板展示。三步里最容易跳过的恰恰是第一步,而数量级事故几乎全部产生于”直接看面板”的习惯。顺带说明 spacers 的正确用法:它只在名字里插入视觉分隔,比如让链上名字 TOKEN 显示成 TO.KEN,不改变名字本身的有效性判定,也与金额毫无关系——把它当精度或当版本号来解读,是把两个字段的职责混在一起了。符号字段同理:它只影响展示后缀,不影响任何转移规则。

一个提醒:divisibility 不改变任何经济事实,它只改变小数点位置。真正决定一枚 Runes 供应结构的是 premine 有无、cap 与 amount 的乘积关系——精度字段读错会把正确的结构算成荒谬的结论,这才是它值得单独一篇文章的原因。本文为机制科普,不构成投资建议。