5

Is there a convenient script to print out my account balances and TheDAO tokens from the go-ethereum client geth?

2 Answers 2

7

getAllBalances Including TheDAO Tokens

Here's a version of getAllBalances that also displays TheDAO tokens.

The following shell script works in the Linux and Mac environments where you are already running a geth instance that synch with the Ethereum blockchain.

This Unix shell script is based on the checkAllBalances() script from Ethereum Frontier Guide - Listing accounts and checking balances.

The JavaScript for checkAllBalances() is also available at Common useful JavaScript snippets for geth.

You can customise the geth attach command to connect via IPC or RPC (eg: geth attach rpc:http://192.168.1.52:8545).

Create the file $HOME/bin/getAllBalances with the following content:

#!/bin/sh

geth attach << EOF

function padTokens(s, n) {
  var o = s.toPrecision(n);
  while (o.length < n) {
    o = " " + o;
  }
  return o;
}

function padEthers(s) {
  var o = s.toFixed(18);
  while (o.length < 27) {
    o = " " + o;
  }
  return o;
}

function checkAllBalances() { 
  var theDAOABI = [ { "type": "function", "outputs": [ { "type": "uint256", "name": "", "value": "5e+22" } ], "name": "minTokensToCreate", "inputs": [], "constant": true }, { "type": "function", "outputs": [ { "type": "uint256", "name": "", "value": "2.668900014413644230605979e+24" } ], "name": "totalSupply", "inputs": [], "constant": true }, { "type": "function", "outputs": [ { "type": "uint256", "name": "", "value": "1464426000" } ], "name": "closingTime", "inputs": [], "constant": true }, { "type": "function", "outputs": [], "name": "refund", "inputs": [], "constant": false }, { "type": "function", "outputs": [ { "type": "address", "name": "", "value": "0xda4a4626d3e16e094de3225a751aab7128e96526" } ], "name": "curator", "inputs": [], "constant": true }, { "type": "function", "outputs": [ { "type": "uint256", "name": "balance", "value": "0" } ], "name": "balanceOf", "inputs": [ { "type": "address", "name": "_owner" } ], "constant": true }, { "type": "function", "outputs": [ { "type": "uint256", "name": "_numberOfProposals", "value": "0" } ], "name": "numberOfProposals", "inputs": [], "constant": true }, { "type": "function", "outputs": [ { "type": "address", "name": "", "value": "0x807640a13483f8ac783c557fcdf27be11ea4ac7a" } ], "name": "extraBalance", "inputs": [], "constant": true }, { "type": "function", "outputs": [ { "type": "bool", "name": "", "value": true } ], "name": "isFueled", "inputs": [], "constant": true }, { "type": "function", "outputs": [ { "type": "bool", "name": "success" } ], "name": "createTokenProxy", "inputs": [ { "type": "address", "name": "_tokenHolder" } ], "constant": false }, { "type": "function", "outputs": [ { "type": "uint256", "name": "_voteID" } ], "name": "vote", "inputs": [ { "type": "uint256", "name": "_proposalID" }, { "type": "bool", "name": "_supportsProposal" } ], "constant": false }, { "type": "event", "name": "FuelingToDate", "inputs": [ { "type": "uint256", "name": "value", "indexed": false } ], "anonymous": false }, { "type": "event", "name": "ProposalAdded", "inputs": [ { "type": "uint256", "name": "proposalID", "indexed": true }, { "type": "address", "name": "recipient", "indexed": false }, { "type": "uint256", "name": "amount", "indexed": false }, { "type": "bool", "name": "newCurator", "indexed": false }, { "type": "string", "name": "description", "indexed": false } ], "anonymous": false }, { "type": "event", "name": "ProposalTallied", "inputs": [ { "type": "uint256", "name": "proposalID", "indexed": true }, { "type": "bool", "name": "result", "indexed": false }, { "type": "uint256", "name": "quorum", "indexed": false } ], "anonymous": false } ];
  var theDAOAddress = "0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413";
  var theDAO = eth.contract(theDAOABI).at(theDAOAddress);
  var theDAOTotal = 0; 
  var ethersTotal = 0; 

  console.log("  #     Account                                        TheDAO                      ethers");
  console.log("------- ------------------------------------------ ---------- ---------------------------");
  var i =0; 
  eth.accounts.forEach( function(e){
    var tokens = theDAO.balanceOf(e) / parseFloat(1e16);
    theDAOTotal += parseFloat(tokens);
    var ethers = web3.fromWei(eth.getBalance(e), "ether");
    ethersTotal += parseFloat(ethers);
    console.log("  " + i + "\t" + e + " " + padTokens(tokens, 10) + " " + padEthers(ethers)); 
    i++; 
  })
  console.log("------- ------------------------------------------ ---------- ---------------------------");
  console.log("  " + i + "                                               " + padTokens(theDAOTotal, 10) + " " + padEthers(ethersTotal));
}; 

checkAllBalances()

exit;

EOF

Set the executable bit for this file using the command:

chmod 700 $HOME/bin/getAllBalances

Run the script using the command getAllBalances or $HOME/bin/getAllBalances to produce the following type of output:

user@Kumquat:~$ getAllBalances
instance: Geth/v1.3.6/linux/go1.5.1
 datadir: /home/user/.ethereum
coinbase: 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
at block: 1482591 (Mon, 09 May 2016 10:09:37 AEST)
modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0
undefined
undefined
undefined
  #     Account                                        TheDAO                      ethers
------- ------------------------------------------ ---------- ---------------------------
  0     0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa       1100        1.111111111111111111
  1     0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb       2200        2.222222222222222222
  2     0xcccccccccccccccccccccccccccccccccccccccc       3300        3.333333333333333333
------- ------------------------------------------ ---------- ---------------------------
  3                                                      6600        6.666666666666666666
undefined
4

getAllBalances For Ethers Only

The following shell script works in the Linux and Mac environments where you are already running a geth instance that synch with the Ethereum blockchain.

This Unix shell script uses the checkAllBalances() script from Ethereum Frontier Guide - Listing accounts and checking balances.

You can customise the geth attach command to connect via IPC or RPC (eg: geth attach rpc:http://192.168.1.52:8545).

Create the file $HOME/bin/getAllBalances with the following content:

#!/bin/sh

geth attach << EOF

function checkAllBalances() { 
  var i =0; 
  var total = 0.0;
  eth.accounts.forEach( function(e){
    total += parseFloat(eth.getBalance(e));
    console.log("  eth.accounts["+i+"]: " +  e + " \tbalance: " +
      web3.fromWei(eth.getBalance(e), "ether") + " ether"); 
    i++; 
  })
  console.log("total: " + web3.fromWei(total), "ether");
}; 

checkAllBalances()

exit;

EOF

Set the executable bit for this file using the command:

chmod 700 $HOME/bin/getAllBalances

Run the script using the command getAllBalances or $HOME/bin/getAllBalances to produce the following type of output:

user@Kumquat:~$ getAllBalances 
instance: Geth/v1.3.6/linux/go1.5.1
 datadir: /home/user/.ethereum
coinbase: 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
at block: 1454325 (Wed, 04 May 2016 17:33:00 AEST)
modules: admin:1.0 db:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 shh:1.0 txpool:1.0 web3:1.0
undefined
  eth.accounts[0]: 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   balance: 1.11111111111111111 ether
  eth.accounts[1]: 0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb   balance: 2.22222222222222222 ether
  eth.accounts[2]: 0xcccccccccccccccccccccccccccccccccccccccc   balance: 3.33333333333333333 ether
total: 6.666666666666 ether
undefined

user@Kumquat:~$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.