Ich habe also einen Vertrag auf Ropsten bereitgestellt und versuche jetzt, mit einem JSON-RPC-Aufruf über Infura und Oraclize auf die öffentliche Variable zuzugreifen.
Hier ist mein Vertrag: 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())"));
}
}
OK. Also bekomme ich die Methode getLastA mit der getMethod, fülle sie auf 32 auf, bekomme die Vertragsadresse auf Ropsten ... und jetzt ist dies mein Aufruf:
url post - json(https://ropsten.infura.io/).result
params - {"jsonrpc":"2.0","id":3,"method":"eth_call","params":[{"to":"0x76a83b371ab7232706eac16edf2b726f3a2dbe82","data":"4b9a1598000000000000000000000000000000000000000000000000000000000000000"], "latest"}
Sie können meine Oraclize-Abfrage hier sehen
Ich frage mich nur, ob ich etwas falsch mache oder ob dies überhaupt möglich ist. Der Wert, den es zurückgeben sollte, ist 17, wenn jemand anderes glaubt, eine Antwort zu haben.
Bei Ihrer HTTP-Anfrage sind einige Fehler aufgetreten:
data
Feld enthielt den falschen Funktionsselektor.data
Feld fehlte die Führung 0x
.data
Feld hatte die falsche Länge. Obwohl es nicht notwendig ist, mit Nullen aufzufüllen, können Sie dies tun, solange Sie die richtige Länge haben. Sie hatten eine ungerade Anzahl von Ziffern (71).Hier ist eine gültige JSON-Nutzlast:
{
"id": 3,
"jsonrpc": "2.0",
"method": "eth_call",
"params": [
{
"data": "0xad3b80a8",
"to": "0x76a83b371ab7232706eac16edf2b726f3a2dbe82"
},
"latest"
]
}
POST
Dies ergibt https://ropsten.infura.io
a result
von 0x0000000000000000000000000000000000000000000000000000000000000011
(17 in Dezimalzahl).
Here's a working Oraclize query: http://app.oraclize.it/home/test_query#VVJMKFBPU1Qp:anNvbihodHRwczovL3JvcHN0ZW4uaW5mdXJhLmlvLykucmVzdWx0:IHsianNvbnJwYyI6IjIuMCIsImlkIjozLCJtZXRob2QiOiJldGhfY2FsbCIsInBhcmFtcyI6W3sidG8iOiIweDc2YTgzYjM3MWFiNzIzMjcwNmVhYzE2ZWRmMmI3MjZmM2EyZGJlODIiLCJkYXRhIjoiMHhhZDNiODBhOCJ9LCAibGF0ZXN0Il19 .
Aus Neugier, was ist der Grund dafür, Oraclize zu verwenden, anstatt nur den Vertrag direkt aufzurufen? Führen Sie eine kettenübergreifende Kommunikation zwischen Verträgen durch?
das Fett
das Fett
Benutzer19510
return this.getLastA.selector
.das Fett