Kann Ethereum eine Funktion basierend auf einer Zustandsänderung automatisch ausführen?

Ich versuche, smart contracteine Funktion zu erstellen und bei Zustandsänderung auszuführen. In meinem Beispiel unten ist diese Funktion finish. Es muss automatisch ausgeführt werden, wenn die stateÄnderungen zu end. Ist das mit Solidity möglich?

pragma solidity ^0.4.16;

contract SmartContract {
  address owner;
  string state;
  string status;
  function SmartContract() public {
    status = 'Pending';
    owner = msg.sender;
  }

  event update(string _msg, string _state);

  function getState() public constant returns(string) {
    return state;
  }

  function getStatus() public constant returns(string) {
    return status;
  }

  function setState(string _state) public returns(string) {
    state = _state;
    return state;
  }

  function finish() public {
    if (keccak256(state) == keccak256("end")) {
        status = 'Completed';
        update("Completed", state);
        selfdestruct(owner);
    }
  }

  function () public payable {

  }
}
Kannst du nicht einfach hinzufügen if(_state=="end") {finish();}?

Antworten (1)

Ich bin mir ziemlich sicher, dass es nicht möglich ist, einen Smart Contract wie einen Cron zu verwenden. Ich werde mehr recherchieren und hierher zurückkehren, wenn ich mehr darüber finde.

Aber jetzt können Sie einen Job/Dienst erstellen, der Ihr Update - Ereignis beobachten könnte ( https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter ) und dann eine Transaktion ausführen, die finish() aufruft.

Oder Sie können eine if-Prüfung innerhalb von setState hinzufügen. Wenn state == "end", ausführen finish().