作者:Annchain
该文章由annchain团队原创首发,未经允许不得转载,否则将追究法律责任
相信大家已经对11月16日凌晨BCH硬分叉为BCH ABC和BCH SV的事件有所耳闻。在此次分叉中,双方意见不合,都认为自己才是BCH的正统,试图消灭和取代对方,因此都没有进行重放保护。我们不去讨论事件本身的立场,对于一个技术人员而言,此次事件好比是能够训练到全身肌肉的划船机,值得我们一一详述分析。市面上也有许多不正确的媒体报道,我们在此也一并澄清。
1,啥时候算真正的分叉开始?0:40? 556767块?
很多人蹲守着0:40这个时间点,却发现0:40之后两条链仍在出相同的块。著名的“分叉创世块”556767号,直到02:02才由Bitcoin.com挖出。
许多人表示不解,也并没有深究协议升级的实现细节。事实上,根据升级公告原文,“当最近11个区块(MTP-11)的时间中位数大于或等于UNIX时间戳1542300000时,比特币现金(BCH)将根据此规范执行网络共识规则升级。而从下一个区块开始,这些共识规则的更改将会生效。”
我们计算了一下556767之前的11个区块的时间的中位数,验证了本次升级发生的时间点的确就在MTP-11时间戳的中位数大于1542300000,即556767块。
事实上大部分媒体在此报道上都有偏差。例如最经典的“0:40开始算力战打响”,其实在0:40之后挖出的556761块,与之前的块并无不同。
之所以设立这样一个“中位数”的原则,很大程度上还是为了全网对于协议升级的共识。前11个区块的中位数一般能在当前块中得到第6次确认,也与区块链一如既往的6次确认相符。
设想一下,如果规定“556666块开始采用新的共识协议”,则无法粗略确定升级时间;如果规定“unix timestamp>1542300000开始采用新的共识协议”,则可能会造成短时分叉块对于协议理解的不一致。
值得一提的是,这个1542300000的时间戳,是由ABC团队在8个月前,也就是5月14日的时候由deadalnix提交,目前ABC和SV均仍旧保留该段代码。
bitcoin-abc/src/chainparams.cpp
bitcoin-sv/src/chainparams.cpp
2,算力大战进展如何,什么时候结束?
即使媒体铺天盖地采用了“算力战”这个词语来概括这次BCH分叉事件,然而几乎可以确认的是:
算力大战,根本就没开始!什么6个块定胜负,都是扯淡!
我们首先来定义一下什么是区块链上的算力大战。
区块链上的一旦发生算力大战,其目的在于利用本方算力优势使得本方产生的链上有更大的累积算力,从而当对方提出异议版本的分叉链时,整个网络上的节点能够对抛弃该分叉链形成共识。那么根据上面的描述,算力大战一定要满足以下几个条件:
首先,双方使用的共识协议必须相同。这好比是两个人在一个非常嘈杂的环境里吵架,如果他们说的是同样的语言,那就拼谁嗓门大,嗓门大的容易被吃瓜群众承认。但如果他们说的是不同的语言,一个说英语一个说汉语,其实就算同时说话,两人也互不干扰,都能让各自国家的人听自己而不是听对方。相信大部分人都有这种体会。
其次,双方需要连接上彼此的网络节点,形成通路。这样能使区块信息充分交换,供各节点选择。
最后,强势方通过广播包含更大累积算力的链,使得网络上大部分节点处于利己主义考虑,自觉放弃掉弱势方的链,从而推翻弱势方上的所有交易。
本次所谓的“BCH算力大战”中,明显第一条就不符合。ABC团队和SV团队在共识升级之后各挖各的,两条链从556767块开始分道扬镳,运行至今。在两条分叉链上均未发现比较长的区块重组(re-org),说明ABC方和SV方并没有使用自己的算力侵入对方的链进行捣乱。
举个非常形象的例子,算力好比是核武器,ABC和SV互相对对方有核威慑,但是谁都没有把对方的领土给炸个稀巴烂。
3,ABC链和SV链还有什么关系?
ABC链和SV链都会处理、打包自认为合法的交易。因此重放攻击是目前最大的问题。一笔在ABC上的X转账给Y的交易,由于交易格式、签名格式等都与SV并无二致,一旦被广播到SV链上,也能把X在SV上的资产转移给Y。
除此之外,ABC链和SV链并无瓜葛。双方产生的区块目前双方互不相认。
4,吴忌寒一开始算力优势这么大,都领先了十几个块了,SV的区块为什么没有被最长链覆盖,而是双方各自出块?
首先,出块的高度并不决定算力战的胜负,哪怕BSV曾经比ABC都高,也不代表BSV就是胜者。高度仅仅与共识有关,与算力有联系,但并不是我们关心的重点。
要明确一点的是,算力优势的突增的确会引起出块速度的增加。根据DDA难度调整算法,“难度会基于之前144个区块所完成的工作量及逝去时间,来对每个新区块进行调整”。吴忌寒之所以能在分叉一开始就连续爆块,其实得益于BSV算力的突然骤减(因为一大半被吴忌寒带走)和吴忌寒援军的空降(btc.com, bitcoin.com等天降神兵)。计算能力与难度的比值骤增,使得ABC的出块时间比10分钟快了许多,而SV的第一个块迟迟没有出现。
ABC链和SV链在556767块的时候其实存在着理论上互通的可能,即,如果ABC链打出来的区块符合SV链的格式验证要求,那么SV链是可以承认ABC的链并且在此基础上挖下一个块的,反向同理。
然而事实是,ABC链在556767块率先打出的块中包含了DSV(OP_CHECKDATASIGVERIFY)和CTOR(规范排序)特性,那么SV链认为该区块无效,是不可能承认ABC 556767块,以及所有的后继块的。
反之,SV链在556767块打出的块包含了OP_MUL,是一个ABC不支持的操作码,那么ABC同样认为该区块无效,是不可能承认SV 556767块,以及所有的后继块的。
又如,如果SV打出一个大于32MB的区块,或者在一个脚本中加入超过201个操作码等类似操作,都能造成事实上的不兼容。
因此,任何一方只要打出对方不支持的块,那么这两条链在事实上就分道扬镳了,无论算力多还是算力少,无论区块高度领先还是落后。在打出不支持的块之前,他们还是可以互通有无的。
不过这与重放攻击无关。重放攻击获得资产的步骤可能在分叉前,这部分资产将被两个链同时承认。此外,有一种为自己钱包打疫苗的方式避免了重放攻击,也是利用了两条链上操作码互相不兼容的特性。
5,吴忌寒阵营的第二个区块,BU钱包和ABC钱包怎么显示不一样?
这一度被认为是澳本聪对吴忌寒的算力战打响了。因为在同样的ABC链上观察到了再一次分叉,意味着哪怕是ABC节点都对于本链上的区块状态不一致。在分叉一开始就产生这样的情形,难免不令人联想到对手正在用算力干扰甚至企图回滚正常出块的行为。
第三个块出现后,BU钱包立即根据累积最大工作量原则,纠正了之前由Waterhole(友军)产出的556768块。这也证明了这个块的出现,仅仅是一次因为同时爆块而产生的短时小分叉。
而此时SV方面,556767块始终难产。
6,吴忌寒调用BTC算力支援BCH究竟想要做什么?
正如前文提到的,一方面是保有对SV的核威慑,毕竟能够与SV匹敌的算力能被调集起来,证明自己的链并不会轻易地遭受SV的攻击。即使吴忌寒撤去目前大部分的算力,ABC只要不被攻击,也能稳定运行下去。一旦被攻击,利用机枪池秒速切换的特性也能紧急应对。目前调集算力更多的是一种秀肌肉。
当然对于舆论上,吴忌寒调用算力使ABC累积工作量证明,也能够提升自己链的权威,争取更多话语权和主动权。
7,谁才是真正的BCH?
目前看来,此次分叉造成的结果是两条链的事实分叉和存活,预期中的算力大战并未上演。如果要用一句话来总结,可谓:
爸爸精分成了两个人,互相觉得对方是孙子,结果把爷爷搞崩溃了。
Annchain(众安链)是由众安科技和众安-复旦区块链与信息安全联合实验室自主研发,国内首个基于DAG架构并支持智能合约的高性能通用区块链平台。作为工信部指导的中国区块链技术和产业发展论坛两大开源项目之一,Annchain立足于中国,致力于助力中国抢占区块链全球话语权。
Annchain专注于易用、高效、安全和隐私等关键特性,兼具模块化和高度可定制的特点。目前已在数十家生态伙伴的商业场景中落地,场景涵盖农业溯源、珠宝溯源、资产通证化、公益、医疗数据共享、广告分发平台等。开发者可基于Annchain高效构建适合自身的区块链应用,期待更多伙伴加入我们一起探索新应用。
众安科技
众安信息技术服务有限公司(简称“众安科技”)成立于2016年11月2日,是由蚂蚁金服、腾讯、中国平安发起设立的众安保险旗下的全资科技子公司,专注于区块链、人工智能、密码学、物联网等前沿技术研究。众安科技汇聚了行业内的顶尖科研人才,其中区块链团队规模近200人,多数来自于各顶尖区块链团队。
众安-复旦区块链与信息安全联合实验室
众安-复旦区块链与信息安全联合实验室是国内首个高校与企业联合组建的专一区块链实验室,专注于区块链相关技术的底层理论研究。同时,实验室联合复旦大学、上海众人信息技术有限公司成立了上海区块链工程研究中心。中心伴随构建长效的产学研用合作机制的同时,支撑开展增强的密码学能力,高性能区块链(如Annchain)等,为行业提供示范。
更多关于annchain:
www.annchain.io
Github: github.com/annchain
Twitter: https://twitter.com/Annchain007
Facebook: https://www.facebook.com/Annchain-295110641341258
TelegramGroup: t.me/Annchain
TelegramChannel: t.me/AnnchainChannel
扫码备注昵称+研发方向
加入annchain技术社群