Json-Rpc

如何通過 JSON-RPC 檢索我賬戶的 Augur (REP) 代幣餘額?

  • October 17, 2016

如何使用 JSON-RPC 檢查地址上的合約餘額,例如 Augur (REP)?似乎沒有很多關於此的文件。

要通過 JSON-RPC 獲取 REP 代幣餘額,您必須使用該eth_call方法。有關使用. _eth_call

agur-core/src/repContract.sebalanceOf(...)函式定義為:

def balanceOf(address: address):
   return(self.reporting[address]: uint256)

這與ERC: Token standard #20相匹配,其中balanceOf(...)函式應具有簽名:

function balanceOf(address _owner) constant returns (uint256 balance)

要在 中查找函式簽名geth,我執行以下命令:

> web3.sha3('balanceOf(address)').substring(0,10)
"0x70a08231"

例如,我們將使用地址0xab11204cfeaccffa63c2d23aef2ea9accdb0a0d5的 REP 代幣餘額,餘額如下:

在此處輸入圖像描述

我現在必須使用上面的函式簽名和要傳遞給balanceOf(...)函式的地址的左填充零表示:

0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5

etherscan.io/token/REP中,REP 合約地址為 0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5。

我對我的 Parity 節點執行了以下 JSON-RPC 命令(對於geth,您可以省略--header參數):

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5", "data": "0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5"}], "id":1}'

上面命令的結果是:

{"jsonrpc":"2.0","result":"0x000000000000000000000000000000000000000000010843f6b148a2ec22c604","id":1}

為了確認結果正確,我在中執行了以下命令geth

> new BigNumber("000000000000000000000000000000000000000000010843f6b148a2ec22c604", 16)/1e18
1247958.4593995938

您必須將十六進制結果轉換為應用程序中的數字。

2016 年 10 月 18 日更新

呼叫合約常量無效函式時 RPC 錯誤“參數無效或缺失值”中所述,您可能必須向params列表中添加塊參數。帶有 block 參數的命令將是:

curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0x48c80F1f4D53D5951e5D5438B54Cba84f29F32a5", "data": "0x70a08231000000000000000000000000ab11204cfeaccffa63c2d23aef2ea9accdb0a0d5"}, "latest"], "id":1}'

參考預設模組參數eth_call

eth_call沒有 block 參數以前工作,但現在似乎是強制性的。

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