Balances

如何在 Ubuntu 上的 1 行程式碼中獲取令牌的餘額

  • June 12, 2017

為了獲得地址中的乙太幣餘額,我使用下面的程式碼。(1 行)

sudo geth --exec \
 "web3.eth.getBalance('0xf6e5911696a3729a7740cbdcd64c05bc2eec60e7')" attach

我得到:165060000000000000

我需要在上面的一行中獲取令牌(例如 Golem)的餘額。無法與控制台互動。返回可以是任何東西,1 行或 JSON。

還尋找 1 行來發送令牌,如下所示:

sudo geth --exec \
 "eth.sendTransaction({from: '0xxxxxxxxxxxxxxxxxxxxxxxxxxx', \
 to: '0xxxxxxxxxxxxxxxxxxxxxxxxxx', value: '10000000000000000', \
 gas: '0x76D0', gasPrice: '0x4A817C800'})" attach

這可能嗎?

對於符合 ERC20 標準的代幣(Golem 代幣就是),要獲取給定地址的代幣餘額,您需要在代幣合約上執行名為balanceOf(address).

你不需要把它作為一個真實的交易發送到乙太坊區塊鏈,因為你的本地節點(如果它是完全同步的)已經有這個數據,並且這個函式是一個只讀方法(不改變狀態智能合約)。所以你想要的命令是eth.call(),不是eth.sendTransaction

sudo geth --exec \
 "eth.call({to: "0xNNNNN", data: "0xNNNN"})" attach

具體來說,對於 Golem 合約,“to”是0xa74476443119A942dE498590Fe1f2454d7D4aC0d,為了生成“data”變數,對於這個特定的合約互動,它將是一個 32 字節的十六進製字元串,分為兩個 16 字節的片段。第一部分是balanceOf(address)函式 ( 0x70a08231000000000000000000000000) 的函式選擇器,後半部分是要查找的地址。因此,對於您提供的範例地址:

sudo geth --exec \
 "eth.call({to: "0xa74476443119A942dE498590Fe1f2454d7D4aC0d", \
 data: "0x70a08231000000000000000000000000f6e5911696a3729a7740cbdcd64c05bc2eec60e7"})" attach

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