緣起
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 上因為沒有新幣的紀錄,所以該筆交易會被視作無效,進而達成隔離
有工具進行新幣隔離嗎?
- 使用工具 Electron Cash (ElectrumX)
- https://github.com/Electron-Cash/electrumx (軟體)
- https://github.com/markblundeberg/coinsplitter_checkdatasig/blob/master/doc/coinsplitter_user_guide.md (document)
- https://docs.google.com/spreadsheets/d/1xFthIiIG1lUBczGwUinazBzjRinuRmCi9h_xfUSAjZM/htmlview#gid=1024691911
請特別注意不同客戶端適用的版本
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 的算力正在集中,到時分叉後會是什麼情形,還未可知。
參考資料
- https://github.com/Bitcoin-ABC/bitcoin-abc/blob/master/doc/abc/replay-protected-sighash.md
- https://medium.com/@rom1_ubidreams/wtf-whats-the-fork-in-one-picture-%EF%B8%8F-368d910fa405
- Coin Dance | Home
- What are my options as a BCH holder before the upcoming BCH hash war
- 首页-BCH社区
本文作者: AMIS 陳昶吾