我该如何以编程的方式在以太坊区块链上发现给定帐户中有多少ETH?
web3.fromWei(eth.getBalance(eth.coinbase));
web3.fromWei(web3.eth.getBalance(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;
}
}
根据文档(查看链接以获取变化),
web3.eth.getBalance("0x407d73d8a49eeb85d32cf465507dd71d507100c1")
.then(console.log);
> "1000000000000"
针对web3 API的新版本:
最新版本的web3 API(vers.beta 1.xx)使用Promise(异步,类似于回调函数)。 文档: web3 beta 1.xx
因此,它是一个Promise,并返回以wei为单位的给定地址的字符串。
我正在使用Linux(openSUSE),geth 1.7.3,Rinkeby Ethereum测试网络,使用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);
};
});
});
});
import
不受支持。所以你需要使用const Web3 = require('web3');
。 - ekkis.fromWei()
进行转换。 - ekkisEthers.js
使用Ethers.js JavaScript库,您可以使用provider.getBalance()获取账户余额。const provider =
new ethers.providers.WebSocketProvider('wss://mainnet.infura.io/ws/v3/<your_id>');
async function checkBalance() {
balance = await provider.getBalance('0x2910543af39aba0cd09dbb2d50200b3e800a63d2');
console.log(ethers.utils.formatEther(balance));
}
checkBalance();
'for-each'循环是有效的,但是获取余额的非常简短和简单的方法就是为函数添加await:
var bal = await web3.eth.getBalance(accounts[0]);
或者如果你想直接显示它:
console.log('balance = : ', await web3.eth.getBalance(accounts[0]));