Doublespend

比特幣中最長的鏈傳播是如何發生的?

  • September 21, 2020

假設節點 A 擁有的有效區塊鍊是:B1->B2->B3

現在,我要作弊,因為我有很多計算能力。我要做的是下載節點 A 擁有的上述區塊鏈並開始作弊。在此之前,我進行了購買摩托車的交易。所以,有效的區塊鏈現在看起來像這樣 ( B1->B2->B3->B4)。B4有我的自行車交易。在我的本地副本中,我沒有放那筆交易。現在,因為我想要一個最長的鏈,所以我工作得很快,讓我們說一段時間後節點 A 的鍊和我的鏈看起來像這樣:

節點 A-B1->B2->B3->B4->B5

礦 -B1->B2->B3->O1->O2->O3->O4

現在,我想廣播我的鏈。

我播什麼?整個鏈條(B1->B2->B3->O1->O2->O3->O4)還是只有O1->O2->O3->O4

A)如果我只廣播O1->O2->O3->O4,節點 A 如何確定它必須B4->B5從其鏈中刪除並附O1->O2->O3->O4加到B3?它是否首先獲取O1’ 的 prev 雜湊,然後在其本地區塊鏈中,它使用該雜湊搜尋塊,如果找到該雜湊,它會刪除它之後的每個塊並附加O1->O2->O3->O4從我的鏈中新複製的塊?如果是這樣,它還將考慮新的是否是最長的(因此刪除塊的計數應該小於新複製塊的計數)。我對嗎 ?

B)當然,廣播整個鏈條是不可能的,因為它是如此巨大。

試圖以自身速度超過整個網路的挖礦能力的攻擊稱為多數攻擊或“51% 攻擊”。具體來說,您的範例是通過多數攻擊進行的雙花攻擊。當攻擊者發布他們的鏈提示時,每個節點都會執行鏈重組以切換到最佳鏈。

具體來說,塊B4O1都共享 的雜湊B3作為它們的prevHash. 一旦攻擊者宣佈區塊O1->O2->O3->O4,其他節點會注意到這個鏈尖有更多的總工作,找到區塊鏈中的最後一個共享祖先(B3),將所有塊恢復為共享祖先,然後應用新塊來收斂最好的鏈尖。

當兩個礦工碰巧同時找到一個區塊時,區塊鏈分叉和鏈重組也可以良性發生。在這一點上,網路的節點在什麼是最好的鏈上存在分歧,因為每個節點都認為它第一次看到的塊是正確的。一旦另一個塊擴展了兩個鏈尖之一,當節點聽到新塊時,網路就會收斂到最佳鏈上。

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