Alle 24 Stunden automatisch eine Vertragsfunktion aufrufen? [Duplikat]

Ich möchte, dass mein Smart Contract alle 24 Stunden automatisch eine Funktion aufruft. Kann dies wie folgt erreicht werden?

pragma solidity ^0.4.2;    

import "http://github.com/oraclize/ethereum-api/oraclizeAPI_0.4.sol";

contract MyContract is usingOraclize {

    function callThisToStart() {
        oraclize_query(1*day, "URL", "");
    }

    function __callback(bytes32 myid, string result) {
        if (msg.sender != oraclize_cbAddress()) throw;
        doSomething();
        callThisToStart();
    }

    function doSomething() {
        // then this should run every 24 hours
    }

}

Ich verstehe noch nicht, wie Oracle funktioniert, daher kann dies völlig falsch sein - callThisToStart()würde aufgerufen werden, was dann __callbackeinen Tag später die Funktion ausführen würde, die dann Code ausführen doSomething()und danach aufrufen callThisToStart()würde, sodass der Vorgang an einem Tag wiederholt würde.

Antworten (1)

Es sollte funktionieren. Schauen Sie sich dieses Beispiel an .

Das Beispiel fügt nur eine saubere Überprüfung hinzu:

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