2017-11-07 13 views
0

나는 ethereum 지갑 잔액을 얻고 싶습니다. 그래서 web3.js와 ethereum 노드로 go-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는 기본적으로 "빠른"동기화를 사용합니다. 따라서 모든 알려진 상태 항목을 얻기 위해 블록 체인 데이터를 완전히 동기화 할 때까지 기다려야하므로 몇 시간 정도 더 기다려야합니다. 당신의 예에서

, 당신은 가장 높은 블록은 4,507,228 현재 블록이라고 볼 수있는 blockchain 데이터가 completelly 동기화되지 않음을 의미합니다 4507134.

하지만 난이 위에서 언급 한대로 충분하지 않을 수 있습니다 노드를 사용하여 계정 잔액 정보를 제공하거나 최신 차단 정보를 제공하십시오.

계정의 업데이트 된 잔액을 얻으려면 이미 6004673 개의 상태를 가져온 것으로 보이는 블록 체인의 상태를 동기화해야하지만 여전히 알려진 상태의 수에 도달하기 위해 15250 개의 상태를 가져와야합니다. 6019923.

이것은 성가신 것처럼 보일 수 있지만 "전체"동기화를 실행하는 것보다 더 빠릅니다. 큰 차이는 모든 단일 블록에 대한 블록 체인의 상태를 저장한다는 것이기 때문에 10 배 더 많은 데이터를 가져 오는 것입니다. "sync는 최신 상태 만 저장하므로 web3.eth 모듈에 대한 값을 반환하지 않는 이유는 무엇입니까?

+0

과 같은 균형을 기다려야 할 것입니다.이 답변은 작동하는 몇 가지 예제 코드를 보여줌으로써 개선 될 수 있습니다. 그렇지 않으면 주석이어야합니다. –

+1

실제로 그것을 증명할 코드는 없지만 좀 더 심층적 인 대답을 업데이트했습니다. –