BCH分叉史:内乱始末与重放保护之谜

2020-11-12 BCH分叉史:内乱始末与重放保护之谜已关闭评论

以太坊

进入到11月,BCH即将迎来又一次升级。这本来对大家已经习以为常,但是由于此次升级很有可能引起再次分叉,因此BCH近期备受瞩目。

对于分叉,不同的人持有的态度是不同的。一些人赞同分叉,认为分叉是新事物替代旧事物的良性发展,一些人反对分叉,认为分叉是伤害共识的不利行为。有人因为分叉而名利双收,也有人因为分叉争得面红耳赤。分叉究竟是好是坏,我们不做评价,这里只做科普并带大家了解区块链世界的几次著名的分叉事件。

何为硬分叉?

所谓硬分叉指的是区块链发生永久性分歧,在新的共识规则发布之后,一些没有及时升级的节点没有办法验证已经升级的节点所产生的区块,这个时候硬分叉就会发生。

硬分叉有三个特点:一是没有向前兼容性,之前的版本将不可再用,需要强制升级;二是在区块链的层面会有分叉的两条链,一条旧链,一条分叉的新链;三是需要在某个时间点全部同意分叉升级,不同意的将会进入旧链。

事件一:BTC分叉事故

在2013年3月12日,当时是bitcoin qt 0.8.0版本软件发布了,0.8版本采用了一种新的数据库level db。有的矿工节点升级了bitcoin qt 0.8版本,有的矿工还继续使用bitcoin qt0.7版本的软件。双方各自生产区块,但bitcoin qt 0.8采用的新数据库生产出的区块被被qt0.7版本节点拒绝掉。具体的原因是旧的数据库对超过800Kb的区块有时不接受。因此在区块高度225430比特币区块链分成了两条链,结果导致了比特币区块链产生两条链,一条是包含大于800kb区块的链,另一条是拒绝承认这些包含更大区块的链,这就发生了硬分叉。当时是采用bitcoin qt 0.8版本的矿工放弃了他们挖的链,退回到bitcoin qt 0.7版本上继续挖矿。

这次硬分叉是一次意外,是bitcoin qt 0.8版本的软件出了bug,导致采用旧软件的节点拒绝验证新软件节点生产的区块。但硬分叉的成因就是采用旧软件版本的节点拒绝验证采用新软件版本的节点生产的区块,然后双方各自挖矿。

事件二:The DAO事件

以太坊曾出现过大规模的硬分叉事件,“末日战车”ETC就是因此诞生。

2016年的6月17日,以太坊上著名的项目The DAO由于其自身漏洞,导致黑客窃取了当时价值约6000万美元的以太币。这个错误并非来自以太坊本身,而是建立在以太坊上的应用。

为了挽回损失,以太坊开发团队通过修改以太坊软件的代码,在第1920000个区块强行把The DAO及其子DAO的所有资金全部转到一个特定的退款合约地址,从而“夺回”黑客所控制的DAO合约币。这条被回滚的链就是ETH。

虽然这个过程得到了大多数人的同意,但是以太坊团队中有少数成员是不赞成的。他们认为区块链的基本特征之一就是交易不可逆,回滚交易的做法违背了区块链的不可篡改精神。于是,以太坊硬分叉成了两条链:回滚交易的ETH和拒绝回滚交易的ETC。

在这次分叉中,由于没有重放保护,导致分叉后在ETH上进行的交易,也会在ETC上也进行,反之亦然,因此造成了交易所与用户的资产损失。之所以会发生这一现象,是因为在分叉发生时,这两条链在数据结构上完全一致,这个弱点直接导致同一笔交易在两条链上完全合法。有人利用这个漏洞,不断在交易所进行ETH的充币、提币操作,从而导致交易所莫名其妙流失大量ETC。

事件三:BCH的诞生

BCH的诞生是币圈里程碑式的分叉事件。众所周知,BCH是由比特币通过硬分叉产生的。这是因为BTC在发展的过程中,仅有1M的区块大小的限制导致交易延迟、交易费高,无法满足日益增长的交易需求。为了解决这一问题,社区出现了分歧。一派是大区块的支持者,认为直接更改共识进行扩容,一派则是小区块链支持者,寄希望于闪电网络等第二层应用。经过长期的讨论,这一问题始终未能达成共识。最终,比特币于2017年8月1日在区块高度478558后被分叉为BTC和BCH,BCH将区块扩容至8M。在BCH诞生后不久,BCH获得了大量交易所和钱包以及应用设施的支持。

在这个过程中,BCH 主动添加重放保护,将收币交易的锁,修改为与比特币的锁不一样的锁,而且将交易签名修改为与BTC完全不一样的规则SIGHASH_FORKID,使得这次分叉是一次安全的分叉。如果没有重放保护,对于刚刚分开的两条链来说,虽然名义是两条链,但是由于共同使用一套私钥、公钥、和地址,用户在一条链上转账时,也会将另一条链上的币转移出去。加了重放保护之后,一条链的矿工在接收到另外一条链的交易或区块的时候,就会拒绝另外一条链的交易或区块,从而两条链将彻底分开,互不影响。

在BCH的诞生过程中,交易所根据比特币的持有量空投BCH,投资者受益良多。这一过程引发了硬分叉热潮,仅仅基于BTC的分叉链就层出不穷。BTG(比特黄金)、BCD(比特币钻石)、SBTC(超级比特币)等都是在这一时间出现。不过,后期由于缺乏价值支撑而逐渐没落。

事件四:BCH算力战

BCH诞生之初由BitcoinABC、Bitcoin Unlimited,Bitprim,Nchain,Bitcrust,ElectrumX,Parity和Bitcoin XT等多个团队开发维护。在BCH的发展中,随着社区理念的不统一与技术的摸索与前进,BCH开发团队在发展方向很快出现了分歧。

Bitcoin ABC支持者希望在区块大小维持在32MB的情况下,应让BCH往基础建设公链方向发展,这样一来,BCH便能像以太坊一样,开拓出更多应用场景。

Bitcoin SV支持者希望回归比特币最原始的版本,坚信Craig S. Wright即中本聪,为吸引沃尔玛级别的企业使用BSV,提前将区块扩容为128MB。

社区的分歧来源于是从扩容还是添加或重新激活几个比特币脚本操作码(op代码)来实现BCH未来的发展方向。更深层次的冲突是比特币原教主义与演进派之间的意识形态分歧,以及CSW是真假中本聪。

各执不同意见的两方也造成BCH的共识协议不再兼容,必须通过分叉来解决,并约定硬分叉后最长的链才能为主链,获得BCH的冠名权。

由于此次硬分叉没有添加无重放保护,导致交易所处理困难。不管是命名还是空投糖果方面都给交易所出了难题。硬分叉结束之时,BCH、BCHABC、BCHSV、BSV等都曾出现。最终两条链经过算力战,BCHABC获得大量支持,取得BCH的名称。最后,这两条链都有稳定的算力支持,且都可以正常出块,难度调整波动处于正常范围,BCH和BSV就此分开两条链开始各自发展。交易所也按照用户的BCH持有量空投BSV糖果。

回归当前:BCHN 篡权 

2020年11月15日,按照惯例,BCH网络即将迎来又一次硬分叉升级。但是与过去的硬分叉升级有所不同的是,因为IFP的争议,开发团队ABC与BCHN似乎将在协议升级后执行截然不同的规则,这可能会导致两条链分裂。

BCHN 与ABC 关于IFP 的理念之争可以追溯到1月22日《BCH的基础设施融资计划》提出向开发者捐赠区块奖励。这一提议引发了社区激烈的讨论。最终,开发团队间并未对此事达成共识。ABC将IFP写入这次升级,规则包含将8%区块奖励给开发者。Bitcoin Cash Node作为反对IFP的一方,复制了ABC代码的同时删除了IFP。由于理念的不同,导致两个客户端版本不互相兼容,BCH很有可能再次分叉为两条链。

关于此次分叉,开发者表示将会添加重放保护,不会影响BCH主链的正常使用。但对于用户而言,假如BCH一分为二,用户可以获得新币的糖果。因此,各交易所、钱包宣布为保护投资者,暂停BCH相关业务。

Matrixport作为数字资产金融服务平台表示支持BCH分叉,也将于新加坡时间2020年11月15日12:00(GMT+8)暂停BCH充值、提现业务。Matrixport还将为用户处理硬分叉中的任何技术问题,待区块网络运行稳定后,Matrixport会尽快恢复充值、提现业务。

目前Matrixport已经为BCH分叉做了充分的准备。如果BCH分叉成为两条链,Matrixport将使用染色UTXO做混淆防止重放。原理是找分叉之前的UTXO,分两次签名在不同的分叉链上,花掉作为染色UTXO的种子,待安全确认后,后续交易中如果生成交易的UTXO都是分叉之前的,则自动带上种子UTXO。如此以来,一旦BCH分叉,ABC和BCHN两条链新产生的区块数据独立。ABC链上新发行的币,即产生的coinbase交易,在本链上被认为是合法的,但是在BCHN链上是非法的,反之亦然。

举个例子:一笔交易广播到了ABC链中,引用了非法交易(在ABC合法,在BCHN非法)的 UTXO 作为输入,那么这笔交易相当于被污染了,不会被BCHN链承认,那么这笔交易就被重放免疫了;对应的,一笔交易广播到了BCHN链中,引用了非法交易(在 BCHN 合法,在ABC非法)的 UTXO作为输入,那么这笔交易相当于被污染了,不会被 ABC 链承认,那么这笔交易就被重放免疫了。

通过这种方法,不仅能够有效防止重放,Matrixport也可以有效的保护用户的资产。由于技术复杂,用户可以将自己的资产保存在Matrixport平台,不仅保护自己的资产安全,而且如果BCH分叉可以轻松获得新币糖果。

谁是最后的BCH?

针对BCH的此次分叉,由于涉及到“BCH”的冠名权,不同的交易平台也表现出不同的态度。

第一种是价高者得到BCH的名称。

这类交易平台包括:CoinEx、OKEX。

它们表示分叉完成后,会参考各主流交易所分叉币对交易价格,选择其中价格较高链继承BCH的命名,另外一条链的代币将按1:1空投到用户资金账户。

第二种是待社区形成共识后确定BCH名称。

这类交易平台包括:火币、币安、Bithumb Global。

它们表示若硬分叉后生成新的分叉币,将尊重社区和用户的意见与共识,将获得社区较多支持的方案命名为 BCH,另外一条链上的代币,将持仓快照,按照 1:1 的比例空投到用户账户中。

第三种是支持BCHN,反对Bitcoin ABC。

这类交易平台包括:Coinbase、Kraken。

Coinbase直接官宣站队BCHN,声明称一旦硬分叉完成,Coinbase.com和Coinbase Pro将不支持ABC分叉币的发送和接收。

Kraken表示无论分叉结果如何都将支持BCHN,在其平台上,BCHN将被称作BCH,只有当ABC的算力占到BCH网络的10%及以上,平台才会支持ABC服务,代币代号会使用“BAB”。

头部矿池BTC.com表示,已充分测试和验证了BitcoinABC和Bitcoin Cash Node(BCHN)两种客户端,也一直保持和两边技术团队交流。BTC.com矿池会选择BCHN作为分叉后的节点方案,若有后续变化将及时另行通知。

同时,BTC.com上线BCH硬分叉倒计时,实时更新双方的价格、算力、节点占有率、出块数量、节点信息等数据,帮助关注此次分叉的用户更直观的了解BCH硬分叉的动态。