Synchronization

更新所有具有區塊鏈的節點以使它們相同需要多長時間?

  • December 31, 2018

初學者問題…

我知道每個人都有自己的區塊鏈副本。

如果一個人進行了更改,例如交易,我假設它必須傳播到所有其他節點。這需要多長時間?

節點如何知道整個區塊鏈的更新過程已經完成?

使用什麼算法進行同步,它的順序是什麼(O())?

區塊鏈永遠不會改變,只會擴展。

據我了解,節點不會明確檢查或關心其他節點是否具有相同的副本。他們只是根據他們在區塊鏈副本中已有的內容來驗證他們收到的內容。

同步並不是描述發生的事情的正確詞,但它實際上是由於節點應用相同的“共識”規則而發生的。節點遵循最長的鏈,即具有最多工作證明的鏈。

區塊鍊是一種僅附加的資料結構。唯一發生的變化是附加到現有鍊或回滾塊以切換到更早分叉的更好鏈。

節點總是試圖在工作量證明最多的有效鏈上。

為了實現這一點,他們將塊頭與他們的對等點同步。標頭的同步使用定位器消息:您向您的對等方發送一個您知道返回初始塊的塊 ID 列表,您的對等方在列表中找到他們知道的最高點並在該點之後向您發送標頭 - 您可能不知道。為了提高效率,定位器列表中的標題之間的空間在前幾個之後的每個條目都加倍。這導致標頭同步過程為 O(log n)。

一旦節點有一組連接的新標頭作為最工作鏈的候選者,它就會開始沿著該標頭鏈獲取塊 - 從根據其標頭公告聲稱擁有這些塊的對等方 - 並驗證它們。如果遇到無效塊,斷開源,將其和該塊之後鏈中的所有標頭標記為無效,並找出新的大多數工作提示將忽略無效塊的所有標頭並開始獲取和驗證塊那個新的最好的提示。

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