Ethereum Web3.js getBalance始终显示0

Ethereum Web3.js getBalance始终显示0,ethereum,web3js,go-ethereum,Ethereum,Web3js,Go Ethereum,我想获得以太坊钱包余额,所以我用web3.js制作了一个应用程序,并用go以太坊制作了一个以太坊节点 我的钱包上有一些以太,节点已同步,但我的余额始终显示0以太 这是我的应用程序: var Web3 = require('web3'); var web3 = new Web3(); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); balance = web3.eth.getBalance('0

我想获得以太坊钱包余额,所以我用web3.js制作了一个应用程序,并用go以太坊制作了一个以太坊节点

我的钱包上有一些以太,节点已同步,但我的余额始终显示0以太

这是我的应用程序:

var Web3 = require('web3');
var web3 = new Web3();
web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545'));
balance = web3.eth.getBalance('0x...');
console.log(balance);
使用以下命令启动节点:

geth --rpc --rpccorsdomain "*"
使用web3.js的节点的状态:

API Version : 0.19.0
Node Version : Geth/v1.7.2-stable-1db4ecdc/darwin-amd64/go1.9.1
Network Version : 1
Ethereum Version : 63
isConnected : true
{host: "http://localhost:8545", timeout: 0}
Listening : true
Peer Count : 25
{currentBlock: 4507134, highestBlock: 4507228, knownStates: 6019923, pulledStates: 6004673, startingBlock: 4506690}
当我用

web3.eth.getTransaction('0x..')
我能在钱包上看到一些以太的转移。当我检查etherscan时,我的钱包上仍然有这些以太,但是web3.js的余额仍然返回0

当我检查最后一个街区时:

web3.eth.getBlock("latest").number;
或与:

web3.eth.blockNumber;
它返回0。这看起来不正常

谢谢。

Geth默认使用“快速”同步。因此,您必须等待,直到它完全同步区块链数据,才能获得所有已知的状态条目,因此通常需要再等待几个小时

在您的示例中,您可以看到最高的块是4507228,当前块是4507134

这意味着区块链数据没有完全同步,但正如我前面提到的,这不足以让节点提供账户余额信息或最新的区块信息

为了获得账户的更新余额,它还需要同步区块链的状态,区块链显示已经提取了6004673个状态,但仍然需要提取15250个状态才能达到6019923的已知状态数


这可能看起来很麻烦,但它仍然比运行“完全”同步快,因为“完全”同步可以获取10倍多的数据,因为最大的区别在于它为每个块保存区块链的状态,而“快速”同步只保存最新的状态,因此,它不会为web3.eth模块返回任何值。

也许您必须等待余额,如
等待web3.eth.getBalance('0x…')这个答案可以通过显示一些有效的示例代码来改进。否则,这应该是一个注释。实际上没有任何代码来演示它,但我已经更新了我的答案,使之更深入