RPC-Fehler „ungültiger oder fehlender Wert für Parameter“ beim Aufrufen von void-Funktionen für Vertragskonstanten

Mein Vertrag hat eine Funktion, die wie folgt definiert ist:

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

Keine Eingänge haben. Sein Solidity-Quellcode ist ziemlich einfach:

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

Wie rufe ich es von JSON RPC aus auf? Ich habe das versucht:

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

und beim Ausführen der Abfrage:

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

Dies ist der Fehler, den es auslöst:

-32602: ungültiger oder fehlender Wert für Parameter[1]

Ich denke also, dass beim Codieren von void-Parametern in Daten wahrscheinlich etwas nicht stimmt. Wie soll ich das machen?

Übrigens habe ich diese großartige Erklärung verwendet: How to call a contract method using the eth_call JSON-RPC API as a reference.

Antworten (1)

Zusammenfassung

Das Hinzufügen der Blocknummer zu den eth_callJSON-RPC-Aufrufparametern, wie vom geschlossenen Fehler eth_call vorgeschlagen, erfordert den Block als letzten Parameter #2472 wird funktionieren.



Einzelheiten

Ich habe einen Vertrag mit Browser Solidity erstellt, wie im folgenden Screenshot gezeigt:Geben Sie hier die Bildbeschreibung ein

Und hier ist mein Ergebnis:

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"}

Referenz Die Standardblockparameter und eth_call.

eth_callohne den Blockparameter hat vorher funktioniert. Ich habe meine alten ESE-Fragen und Antworten zur eth_callVerwendung aktualisiert, um einen Hinweis zu dieser neuen Anforderung hinzuzufügen.

Vielen Dank! Jetzt funktioniert es perfekt!