Может ли Ethereum автоматически выполнять функцию на основе изменения состояния?

Я пытаюсь создать smart contractи выполнить функцию при изменении состояния. В моем примере ниже это функция finish. Он должен запускаться автоматически при stateизменении на end. Возможно ли это с Solidity?

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 {

  }
}
Нельзя ли просто добавить if(_state=="end") {finish();}?

Ответы (1)

Я совершенно уверен, что невозможно использовать смарт-контракт, такой как cron. Я буду исследовать больше и вернусь сюда, если я найду больше об этом.

Но на данный момент вы можете создать задание/службу, которая могла бы наблюдать за вашим событием обновления ( https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter ), а затем выполнять транзакцию, вызывающую finish().

Или вы можете добавить проверку if внутри setState. Если состояние == "конец", выполнить finish().