Dies ist der Vertragscode. Ich habe die „Oraclize-API“ (oraclizeAPI_0.4.sol) aus dem Oraclize-Github-Repo heruntergeladen. Ich habe diese Datei zum Ordner „Trüffelverträge“ hinzugefügt und die Datei in „using Oraclize.sol“ umbenannt. Und das ist es in den gegebenen Vertrag importiert.
pragma solidity ^0.4.0;
import "./usingOraclize.sol";
contract ApiCall is usingOraclize {
uint public DieselPriceUSD;
function DieselPrice() {
OAR = OraclizeAddrResolverI(0x920cd3f7ed02c5d61e2556308d53a4d9d1e58bf2);
}
function __callback(bytes32 myid, string result) {
if (msg.sender != oraclize_cbAddress()) throw;
DieselPriceUSD = parseInt(result, 2);
}
function update() payable {
oraclize_query("URL", "xml(https://www.fueleconomy.gov/ws/rest/fuelprices).fuelPrices.diesel");
}
}
Ich habe diesen Vertrag erfolgreich zusammengestellt und bereitgestellt. Dann versucht, die verfügbaren Methoden mit dem folgenden aufzurufen.
contract.getCall().then(console.log);
Aber es gibt den folgenden Fehler zurück.
Error: VM Exception while processing transaction: invalid JUMP at 7ed62a9ee27ba25842c0facef792865de53617fe32c09b7eb974a8bca5dd54c0/b8cd3e9aaf13b8823aa83f0f47f235943dac31c6:692
Wie rufe ich die _callback-Funktion in diesem Vertrag mit den Parametern auf? Was bedeuten diese Parameter in diesem _callback?
Wie verwende ich diesen _callback in index.js in Trüffel?
Ich glaube, Sie haben hier ein Problem. Sie glauben , dass Ihr Konstruktor es ist function DieselPrice()
, obwohl es tatsächlich nicht Ihr Konstruktor ist , weil Ihr Vertrag aufgerufen wird contract ApiCall
.
Ihr OAR
ist also immer null.
Außerdem sind die Ethereum-Netzwerke von Oraclize nur für Testnetz und Hauptnetz. Nicht TestRPC natürlich.
__callback
, das ist es, was sie tun und wofür Sie sie bezahlen. Warum rufst du an __callback
? Liegt es daran, dass Sie Tests machen?
Xavier Leprêtre B9lab
Crissi Mariam Robert
Crissi Mariam Robert