ETC区块链交易暂停问题,解析及事件还原

转载
1360 天前
15261
火星财经

来源:火星财经     作者:郑清源


背景知识:

北京时间7月31日,Multi-geth发布了1.9.18版本,宣布结束对Ethereum Classic的支持,主要原因是由于Ethereum Classic在其Phoenix硬分叉过程中破坏了其代码的不变性( immutability )以及代码及法则(Code-is-law)的准则,造成部分智能合约的中的回退函数失效。

Multi-geth自身是一个分布式,支持多种区块链的以太坊协议的开发套件。其对Ethereum classic的结束支持代表着会有众多替代链出现并且Ethereum classic的所有节点会根据不同的准则来自己决定那一条替代链会是主链。有一些节点可能会选择最长的链作为主链,一些节点可能会选择有最大区块难度的链作为主链,同样,也会有一些节点选择目前工作量最大的链作为主链进行挖掘。

事件始末:

以太经典(Ethereum Classic)于昨日在官方推特上发布消息,表示目前正在进行网络维护,希望包括交易所、矿池等在内的服务商暂停 ETC 存款,以进一步检查网络问题。


此前以太坊基金会社区经理 Hudson Jameson 在推特表示,Ethereum Classic 区块链出现问题,交易所需要暂停存取款。并建议矿工应合作去挖同一条链,放弃少部分人挖的链,直到问题结束。


北京时间8月2日,Ethereum Classic Labs在Medium官方宣布ETC网络已完成区块链重组,并称该问题已经得到解决。

由于无法识别的错误,OpenEthereum / Parity和Open-ETC不再正常运行。该错误导致临时链和少数链断裂。将来,任何运行OpenEthereum或Open-ETC的以太坊经典节点都可能导致挖掘不正确的链。


问题解析及事件还原:

本次事件发生的流程如下:

  1. 恶意矿工(ETC地址:0x75d1e5477f1fdaad6e0e3d433ab69b08c482f14e)挖掘了约3000个区块。
  2. 2Miners矿池由于背景中Multi-get结束对Ethereum classic的支持而短暂下线进行维护。
  3. 当2Miners矿池维护的这段时间内,2Miners矿池并没有产生新的区块。在2Miners矿池结束维护上线后,约3000个区块同时被插入到2Miners矿池中。
  4. 由于Ethereum Classic上所有的Parity或者OpenEthereum节点都无法处理这3693个来自Core-Geth节点的区块,因此就出现了链分叉:所有的Parity或者OpenEthereum节点上的矿工都依旧在原始主链上进行挖掘,但是在Core-Geth节点的矿工就在被插入约3000个区块的新链上挖掘。
  5. 根据工作证明(POW)共识,在新链上的工作量会逐渐超过原始主链,在原始主链上Parity节点的一些矿工根据会“选择在更多工作量的链上进行挖掘”的准则,转移到新链上进行挖掘。
  6. 最终,在区块高度10904146处,总共3693个区块被通过重组(reorgnization)的方式被加入到区块链中,重组是一种区块链的特性,通常被用与对区块链的回滚操作(rollback)

是否为攻击:

是否定义为攻击,我们主要是看这些约3000个区块是怎么产生的。问题真正的原因,到底是因为不小心断网,在断网期间挖掘的区块,还是有人刻意而为之?

根据现有“未知错误”的官宣,我们还无法完全判断此次事件的具体真像。

影响力:

对交易本身来说,此次事件的影响并不大,因为这些区块里面的交易寥寥无几。再加上这些区块之外没有被挖掘的交易也会最终被重新提交。

但是对于“链”本身来说,此次事件可能会造成部分影响。原因是这在Multi-geth结束对Ethereum Classic的支持后不到一天就出了问题。虽然此次情况相对简单,但是倘若这是高手们有组织的多次利用同一手段重复操作,那么其目的是否是要刻意造成多次分叉我们不得而知。而且通过该种方式,恶意攻击者有可能发起51%攻击来控制区块链,进行双发攻击或者删除已经存在链上的交易。