聪怎么在交易间“搬家”:Ordinals 手册的 FIFO 分配例子与手续费归属 图 1
聪怎么在交易间“搬家”:Ordinals 手册的 FIFO 分配例子与手续费归属 · 图 1

比特币的 UTXO 模型里,一笔转账会销毁旧的输出、创建新的输出;如果聪的编号附着在输出上,旧输出销毁那一刻编号去哪了?这是 Ordinal Theory Handbook FAQ 里被点名的头号问题,手册用一组小例子给出了协议的答案:聪不消失,它们按固定规则在输出之间“搬家”。

搬运规则是先进先出。手册把交易改写成一个分配问题:交易的输入提供一串按序排列的聪,输出提供若干个空槽,规则只有一条——把输入里的聪按顺序依次填进最左边的空槽。手册的示范输入是 2 聪、1 聪、3 聪三笔,输出是 4 聪与 2 聪两个槽位,于是填法为:第一笔的 2 聪进第一个槽,接着第二笔的 1 聪、第三笔的前 1 聪补齐第一个槽的 4 聪;第三笔剩下的 2 聪落入第二个槽,形成输出两串。整个算法没有随机数、没有哈希抽签,纯按顺序,任何实现者跑出来结果一致——这正是它作为协议规则的意义:可复算,无歧义。

理解了分配规则,手续费的归属就只剩一步。把手册的例子原样复述一遍:输入是 2、1、3 三串聪,两个输出槽位分别是 4 聪与 0 聪。按先进先出,前四个聪(第一笔的 2 聪、第二笔的 1 聪、第三笔的前 1 聪)填满 4 聪的输出,0 聪的槽位什么都装不下,第三笔剩下的 2 聪在输出序列里再也找不到位置。手册的解释干脆:没处可去的聪,归挖出这个区块的矿工,作为手续费。协议层面的记账方式是把交易费当作币基交易的额外输入:区块的币基交易先收下补贴,再把各笔交易的手续费按它们在区块中的排列顺序接着填入,手册的示意就是 SUBSIDY 与 e、f 两串聪合并成币基输出。手续费因此不是被“扣掉”的抽象数字,而是有具体编号、从某个具体 UTXO 尾部流出的那几枚聪。

这套规则解释了收藏实践里两个常见现象。其一,为什么手册反复强调“铭文在不在输出第一个聪”:按先进先出,输入的头部聪优先占据新输出的头部,而尾部聪承担费用与找零的挤压,落在偏移位的铭文正是被这套流向甩出视野的风险最高。其二,为什么你在 ord 的输出视图里会看到一串类似区间列表的东西:当一笔交易的输入被拆着填进多个输出,一个输出里装的聪可能来自多段不连续的编号——协议按顺序填满一个槽再开下一个槽,但跨段编号会完整记录,ord 用区间来表达这种“缝合”。

再给你两道可以立刻动手的自例题。第一道:输入甲含 3 聪、输入乙含 5 聪,输出一是 6 聪、输出二是 2 聪,问各输出装的是哪几枚——按顺序填槽,输出一为甲的全部 3 枚加乙的前 3 枚,输出二为乙剩下的 2 枚;若某枚带铭文的聪位于甲的第 1 枚,它必然出现在输出一开头,这就是“偏移为 0 的铭文在普通合并中通常安全”的算术依据。第二道:把两个交易的输入输出顺序互换,结果随之改变——协议跟随的是交易声明里的顺序,不是金额大小或地址先后,这也解释了为什么“谁替你挑输入、按什么顺序排输入”是钱包工具的核心差异:同一种币,不同工具可能给出不同的编号流向。算完这两道,再看 ord 输出页里的 sat_ranges 字段,你就知道它记录的正是上面这类填槽结果,而非任何额外魔法。

顺带回答“去哪里看权威细节”:手册对这个问题只给了一个字——BIP,也就是 Ordinals 的 BIP 草案文档,示例与算法的正式出处都在那里;FAQ 的演示与它一致,入门读者拿 FAQ 建立直觉、拿 BIP 核对边界即可。把这套搬运规则读一遍的好处,是以后再看到“聪的编号随交易移动”“手续费烧掉的是哪些聪”之类的说法,你能自己推演而不是记住结论。本文为机制说明,不构成任何投资建议。

聪怎么在交易间“搬家”:Ordinals 手册的 FIFO 分配例子与手续费归属 图 2
聪怎么在交易间“搬家”:Ordinals 手册的 FIFO 分配例子与手续费归属 · 图 2