> 技术 > 区块链

比特币历史漏洞:重复的币基交易问题解析

人阅读 2025-03-28 19:41:08区块链
广告 X
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址
摘要 所谓币基交易(铸币交易),又称 coinbase交易,是BTC每个新生成的区块中的第一条交易。挖到该区块的矿工通常会使用这笔交易把区块奖励发送到自己的地址里去 。 币圈网报道:

来源:刘教链

周四,比特币(BTC)在86,000至87,000美元区间内小幅震荡。2025年3月即将结束,而这也意味着第一季度的收官。正如教链所言,这可能是自2018年以来表现最差的一个季度。

时间如流水般逝去,岁月如同一首悠扬的乐章。比特币便是这首乐章中的一部分。然而,在早期——特别是2013年之前,这一乐章中偶尔会出现一些不和谐的音符。这些不和谐的音符,正是所谓的“重复的币基交易”。

所谓币基交易(又称coinbase交易),是每个新生成的比特币区块中的第一条交易记录。矿工通常会通过这笔交易将区块奖励发送到自己的地址。

众所周知,比特币普通交易是不可重复的。因为每笔普通交易都必须花费已存在的UTXO(未花费交易输出)作为“硬币”,这些硬币各不相同,因此每一笔交易也必然不同。如果同一枚硬币被两笔交易同时花费,这就构成了“双重花费”(double-spending),这是比特币协议严格禁止的行为。

然而,一个特殊的例外出现了,那就是币基交易。作为一种铸币交易,币基交易无需花费UTXO,而是直接从“空气”中创造出新的比特币,作为对矿工的奖励。

当某个矿工接连挖出多个区块,并且在构造币基交易数据时使用了完全相同的信息(如接收地址和其他附加信息),就可能出现完全相同的两笔交易。这种现象体现在区块链上,就是两个不同区块内的币基交易拥有相同的交易数据和哈希值。

这就是所谓的“重复的币基交易”漏洞。

这个比特币的历史漏洞确实存在,以下是两个真实的例子,读者可以打开任意比特币区块链浏览器进行验证:

区块高度91812和区块高度91842,拥有哈希值完全相同的两笔币基交易。

区块高度91722和区块高度91880,同样拥有哈希值完全相同的两笔币基交易。

好消息是,从未有人利用这种重复的币基交易来花费它们,也没有构造出相同的后续普通交易,从而污染整个UTXO空间。在2012年3月15日通过软分叉实施BIP-30之后,这种重复的交易已被禁止。

更进一步的是,2013年3月,BIP-34软分叉激活,要求在币基交易的构造中添加区块高度信息作为“版本号”,从而彻底杜绝了币基交易哈希值重复的可能性。

具体而言,从技术细节来看,是在币基交易的scriptSig开头添加区块高度,其中第一字节表示区块高度数值的字节数——目前为0x03,意味着后续三个字节表示该币基交易所在区块的高度。币基交易中的scriptSig又被称为coinbase script,这是一个矿工可自由定义的字段,早期允许写入任意数据。例如,中本聪就在这个字段中写入了《泰晤士报》的标题。

为了对比更加直观,我们可以看一下出现重复币基交易问题的区块#91812的币基交易scriptSig:0456720e1b00(OP_PUSHBYTES_4 56720e1b OP_0)。

而教链撰写本文时刚刚产出的区块#889678的币基交易scriptSig则是:034e930d044260e5672f466f756e6472792055534120506f6f6c202364726f70676f6c642f23648154608b150000000000(OP_PUSHBYTES_3 4e930d OP_PUSHBYTES_4 4260e567 OP_PUSHBYTES_47)。

其开头为0x03,后续三个字节为43930d,表示该区块的高度为十六进制的0x0d934e,即十进制的889678。

然而,坏消息是,在2013年修复之前,已经生成的一些币基交易中,也有一些scriptSig碰巧以0x03开头!这使得未来这些矿工有可能利用这一点故意构造重复的币基交易。

以下是一个具体的例子。区块#164384的coinbase script以0x03开头:03d6441e014b0136(OP_PUSHBYTES_3 d6441e OP_PUSHBYTES_1 4b OP_PUSHBYTES_1 36)。

我们无从得知当时这位矿工编写这个脚本的具体意图,但可以确定的是,他有机会在未来尝试构造出与之完全相同的币基交易。

那么,具体是什么时间呢?我们需要简单推算一下。

根据BIP-34的定义,0x03后面的三个字节表示区块高度。对于上述例子而言,这三个字节为d6441e,即十六进制的0x1e44d6,转换为十进制为1983702。

那么,区块#1983702大概会在什么时候产出呢?根据比特币平均每10分钟产出一个区块的速度,我们可以轻松计算出,从当前区块#889678到未来的#1983702,还需 (1983072 - 889678)/6/24/365 = 20.8年,也就是大约2046年的时候。

坏消息是,这样的区块还有不少。以下是完整列表:

block_height,coinbase_height,equal

164384,1983702,TRUE

169895,3708179,TRUE

170307,3709183,TRUE

171896,3712990,TRUE

172069,3713413,TRUE

172357,3714082,TRUE

172428,3714265,TRUE

174151,5208854,TRUE

176684,490897,TRUE

183669,3761471,TRUE

196988,4275806,TRUE

201577,5327833,TRUE

206039,7299941,TRUE

206354,7299941,TRUE

209920,209921,TRUE

从上面柱状图可以看出,2078年左右是风险最多的时间。

好消息是,即便当年的矿工有意为之,在当前以及未来更大规模的全网算力下,他们也很难刚好抢到那个特定高度的区块打包权。

而且,矿工需要多么无聊才会费劲去抢一个区块,只是为了构造一笔无法再花费的、模仿早年数据的交易,从而让自己白白遭受损失呢?

因此,结论是:“重复的币基交易”这一历史漏洞不能说已被100%完美解决,但从实际操作角度来看,它也不太可能掀起大的波澜。

LOT物联网

iot产品 iot技术 iot应用 iot工程

Powered By LOT物联网  闽ICP备2024036174号-1

联系邮箱:support1012@126.com