Adressguthaben kann mit web3js nicht abgerufen werden

Ich versuche, eine Funktion zu schreiben, um das Ethereum-Guthaben einer Brieftaschenadresse über web3js abzurufen. Das Problem ist, dass ich es aus irgendeinem Grund nicht zum Laufen bringen kann. Hier ist mein Code, der in VSCode ausgeführt wird:

const testnet = 'https://ropsten.etherscan.io/';
const walletAddress = '0x8690F1feff62008A396B31c2C3f380bD0Ca6d8b8';

const web3 = new Web3(new Web3.providers.HttpProvider(testnet));
var balance = web3.eth.getBalance(walletAddress);

Die Brieftasche enthält 0,98 Ether auf Ropsten, aber aus irgendeinem Grund kehrt sie nicht zurück, wenn ich sie von meinem Code aus anrufe. Was mache ich falsch?

getBalance ist ein Versprechen, es muss „abwarten“

Antworten (6)

Das Problem mit Ihrer Testnet-URL, https://ropsten.etherscan.io/ , führt keinen Eth-Client aus.

Finden Sie den folgenden Code, um den Ropsten-Knoten zu verbinden.

const testnet = 'https://ropsten.infura.io/';
const walletAddress = '0x8690F1feff62008A396B31c2C3f380bD0Ca6d8b8';

const web3 = new Web3(new Web3.providers.HttpProvider(testnet));
var balance = web3.eth.getBalance(walletAddress); //Will give value in.
balance = web3.toDecimal(balance);

Ich bekomme Wert. Jetzt wird das Gleichgewicht als Wei geben. Überprüfen Sie die web3-API-Methoden auf dasselbe.

https://github.com/ethereum/wiki/wiki/JavaScript-API#web3towei

Tut mir leid, ja, ich habe Infura ausprobiert, aber ich hatte das gleiche Problem. Ich habe web3, das 1.0.0-beta war, deinstalliert und 0.14.0 installiert und alles funktioniert einwandfrei. scheint ein Problem mit den neuesten web3js zu sein.
dieser Code wird nicht mehr funktionieren. getBalance()gibt jetzt ein Versprechen zurück (zumindest in v1.0.0-beta.43), das Sie tun müssen, getBalance(...).then(bal => { console.log(bal); })und übrigens, um es in Dezimalzahlen umzuwandeln, muss man es jetzt tun, web3.utils.toDecimal()und wenn es übergeben wird, wird ein Gleichgewicht es zum Kotzen bringen "Fehler: Nummer kann nur sicher bis zu 53 Bit speichern" -- hoffnungslos. nach was? 5 Jahre, wie lange gibt es Ethereum schon? und die grundlegendste Funktionalität ist immer noch kaputt
TypeError: web3.toDecimal ist keine Funktion

balance = warte auf web3.eth.getBalance(wallet_address);

Sie müssen await in einer Funktion verwenden. Dies ist keine gültige Syntax.

Sie müssen sich mit einem Ethereum-Knoten verbinden, der im Ropsten-Netzwerk läuft. https://ropsten.etherscan.io ist kein solcher Knoten.

Sie können stattdessen Infura ausprobieren . Sie stellen öffentliche Ethereum-Knoten bereit. Sie sollten einen API-Schlüssel erhalten, aber es funktioniert (vielleicht mit niedrigerer Ratenbegrenzung?) Auch ohne das:

const testnet = 'https://ropsten.infura.io';
Hallo, ich versuche, eine Verbindung zu Infura-Diensten herzustellen. Aber es funktioniert nicht. Bitte schauen Sie unter ethereum.stackexchange.com/questions/57524/…

Sie können das neueste Formular verwenden:

var Web3 = require("web3");
var url = 'https://ropsten.infura.io';
var web3 = new Web3(url);
var address = '0x8690F1feff62008A396B31c2C3f380bD0Ca6d8b8';
var balance = web3.eth.getBalance(address);
var wallet = web3.eth.toWei(balance, 'ether');

Hier habe ich versucht, zwei Änderungen zu zeigen, dh

1. no use of 'new Web3.providers.HttpProviders(url)'
2. conversion of balance into wallet through mapping it to ether.
Abgestimmt, weil Sie eine Änderung der Frage vorgeschlagen haben, um auf Ihre Antwort zu verweisen
@ZaidAmir Warum? Das funktioniert gut.

Auch um das Gleichgewicht im Ether-Format anzuzeigen, verwenden Sie es so. Ich sehe, dass viele der Antworten tatsächlich veraltet sind.

const getBalance = await web3.eth.getBalance(walletAddress)
const ethBalance = web3.utils.fromWei(getBalance, 'ether')
console.log(ethBalance)
// 0.98

web3.toDecimal(web3.fromWei(await web3.eth.getBalance('wallet-address')))ODERweb3.toDecimal(web3.fromWei(await web3.eth.getBalance('wallet-address'),'ether'))

Es fehlt awaitvor web3.eth.getBalance, sonst schlägt es fehl.