Go-Ethereum

呼叫合約常量無效函式時出現 RPC 錯誤“參數無效或缺失值”

  • January 16, 2017

我的合約有一個這樣定義的函式:

{"constant":true,"inputs":[],"name":"queryNumEscrows","outputs":
[{"name":"","type":"uint256"}],"payable":false,"type":"function"}

沒有輸入。它的 Solidity 原始碼非常簡單:

function queryNumEscrows() constant returns (uint) {
   return numEscrows;
}

如何從 JSON RPC 呼叫它?我試過這個:

endpoint = "queryNumEscrows()" 
web3_sha3(endpoint) = 0x0127efc52bcbe2b7f6d6a1ee29a7acd32c5f2e824b791cd7c97b9c57981bc5ac
no arguments...
data = 0x0127efc5

並在執行查詢時:

eth_call([{"from": "0xf28dafbfeb41bf32869c9d498da0d651d0206ed4", "to":
"0x27c042342c9ba937214117e11a4970a6145034cb", "data": "0x0127efc5"}])

這是它拋出的錯誤:

-32602: params 的值無效或缺失

$$ 1 $$

所以,我想在將 void 參數編碼為數據時可能有問題。我該怎麼做?

順便說一句,我使用了這個很好的解釋:How to call a contract method using the eth_call JSON-RPC API as a reference。

概括

按照已關閉錯誤eth_call的建議將塊號添加到eth_callJSON-RPC 呼叫參數需要塊,因為最後一個參數 #2472將起作用。


細節

我使用 Browser Solidity 創建了一個合約,如下面的螢幕截圖所示: 在此處輸入圖像描述

這是我的結果:

Iota:ESE bok$ curl localhost:8545 -X POST --header 'Content-type: application/json' --data '{"jsonrpc":"2.0", "method":"eth_call", "params":[{"to": "0xb82020341122e7c8c4ba6551fd25950681af3570", "data": "0x0127efc5"}, "latest"], "id":1}'
{"jsonrpc":"2.0","id":1,"result":"0x000000000000000000000000000000000000000000000000000000000000007b"}

參考預設模組參數eth_call

eth_call沒有 block 參數以前工作過。我更新了舊的 ESEeth_call使用問答,添加了有關此新要求的註釋。

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