跳转到正文
buybitcoinsmart

术语表 /交易与手续费

交易版本号

交易版本号是什么?
交易版本号是交易的前四个字节,用于告知验证者该交易适用哪些可选规则集,例如相对时间锁。

迄今只有三个取值真正有过含义。该字段不是软件版本,不是协议版本,也不是关于交易中包含哪些地址类型的提示,而人们初次看到它时,多半正是这样假设的。共识规则基本不在意该字段,转发策略却在意,这一差异就是该字段的全部来龙去脉。

运作方式

版本号位于序列化格式的第1至4字节,在输入数量之前,Bitcoin Core 将其读取为32位有符号整数。

版本1是最初的版本,区块链最初几年中的所有交易都使用它。版本2的出现,是因为 BIP68 需要一种方法,在不使旧交易失效的前提下,把序列号重新解释为相对时间锁,于是将新含义附加在版本号的提升上。自2016年7月的区块419,328起,声明版本2的交易,其序列号会被作为等待期检查,声明版本1的交易则不会。现代钱包无论是否使用时间锁,默认都将版本设为2,因此您在区块浏览器上查到的几乎所有交易都显示为2。

版本3随 Bitcoin Core 28.0于2024年10月推出,名称为拓扑受限交易(topology restricted transactions,简称 TRUC)。声明版本3即选择了一套更严格的约定:该交易始终被视为可替换,最多只能有一个未确认的父交易和一个未确认的子交易,子交易限制为1,000虚拟字节,交易本身限制为10,000。在遭遇“钉住”(pinning)之前,这些限制听起来像是一种降级。所谓钉住,是指对手方在您的未确认交易上附加一个庞大而廉价的后代交易,使提高手续费变得负担不起。闪电网络的各种实现正是出于这一原因采用了版本3。

共识规则中没有任何一条会因交易的版本为7或0而拒绝该交易。标准性规则则会:Bitcoin Core 不会转发或挖出所接受版本集合之外的版本,因此版本异常的交易必须通过其他途径才能送达矿工。

在哪里会遇到它

每个区块浏览器都会在交易详情页顶部附近显示版本号,Bitcoin Core 的 decoderawtransaction 也会将其作为第一个字段返回。

对购买或持有比特币的人来说,它是一项诊断信息,而不是需要做出的决定。您从不选择它,由钱包选择。它的实际价值在于解读不熟悉的软件:在相对时间锁已普遍使用的环境中,仍在生成版本1交易的钱包已经过时;而声明版本3的付款,几乎可以肯定来自闪电网络节点的通道机制,而不是某个人点击了发送。

交易版本号 vs 区块版本号

交易和区块都带有一个四字节的版本字段,两者互不相干。

区块版本号记录共识升级。版本2的区块在2013年3月的区块227,931起成为强制要求,当时 BIP34 要求在 coinbase 输入中包含区块高度;版本3根据 BIP66 强制执行严格的 DER 签名编码;版本4则随 CHECKLOCKTIMEVERIFY 的部署而出现。自2015年起,该字段再次被改作用途,成为 BIP9 下的一组信号位,矿工只需翻转其中一位,即可投票通过一次软分叉。交易版本号不做这些事。它从不发出信号,不会随每次升级递增,只适用于单笔交易,而不适用于整个网络的规则集。

请勿混淆

常见问题

为什么几乎所有比特币交易都显示版本2?

因为钱包默认设置为该版本。版本2可启用 BIP68 引入的、将序列号解读为相对时间锁的机制,而软件无论是否使用该功能都会设置它,因此它已成为通常的取值。

版本3的交易比版本2的交易更好吗?

并不更好,只是限制更多。版本3接受对未确认关联交易的限制,并且始终可替换,这可以保护闪电网络等合约协议免受手续费钉住的影响。对于普通付款,这些限制没有任何益处。

相关术语

交易与手续费中的更多术语

阅读本页英文版