Comment puis-je déterminer par programme combien il y a d'ETH dans un compte donné sur la blockchain Ethereum?
Sur le Web:
(Non programmatique, mais pour être complet ...) Si vous voulez juste obtenir le solde d'un compte ou d'un contrat, vous pouvez visiter http://etherchain.org ou http://etherscan.io .
Depuis les consoles geth, eth, pyeth:
En utilisant l'API Javascript (utilisée par les consoles geth, eth et pyeth), vous pouvez obtenir le solde d'un compte avec les éléments suivants:
web3.fromWei(eth.getBalance(eth.coinbase));
"web3" est le bibliothèque Web3.js compatible Javascript avec Ethereum .
"eth" est en réalité un raccourci pour "web3.eth" (disponible automatiquement dans geth). Donc, vraiment, ce qui précède devrait être écrit:
web3.fromWei(web3.eth.getBalance(web3.eth.coinbase));
"web3.eth.coinbase" est le compte par défaut de votre session de console. Vous pouvez y insérer d'autres valeurs, si vous le souhaitez. Tous les soldes des comptes sont ouverts dans Ethereum. Ex, si vous avez plusieurs comptes:
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]));
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]));
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[2]));
ou
web3.fromWei(web3.eth.getBalance('0x2910543af39aba0cd09dbb2d50200b3e800a63d2'));
EDIT: Voici un script pratique pour lister les soldes de tous vos comptes:
function checkAllBalances() { var i =0; eth.accounts.forEach( function(e){ console.log(" eth.accounts["+i+"]: " + e + " \tbalance: " + web3.fromWei(eth.getBalance(e), "ether") + " ether"); i++; })}; checkAllBalances();
Contrats internes:
Dans les contrats, Solidity offre un moyen simple d’obtenir des soldes. Chaque adresse a une propriété .balance, qui renvoie la valeur en wei. Exemple de contrat:
contract ownerbalancereturner {
address owner;
function ownerbalancereturner() public {
owner = msg.sender;
}
function getOwnerBalance() constant returns (uint) {
return owner.balance;
}
}
Pour la nouvelle version de l'API web3:
La dernière version de web3 API (vers. beta 1.xx ) utilise des promesses (asynchrones, comme callback). Documentation: web3 beta 1.xx
Par conséquent, il s'agit d'une promesse et renvoie String pour l'adresse donnée dans wei.
Je suis sur Linux (openSUSE), geth 1.7.3, Rinkeby Ethereum testnet , en utilisant Meteor 1.6.1 , et le fait fonctionner connexion suivante via fournisseur IPC à mon noeud geth:
// serverside js file
import Web3 from 'web3';
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
var net = require('net');
var web3 = new Web3('/home/xxYourHomeFolderxx/.ethereum/geth.ipc', net);
};
// set the default account
web3.eth.defaultAccount = '0x123..............';
web3.eth.coinbase = '0x123..............';
web3.eth.getAccounts(function(err, acc) {
_.each(acc, function(e) {
web3.eth.getBalance(e, function (error, result) {
if (!error) {
console.log(e + ': ' + result);
};
});
});
});