一、版本号是交易头的第一个字段
每笔比特币序列化交易开头就是四个小端字节序的无符号整数,即版本字段,后面才依次是输入数、输入、输出数、输出和锁定时间。协议最早期它只是软件兼容用的标记,实践中几乎所有交易都是 1。但比特币的升级习惯是开新字段开关而不是改规则写法,于是这个字段在之后十年里被逐个写进了新语义。

二、版本 2:nSequence 的门控开关
BIP68 给输入的 nSequence 字段增加了相对时间锁语义,并且用版本号做门控:版本号低于 2 的交易里,nSequence 保持旧含义,仅用于替换信令和绝对时间锁配对;版本号不小于 2 时,置位的序列号才解释为相对锁定。后续的相对时间锁操作码沿用同一门控。也就是说,钱包要构造按块数或按时间延迟的支付计划(比如一些退款路径),交易版本必须至少为 2,否则锁语义静默失效——这类语义静默正是版本字段最容易踩的坑。
三、版本 3:给交易包装拓扑闸门
Bitcoin Core 28.0 发行说明写明:版本号为 3 的交易在所有网络成为标准交易,受 BIP431 描述的拓扑受限直到确认(TRUC)政策约束。这套政策用更严的结构限制换取更可控的依赖关系:交易包的祖先数量与链深被收紧,配合临时锚点结构,堵住通过大型交易包做费率操纵与拒绝服务的老路子。闪电网络的通道关闭与惩罚交易是它最直接的受益场景。版本 3 不改变手续费计算,也不改变签名方式,它改的只是这笔交易允许长成什么形状。
四、共识不限号,标准各管各
需要精确理解的一点:共识规则并不要求版本号必须取自某个合法集合,特殊语义都是特性门控——规则只对特定版本生效,其他取值照常打包。真正区分 v1、v2、v3 待遇的是标准性与中继策略:不在标准集合里的版本,节点不转发、不挖入默认模板块。工具链里常见只处理 1 到 3 的保守分支,属于实现取舍而不是协议禁令。
五、用户感知层面
普通用户不需要手填版本号,钱包默认输出正确的版本;理解它有两个用处:一是看懂时间锁类合约为什么要求特定版本,二是解释个别老工具为何对 v3 交易报错——多半是对端实现没跟上标准性变化,而不是链上规则改变。版本字段不进虚拟字节的重量大头,对费用的影响可以忽略。
六、和交易哈希的连带关系
版本号是交易哈希的参与字段,改动它等价于改动整笔交易的标识——这也是版本号从来不敢被随意重用的原因:任何节点若单方面赋予某个旧版本新含义,全网对同一串字节的哈希认知仍一致,但对语义的认知会分裂。把版本号理解为”语义协商位”而非”修订号”,许多历史上的设计争论就能看懂:与其给所有人换规则,不如让用新规则的交易自报版本。
七、动手核对的小实验
想直观感受门控,可以在测试网或回归测试环境构造对照交易:同一条带相对时间锁的输出,一次用版本 1、一次用版本 2 打包花费,观察前者不受锁定约束、后者被拒绝生效的差别;再构造一笔带多父交易的版本 3 交易,体会标准性闸门把不合规拓扑挡在内存池外的现象。链下脚本环境几分钟就能复现,比读十遍规范更直观,也更不容易把版本语义记串。
风险提示:本文涉及的版本语义以文中注明版本的官方文档为准,不构成任何投资建议。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。