跳转到正文
buybitcoinsmart

术语表 /挖矿与共识

版本2区块

又称 V2 区块。

版本2区块是什么?
版本2区块是指区块头版本字段为2的区块,该版本升级使 BIP34 要求将区块自身的高度作为其 coinbase 脚本中的第一项。

规定于 BIP-34。

区块版本号过去的含义很简单:1代表原始格式,2增加了一条规则,而每个新版本号都使旧格式无法再被挖出。版本2随 BIP34 出现,Bitcoin Core 自区块227,931起强制执行。作为买家,您所做的任何事都不依赖于它,但每个区块浏览器都会显示它,它也解释了 coinbase 脚本为何以一个数字开头。

运作方式

状态:版本字段在2016年不再是计数器,当时 BIP9 将其高位重新定义为信号位字段,因此现代区块显示的是0x20000000 之类的值,而不是2、3或4。版本2引入的 BIP34 规则是永久性的,至今仍对每个区块进行检查。

版本2区块的出现是为了解决重复标识的问题。coinbase 交易没有输入来保证其唯一性,因此两名矿工若碰巧使用相同的输出脚本和相同的任意 coinbase 字节,就可能产生逐字节相同、交易 ID 也相同的交易。这并非假设:区块91,842和91,880各自包含一笔与更早区块中的某笔完全相同的 coinbase 交易,后出现的副本覆盖了未花费输出集中先前的条目,导致可花费的比特币被销毁。BIP30 作为权宜之计直接禁止了重复交易,而 BIP34 则从根源上消除了这种可能性。

其机制很简单。版本2区块必须以区块自身的高度作为其 coinbase 脚本的开头,高度以最小编码的脚本数字写入。由于没有两个区块的高度相同,两笔 coinbase 交易就再也不可能发生冲突。部署采用的是阈值而非固定日期的统一切换:一旦近期区块中的绝大多数携带版本2,版本1区块即变为无效,而网络在2013年3月越过了这一节点。

同样的模式又重复了两次。版本3区块在区块363,725使严格的 DER 签名编码成为强制要求,版本4区块在区块388,381引入了 OP_CHECKLOCKTIMEVERIFY。此后这一序列便停止了,因为将32位的位字段当作计数器会浪费31位,而 BIP9 将这些位变成了可并行的升级信号。

在哪里会遇到它

版本会显示在任何区块浏览器的区块页面上,也会出现在 getblock RPC 中,同时以 version 和 versionHex 两种形式给出。查看2011年的区块,您会看到1;查看2013年年中的区块,您会看到2;查看今天的区块,您会看到一个位字段。

BIP34 的高度比版本本身更容易辨认。解码任何近期的 coinbase 脚本,最前面的字节就是高度,其后通常是矿池的标识文本,以及挖矿硬件逐一遍历的额外随机数空间。区块浏览器经常将这一尾部按 ASCII 显示,区块的 coinbase 也正是借此显示出由哪个矿池挖出。

版本2区块 vs 版本2交易

版本2区块和版本2交易只共享一个数字,别无其他关联。交易版本2来自 BIP68,用于启用相对锁定时间,使输入可以要求其父输出达到一定的存在时长后才能被花费。闪电网络的通道超时依赖于它。区块版本2来自 BIP34,涉及 coinbase 的唯一性。对象不同,BIP 不同,年份不同,两者之间除了两个计数器碰巧都达到2之外,没有任何关系。

请勿混淆

常见问题

比特币现在使用哪个区块版本?

就旧的计数含义而言,没有。自 BIP9 起,版本字段是用于表示对升级的支持的位字段,因此区块显示的是0x20000000 之类的值,而不是顺序编号。

coinbase 脚本为何以一个数字开头?

因为 BIP34 要求在该处写入区块高度。这保证了任何两笔 coinbase 交易都不会逐字节相同,而这种情况在2010年已经造成过两个重复的交易 ID。

相关术语

挖矿与共识中的更多术语

阅读本页英文版