Json-Rpc
Eth_call 通過 oraclize
所以我在 Ropsten 上部署了一個契約,現在我試圖通過 Infura 和 Oraclize 使用 JSON RPC 呼叫訪問公共變數。
這是我的契約:contract test_contract { uint public last_a;
function double(uint a) public returns(uint) { last_a = a; return 2*a; } function getLastA() public constant returns(uint){ return last_a; } function getMethod() public constant returns(bytes4){ return bytes4(keccak256("getLastA())")); } }
行。所以我使用 getMethod 獲取方法 getLastA,將其填充到 32,在 Ropsten 上獲取合約地址……現在這是我的電話:
url post - json(https://ropsten.infura.io/).result params - {"jsonrpc":"2.0","id":3,"method":"eth_call","params":[{"to":"0x76a83b371ab7232706eac16edf2b726f3a2dbe82","data":"4b9a1598000000000000000000000000000000000000000000000000000000000000000"], "latest"}
你可以在這裡查看我的 oraclize 查詢
只是想知道我是否做錯了什麼,或者這是否可能。如果其他人認為他們有答案,它應該返回的值是 17。
您的 HTTP 請求有一些問題:
- 由於缺少大括號和錯誤放置的方括號,JSON 格式不正確。
- 該
data
欄位中包含錯誤的函式選擇器。- 該
data
領域缺少領先0x
。- 該
data
欄位的長度錯誤。儘管不需要用零填充,但只要長度正確,*就可以這樣做。*你有奇數位數(71)。這是一個有效的 JSON 有效負載:
{ "id": 3, "jsonrpc": "2.0", "method": "eth_call", "params": [ { "data": "0xad3b80a8", "to": "0x76a83b371ab7232706eac16edf2b726f3a2dbe82" }, "latest" ] }
POST
將https://ropsten.infura.io
其result
生成為0x0000000000000000000000000000000000000000000000000000000000000011
(十進制的 17)。出於好奇,使用 Oraclize 而不是直接呼叫合約的原因是什麼?你在做合約之間的跨鏈通信嗎?