54

如何以编程方式发现以太坊区块链上给定账户中有多少 ETH?

4

4 回答 4

71

在网上:

(不是程序化的,而是为了完整性......)如果你只是想获得一个账户或合约的余额,你可以访问http://etherchain.orghttp://etherscan.io

从 geth、eth、pyeth 控制台:

使用 Javascript API(这是 geth、eth 和 pyeth 控制台使用的),您可以通过以下方式获取帐户余额:

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

“web3”是与以太坊兼容的 Javascript 库 web3.js

“eth”实际上是“web3.eth”的简写(在 geth 中自动可用)。所以,真的,上面应该写成:

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

“web3.eth.coinbase”是您控制台会话的默认帐户。如果您愿意,您可以为其插入其他值。所有账户余额都在以太坊中开放。例如,如果您有多个帐户:

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

编辑:这是一个方便的脚本,用于列出所有帐户的余额:

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;
    }
}
于 2015-08-31T14:10:57.787 回答
3

文档中,(查看链接以了解变体)

web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1")
.then(console.log);
> "1000000000000"
于 2021-02-14T20:42:01.560 回答
1

对于新版本的 web3 API:

最新版本的web3 API(版本beta 1.xx)使用承诺(异步,如回调)。文档:web3 beta 1.xx

因此它是一个 Promise 并返回 wei 中给定地址的字符串。

我在Linux (openSUSE), geth 1.7.3, Rinkeby Ethereum testnet 上,使用Meteor 1.6.1,并通过IPC Provider连接到我的 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);
        };
      });
    });
  });
于 2018-01-13T00:32:14.473 回答
0

'for-each' 循环有效,但获得平衡的一种非常简单的方法是简单地为函数添加等待

var bal = await web3.eth.getBalance(accounts[0]);

或者如果你想直接显示它:

console.log('balance = : ', await web3.eth.getBalance(accounts[0]));
于 2020-09-29T13:02:24.127 回答