Json-Rpc

Eth_call 通過 oraclize

  • March 16, 2018

所以我在 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 請求有一些問題:

  1. 由於缺少大括號和錯誤放置的方括號,JSON 格式不正確。
  2. data欄位中包含錯誤的函式選擇器。
  3. data領域缺少領先0x
  4. data欄位的長度錯誤。儘管不需要用零填充,但只要長度正確,*就可以這樣做。*你有奇數位數(71)。

這是一個有效的 JSON 有效負載:

{
   "id": 3,
   "jsonrpc": "2.0",
   "method": "eth_call",
   "params": [
       {
           "data": "0xad3b80a8",
           "to": "0x76a83b371ab7232706eac16edf2b726f3a2dbe82"
       },
       "latest"
   ]
}

POSThttps://ropsten.infura.ioresult生成為0x0000000000000000000000000000000000000000000000000000000000000011(十進制的 17)。

這裡有一個工作Oraclize查詢:http://app.oraclize.it/home/test_query#VVJMKFBPU1Qp:anNvbihodHRwczovL3JvcHN0ZW4uaW5mdXJhLmlvLykucmVzdWx0:IHsianNvbnJwYyI6IjIuMCIsImlkIjozLCJtZXRob2QiOiJldGhfY2FsbCIsInBhcmFtcyI6W3sidG8iOiIweDc2YTgzYjM3MWFiNzIzMjcwNmVhYzE2ZWRmMmI3MjZmM2EyZGJlODIiLCJkYXRhIjoiMHhhZDNiODBhOCJ9LCAibGF0ZXN0Il19

出於好奇,使用 Oraclize 而不是直接呼叫合約的原因是什麼?你在做合約之間的跨鏈通信嗎?

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