21

比特币硬分叉恐慌事件究竟是怎么回事? | 比特币秘史(十八)

 4 years ago
source link: https://news.huoxing24.com/20200220095658689933.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Ij67VbA.jpg!web

​作者| 哈希派-LucyCheng

作为受全网认可的最长链,比特币共识版本的升级一直以来都是通过软分叉来完成,除了其中发生意外的两次(2013年和2015年,分别持续了24个以及6个区块)。而哈希派今天要讲的是引起社区短时恐慌的版本0.8.0。

2eq6Zfb.jpg!web

原图源自:icokanban

格林尼治时间2013年3月11日晚间23:30,网友“thermoman”在bitcoin-dev IRC频道上表示,有人在自己的主机里面发现第225431区块已经挖出,但目前包括blockexploere在内的大部分区块数据网站显示的最新区块高度依旧是225430。

接下来的三十分钟内,更多的用户在自己的比特币客户端日志中发现了奇奇怪怪的报告;各方关于区块高度数据不同步的讨论在IRC频道内疯传。“我这里已经快挖出第225439个区块了,但现在其他消息源还停留在225431的区块高度。我想知道是不是有什么东西触发了它,一个大重组之类的”,比特币开发商Peter Wuille如是说道。

RFNVF3y.jpg!web

网友amesterdamer于2014年7月20日在Bitcointalk论坛上的留言

而事情正如Peter Wuille所推测,20天前发布的Bitcoinqt 0.8.0与早期版本存在不兼容,导致了这次事故的出现。据悉,该版本为了减少区块链的同步时间,将其数据库从Berkely DB切换至更高效的Level DB上。但是开发人员没有意识到的是,这一操作意外地改变了比特币协议的规则。

具体来说,对数据库进行更新的进程中必须对存储特定信息项的数据库部分进行“锁定”,以防止同时发生两个更改而破坏数据库的机制。其中Berkeley DB用于存储对象的数据结构每次更新都需要两个锁,并要求用户设置锁定的数量限制,而对比特币而言这一数值是一万。问题就出在这里,因为Level DB没有这方面的限制,所以当第225430区块上出现了多于5000个交易事务的时候,新版的客户端接受了它,但旧版本却不能。两者的不兼容,使得当时比特币分裂成两条不同的链。

jE3EfeM.jpg!web

比特币共识规则变化情况(资料来源:BitMEX研究,Github)

突如其来的硬分叉引发了市场恐慌,比特币价格短时下跌24%,OKPay上面甚至出现了价值一万美元的双花交易。不过这种局势持续了六个小时左右就被社区的团结所扭转。当时意识到情况不妙,几乎所有主要的比特币开发商和矿池运营商就立即加入比特币开发IRC频道进行商讨;后者中支持0.8.0客户端的主动停止挖矿,前者大多数大型公司也随即关闭存款业务。在所有相关人员的积极配合下,大约在12日早间06:19支持0.7.0版本的区块链终于追了上来,两条链在区块高度225454汇合。至此产生大区块的新链宣布作废,采用新版客户端的矿工皆退回0.7.0版本继续挖矿。

对于这场仅仅损失了24个区块比特币奖励以及价值10000美元双花交易的比特币危机,外界给予了不少正面评价,同时对社区内所有成员的无条件合作和解决问题的迅速程度表示赞许。但另一方面也有部分人觉得,这波操作从某种意义上来说是对比特币去中心化理念的亵渎,并将其称作一次51%攻击的预演。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK