在Bitcoin Core軟體庫中,最近有人提議取消OP_Return 輸出大小的策略限制。我們已經就此問題表達了我們的意見。此舉引發了一些爭議,並重新點燃了關於比特幣區塊鏈上何為垃圾交易以及如何處理垃圾交易的辯論。在本文中,我們回顧了十年前,也就是2015年夏天,比特幣網路遭受垃圾交易攻擊的事件。我們的目的是將當時發生的事情與現在進行比較,並探討當時吸取了哪些教訓。
2015年夏季的垃圾交易攻擊是區塊大小之爭的早期交鋒。攻擊者是“大區塊支持者”,他們希望提高區塊大小限制。當時,大區塊支持者的一個主要論點是,1MB 的限制太小了,區塊很容易被垃圾交易填滿,而且花費相對較少的錢。這種區塊填滿的情況被大區塊支持者視為一個極其糟糕的結果,它代表著垃圾交易發送者的勝利。在大區塊支持者看來,區塊填滿會使得使用比特幣進行支付變得不可靠。大區塊支持者希望增加區塊大小限制,以使垃圾交易發送者填滿區塊所有空間的成本更高。其邏輯是,在固定的費用率下,用垃圾交易填滿一個8MB的區塊將比填滿一個1MB的區塊花費更多。
「小區塊支持者」對此論點的反駁是,大區塊支持者的想法是倒退的,如果存在垃圾交易,讓它快速廉價地全部上鍊並不能阻止垃圾交易發送者,反而是讓垃圾交易發送者獲勝。此外,如果區塊大小限制增加,費用會下降,使垃圾交易變得更便宜。然而,對於大區塊支持者來說,一個關鍵指標是填滿一個區塊需要花費多少費用。他們認為這個數字對於比特幣的安全來說太低了,而提高區塊大小限制將有助於增加這個數值,從而使比特幣更具彈性。
垃圾交易攻擊
第一輪
2015年6月20日,一家鮮為人知、自稱總部位於倫敦的比特幣錢包提供商兼交易所CoinWallet.eu在BitcoinTalk和Reddit上宣布,它正在進行一場「比特幣壓力測試」。我們未能查到關於該實體的太多信息,例如其管理團隊或股東是誰。我們無法找到任何有意義的WHOIS記錄或公司註冊文件,而其倫敦地址(約克街78號)似乎是一個虛擬地址。
78 York Street in London (Google街景)
然而,攻擊者CoinWallet.EU明確了他們的動機:為了證明增加區塊大小限制的必要性。
比特幣正處於崩潰邊緣,然而核心開發者卻糾纏於瑣碎的爭論,未能為長期可持續性做出必要的修改。如果什麼都不做,比特幣將永遠只是一個耗資巨大的科學計畫。透過對系統進行壓力測試,我們希望透過展示大規模垃圾交易攻擊網路的簡單性,為增加區塊大小提供明確的理由。
攻擊者解釋說,他們將「每5分鐘產生1MB的交易數據」。攻擊定於2015年6月22日進行。計劃是「交易積壓將達到大約241個區塊,即1.67天」。這將是超過241MB的交易積壓。
當時,Luke-Jr 在Reddit 上回應攻擊者,聲明:
比特幣有礦工和區塊大小限制,正是為了打擊這類攻擊。
資料來源: https://www.reddit.com/r/Bitcoin/comments/3agk61/comment/cscgipz/
2015年6月24日,攻擊者宣布攻擊並未像他們預期的那樣成功,因為在mempool 大小達到約12MB後,他們的伺服器在大約2小時後開始崩潰。攻擊者表示,「Bitcoind 不太適合處理這種規模的交易」。攻擊者還透露,他們在這次失敗的攻擊中花費了大約2個比特幣或434歐元作為手續費。
第二輪
在同一天,即2015年6月24日,CoinWallet.EU宣布第二次垃圾交易攻擊將於2015年6月29日進行。同樣,目標是將記憶體池(mempool)積壓到241MB。
如上圖所示,這次攻擊似乎更有效,一些用戶顯然同意大區塊支持者的說法,認為這使得比特幣無法使用。
有人可以跟我解釋一下到底是怎麼回事嗎?我透過當地的網路交易所購買了0.05 BTC,他們以0.0001的交易費將其發送到我的錢包。這筆交易有226位元組。在等待確認7小時後,它被blockchain.info節點拒絕了。交易所又以0.0002的交易費再次寄給我。狀態顯示預計確認時間「非常快」(高優先級)。但現在已經等了6個小時了!你們到底對BTC做了什麼? !這樣正常嗎? BTC將無法以這種方式用於日常交易。 226位元組的交易,0.0002的交易費還不夠嗎?
資料來源: https://bitcointalk.org/index.php?topic=1098263.msg11847265#msg11847265
Luke-Jr 的礦池Eligius 似乎當時成功過濾掉了垃圾交易。在攻擊期間,Eligius 礦池產生的區塊比其他礦池小得多,其他礦池通常是1MB或750KB,無論設定了什麼限制。
Luke 早期的預測是正確的,區塊大小限制和礦工幫助減輕了攻擊的影響。但並非所有礦工都如此,只有他自己的礦池。在我們看來,區塊大小限制在阻止垃圾交易上鍊方面發揮了更強大的作用。 Luke 當時的垃圾交易過濾政策引起了爭議。有些人認為Luke 的「黑名單」損害了比特幣的可互換性,並且透過讓記憶體池保持更長時間的膨脹來延長了攻擊。例如,Kano 礦池的業者在BitcoinTalk 論壇上對垃圾交易進行瞭如下論證:
簡單的事實是,它們是帶有費用的有效交易。
論壇的另一位成員wizkid057,Luke 在Eligius 的同事,為過濾行為進行了辯護,就像Luke 在Ocean 礦池的同事今天支持過濾立場一樣:
唯一延長攻擊的,是攻擊者和其他礦池/礦工沒有過濾詐騙者的垃圾交易。其他礦池/礦工寧願用攻擊者的交易填滿他們的區塊以獲得額外的0.1 BTC 費用,而不是保護整個比特幣……或者這就是懶惰。無論如何,只要有幾個大型礦池的參與,這次攻擊的任何不良影響都可以很容易地被100%抵消。 資料來源: https://bitcointalk.org/index.php?topic=1098263.msg11760038#msg11760038
據我們了解,wizkid057 今天與Luke 在Ocean 礦池共事。 BitcoinTalk 論壇的另一位用戶「spartacusrex」同意Kano 的觀點,他說:
有效的交易就是有效的交易。句號。故事結束。沒有政治。如果有人開始表明可以「編輯」哪些交易可以通過系統,那麼我認為這將樹立一個非常糟糕的先例。
第三輪
2015年7月7日,發生了第三輪攻擊。然而,據我們所知,這次CoinWallet.EU 沒有正式宣布,儘管由於他們之前的行為,他們仍然是主要嫌疑人,可能還有與他們有關聯的人。在接下來的幾天裡,人們報告他們的記憶體池中有27,000到80,000筆交易。這是迄今為止最猛烈、也最多方面的攻擊,在網路上造成了一定程度的混亂。
Motherboard報告稱,這次攻擊花費了超過8,000美元(30比特幣)的費用,遠高於上次的434歐元。這次攻擊者採用了更多樣化的策略來產生盡可能多的垃圾交易。例如,許多塵埃交易被送到公共錢包,如維基解密錢包和新創公司Reddit 競爭對手Voat 的錢包。
垃圾交易發送者還將少量比特幣發送到私鑰公開已知的地址,例如由單字「cat」或「dog」產生的brainwallet。這有助於創建更多的垃圾交易,因為其他用戶可以創建更多的垃圾交易來嘗試贖回資金,而攻擊者的伺服器則無需自行創建這些交易。例如,2015年7月,使用未壓縮金鑰由單字「cat」產生的比特幣地址,與之關聯的交易超過41,000筆。該地址收到了數千個輸出,每個輸出價值0.00001 BTC。而2015年7月,使用未壓縮金鑰由單字「password」產生的比特幣地址,與之關聯的比特幣交易達到45,000筆。由單字「dog」產生的地址有超過43,000筆交易。因此,垃圾交易發送者明確展示了進行此攻擊的獨創性和專業知識。
在攻擊最激烈的時候,比特幣開發者和大區塊倡導者Mike Hearn 認為,增加區塊大小限制是抵禦此類攻擊的最佳防禦措施。
抵禦這種攻擊的最佳防禦措施是,透過增加區塊大小限制,使其成本盡可能高。這當然也是我正在努力的。
資料來源: https://www.reddit.com/r/Bitcoin/comments/3ck5z9/comment/cswda6x/
礦池F2Pool 透過創建一個1MB 交易來整合這些垃圾交易輸出,幫助清理了混亂,從而減少了UTXO 膨脹。該1MB交易包含超過5,000個輸入,計算驗證起來具有挑戰性,由於當時比特幣中sighash 操作的二次縮放弱點,節點需要長達20秒來檢查它。幾天后,據說比特幣開發者Gregory Maxwell 幫助F2Pool 對每個輸入使用相同的簽名,使交易更容易驗證。例如,這個另一個1MB交易,包含超過7,000個輸入。更準確地說,第一個輸入有一個唯一的簽名,它簽署了交易的哈希值,而所有其他輸入都具有相同的簽名並且不簽署交易的哈希值。透過Gregory 更有效率的整合,每個輸入都使用SIGHASH_SINGLE 而不是SIGHASH_ALL 來簽章。 SIGHASH_ALL 是指簽名簽署所有輸入和輸出,這是預設行為。這個差異現在在mempool.space網站上得到了很好的體現,這是2025年5月新增的一個很棒的新功能,SIGHASH_ALL 用綠色鑰匙表示,SIGHASH_SINGLE 用藍色鑰匙表示。
第四輪
隨後,CoinWallet 又進行了第四輪也是最後一輪的壓力測試,這次是在2015年9月。
關於明天宣布的壓力測試,存在著許多對立的觀點。有些人稱之為對網路的攻擊,然而我們認為這與某人購買火車上的所有車票以獨享整列火車沒有什麼不同。我們已經諮詢了多位律師,普遍共識是,這樣的測試不違反歐盟或其他地方的任何法律。
一位自稱是CoinWallet.EU 首席營運長(COO)或首席商務官(CCO)的「詹姆斯·威爾遜」(James Wilson) 向各自媒體發送電子交易,談論這次攻擊。威爾森說:
目標是讓社群修復比特幣。它現在壞了。一家小錢包新創公司不應該能夠讓網路屈服。
在這次第四次攻擊中,CoinWallet.EU 採取了不同的方法。該公司宣布將贈送200個比特幣,方法是直接將私鑰發佈到BitcoinTalk 論壇上。原始貼文包含5個私鑰,每個私鑰都有0.53918 BTC的餘額。在接下來的幾天裡,Coinwallet 帳戶在該貼文中發布了數千個帶有餘額的私鑰。這導致產生了超過90,000筆交易,其中許多是衝突交易,因此可以使用「首次看到安全」(First Seen Safe, FSS)原則丟棄。這使得第四輪攻擊的影響不如第三輪嚴重。
隨著這次最新的嘗試,該公司宣布他們的“壓力測試日正式結束”,許多比特幣持有者宣布勝利。
至於CoinWallet.EU 的幕後黑手,這仍然是個謎。猜測包括以下幾點:
- 前Quadriga 執行長Gerald Cotton 可能是CoinWallet 的幕後主使,因為當客戶向CoinWallet 匯款時,會被告知收款人設定為1009926 BC LTD ,這與Quadriga 的名稱相同。然而,這可能只是CoinWallet 將Quadriga 作為支付處理器。
- CoinWallet 的COO 詹姆斯·威爾遜( James Wilson )可能與前Craig Wright 的同事**傑米·威爾遜(Jamie Wilson)**是同一個人,這意味著Wright 可能參與了垃圾交易攻擊。或者,他可能是另一位假中本聰菲爾·詹姆斯·威爾遜(Phil James Wilson,又名Scronty ) ,他曾說他的家人經常稱他為詹姆斯·威爾遜。 (詹姆斯威爾森是個相當常見的名字)
對我們而言,上述理論過於薄弱,沒有足夠的證據在目前階段得出CoinWallet 幕後黑手的結論。
學術分析
一篇學術論文發表,其中涵蓋了2015年的垃圾交易攻擊。已發布的數據顯示,內存池的大小出現了兩個主要高峰,達到約175,000筆交易,這與垃圾交易攻擊的第三輪和第四輪相符。
該論文最後得出以下結論:
我們對一次基於垃圾交易的「壓力測試」DoS 攻擊比特幣進行了實證研究。透過我們基於聚類的方法,我們發現在垃圾交易活動高峰期的10天內,總共1,645,667筆比特幣交易中有385,256筆(23.41%)是垃圾交易。我們還表明,這次攻擊對非垃圾交易交易產生了負面影響,使平均費用增加了51%(從45聰/位元組增加到68聰/位元組),處理延遲增加了7倍(從0.33小時增加到2.67小時)。這表明,願意花費少量比特幣(至少49,000美元)支付更高費用的對手,可以對比特幣進行DoS 攻擊。
結論
在我們看來,2015年的垃圾交易攻擊對比特幣產生了相當大的影響。它不僅對比特幣的中繼策略產生了技術影響,也是一系列具有影響力的事件,幫助人們形成了對比特幣上垃圾交易的看法。可能由於這些攻擊,網路發生了以下變化:
- 礦工將區塊大小限制策略從250KB或750KB增加到1MB。 1MB 是共識限制,礦工將其策略從預設值更改為1MB。這是一個礦工改變策略限制以符合共識規則的例子。這裡的想法是,這將增加區塊容量,並使垃圾交易攻擊者更難填滿區塊並損害用戶體驗。
- 2015年10月,Bitcoin Core 中的最低中繼費用增加了5倍,達到5,000 sathoshis 。這項決定很可能是為了幫助對抗垃圾交易。
- 垃圾交易攻擊似乎也促使Bitcoin Core 中引入了記憶體池限制和300MB 的預設記憶體池大小限制。大部分討論發生在2015年10月。
- 垃圾交易攻擊也似乎加劇了區塊大小限制辯論中的緊張和兩極化。大區塊支持者,其中一些參與了攻擊,將攻擊期間用戶體驗的下降作為區塊大小限制應該增加的證據。一些大區塊支持者似乎很高興這次攻擊將區塊大小限制推到了議程的首位,並作為進一步辯論的催化劑。如果持懷疑態度,甚至可以說這是一種協調和蓄意的做法,試圖爭取更多的基層用戶支援增加區塊大小限制。然而,小區塊支持者仍堅定不移,堅守陣地。
當然,小區塊支持者贏得了這場戰爭。區塊變得滿了,這現在是常態。現在這是一個已解決的問題,即增加區塊大小限制以允許更多垃圾交易上鍊並不是一個好主意。然而,關於什麼構成垃圾交易以及如何從中繼和挖礦策略角度處理它的爭論仍在繼續。對於那些沒有經歷2015年的人來說,本文的一個主要啟示可能是,垃圾交易攻擊並非新鮮事。如果有什麼不同的話,在我們看來,2015年攻擊者的惡意意圖可能比2023年及以後那些產生JPEG 相關交易的幕後人士更模糊、或許也更合法的意圖更明確。另一個有趣的比較是花費的費用金額,2015年可能大約10,000美元就造成了損害。而自2023年以來,數億美元已花費在「垃圾」交易的費用上。