Blockchain-Fork
為什麼硬分叉需要特殊規則來允許重放保護?
我見過很多硬分叉鏈用來提供強大和選擇性重放保護的方法,以便交易只在其中一個鏈上有效。此類規則的範例包括使用使交易無效的輸出和使用特定
OP_RETURN
字元串。我的問題是為什麼這些機制中的任何一個都需要保護持有者免受重放攻擊?更具體地說,為什麼持有硬幣預分叉的人不能簡單地通過在每條鏈上花費一對硬幣分割交易來保護自己,如下所示:
- Alice 完全了解在硬分叉之前花費 UTXO 所需的私鑰,該私鑰
A
的價值為 1 個“LegacyCoin”。- 硬分叉根據 LegacyCoin 的區塊鏈歷史創建了一種名為“NewCoin”的新硬幣。
- 根據 LegacyCoin 網路, UTXO
A
現在包含 1 個 LegacyCoin 和根據 NewCoin 網路的 1 個 NewCoin,因為這就是硬分叉的工作方式。
- 愛麗絲創建並簽署了兩筆交易:一筆用於
A
支付,B
另一筆A
用於C
支付(愛麗絲也擁有私鑰的唯一知識)。- 然後 Alice 在兩個網路上同時廣播這些簽名交易:
A->B
僅在 LegacyCoin 網路上廣播交易,而僅在 NewCoin 網路上廣播交易A->C
。- 兩筆交易都在各自的網路上得到確認,現在 Alice 已經有效地將 UTXO 的原始價值
A
分成了兩個區塊鏈,完全沒有 NewCoin 實施的任何重放保護機制。現在可以考慮拆分硬幣,因為即使她花費了B
,其他人也不能花費C
(反之亦然),因為它們是不同的 UTXO,需要不同的簽名才能花費。此外,顯然沒有人可以花費A
,因為它已經花費在兩條鏈上。為什麼步驟 5 中的陳述不正確?這種邏輯在哪裡需要硬分叉鏈實現實際的重放保護機制?
確實,如果成功,您的建議將有效地分割硬幣並防止進一步的重播。
但是,它存在以下問題:
- 每個想要分割他們的硬幣的人都必須創建一個額外的交易來這樣做(並支付交易費用)。大概沒有人真的想受到重放攻擊,所以每個人都想這樣做。這對使用者來說代價高昂,而且交易量很大。例如,比特幣目前大約有 5000 萬個 utxos;將它們全部拆分需要足夠的交易來填充大約 5000 個區塊,因此整個網路將陷入數週的停滯,交易費用將飆升。
- 有些人可能不知道這個要求,並且可能在不知不覺中使自己受到此類攻擊。即使它是由軟體自動完成的,他們可能仍然在使用舊的 LegacyCoin 軟體,而不會這樣做。這不是很使用者友好。
- 攻擊者可以擊敗它,至少是暫時的。假設 Alice 按照你的提議廣播了她的 A->B 和 A->C 交易。邪惡的 NewCoin 礦工 Mallory 在 LegacyCoin 網路上看到 A->B 交易,並決定嘗試在 NewCoin 網路上重放它。他將 A->B 放在他的候選塊中(他可以這樣做,因為它是可重放的!)並且很幸運地在其他人確認 A->C 交易之前探勘它。現在 Alice 的硬幣在兩個網路上都存在於 utxo B 中,這正是她試圖避免的。最好的情況是,她注意到這種情況發生並且必須重新開始(並支付另一筆交易費用),直到她成功讓誠實的礦工在兩個網路上確認正確的交易。最壞的情況是,她沒有註意到並且在不知不覺中容易受到未來重播的影響。