给交易格式换一种活法:BIP-134 弹性交易与 CMF 令牌 图 1
给交易格式换一种活法:BIP-134 弹性交易与 CMF 令牌 · 图 1

比特币交易的骨架十年没变过:版本号、输入数、每笔输入的前指哈希加序号加脚本、输出数、锁定时间,字段一个都不能少,哪怕 sequence 早被废弃,每笔交易还得背着它占位置。2016 年 7 月 27 日,Tom Zander 提交 BIP-134《弹性交易》,想法是把 XML 式的「每个字段起个名字」搬进二进制:新版本号 4 的交易改用紧凑消息格式(CMF),每个字段是一个(名字、格式、取值)三元组令牌,不需要的字段干脆不写。这份提案后来归入 Closed,实现与讨论主要发生在 Bitcoin Classic 阵营,主网从未采纳。

令牌表读起来像一份交易字段的字母表:TxEnd 是结束标记;TxInPrevHash 与 TxPrevIndex 说明花的是谁;TxInputStackItem 及续行装输入脚本推送;TxOutValue 与 TxOutScript 定义输出;TxRelativeBlockLock 等表达相对锁定。表外令牌一律使交易无效——名字即字段注册表,新增字段从「重排全格式」变成「登记一个新名字」,软分叉的扩展成本被压到最低。它点名要接替的正是 BIP-68 这类「挤旧字段眉毛」的补丁:与其让所有交易永远携带默认值字段,不如让字段可以缺席。

提案塞了三个卖点。第一是可延展性:把数据字段重排后,签名字节脱离交易哈希的计算材料,从构造上消除已知形式的签名延展——这在隔离见证之前是很有吸引力的路线,原文甚至声称闪电网络要依赖它。第二是尺寸:把签名从交易里剥掉仍能维持一致的交易历史,测试显示体积能降到约四分之三,对未来的剪枝友好。三是两种可签字段:输入金额(amount)写进签名材料,没有全量 UTXO 集的钱包签名时就能确信「我被谎报金额的话,我的签名也作废」;scriptBase 让硬件钱包看清自己正在花什么输出。还有一个巧思是双重支付证明:节点发现双花后不必转发两笔完整交易,只需发两组证明,证明两笔交易的输入集合完全一致。

它的立场决定了它的位置。弹性交易是硬分叉层(Layer 标着 Consensus (hard fork))——新版本号意味着旧节点无法解析,需要全体升级,这在 2016 年的政治气候里近乎死路;同一时期社区在隔离见证(软分叉保住字段布局)方向集结。CMF 本体也随 Bitcoin Classic 的仓库走冷,GitHub 上那间 documentation 仓库里的规格文档成了主要遗迹。但「用字段名换取可扩展性」的基因在比特币世界里始终顽强:PSBT 的键值映射、BIP-341 在见证里塞扩展字段、各类 TLV 编码,都是同一个主意在不同层的复活。

常见误区有三个。其一,以为 CMF 是文本格式:它致敬 XML 的理念但刻意避开文本编码,目标是紧凑和快解析。其二,把弹性交易与隔离见证混为一谈:前者推翻字段布局走硬分叉,后者把签名挪出交易哈希且是软分叉,2017 年胜出的是后者。其三,以为「去掉签名保 txid」今天没用:无签名交易哈希的思想正出现在压缩与中继协议的前沿提案里。

一条直觉线:老格式像一张格式锁死的印刷表格,填不填都得印六栏;CMF 像一张清单,你只念自己有的条目。前者解析器永远一行代码读到底,后者解析器要先查字典——这就是两种哲学的全部账单,一方省了解析的功夫,另一方省了带宽与永远背着的空格。

快速问答。问:弹性交易上过测试网吗?答:实现集中在 Bitcoin Classic 实验分支,主网从未激活;本 BIP 状态为 Closed。问:版本号 4 现在意味着什么?答:现行主流客户端把版本视为策略性字段,新版本号交易多被节点策略拒绝转发,与共识无关。问:它和 BIP-141 谁解决了延展性?答:segwit 以软分叉方式解决了落地问题,flextrans 的硬分叉路线停留在提案。

风险提示:本文是协议史科普,不构成投资建议;任何教你在主网「发送版本 4 交易」的教程都应视为无效或危险内容。