¿Puede Ethereum ejecutar una función automáticamente en función de un cambio de estado?

Estoy tratando de hacer una smart contractfunción y ejecutarla en el cambio de estado. En mi ejemplo a continuación, esta función es finish. Debe ejecutarse automáticamente cuando statecambia a end. ¿Es esto posible con 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 {

  }
}
¿No puedes simplemente agregar if(_state=="end") {finish();}?

Respuestas (1)

Estoy bastante seguro de que no es posible usar un contrato inteligente como un cron. Investigaré más y volveré aquí si encuentro más al respecto.

Pero por ahora, puede crear un trabajo/servicio que pueda ver su evento de actualización ( https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter ) y luego ejecutar una transacción que llame a finish().

O puede agregar un control if dentro de setState. Si estado == "finalizar", ejecutar finish().