以太坊實踐經驗之《eth.blockNumber結果為0》
問題場景
在使用以太坊ETH的過程中遇到這樣一個問題,就是通過rpc 控制檯呼叫eth.blockNumber獲得的返回結果為0。如果沒有產生區塊或沒有同步到區塊,查詢結果為0並不奇怪,本身區塊高度就是0。然而,在實踐中發現,區塊已經同步一部分之後,在某個時刻呼叫此節點返回的結果依舊是0。那麼,這個問題的原因是什麼呢?
軟體環境
1.7版本的geth客戶端, Linux作業系統 連結公有鏈
原因分析
在Geth1.6和1.7客戶端中預設使用快速(fast)同步,因此在同步的過程中節點只下載最近的狀態,中間區塊的狀態是不可用的。因此,直到同步完成,最新的完整塊都為0,因為所有比較新的塊在同步期間是不完整的。當快速同步完成時,它會下載頭部的關聯狀態,此時頭部塊完整,最新的塊可以關聯到當前的頭部。簡單來說就是在快速同步的過程中,需要構建一個頭部資訊,如果此資訊為構建完成,通過上面的介面查詢到的結果就是0。當同步完成,後續就不會再出現此問題。
相關操作命令
下面附帶一些檢查此問題時使用的相關介面呼叫: 使用eth.syncing檢視當前區塊的同步情況: 返回結果格式如下: { currentBlock: 290584, // 同步到的區塊高度 highestBlock: 891836, // 所連結的節點的最高高度 knownStates: 465886, pulledStates: 361434, startingBlock: 0 } 通過此介面我們可以檢視到區塊的同步情況。
使用eth.getBlock(“latest”).number可以查到最新區塊的高度。
個人區塊相關小密圈(知識星球)
個人小密圈已經建立。最近正在致力於區塊鏈各類數字貨幣節點使用相關工作,在小密圈中會持續分享實踐中遇到的各種常見的問題及解決方案、疑難雜症和各種坑。同時會回答大家一些常見的技術問題。剛剛建立,優惠加入中。希望大家多多支援。
相關文章
- 以太坊之賬戶管理
- 以太坊之工作流程
- 【以太坊剖析】以太坊虛擬機器(EVM)之基本定義虛擬機
- 區塊鏈之以太坊初探區塊鏈
- 以太坊Rollup方案之 arbitrum(1)
- 以太坊Rollup方案之 arbitrum(2)
- 以太坊連載(一):以太坊是什麼?
- 以太坊是什麼?以太坊交易可靠嗎?
- 以太坊之Fetcher(收到BlockHash的處理)BloC
- 死磕以太坊原始碼分析之state原始碼
- 死磕以太坊原始碼分析之txpool原始碼
- 以太坊原始碼分析(37)eth以太坊協議分析原始碼協議
- 以太坊原始碼分析(18)以太坊交易執行分析原始碼
- 以太坊學習筆記————1、以太坊是什麼?筆記
- 以太坊學習筆記————7、以太坊賬戶管理筆記
- 以太坊簡介
- 以太坊原始碼分析(52)以太坊fast sync演算法原始碼AST演算法
- 死磕以太坊原始碼分析之downloader同步原始碼
- 死磕以太坊原始碼分析之Fetcher同步原始碼
- 以太坊Solidity型別介紹+實戰Solid型別
- 以太坊代幣空投合約實現
- Python從頭實現以太坊(六):RoutingPython
- 以太坊原始碼分析(54)以太坊隨機數生成方式原始碼隨機
- 以太坊原始碼分析(3)以太坊交易手續費明細原始碼
- 以太坊概率微支付
- 以太坊Geth安裝
- 6.2 以太坊應用
- 什麼是以太坊
- 死磕以太坊原始碼分析之MPT樹-上原始碼
- 死磕以太坊原始碼分析之rlpx協議原始碼協議
- Python 如何實現以太坊虛擬機器Python虛擬機
- 如何實現一個簡單的以太坊?
- 企業安全實踐經驗分享
- [譯] 什麼是以太坊?以太坊初學者手把手教程
- 以太坊學習筆記————4、以太坊發展歷史回顧筆記
- 以太坊學習筆記————5、以太坊社群、基金會、貢獻者筆記
- python技巧 python2中的除法結果為0Python
- mavn 執行 junit 單元測試的結果為 Tests run: 0, Failures: 0, Errors: 0, Skipped: 0AIError
- 以太坊連載(六):以太坊客戶端的選擇與安裝客戶端