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 的以太坊經典節點都可能導致挖掘不正確的鏈。
問題解析及事件還原:
本次事件發生的流程如下:
- 惡意礦工(ETC 地址:0x75d1e5477f1fdaad6e0e3d433ab69b08c482f14e)挖掘了約 3000 個區塊。
- 2Miners 礦池由於背景中 Multi-get 結束對 Ethereum classic 的支持而短暫下線進行維護。
- 當 2Miners 礦池維護的這段時間內,2Miners 礦池並沒有產生新的區塊。在 2Miners 礦池結束維護上線後,約 3000 個區塊同時被插入到 2Miners 礦池中。
- 由於 Ethereum Classic 上所有的 Parity 或者 OpenEthereum 節點都無法處理這 3693 個來自 Core-Geth 節點的區塊,因此就出現了鏈分叉:所有的 Parity 或者 OpenEthereum 節點上的礦工都依舊在原始主鏈上進行挖掘,但是在 Core-Geth 節點的礦工就在被插入約 3000 個區塊的新鏈上挖掘。
- 根據工作證明(POW)共識,在新鏈上的工作量會逐漸超過原始主鏈,在原始主鏈上 Parity 節點的一些礦工根據會「選擇在更多工作量的鏈上進行挖掘」的準則,轉移到新鏈上進行挖掘。
- 最終,在區塊高度 10904146 處,總共 3693 個區塊被通過重組(reorgnization)的方式被加入到區塊鏈中,重組是一種區塊鏈的特性,通常被用與對區塊鏈的回滾操作(rollback)
是否為攻擊:
是否定義為攻擊,我們主要是看這些約 3000 個區塊是怎麼產生的。問題真正的原因,到底是因為不小心斷網,在斷網期間挖掘的區塊,還是有人刻意而為之?
根據現有「未知錯誤」的官宣,我們還無法完全判斷此次事件的具體真像。
影響力:
對交易本身來說,此次事件的影響並不大,因為這些區塊裡面的交易寥寥無幾。再加上這些區塊之外沒有被挖掘的交易也會最終被重新提交。
但是對於「鏈」本身來說,此次事件可能會造成部分影響。原因是這在 Multi-geth 結束對 Ethereum Classic 的支持後不到一天就出了問題。雖然此次情況相對簡單,但是倘若這是高手們有組織的多次利用同一手段重複操作,那麼其目的是否是要刻意造成多次分叉我們不得而知。而且通過該種方式,惡意攻擊者有可能發起 51% 攻擊來控制區塊鏈,進行雙發攻擊或者刪除已經存在鏈上的交易。
(以上內容獲合作夥伴 火星財經 授權節錄及轉載,原文鏈接 )
聲明:文章僅代表作者個人觀點意見,不代表區塊客觀點和立場,所有內容及觀點僅供參考,不構成投資建議。投資者應自行決策與交易,對投資者交易形成的直接間接損失作者及區塊客將不承擔任何責任。