术语表 /挖矿与共识
版本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之外,没有任何关系。