Probleme, ein einfaches Oraclize-Beispiel zum Laufen zu bringen, Callback wurde nie ausgeführt

Ich habe versucht, den grundlegenden Smart Contract „SimpleDice“, der als Beispiel von Oraclize bereitgestellt wird, bereitzustellen und zu testen.

Ich musste es etwas anpassen, um mit Solidity 0.4.2 zu arbeiten, aber vielleicht übersehe ich etwas, vielleicht läuft Oraclize aus.

Den Smart Contract finden Sie hier: https://testnet.etherscan.io/address/0xe1b0d1eecc126b96f94cf55e6cf525ccae4bf0d8

BEARBEITEN: Ich habe auch einen zweiten Vertrag unter https://testnet.etherscan.io/address/0xe25229cc19b5044f7cbe0c20abf9972c77b1e36c mit mehr Gleichgewicht bereitgestellt, dies behebt die ungültigen Sprünge, aber ich sehe NOCH keine ausgeführten Rückrufe

Ich habe den folgenden Code (beachten Sie, dass usingOraclize.sol die Datei ist, die sich unter https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.4.sol befindet ):

pragma solidity ^0.4.2;

import "usingOraclize.sol";

contract SimpleDice is usingOraclize {
    address owner;
    mapping (bytes32 => address) bets;

    function SimpleDice(){
        owner = msg.sender;
    }

    function() payable {
        if (msg.sender != owner) throw;
    }

    function __callback(bytes32 myid, string result) {
        if (msg.sender != oraclize_cbAddress()) throw;
        if (uint(bytes(result)[0]) - 48 > 3) {
            if (bets[myid].send(2 wei)) {
                log0("winner");
            }
        }
    }

    function bet() payable {
        rollDice();
    }

    function rollDice() {
        bytes32 myid = oraclize_query("WolframAlpha", "random number between 1 and 6");
        bets[myid] = msg.sender;
    }    

    function kill(){
        if (msg.sender == owner) suicide(msg.sender);
    }
}

Dieser Code lässt sich gut kompilieren und bereitstellen. Beachten Sie jedoch die folgenden Probleme:

1) Das erste Mal, wenn ich bet() anrufe, scheint es gut zu funktionieren. ABER wie Sie vielleicht sehen, hat Oraclize nie das ausgeführt, was es tun sollte, und/oder meine __callback-Funktion nie aufgerufen

2) Die folgenden Male, wenn ich Wette calle, schlägt die Transaktion mit einem "ungültigen Sprungziel" fehl

3) Die anschließenden Anrufe kosten viel Benzin, das jedes Mal komplett verloren geht.

Hat jemand eine Ahnung, was zum Teufel los ist? Vielen Dank!

Antworten (3)

Thomas von Oraclize hier.

Das Problem hatte mit Geth zu tun und trat nur im Morden-Testnetz auf (Ereignisfilter waren alle durcheinander – das genaue Problem in Geth wird noch untersucht).

Wir haben auch paritätsbasierte Ereignis-Listener im Testnetz aktiviert – alle ausstehenden Abfragen wurden jetzt verarbeitet (einschließlich Ihrer), ich entschuldige mich für die Verzögerung.

Kommt vor, danke trotzdem! Gut zu wissen, dass ich noch nicht ganz verrückt werde ;-)
Könnte dies gerade jetzt mit dem Rinkeby-Netzwerk passieren? Ich bekomme auch keinen __callbackTrigger aus meinem Vertrag: \

Hast du mit deiner Anfrage genug Ether geschickt? Die Kosten gelten auch für Morden!

Ich hatte ähnliche Probleme und musste ca. 1 ETH mit meiner Anfrage schicken (zumindest hat es damals funktioniert, weniger hätte vielleicht gereicht, aber 1 ETH hat immer funktioniert). Das habe ich natürlich nur in Morden gemacht.

Dies kann sich seitdem geändert haben, dies sollte automatisch gehandhabt werden, wenn Sie die internen Transaktionen überprüfen, sehen Sie, dass die Gebühr gesendet wird.

Machen Sie den Konstrukteur auch zahlbar. Verweisen Sie auf den folgenden Code.

constructor() public payable{
        owner = msg.sender;
    }