Go-Ethereum

如何從 geth 列印我的賬戶餘額和 TheDAO 代幣

  • May 11, 2016

是否有一個方便的腳本可以從 go-ethereum 客戶端列印出我的賬戶餘額和TheDAOgeth代幣?

getAllBalances包括 TheDAO 代幣

這是一個getAllBalances也顯示TheDAO令牌的版本。

以下 shell 腳本適用於您已經在執行geth與乙太坊區塊鏈同步的實例的 Linux 和 Mac 環境。

這個 Unix shell 腳本基於Ethereum Frontier Guide 中的腳本 - 列出賬戶和檢查checkAllBalances()餘額。

JavaScript forcheckAllBalances()也可在geth 的常用 JavaScript 片段中找到

您可以自定義geth attach命令以通過 IPC 或 RPC 進行連接(例如:geth attach rpc:http://192.168.1.52:8545)。

創建$HOME/bin/getAllBalances具有以下內容的文件:

#!/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

使用以下命令設置此文件的可執行位:

chmod 700 $HOME/bin/getAllBalances

使用命令執行腳本getAllBalances$HOME/bin/getAllBalances生成以下類型的輸出:

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

引用自:https://ethereum.stackexchange.com/questions/3570