比特幣中最長的鏈傳播是如何發生的?
假設節點 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% 攻擊”。具體來說,您的範例是通過多數攻擊進行的雙花攻擊。當攻擊者發布他們的鏈提示時,每個節點都會執行鏈重組以切換到最佳鏈。
具體來說,塊
B4
和O1
都共享 的雜湊B3
作為它們的prevHash
. 一旦攻擊者宣佈區塊O1->O2->O3->O4
,其他節點會注意到這個鏈尖有更多的總工作,找到區塊鏈中的最後一個共享祖先(B3
),將所有塊恢復為共享祖先,然後應用新塊來收斂最好的鏈尖。當兩個礦工碰巧同時找到一個區塊時,區塊鏈分叉和鏈重組也可以良性發生。在這一點上,網路的節點在什麼是最好的鏈上存在分歧,因為每個節點都認為它第一次看到的塊是正確的。一旦另一個塊擴展了兩個鏈尖之一,當節點聽到新塊時,網路就會收斂到最佳鏈上。