以太坊節點同步變慢的主要原因是什麼?

買賣虛擬貨幣

在以太坊網路的運轉過程中,同步以太坊節點,可以說是十分複雜,而我們又不得不去接觸的一個方面,這個過程會讓很多人感到痛苦,也讓更多以太坊死忠為之詬病,可是,又有什麼辦法呢?今天,就跟您一起分析一下以太坊節點同步越來越慢的原因,希望對大家有所幫助。

目前以太坊錢包預設的同步模式,叫做快速同步。和從創世區塊開始,重新處理所有的轉賬不同(這會需要好幾個星期),快速同步下載區塊,然後只是驗證和工作量證明相關的資料。下載所有區塊是直截了當的,但是快速過程會相對快速地重新組成整個區塊鏈。很多人錯誤地認為,因為他們有區塊,所以在同步。

不幸地是,這不是問題的關鍵,因為沒有任何轉賬被執行了(也就是說,為了驗證區塊鏈的有效性,沒有轉賬進行),所以我們沒有任何賬戶的狀態(也就是,餘額,記錄,智慧合約程式碼以及資料)。這些需求被分開下載,而且會和最新的區塊交叉檢測。這個部分叫做狀態字首樹的下載,而且它實際上和區塊下載同時執行;同時它比下載區塊要花費更長的時間。

所以,什麼是狀態字首樹?在以太坊主網中,有無數的賬戶,這些會追蹤每個使用者的餘額,資料等等,這些賬戶本身是不足夠去執行節點,他們需要和每個區塊進行加密連線,從而節點能夠驗證賬戶沒有被欺詐。

這個加密連線是透過在賬戶上建立樹狀的資料結構來完成的,每個層級都和下面的層級連線,然後和更小的層級連線,直到你達到單個根資料。這種龐大的資料結構包含了所有賬戶和中間的加密證明,被稱為狀態字首樹。

那麼為什麼要提出這個問題?這種樹狀的資料結構是幾百萬個很小的加密證明相連線的、為了獲得同步節點,你需要下載所有賬戶的資料,同時這些加密證明也會驗證網路中沒有任何東西嘗試去欺騙你。這本身已經是非常誇張的資料了。

它變得更加混亂的部分是這個資料不斷地變化:每個區塊(15秒),大約有1000個節點會從樹狀結構中刪除,然後大約有2000個新節點會新增。這意味著需要同步資料庫的節點正在以每秒200次的速度改變。

最差的部分是讓你在同步的時候,網路還在往前推進,並且你開始下載的狀態也許會在你下載的時候小時,所以你的節點需要一直跟著網路進行,同時還需要獲得所有最近的資料。但是當你實際上獲得所有資料的時候,你的本地節點不能使用,因為它不能加密證明任何賬戶的任何資訊。

如果你看到主網後面有64個區塊,你還沒有完全同步,甚至還差的很遠。你只是完成了區塊下載的部分,仍然在進行狀態的下載。你可以透過無窮無盡的Imported state entries [...] ,來看到你自己的狀態。當你的節點線上之前,你也需要等到它們出來。

Q:節點只是取決於輸入的狀態?

A:節點不會暫停,它只是不會提前知道整個狀態字首樹有多大,所以它會一直進行直到發現和下載了整個資料。

原因是以太坊區塊中只有狀態根部,根節點的單個雜湊。當節點開始同步,它會完全直到1個節點,並且嘗試下載。那個節點,可以對標高達16個新節點,並且嘗試下載那些。隨著我們繼續進行下載,大多數的節點會和新的節點對標,而且我們那時候還不知道它們。這就是為什麼你需要想想,為什麼它會卡在同樣的數字。隨著時間,節點是在發現和下載樹狀資料。

Q: 我卡在了主網後的64個區塊?

A:就像上面解釋的,你不是卡主了,是剛剛完成了區塊下載階段,正在等待狀態下載完成。這部分花費的時間,比下載區塊要長很多。

Q:為什麼下載狀態需要花費這麼長時間,我有很高的頻寬?

A:狀態同步是受制於磁碟輸入輸出,而不是頻寬。

以太坊的狀態字首樹包含了幾百萬個節點,大多數會是按照單個雜湊對應至多16個其他雜湊。在磁碟上,這是很恐怖的儲存方式,因為其中幾乎沒有結構,只是隨機的數字來反應甚至更多的隨機數字。這會讓底層資料庫變得混亂,因為它不能最佳化儲存以及使用任何有意義的方式來尋找資料。

不僅儲存資料是非常不理想的,而且由於每秒200次的改變以及對過去資料的修改,我們甚至不能下載,這是一個正確的預處理方法,使它更快地匯入,而底層資料庫不太多。最終的結果甚至是快速的更新導致很高的磁碟輸入輸出費用,這對於機械硬碟來說,是非常大的挑戰。

Q:這麼說,我不能用硬碟驅動器來執行全節點?

A:很不幸地是,確實不可以。在硬碟驅動器上進行快速同步,比起你等待目前的資料,會花費更多時間。儘管你確實等待了,硬碟驅動器也不能跟上主網轉賬處理的讀寫需求。

但是,你應該能夠使用硬碟驅動器在輕客戶端使用,因為會最小化對系統資源的影響。如果你想要執行全節點,那麼固態硬碟就是唯一的選擇。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;