Ethereum 为什么我的以太坊区块编号0在geth中,即使同步已接近完成?

Ethereum 为什么我的以太坊区块编号0在geth中,即使同步已接近完成?,ethereum,go-ethereum,geth,Ethereum,Go Ethereum,Geth,我已经完成了完全同步,但blocknumber始终为0。这是与相同的情况,但“症状”略有不同 引用重要的一点: geth--fast有一个有趣的效果:在同步完成之前,geth无法提供任何有关帐户或合同的信息 尝试在eth后再次查询余额。同步返回false 请注意,除了帐户和合同之外,在同步完成之前,您也无法检索有关块的任何信息 同步完成后,同步将返回false,如: > w3.eth.syncing AttributeDict({ 'currentBlock': 5787386,

我已经完成了完全同步,但blocknumber始终为0。

这是与相同的情况,但“症状”略有不同

引用重要的一点:

geth--fast
有一个有趣的效果:在同步完成之前,geth无法提供任何有关帐户或合同的信息

尝试在eth后再次查询余额。同步返回false

请注意,除了帐户和合同之外,在同步完成之前,您也无法检索有关块的任何信息

同步完成后,
同步
将返回false,如:

> w3.eth.syncing
AttributeDict({
  'currentBlock': 5787386,
  'highestBlock': 5787491,
  'knownStates': 138355583,
  'pulledStates': 138341120,
  'startingBlock': 5787335,
})

> w3.eth.blockNumber
0

geth的首席开发人员Peter在这里对这个问题给出了彻底的回答:。为了给carver的答案增添一点色彩,虽然您可能已经收到了最新的块头(
eth.currentBlock
),但您的节点可能还有很多工作要做才能下载整个状态树。引用彼得的话:

许多人错误地认为,因为他们有积木,他们是 同步。不幸的是,情况并非如此,因为没有进行任何交易 已执行,因此我们没有任何可用的帐户状态(即余额, nonce、智能合约代码和数据)。这些需要下载 单独检查,并与最新块交叉检查。这个阶段是 调用state trie download,它实际上与 块下载;唉,现在要比现在长得多 下载区块


根据您的定义,我的同步已完全完成,但即使重新启动
geth
,块号仍为0。Wat do?在等待大约5分钟而不触摸它之后,
w3.eth.syncing
不再返回
False
,同步当前正在重新进行。。。有趣的:)啊,我想如果你的互联网连接断开或类似的事情,
同步可能会返回false。所以,是的,最好同时检查同步和区块编号。这些信息很重要,可以为我解答这个问题。我使用的是默认的快速同步模式,我的节点从来没有完全同步过,或者只是很短的一段时间,因为状态处理需要时间。需要使用eth_同步方法获取我的最新块。
> w3.eth.syncing
False