Web3.js getBalance始终显示0

时间:2017-11-07 15:01:45

标签: ethereum web3js go-ethereum

我想得到我的以太坊钱包平衡,所以我用web3.js和一个运行go-ethereum的以太坊节点创建了一个应用程序。

我的钱包上有一些醚,并且节点已同步,但我的余额总是显示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.它看起来不正常吗?!

感谢。

1 个答案:

答案 0 :(得分:3)

Geth使用"快速"默认同步。因此,您必须等到它完全同步区块链数据才能获得所有已知状态条目,这样才能正常等待几个小时。

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

这意味着区块链数据未完全同步,但正如我上面提到的,这对于节点提供账户余额信息或给出最新的区块信息来说已经不够了。

为了获得帐户的更新余额,它还需要同步区块链的状态,这显示已经拉出了6004673个状态,但它仍然需要获取15250个状态以达到已知状态6019923。

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