Bitcoin-Core

比特幣協議如何幫助/解決這個問題?

  • July 12, 2022

在如下圖的網路節點中: 節點

假設A試圖通過向****B、C ( A -> B ) 和**(A->C)發送比特幣來雙花,假設 A 試圖將(A->B)交易中繼到誠實的節點 - 8 並且在這個點讓我們假設目前時間是6 點鐘(可能是任何時區)。所以在6 :00,** A將其交易 ( A -> B )轉發給誠實的 No​​de-8。假設在6:02(恰好在 2 分鐘後)A嘗試雙花該比特幣並將該比特幣(A->C)發送到誠實的節點 - 5 和6:04假設誠實的 No​​de-5 驗證所有交易都是有效的,因為A 的輸入 UTXO 直到現在才廣播到網路。

同時讓 Node-8 也驗證其塊中的所有交易是否有效,因為A 的輸入 UTXO 仍然存在。假設在6:05 Node-5 和 Node-8 正在嘗試解決雜湊難題以探勘他們的塊,並且在6:08假設 Node-5 解決了難題並將其塊廣播到網路。當 Node-8 試圖用它擁有的交易解決這個難題時**(A->B)。假設在6:14,Node-8 解決了這個難題並嘗試廣播其包含 (A->B 這是雙花) 的塊。**然後對等節點將拒絕 Node-8 廣播的塊,因為它有一個無效的交易(雙花交易)。

- 這裡的錯誤不是 Node-8,Node-8 誠實地按照協議工作。即使在這種情況下對等節點拒絕了誠實的 No​​de-8 的塊,並且 Node-8 已經失去了很多計算能力,這很不公平嗎?

- 比特幣協議如何解決/幫助 Node-8 的這個問題?

如果我錯了,請糾正我..​​.

如果兩個塊有相同的祖先,我們說我們有一個分叉。如果一個節點看到一個分叉,它假定它看到的第一個塊是最好的,但保留另一個。隨著時間的推移,最終會有人解決下一個區塊的 PoW,而這個區塊很可能會擴展兩條鏈中的一條(即,這個區塊將在分叉的一條之後)。工作量多的鏈條總是會獲勝,因此無論哪個鏈條得到擴展,都會成為活躍的鏈條。

如果 Node-8 的區塊得到擴展,那麼網路會將其作為目前最佳鏈,即使他們首先看到 Node-5 的區塊。由於 Node-8 的區塊通過,A 將被發送到 B,而另一筆交易將失效。

這就是為什麼有些人等待一些確認直到最終付款,因為沒有重組的風險(重組意味著改變目前的小費,替換一些我們認為是最佳鏈的一部分的塊,並被其他塊替換)。

我將提供一個框架挑戰。您的情況對我來說毫無意義,因為您似乎對區塊鏈如何在網路中工作和傳播有錯誤的認識。

第一個問題:在 6:02 節點 5 已經聽說了事務 A->B。交易只會盡最大努力傳播,但作為下一個區塊候選的交易應該在 30 秒內到達大多數節點。沒什麼大不了的:在 6:00,攻擊者 A 將 A->B 發送到節點 8 並將 A->C 發送到節點 5 修復了該問題。所以節點 5 和 8 現在對未確認的交易有不同的看法,並認為他們的支付是有效的。如果他們看到另一筆交易,他們將拒絕它,因為它與他們已經擁有的交易相衝突。

現在在 6:08 節點 5 找到了一個包含 A->C 的新塊。塊以最高優先級傳播並具有傳播保證。每個人都會在大約 15 秒內聽到一個新區塊。如果這是迄今為止他們見過的最好的,每個人都用那個新區塊擴展他們的區塊鏈。此時節點 8 意識到資金已用完,他們的交易 A->B 現在無效。他們從他們的記憶體池中做到這一點。每個人,包括節點 8 都切換到徵稅以找到一個新塊,該塊跟在節點 5 發布的塊之後。沒有衝突,因為其他交易現在已經過時了。

節點在將交易添加到他們的記憶體池之前驗證交易,此時他們只能評估交易是否有資格被包含在一個塊中。一旦發布了一個總是取代其記憶體池的塊。區塊是網路共享的基本事實,區塊鏈在每個高度只有一個區塊。當鏈尖進展時,每個人都開始在新的高度上工作。

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