Doublespend

為什麼第二筆交易不通過確認流程

  • December 13, 2021

我正在閱讀區塊鏈如何防止比特幣的雙花?,它說

第一筆交易將通過確認機制獲得批准,然後驗證到後續區塊中。但是,第二筆交易將被確認過程辨識為無效並且不會被驗證

為什麼第二筆交易不通過確認流程?是不是每個比特幣地址,每個區塊只允許一個交易?

我瀏覽了您引用的文章,它對區塊鏈系統基本機制的描述具有誤導性,並且“處理雙重支出”部分對比特幣的運作方式有一些非常奇怪的想法。(採礦的描述還可以。)也許一個更專注於該主題的網站會是一個更好的閱讀來源。

讓我們從頂部開始:

支撐比特幣等數字貨幣的區塊鏈本身無法防止雙重支出。相反,涉及相關加密貨幣的所有不同交易都被發佈到區塊鏈,在那裡它們通過確認過程單獨驗證和保護。

這聽起來好像花費相同資金的多個衝突交易可以並行發佈到區塊鏈中,然後該衝突將被一些“確認過程”消除。但是,交易的有效性在被包含在區塊鏈中之前會被評估。如果一個塊包含任何無效數據,它將被其他網路參與者拒絕。在進入區塊鏈之前,一組衝突交易中除了一個之外的所有交易都會被消除。

任何交易中買賣雙方身份的詳細資訊都受到高級加密的保護,這也保護了賬本免受外部來源的篡改。

比特幣協議在任何地方都沒有使用加密。比特幣使用公鑰加密讓使用者證明他們有權使用資金並防止篡改交易。關於“買家”和“賣家”的唯一資訊是交易本身:轉賬了多少,何時發生,以及使用了哪些確切的腳本機制。雖然交易中涉及的地址是參與者的假名,但比特幣交易中沒有關於發送者和接收者的“身份資訊加密”。鏈分析的做法允許觀察者猜測哪些地址屬於一起,但地址所有者的身份資訊不會儲存在比特幣網路的任何地方。然而,大多數位於網路邊緣的提供交換或錢包服務的服務提供商都會對其客戶進行 KYC 和 AML,

您可以嘗試通過將相同的 BTC 發送到兩個不同的比特幣錢包地址來做到這一點。然後,這兩個交易都將進入未確認交易池。

是的,但即使有多個衝突交易送出到網路,節點通常¹只會轉發他們看到的第一個衝突交易並丟棄所有後續交易。

第一筆交易將通過確認機制獲得批准,然後驗證到後續區塊中。[…] 如果同時從池中提取兩筆交易進行確認,則確認次數最多的交易將包含在區塊鏈中,而另一筆將被丟棄。

區塊鍊是由一系列塊組成的資料結構。它沒有議程。正是這些規則構成了所述區塊鏈的編寫和驗證方式,使事情變得有趣。包含花費相同資金的多筆交易的區塊將無效並被所有網路參與者拒絕。雖然可能有多個相互衝突的未經證實的交易(例如,馬洛里承諾向鮑勃或卡羅爾支付 10 美元,無論誰先完成一項任務),當礦工選擇將其中一個包含在一個區塊中時,這種平局就被打破了(馬洛里實際上不能兩次贈送一張 10 美元的鈔票)。這就是挖礦的作用:它定義了交易在網路上發生的規範順序。一旦一個有衝突的交易被包含在一個區塊中,所有的競爭者都是無效的,因為他們試圖花費的資金已經被花費了。

本文通過同時使用兩種不同含義的術語“確認”來混淆這裡。以下是交易生命週期中發生的情況:

交易由發送者送出到網路。看到未確認交易的每個節點都驗證它的格式正確並且它花費的資金存在,然後將交易轉發給節點的對等方。最終,當交易被包含在一個區塊中時,它會得到“確認”。該塊在網路上傳播,每個聽到該塊的節點都會根據所有協議規則檢查該塊是否有效。

在交易被包含在一個區塊之前,它可能是有效的,但它不能有任何確認。在它被包含在一個塊中之後,它的確認數與從那時起找到的塊數一樣多(包括確認它的塊數)。永遠不會有多個具有確認的衝突交易。

全節點不會僅僅因為其他人可能已經驗證過它們而信任數據。每個完整的節點都根據協議的所有規則驗證數據本身的每一位。因此,之前有多少其他節點看到過交易並不重要,如果它未能通過您節點的規則檢查,它就無效並被丟棄。實際上,每個節點都需要在轉發數據之前對其進行驗證,因此任何傳遞無效數據的節點都會立即被接收對等方丟棄並禁止。


¹ 交易可以標記為可替換的,這會更改有關競爭交易的預設節點策略。具有更高費率的替換將取代原始並被中繼,請參閱replace-by-fee

引用自:https://bitcoin.stackexchange.com/questions/111220