BTCC / BTCC Square / Blocktempo /
比特幣的重複交易:一個風險極小的有趣 Bug

比特幣的重複交易:一個風險極小的有趣 Bug

Blocktempo
Author:
Blocktempo
發佈時間:
2025-03-28 17:55:40
0
儘管與重複交易相關的風險現在已經很小,但這是一個值得思考的有趣怪異 bug。本文源自 BitMEX Research 文章,由 ForesightNews 整理、編譯。 (前情提要: 超越價值儲存:比特幣 BTCFi 的腳步現在到哪了?) (背景補充: 鏈上數據:比特幣巨鯨開始重新累積 BTC、山寨季不是未到而是已過了?)   在比特幣區塊鏈中存在兩組完全相同的交易,一組交易「夾住」了另一組交易,它們都發生在 2010 年 11 月中旬。重複交易可能會導致混亂,比特幣開發者多年來一直通過各種方式與之作鬥爭。這個問題仍未 100% 解決,下一個潛在的重複交易可能會在 2046 年出現。儘管與重複交易相關的風險現在已經很小,但這是一個值得思考的有趣怪異 bug。 概述 一個正常的比特幣交易通過引用前一筆交易的交易 ID (TXID) 來使用至少一個前一筆交易的輸出。這些未花費的輸出只能被花費一次,如果它們可以被花費兩次,你就可以對比特幣進行雙重支付,使比特幣變得毫無價值。然而,在比特幣中實際上恰好存在兩組完全相同的交易。這種情況之所以可能發生,是因為 coinbase 交易沒有任何交易輸入,而是有新生成的幣。因此,兩個不同的 coinbase 交易有可能傳送相同數量到相同地址,並以完全相同的方式構建,使它們完全相同。由於這些交易是相同的,TXID 也相匹配,因為 TXID 是交易資料的hash摘要。TXID 被複制的唯一其他方式,是hash碰撞,對於加密安全的hash函式來說,這被認為是不太可能且不可實現的。像 SHA256 這樣的hash碰撞在比特幣或其他任何地方都從未發生過。 這兩組重複交易都發生在相近的時間內,在 2010 年 11 月 14 日 08:37 UTC 至 2010 年 11 月 15 日 00:38 UTC 之間,跨度約 16 小時。第一組重複交易被夾在第二組之間。我們將 d5d2….8599 歸類為第一個重複交易,因為它首先成為複製品,儘管奇怪的是,它在區塊鏈上首次出現是在另一個重複交易 e3bf….b468 之後。 重複交易詳情 在下面的圖片中,可以看到來自 mempool.space 區塊瀏覽器的兩個截圖,顯示了第一個重複交易在兩個不同區塊中重複出現的情況。 有趣的是,當在網路瀏覽器中輸入相關網址時,mempool.space 區塊瀏覽器在 d5d2….8599 的情況下預設顯示較早的區塊,而在 e3bf….b468 的情況下預設顯示較晚的區塊。Blockstream.info 和 Btcscan.org 與 mempool.space 有相同的行為。另一方面,根據我們的基本測試,Blockchain.com 和 Blockchair.com 的行為方式不同,當在瀏覽器中輸入 URL 時,總是顯示重複交易的最新版本。 在相關的四個區塊中,只有一個區塊(區塊 91,812)包含了其他交易。這筆交易將 1 BTC 和 19 BTC 的輸出合並成了一個 20 BTC 的輸出。 這些輸出可以被花費嗎? 由於存在兩組相同的 TXID,這為後續交易創造了引用問題。每個重複交易的價值為 50 BTC。因此,這些重複交易總共涉及 4 x 50 BTC = 200 BTC,或者根據不同的理解方式,可能涉及 2 x 50 BTC = a100 BTC。在某種程度上,有 100 BTC 實際上並不存在。 截至今天,所有 200 BTC 都未被花費。據我們所知(我們可能在這裡是錯誤的),如果有人擁有與這些輸出相關聯的私鑰,他們可以花費這些比特幣。然而,一旦被花費,UTXO 將從資料庫中刪除,重複的 50 BTC 因此將無法花費並丟失,因此只有 100 BTC 可能被找回。至於如果這些幣被花費,它們將來自哪個區塊,是較早的還是最近的,這可能是未定義的或無法確定的。 這個人本可以在建立重複交易之前花費所有比特幣,然後建立重複輸出,在未花費輸出的資料庫中建立新條目。這將意味著不僅有重複交易,還有可能有重複的已花費輸出的重複交易。如果發生這種情況,當這些輸出被花費時,將可能建立更多的重複交易,形成一種重複鏈。人們必須小心事件的順序,總是在建立重複之前花費,否則比特幣可能永遠丟失。這些新的重複交易將不是 coinbase 交易,而是「正常」交易。幸運的是,這種情況從未發生過。 重複交易的問題 重複交易顯然是不好的。它們會給錢包和區塊探索者帶來混亂,也會讓人不清楚比特幣的來源。它還會帶來許多攻擊和漏洞。例如,你可以用兩筆重複的交易支付某人兩次。然後,當交易方決定嘗試使用這筆資金時,他們可能會發現只有一半的資金可以收回。例如,這可以是對交易平臺的攻擊,試圖使其破產,而攻擊者卻沒有任何損失,因為他們可以在存款後立即提取資金。 禁止使用重複 TXID 的交易 為了緩解重複交易問題,2012 年 2 月,比特幣開發者 Pieter Wuille 提出了 BIP30 軟叉方案,禁止使用重複 TXID 進行交易,除非前一個 TXID 已被花費。該軟叉適用於 2012 年 3 月 15 日之後的所有區塊。 2012 年 9 月,比特幣開發者 Greg Maxwell 修改了這一規則,使 BIP30 檢查適用於所有區塊,而不僅僅是 2012 年 3 月 15 日之後的區塊。本文前面提到的兩個重複交易除外。這修復了一些 DOS 漏洞。從技術上講,這又是一次軟叉,儘管規則變更只適用於過去 6 個月以上的區塊,因此它不存在與正常協議規則變更相關的任何風險。 這種 BIP30 檢查的計算成本很高。節點需要檢查新區塊中的所有交易輸出,並檢查這些輸出端點是否已存在於 UTXO 中。這可能就是 Wuille 只對未使用的輸出進行檢查的原因,如果對所有輸出都進行檢查,計算成本會更高,而且無法進行剪枝。 BIP34 2012 年 7 月,比特幣開發者加文 – 安德森(Gavin Andresen)提出了 BIP34 軟分叉方案,並...
本站轉載文章皆來自公開網絡,部分由AI整理,僅為傳遞產業訊息,不代表BTCC立場。原創權益歸原作者所有。如發現版權問題,請透過[email protected]聯絡我們,我們將依法處理。 BTCC不對資訊準確性、時效性及完整性作任何保證,不承擔因依賴資訊而產生的任何責任。內容僅供參考,不構成投資、法律或商業建議。