以太坊实践经验之《eth.blockNumber结果为0》
Posted 程序新视界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊实践经验之《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可以查到最新区块的高度。
个人区块相关小密圈(知识星球)
个人小密圈已经创建。最近正在致力于区块链各类数字货币节点使用相关工作,在小密圈中会持续分享实践中遇到的各种常见的问题及解决方案、疑难杂症和各种坑。同时会回答大家一些常见的技术问题。刚刚创建,优惠加入中。希望大家多多支持。
以上是关于以太坊实践经验之《eth.blockNumber结果为0》的主要内容,如果未能解决你的问题,请参考以下文章
以太坊之OpenZeppelin集成Truffle编写完善安全的合约