階段式同步(staged sync)重構自 Go-Ethereum 的完全同步模式(full sync),以實現更好的性能。
階段式同步需要進行大量讀寫操作。雖然我們的目標是能夠在機械硬盤上同步節點,但是我們仍建議使用固態硬盤。
顧名思義,階段式同步需要依次執行 10 個階段。
Turbo-Geth 客戶端會向每個對等節點了解該節點的 HEAD 區塊(即最新區塊),然后依次執行每個階段、尋找本地 HEAD 區塊和對等節點的 HEAD 區塊之間缺失的區塊。
第一個階段(下載區塊頭)會設置本地 HEAD 區塊。
各階段會按順序執行。在每個階段執行期間,只有節點本地的狀態達到目標狀態,該階段才會結束。
也就是說,在理想情況下(沒有出現網絡中斷、應用沒有重啟等問題),每個階段只需執行一次,即可完成初始同步。
最后一階段結束后,整個同步流程會重新開始,尋找新的區塊頭下載。
以太坊非零地址數達到91,505,224,創歷史新高:金色財經報道,Glassnode數據顯示,以太坊非零地址數達到91,505,224,創歷史新高。[2022/12/17 21:50:46]
如果你在兩個階段之間重啟應用,應用會從第一階段開始重啟。
如果你在某個階段執行期間重啟應用,應用會從當前階段開始重啟,以完成該階段。
通過下方的餅狀圖,我們可以看出每個階段的耗時占比(這些都是從完全同步中得出的數據)。雖然這些數據并不精確,但是足以作為參考。
如果區塊鏈發生重組,我們需要“回退”部分同步數據。
回退指的是從最后一個階段倒退回第一個階段。但是,需要注意的一點是,我們執行完回退之后才會更新交易池,因此我們知道新的 nonce 。
比特幣和以太坊的已實現波動率過去一周大幅下降:金色財經報道,Skew圖表顯示,比特幣和以太坊的已實現波動率在過去一周中大幅下降。比特幣的已實現波動率從6月10日的6.7%下跌至6月15日的4.1%。而在下跌之前,比特幣一直保持較高的已實現波動率水平,在6%以上。同樣,以太坊的已實現波動率從6月11日的8.4%的高點下跌至6月15日的4.9%。比特幣和以太坊的已實現波動率波動率最近的下降意味著其已經與不斷下降的隱含波動率保持一致。實際波動率的下降或可以表明,其各自的估值范圍在2020年期間可能是一個強勁的底部,并且代幣可能會在接下來的6個月內從這個基本范圍內建立起來。另一方面,已實現波動率也可能暗示購買壓力在當前趨勢中已最終得以消除。[2020/6/17]
回退的階段順序如下例所示(從右往左依次發生)。
state.unwindOrder = []*Stage{
// Unwinding of tx pool (reinjecting transactions into the pool needs to happen after unwinding execution)
分析 | 以太坊鏈上交易金額一年內下降40%:據longhash 7月2日消息,Coin Metrics的數據顯示,ETH 30天日均調整交易量從2018年6月21日的12.4億美元下降至2019年6月21日的7.43億美元,下降約40%。ETH每日轉賬數量也和前一年大致相同,約為420000。此外,ETH對BTC價格在過去一年中下跌60%。同樣值得注意的是,考慮到DAI通過ETH抵押,其調整后的鏈上日交易量大約為3000萬美元。但DAI交易量的增加并不能彌補過去一年ETH 鏈上交易量的下降。雖然ETH對BTC今年有所下跌,但Bletchley以太坊代幣指數(BETI)在5月底的表現超過了比特幣。話雖如此,重要的是要記住:ETH需要被看作以太坊區塊鏈保持安全的價值儲備。如果ETH不被看作是一種貨幣,那挖ETH(或未來抵押ETH)的動力便會減少,系統安全性能也會降低。例如DAI等圍繞分布式金融(DeFi)構建的用例也能提供幫助。但是,如果ETH本身不作為貨幣的話,這些提供可編程價值的應用程序將如何正常運作就不清楚了。在接下來的幾年里,投資者應該追蹤進入以太坊生態系統的價值,確保其中有大量資金用于保護基礎網絡。[2019/7/2]
stages, stages, stages, stages, stages, stages, stages, stages, stages, stages,
動態 | 今天凌晨,Tether在以太坊網絡新增發1億枚USDT:據PeckShield態勢感知平臺數據顯示:今天凌晨01時57分,Tether向以太坊網絡新增發1筆價值1億美元的USDT,塊高度為8002915,交易哈希值為:0x1ab162066d5f7adfc2a59e586a8b12365e0b461d09706af8e1f3ad52a820e36d。截至目前,Tether在以太坊網絡上的ERC20 USDT總發行量已達1,000,010,000枚。僅6月份以來,就已新增發了3.5億枚USDT。[2019/6/22]
}
通過 ETL 進行預處理
在將數據插入數據庫之前,一些階段會使用我們的 ETL 框架根據鍵值對數據進行排序。
這樣就可以極大減少數據庫寫入放大(write amplification)的情況。
因此,當我們生成索引或者說哈希值化狀態(Hashed State)時,我們會執行一個多步驟流程。
聲音 | V神:很后悔在以太坊中采用“智能合約”這個術語:V神在某社交軟件中回復用戶關于\"CryptoLaw\"討論時稱,明確一點,非常后悔采用“智能合約”一詞。應該把它們稱為更乏味或偏技術性的東西,也許就像“可持續性腳本”。[2018/10/15]
將處理過的數據寫入位于數據目錄的幾個臨時文件中;
然后使用一個堆棧(heap)把臨時文件中的數據插入到數據庫中,并且使按照能夠最小化數據庫寫入放大現象的順序插入數據。
這種優化有時會將寫入速度提高幾個數量級。
每個階段都包含兩個函數,分別是向前推進階段的ExecFunc 和向后回退階段的 UnwindFunc。
從理論上來說,部分階段可以離線工作,但是當前版本并未實現這一功能。
階段 1 :下載區塊頭
在這一階段,我們會下載本地 HEAD 區塊和對等節點的 HEAD 區塊之間的所有區塊頭。
這一階段是 CPU 密集型的,適合使用多核處理器,因為要驗證區塊頭的工作量證明。
由于區塊鏈重組,大多數回退都是在這一階段開始的。
這一階段會推動本地 HEAD 的指針(指向更新的區塊)。
階段 2 :區塊哈希值
從區塊頭中抽取出一個從區塊哈希值映射成區塊號(blockHash -> blockNumber)的索引表,以支持更快速的查找功能,并讓同步過程對機械硬盤更為友好。
階段 3 :下載區塊體
在這一階段,我們會將上一階段已下載區塊頭的區塊體也下載下來。
這一階段需要保持良好的聯網連接。絕大多數數據都在這一階段下載。
階段 4 :復原發送者
這一階段會復原出并存儲每個已下載區塊中的每筆交易的發送者。
這一階段同樣是 CPU 密集型的,適合使用多核處理器。
這一階段不需要聯網。
階段 5 :執行區塊
在這一階段,我們會執行之前下載的所有區塊中的每一筆交易。
需要注意的一點是,在執行區塊的過程中,我們不會驗證根哈希,甚至不會創建默克爾樹。
這一階段是單線程的,無需聯網,需占用大量磁盤空間。如果區塊執行失敗,可以回退該階段。
階段 6 :計算狀態根
這一階段會構建默克爾樹,并驗證當前狀態的根哈希。
這一階段也會構建中間哈希值(Intermediate Hashes),并將它們存儲到數據庫中。
如果之前沒有存儲任何中間哈希值(這種情況可能在第一個初始同步期間發生),這一階段會構建出完整的默克爾樹及其根哈希。
如果數據庫中沒有中間哈希值,這一階段就會利用區塊的歷史記錄來弄清楚哪些哈希值已經過時,哪些哈希值是最新的,然后使用最新的哈希值來構建部分默克爾樹,只重構過時的哈希值。
如果根哈希無法匹配,就會向后回退一個區塊。
階段 7 :生成哈希值化狀態
在執行期間,Turbo-Geth 使用無格式狀態存儲(Plain state storage)。
無格式狀態(Plain State):在標準狀態(我們稱之為 “哈希值化狀態”)中,賬戶和存儲項的地址是 keccak256(address) ,但是在一般狀態中,二者的地址就是 address 。
盡管如此,為了確保一些 API 能夠正常運作并與其它客戶端保持兼容,我們也會生成哈希值化狀態。
如果哈希值化狀態不是空值,我們會查看歷史記錄變更集(History ChangeSet),并且只更新已更改的項。
這個階段不需要聯網。
階段 8、9、10 :生成索引
同步期間會生成 3 個索引。
這 3 個索引可能會被禁用,因為所有 API 都不使用它們。
交易查詢索引
該索引表由從交易哈希值到區塊號的映射構成。
賬戶歷史索引
該索引存儲了從賬戶地址到區塊列表(在這些區塊中,該賬戶的狀態有了更改)的映射。
存儲歷史索引
該索引存儲了從存儲項地址到區塊列表(其中,該存儲項在一定程度上有了更改)的映射。
在這一階段,我們會啟動交易池或更新其狀態。例如,如果我們已下載的區塊中包含了某些交易,就把這些交易從交易池中移除。
在回退時,我們會將被回退的區塊中的交易重新添加到交易池中。
原文鏈接:
https://github.com/ledgerwatch/turbo-geth/tree/master/eth/stagedsync
作者: Alex Sharov
翻譯&校對: 閔敏 & 阿劍
金色財經聯合DappBirds獨家發布「DeFi Data」最新數據周榜據DappBirds DeFi專題數據顯示,上周DeFi板塊多維度數據均大幅上漲.
1900/1/1 0:00:00北京時間2020年9月9日,歐科云鏈OKLink區塊瀏覽器重磅升級,正式上線以太坊鏈上數據圖表板塊,提供以太坊地址、交易以及網絡狀態數據的可視化數據圖表.
1900/1/1 0:00:00本周技術周刊包含以太坊、波卡、COSMOS、Filecoin等網絡的技術類相關新聞。以太坊2.0信標鏈“隨機性”協議證明出現漏洞金色財經報道,ZenGo的研究人員已正確披露了在Diogenes協.
1900/1/1 0:00:00金色財經合約行情分析 | 主流幣價格反復,DeFi板塊普漲:據火幣BTC永續合約行情顯示,截至今日18:00(GMT+8),BTC價格暫報11587美元(+0.95%).
1900/1/1 0:00:00數字貨幣的產生是貨幣史上的大事,其意義很可能遠遠超過金屬貨幣和紙幣的誕生,也讓金本位制度和信用貨幣制度的歷史地位“黯然失色”.
1900/1/1 0:00:00金色財經 區塊鏈8月29日訊 2014年8月28日,哈爾·芬尼(Hal Finney)終于擺脫肌萎縮性側索硬化癥(ALS)——也就是被人們俗稱的“漸凍癥”的困擾.
1900/1/1 0:00:00