Как получить баланс счета в Ethereum?

Как я могу программно узнать, сколько ETH находится в заданной учетной записи в блочной цепочке Ethereum?

Ответы

Ответ 1

В Интернете:

(Не является программным, но для полноты...) Если вы просто хотите получить баланс учетной записи или контракта, вы можете посетить http://etherchain.org или http://etherscan.io.

Из консолей geth, eth, pyeth:

Используя Javascript API (это то, что использует geth, eth и pyeth консолей), вы можете получить баланс учетной записи со следующим:

web3.fromWei(eth.getBalance(eth.coinbase)); 

"web3" - это библиотека, поддерживающая Ethereum, web3.js.

"eth" на самом деле является сокращением для "web3.eth" (автоматически доступно в geth). Итак, на самом деле, выше следует написать:

web3.fromWei(web3.eth.getBalance(web3.eth.coinbase));

"web3.eth.coinbase" - это учетная запись по умолчанию для сеанса консоли. Если хотите, вы можете подключить к нему другие значения. Все остатки на счетах открыты в Ethereum. Например, если у вас несколько учетных записей:

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]));

или

web3.fromWei(web3.eth.getBalance('0x2910543af39aba0cd09dbb2d50200b3e800a63d2'));

EDIT: здесь удобный script для перечисления остатков всех ваших учетных записей:

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();

Внутренние контракты:

Внутри контрактов Solidity обеспечивает простой способ получения остатков. Каждый адрес имеет свойство .balance, которое возвращает значение в wei. Пример контракта:

contract ownerbalancereturner {

    address owner;

    function ownerbalancereturner() public {
        owner = msg.sender; 
    }

    function getOwnerBalance() constant returns (uint) {
        return owner.balance;
    }
}

Ответ 2

Для новой версии API web3:

В последней версии web3 API (версия beta 1.xx) используется promises (асинхронный, например, обратный вызов). Dokumentation: web3 beta 1.xx

Следовательно, это Promise и возвращает String для заданного адреса в wei.

Я нахожусь в Linux (openSUSE), geth 1.7.3, Rinkeby Ethereum testnet, используя Meteor 1.6.1, и получил его для работы следующим образом: поставщик IPC подключился к моему geth node:

// 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);
        };
      });
    });
  });