以下是geth的控制台输出:
> eth.syncing
{
currentBlock: 3935087,
highestBlock: 3935168,
knownStates: 6020785,
pulledStates: 6015769,
startingBlock: 3935060
}
帐户地址是:0x374A7fd1A537646652bc79Ad76B5D4e737373372
TxHash:0x9797923f033a454aac25a7c324b7f37030ebc013cc4f80d85414016653d2e1ab
TxReceipt状态:Success
Block Height:3934618
(576 Block Confirmations)TimeStamp:2小时23分钟前(Feb-26-2019 02:32:42 AM + UTC)
来自:0x31b98d14007bdee637298086988a0bbd31184523To:0x374a7fd1a537646652bc79ad76b5d4e737373372
价值:7.5 Ether
(0.00美元)
> eth.blockNumber
0
> eth.getBalance("0x374a7fd1a537646652bc79ad76b5d4e737373372")
0
现在我很困惑,因为geth已同步阻止“3935087”,但仍然无法获取块“3934618”中写入的状态。
很可能你的本地国家特里仍未同步。您必须考虑默认Geth在fast mode
中调用,因此它不是从创世块开始并重新执行区块链历史中的每个tx,而是仅同步块头并将它们重新组合成链。
不幸的是,由于你没有重放区块链txs,状态trie中包含的信息,如nonce,balances等......将不再可用。一旦你节点下载每个块标题链接它们将触发下一个阶段,下载每个块中包含的tx并按顺序执行它们,以便同步你的本地状态trie。
如果您在Ethereum主网上运行可能需要一周以上的时间,如果是TestNet,例如Rinkeby,则需要大约2-3天。
在我的团队Lightstreams中,我们正在努力实施内部与以太坊兼容的区块链,其性能比官方以太坊区块链快10倍,并且每个tx的成本也更低,并确保了它们的最终性。如果您觉得试一试,我们很乐意为您提供帮助。 our open-sourced repo