Der folgende Code funktioniert für mich, um den Ether-Wert aus der Brieftasche zu lesen:
var web3Instance = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
export async function readAccountEtherValue(address: string): Promise<number> {
var balance = await web3Instance.eth.getBalance(address);
return web3Instance.utils.fromWei(balance, "ether");
}
Wie kann ich die Werte aller Token aus dem Wallet auslesen?
Token-Guthaben werden nicht in der Brieftasche eines Benutzers gespeichert. Sie werden im entsprechenden Token-Vertrag gespeichert. Angenommen, der Token, von dem Sie den Kontostand lesen möchten, ist ein ERC20-Token, dann müssten Sie den Token-Vertrag instanziieren und dann anrufen balanceOf(address)
, um den Kontostand der Adresse zu erhalten. Zum Beispiel:
let token = await ERC20Basic.at(_tokenAddress);
let balance = await token.balanceOf(accounts[0]);
Sie können stattdessen das Ereignis verwenden Transfer
, um danach zu filtern. Sie werden wahrscheinlich einen fast vollständigen Knoten benötigen:
const Web3 = require("web3"); const web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545")); const transferEventTopic = web3.sha3("Transfer(Adresse,Adresse,uint256)"); const meineAdresse = "0x000000000000000000000003f5ce5fbfe3e9af3971dd833d26ba9b5c936f0be"; const fromBlock = 4647513; const myBalances = {}; konstanter Filter = web3.eth.filter({ fromBlock: fromBlock, Themen: [ transferEventThema ] }); filter.watch((err, obj) => { wenn (fehler) { Konsole.Fehler (err); } anders { if (typeof myBalances[obj.address] === "undefined") { myBalances[obj.address] = web3.toBigNumber(0); } let message = "Token" + obj.address; geändert lassen = falsch; if (obj.themen[1] == meineAdresse) { geändert = wahr; myBalances[obj.address] = myBalances[obj.address].minus(obj.data); Nachricht += ", Gesendet " + web3.toBigNumber(obj.data).toString(10); } else if (obj.themen[2] == meineAdresse) { geändert = wahr; myBalances[obj.address] = myBalances[obj.address].plus(obj.data); Nachricht += ", Empfangen " + web3.toBigNumber(obj.data).toString(10); } wenn (geändert) { Nachricht += ", Kontostand " + myBalances[obj.address].toString(10); console.log (Nachricht); } } }); process.on('SIGINT', () => { console.log("Hör auf zu schauen"); filter.stopWatching(console.log); process.exit(); });
Wenn Sie nur die Ereignisse wünschen, die "empfangen" bezeichnen, ersetzen Sie die Themen durch topics: [ transferEventTopic, null, myAddress ]
.
Wenn Sie nur die Ereignisse wünschen, die "send" bezeichnen, ersetzen Sie es durch topics: [ transferEventTopic, myAddress ]
.
Transfer
Ereignissen ziehen, ist die Gewissheit, dass sie stattgefunden haben.Ich habe erst kürzlich einen Smart Contract und eine Bibliothek dafür geschrieben und in ein NPM-Paket gepackt. Sie finden das Paket hier: https://www.npmjs.com/package/eth-balance-checker
Der Code würde so aussehen, aber Sie sollten die README-Datei für dieses Paket lesen, um sicherzustellen, dass Sie wissen, wie es funktioniert:
import { getAddressBalances } from 'eth-balance-checker/lib/web3';
const address = '<your_address_here>';
const tokens = ['<token>', '<addresses>', '<here>'];
getAddressBalances(web3, address, tokens).then(balances => {
console.log(balances); // { "0x0": "100", "0x456...": "200" }
});
Listen mit Tokens, die Sie in Ihrem Projekt verwenden können, finden Sie an verschiedenen Stellen. MyCrypto hat eine ziemlich umfassende Liste: https://github.com/MyCryptoHQ/MyCrypto/blob/develop/common/config/tokens/eth.json
Alon
pabloruiz55
Alon