Oracle gibt keine Daten zurück, wenn ein Beispielvertrag verwendet wird

Ich versuche, die Oraclize-Beispielverträge unter https://github.com/oraclize/ethereum-examples/tree/master/solidity zu verwenden , einschließlich KrakenPriceTicker.sol. Hier ist mein Vertrag (sehr leicht modifiziert):

pragma solidity ^0.4.0;
import "github.com/oraclize/ethereum-api/oraclizeAPI_0.4.sol";

contract KrakenPriceTicker is usingOraclize {

    string public ETHXBT;
    uint public timesCalled;
    uint public timesFailed;

    event newOraclizeQuery(string description);
    event newKrakenPriceTicker(string price);


    function KrakenPriceTicker() payable {
        oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS);
    }

    function __callback(bytes32 myid, string result, bytes proof) {
        ETHXBT = result;
        newKrakenPriceTicker(ETHXBT);
        update();
    }

    function update() payable {
        if (oraclize_getPrice("URL") > this.balance) {
            newOraclizeQuery("Oraclize query was NOT sent, please add some ETH to cover for the query fee");
            timesFailed++;
        } else {
            newOraclizeQuery("Oraclize query was sent, standing by for the answer..");
            oraclize_query(60, "URL", "json(https://api.kraken.com/0/public/Ticker?pair=ETHXBT).result.XETHXXBT.c.0");
            timesCalled++;
        }
    }

}

Wenn die update()Funktion aufgerufen und etwas Äther und Gas mitgeschickt wird, sollte sie die kraken.com-API aufrufen und den Wert von ETHXBTmit dem aktualisieren, was zurückgegeben wird. Der Wert von ETHXBTist jedoch immer leer. Ich weiß, dass der oraclize_queryaufgerufen wird, weil die timesCalledVariable inkrementiert. Es scheint also ein Problem mit dem zurückgegebenen Ergebnis zu geben, obwohl ein direkter Aufruf von https://api.kraken.com/0/public/Ticker?pair=ETHXBT zeigt, dass es kein Problem geben sollte.

Ich habe den obigen Vertrag unter https://ropsten.etherscan.io/address/0x2c51daecf702f2afe3abee2cc84570ee17f75650 bereitgestellt (ich habe mehrmals versucht anzurufen update()).

Antworten (2)

Es sieht so aus, als ob die Abfrage auf der Oraclize-Testseite funktioniert. Sie können sehen, wie es hier funktioniert . Es hat eine Anfrage wie:

json(https://api.kraken.com/0/public/Ticker?pair=ETHXBT).result.XETHXXBT.c[0]

mit einer Antwort von0.068000

Es scheint, dass Ihre Syntax falsch ist, wenn Sie .result.XETHXXBT.c.0statt verwenden, .result.XETHXXBT.c[0]da das Ergebnis ein Array und kein benannter Schlüssel ist0

Das Problem war, dass das Ropsten-Testnetzwerk, das ich verwendete, Probleme hatte. Ich glaube, der Code, den ich gepostet habe, sollte normalerweise gut laufen.