> w3.eth.syncing
AttributeDict({
'currentBlock': 5787386,
'highestBlock': 5787491,
'knownStates': 138355583,
'pulledStates': 138341120,
'startingBlock': 5787335,
})
> w3.eth.blockNumber
0
我已经完成了完全同步,但块号始终为 0。
> w3.eth.syncing
AttributeDict({
'currentBlock': 5787386,
'highestBlock': 5787491,
'knownStates': 138355583,
'pulledStates': 138341120,
'startingBlock': 5787335,
})
> w3.eth.blockNumber
0
我已经完成了完全同步,但块号始终为 0。
首席 geth 开发人员 Peter 在这里发布了对这个问题的彻底回答:Block number is always zero with fast syncmode。为了给 carver 的答案添加更多颜色,虽然您可能已经收到了最新的块头 ( eth.currentBlock
),但您的节点可能还有很多工作要下载整个状态树。引用彼得的话:
许多人错误地认为,因为他们有块,他们是同步的。不幸的是,情况并非如此,因为没有执行任何交易,所以我们没有任何可用的账户状态(即余额、随机数、智能合约代码和数据)。这些需要单独下载并与最新块进行交叉检查。这个阶段称为状态 trie 下载,它实际上与块下载同时运行;唉,现在比下载块需要更长的时间
这与为什么我的以太币余额为 0 在 geth 中的情况相同,即使同步已接近完成?但“症状”略有不同。
引用重要的一点:
geth --fast
有一个有趣的效果:在同步完全完成之前,geth 无法提供有关帐户或合同的任何信息。在 eth.syncing 返回 false 后再次尝试查询余额。
请注意,除了账户和合约之外,在同步完成之前,您也无法检索有关区块的任何信息。
当您的同步完全完成时,syncing
将返回 false,例如:
> w3.eth.syncing
False