# 比特幣重復交易:一個有趣但風險極小的漏洞比特幣交易通常通過引用前一筆交易的ID來使用未花費的輸出。這些輸出只能被使用一次,否則就會導致雙重支付,使比特幣失去價值。然而,比特幣歷史上確實出現過兩組完全相同的交易。這種情況之所以可能發生,是因爲coinbase交易沒有交易輸入,而是產生新幣。因此,兩個不同的coinbase交易有可能向相同地址發送相同數量的幣,構建方式完全一致,從而產生相同的交易ID。這兩組重復交易發生在2010年11月14日至15日,時間跨度約16小時。第一組重復交易被夾在第二組之間。我們將交易ID以d5d2開頭的歸類爲第一個重復交易,盡管它在區塊鏈上首次出現是在另一個重復交易之後。重復交易的出現給錢包和區塊瀏覽器帶來了混亂,也讓人難以確定比特幣的來源。它還可能帶來攻擊和漏洞風險。例如,可以用兩筆重復交易向某人支付兩次,但實際上只有一半資金可以使用。爲了解決這個問題,2012年3月實施了BIP30軟分叉,禁止使用重復交易ID,除非前一個已被花費。同年9月,這一規則被修改爲適用於所有區塊,只有最初的兩組重復交易除外。2013年3月,BIP34軟分叉要求coinbase交易包含區塊高度,這似乎徹底解決了重復交易問題。然而,BIP34激活前的一些區塊中,coinbase交易的scriptSig第一個字節恰好與未來有效的區塊高度匹配。這意味着在某些極少數情況下,重復交易仍有可能發生。下一個可能出現重復交易的區塊是1,983,702,預計將於2046年1月左右產生。但利用這一漏洞的成本很高,需要燒掉大量比特幣,對攻擊者幾乎毫無用處。考慮到復制交易的難度和成本,以及利用機會極其罕見,這個漏洞並不構成比特幣的主要安全威脅。不過,從長期來看,開發人員可能會在2046年之前尋求徹底修復這個問題,可能需要通過軟分叉來實現。一種可能的修復方法是強制執行SegWit承諾。
比特幣重復交易漏洞:歷史罕見案例與未來潛在風險
比特幣重復交易:一個有趣但風險極小的漏洞
比特幣交易通常通過引用前一筆交易的ID來使用未花費的輸出。這些輸出只能被使用一次,否則就會導致雙重支付,使比特幣失去價值。然而,比特幣歷史上確實出現過兩組完全相同的交易。這種情況之所以可能發生,是因爲coinbase交易沒有交易輸入,而是產生新幣。因此,兩個不同的coinbase交易有可能向相同地址發送相同數量的幣,構建方式完全一致,從而產生相同的交易ID。
這兩組重復交易發生在2010年11月14日至15日,時間跨度約16小時。第一組重復交易被夾在第二組之間。我們將交易ID以d5d2開頭的歸類爲第一個重復交易,盡管它在區塊鏈上首次出現是在另一個重復交易之後。
重復交易的出現給錢包和區塊瀏覽器帶來了混亂,也讓人難以確定比特幣的來源。它還可能帶來攻擊和漏洞風險。例如,可以用兩筆重復交易向某人支付兩次,但實際上只有一半資金可以使用。
爲了解決這個問題,2012年3月實施了BIP30軟分叉,禁止使用重復交易ID,除非前一個已被花費。同年9月,這一規則被修改爲適用於所有區塊,只有最初的兩組重復交易除外。2013年3月,BIP34軟分叉要求coinbase交易包含區塊高度,這似乎徹底解決了重復交易問題。
然而,BIP34激活前的一些區塊中,coinbase交易的scriptSig第一個字節恰好與未來有效的區塊高度匹配。這意味着在某些極少數情況下,重復交易仍有可能發生。下一個可能出現重復交易的區塊是1,983,702,預計將於2046年1月左右產生。但利用這一漏洞的成本很高,需要燒掉大量比特幣,對攻擊者幾乎毫無用處。
考慮到復制交易的難度和成本,以及利用機會極其罕見,這個漏洞並不構成比特幣的主要安全威脅。不過,從長期來看,開發人員可能會在2046年之前尋求徹底修復這個問題,可能需要通過軟分叉來實現。一種可能的修復方法是強制執行SegWit承諾。