2017-11-07 14 views
0

私はethereumの財布のバランスを取得したいので、私はweb3.jsとgo-ethereumで動作するethereumノードでアプリケーションを作成しました。Web3.js getBalanceは常に0を表示します

ウォレットにいくつかのエーテルがあり、ノードが同期されていますが、残高は常に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); 

:私はフェッチ

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.jsを持つノードの

geth --rpc --rpccorsdomain "*" 

ステータス

との取引
web3.eth.getTransaction('0x..') 

私はウォレットにいくつかのエーテルの移転を見ることができます。私はetherscanを確認すると、私はまだ論文を持って私の財布にエーテルが、私は最後のブロックチェックするとweb3.jsからバランスはまだ0

を返して:

web3.eth.getBlock("latest").number; 

かと:

web3.eth.blockNumber; 

0を返します。正常ではありませんか。

ありがとうございました。

+0

'await web3.eth.getBalance( '0x ...'); ' –

答えて

2

Gethはデフォルトで「高速」同期を使用します。だから、ブロックチェーンのデータを完全に同期させてすべての既知の状態エントリを取得するまで待たなければならないので、2時間以上待つのが普通です。あなたの例では

、あなたは最高のブロックは4507228と現在のブロックであることがわかりblockchainデータがcompletelly同期されていないことを意味し4507134.

ですが、私はこの上で述べたようにのために十分ではないことができノードに残高情報を提供するか、最新のブロック情報を提供します。

アカウントの更新残高を取得するには、ブロックチェーンの状態を同期させる必要があります。ブロックチェーンの状態は、すでに6004673州を引き離していることが示されていますが、まだ15250州を取得して6019923.

これは厄介なように思えるかもしれませんが、10倍以上のデータをフェッチする「完全な」同期を実行するよりも高速ですが、大きな違いは1ブロックごとにブロックチェーンの状態を保存し、 "syncは最新の状態のみを保存するため、なぜweb3.ethモジュールの値も返されません。

+0

のような残高を待つ必要があるかもしれません。この回答は、動作するサンプルコードを表示することで改善することができます。さもなければ、これはコメントでなければなりません。 –

+1

それを実証するコードは実際にはありませんが、私の答えはより詳細に更新されています –

関連する問題