Stale-Block

節點級別的陳舊塊驗證

  • April 5, 2021

讓我好奇的是,當節點 A 和節點 B 在相當接近的時間範圍內(不是在同一時間但)生成塊 N 時,節點 A 將如何探勘塊 N+1。

在許多文章中,它說當 2 個節點(A&B)同時生成相同高度的塊時,會導致分叉。這意味著一些節點將在 A 的新塊之後探勘,而其他節點將探勘 B 的。這是可以理解的。但是,A 的新塊同步到 B 需要時間。假設傳遞給 B 需要 10 秒。在同步的中間(比如說總共 10 秒的第 5 或第 6 秒),B 只是生成新塊(與相同的高度),並在接收到 A 的塊之前將其傳播出去。那麼當 B 收到 A 的塊時會發生什麼?

我有 2 個可能的答案,但不確定哪個是正確的,或者都不知道。(假設區塊中的所有 TX/UTXO 都沒有問題)

ANSWER-1:B 將丟棄 B 的區塊,並接受 A 的區塊,因為 B 區塊的時間戳比 A 的早(有意義嗎?)

ANSWER-2:當 B 廣播他的新塊時,B 預設接受自己生成的塊(N+1)並立即開始探勘塊 N+2(此時 B 還沒有收到 A 的塊。)然後B 收到 A 的區塊(N+1),在這種情況下,B 應該保留 A 的鏈,但仍繼續在他的 N+2 塊高度進行探勘。

有什麼建議嗎?

ANSWER-2:當 B 廣播他的新塊時,B 預設接受自己生成的塊(N+1)並立即開始探勘塊 N+2(此時 B 還沒有收到 A 的塊。)然後B 收到 A 的區塊(N+1),在這種情況下,B 應該保留 A 的鏈,但仍繼續在他的 N+2 塊高度進行探勘。

這基本上是正確的。B 將收到 A 的塊,對其進行驗證,如果有效,他將儲存該塊。然而,他不會改變他對區塊鏈的看法以包括 A 的區塊。他只是持有 A 的區塊,以防萬一在其上發現更多區塊,這將需要 B 改變他對區塊鏈的看法。

B 對區塊鏈的看法將保留在他的 N+1 個區塊上,並繼續探勘他的 N+2 個區塊。

通常,當大約在同一時間在相同高度發現兩個塊時,節點將更新他們的區塊鏈視圖以包括他們首先看到的塊。僅當存在比節點目前視為正確區塊鏈的累積工作更多的區塊鏈時,區塊鏈的視圖才會改變。如果兩個區塊鏈具有相同的累積工作(即本問題中描述的孤兒競賽),則節點使用它首先看到的那個。

兩個礦工可能幾乎同時找到一個區塊,因此網路可能會分裂,一些礦工在兩個區塊的頂部工作。

有可能,但非常罕見的是,分裂兩邊的礦工幾乎在同一時間再次找到一個區塊,從而重複這種情況,並且分裂深入另一個區塊。

當分裂的一側在另一側之前開採一個新區塊時,這種情況最終會得到解決。然後網路會聚到更長的(大部分工作)鏈上,而另一條鍊是“孤立的”。

我有 2 個可能的答案,但不確定哪個是正確的,或者都不知道。(假設區塊中的所有 TX/UTXO 都沒有問題)

ANSWER-1:B 將丟棄 B 的區塊,並接受 A 的區塊,因為 B 區塊的時間戳比 A 的早(有意義嗎?)

不,時間戳不用於決定保留哪個塊。

ANSWER-2:當 B 廣播他的新塊時,B 預設接受自己生成的塊(N+1)並立即開始探勘塊 N+2(此時 B 還沒有收到 A 的塊。)然後B 收到 A 的區塊(N+1),在這種情況下,B 應該保留 A 的鏈,但仍繼續在他的 N+2 塊高度進行探勘。

B 不一定會保留該鏈,但 B 會繼續在 B 的 N+1 塊上挖礦。

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