Json-Rpc
如何通過 JSON-RPC 檢索我賬戶的 Augur (REP) 代幣餘額?
如何使用 JSON-RPC 檢查地址上的合約餘額,例如 Augur (REP)?似乎沒有很多關於此的文件。
要通過 JSON-RPC 獲取 REP 代幣餘額,您必須使用該
eth_call
方法。有關使用. _eth_call
從agur-core/src/repContract.se,
balanceOf(...)
函式定義為: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
沒有 block 參數以前工作,但現在似乎是強制性的。