BCH 分叉的現狀

緣起

2018/11/15 BCH 預計進行升級,而這次升級中 (v0.18),社區中的成員,由自稱中本聰的 Dr. Craig Wright 所在的澳洲公司 nChain 表態不支持 Bitcoin ABC (ABC) Roadmap,強調 BCH 應該保持協議簡潔,不應該加入過多限制,並宣稱會推出另一個客戶端 Bitcoin SV (SV),並且對交易內容不進行 replay protection,來與既有的 BCH 進行競爭。

SV = Satoshi’s vision

什麼是 REPLAY PROTECTION?

如果交易本身不進行重放保護的話,那麼同一筆交易可在 ABC 進行交易,亦可在 SV 被交易。理想的保護措施是在交易內置入可辨識化的 FORKID,讓礦工能夠辨識該交易屬於那條鏈。

以 BTC 分叉後的 Bitcoin Cash 為例,BCH 簽名包含下面這個欄位,以進行辨識,詳見 [1]。
SIGHASH_FORKID = 0x40

若未做保護,在 11/15 4:40 pm UTC 分岔後(台北時間 11/16 00:40 am),交易會被廣播到 BCH 網路之中,由支持 ABC 或 SV 的客戶端分別處理,並記錄到各自的兩條鏈,而打包的區塊高度可能不同,造成混亂難以對帳,如下圖所示

圖片來源: [2]

由於兩條鏈不做 Replay Protection,故會形成兩條平行的鏈,產塊時間不同但卻可打包相同的交易,而最後會由誰正名為 BCH,最終將由算力較強的一方勝出。除了帳務混亂之外,兩條鏈的爭鬥,可能引發算力競賽,由算力較強的一方對較弱方,實行 Selfish mining attack,導致 reorg 的情形劇烈,交易狀態因而不穩定,使用者可能發送一筆交易,原本 6 個區塊後已認定交易完成,但 50 個區塊後,因為另一邊挖出較長鏈,導致交易被撤銷形成狀態混亂。另外算力強的一方,亦可能在另一條鏈上產生空塊來耗費礦工資源,甚至引起 Goldfinger attack,令礦工收益下降自動出走,藉而掌握算力網路。

為什麼不主動實施 Replay Protection?

  • SV 擺明挑起戰亂。
  • 其實像升級或是分叉,應該需要經過 blockchain governance 的過程,由社區先形塑共識再逐步推動。
  • 實施 Replay Protection 意味著 hard fork,雖然對以太坊的人再熟悉不過,不過就是升級,可是對於 BCH 的社群而言,這是搶主導地位的戰爭,因為 hard fork 同時表示,需要節點同時升級,因為交易格式將無法相容,因此不論是 full node 或 light client 都必須進行升級。

誰會受影響?

  • 整個 BCH 社群受影響
  • BCH 幣價受影響
  • 使用者最開心,因為可得到分叉幣,有糖果吃
  • 交易所若帳務管理不當也會受影響,帳務混亂之下,很可能造成交易所在處理帳務上,因為不穩定而有所虧損,例如:
  • 小心處理不同幣的隔離,避免錢送往兩方
  • 從分叉那刻後,必須立即做 snapshot,針對 ABC 與 SV 的不同幣別分別進行計算
  • 因為算力戰爭可能導致帳本不穩定,需注意用戶提領問題,例如用戶提領 10 BCH,交易所雖小心設定 20 個區塊後才能領,但 50 個區塊後還是被長鏈攻擊,交易撤銷,但用戶錢已經提領完畢

Selfish mining 不是容易被策動的,需要監測 BCH,BTC 的算力變化

算力分析

  • 雖然算力戰爭理論上會導致 reorg 不穩定,但是要發動算力攻擊,必須先擁有相對的優勢算力,例如優勢的一方須先擁有比另一方高的算力,並且還要能夠有支撐自己網路的算力
  • 另外,看似 BCH 算力戰爭,實際上是可以從 BTC 調兵遣將的,所以防禦的一方可爭取 BTC 社群支持
  • 目前由於 SV 大量算力介入,使得礦工在 BCH 獲益減少,可能也會導致驅逐小礦工的情形,而變成兩大陣營的鬥爭,這對整體網路是不健康的,並且算力會出走

如何保護自己?

簡言之,隔離不同的交易,隔離是指只在一條鏈上打包,另一條鏈上則不會有該交易

一些技術社群已經提出

  • 礦池打包法 (不切實際)
  • 自己當礦池,交易不廣播到全網,而是直接打包到特定的鏈上
  • 區塊異步打包法 (不切實際)
  • 利用未確認交易在 BCH 上,最多只能發送 26 次的特性
  • 以及不同鏈上產塊不同步的特性,來達成某鏈拒收交易
  • 建構含有特殊操作碼的交易
  • 如下表,ABC 與 SV 客戶端,分別支持不同的 opcode,例如 ABC 支持 OP_CHECKDATASIG,但 SV 並不支援,而 SV 支持 OP_INVERT,而 ABC 不支援
  • 若在交易的 output 上,利用插入不相容的 opcode,客戶端因為無法辨識而可被濾出
  • input 污染法
  • 利用 UTXO input 的特性進行分離,取一筆舊的 UTXO 與分叉後產生新幣的 UTXO,例如 ABC 挖礦獎勵或分裂後的新幣,將舊幣與新幣混在一起,當交易廣播出去後,SV 上因為沒有新幣的紀錄,所以該筆交易會被視作無效,進而達成隔離

有工具進行新幣隔離嗎?

請特別注意不同客戶端適用的版本

From: https://imgur.com/cZdZWLv

算力大戰 (Coingeek, SVPool, BMG Pool 是支持 SV 的)

多數的礦池或交易所,多數都支持 ABC,但在這幾天情況有變,SV 漸漸拉高

圖片來源: [3]

客戶端比例 (ABC > BU > SV)

BU支持兩種 ABC 與 SV 兩種協定,讓用戶在起客戶端的時候可以自行設定要運行那個客戶端

圖片來源: [3]

產塊狀態 (客戶端的穩定性)

11/10 進行預測試時,BMGPool 挖出 BCH 上第一個 32 MB 滿區塊,區塊高度 556034,但 BU 的客戶端沒實作好,區塊沒被產生

圖片來源: [3]

懶人包

擁幣者

  • 如果你是幣圈老手,請自行使用 coinspilter 工具
  • 如果你不想管,請將 BCH 打入支援 ABC 與 SV 的交易所,讓技術可靠的交易所幫你保管
  • 如果你不常交易,保存在可自行控制的私鑰錢包中,等到這場戰爭結束

投資者

  • 請關注分叉前後的幣價波動,理性投資
  • 請關注社群動態
  • 請了解分叉幣的領取,別忘記自身利益

區塊鏈技術關注者

  • 思考 BCH roadmap 可行性
  • 思考 blockchain governance 是什麼?

結論

原本 BCH 上,ABC 獲得多數社群及礦工支持,但是 11/10 起情況有變,SV 的算力正在集中,到時分叉後會是什麼情形,還未可知。

參考資料


本文作者: AMIS 陳昶吾