I'm trying to make a smart contract and have a function executed on state change. In my example below, this function is finish. It must run automatically when the state changes to end. Is this possible with 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);

  function () public payable {

  • 1
    Can't you just add if(_state=="end") {finish();}? – StanislavL Jan 10 '18 at 14:09

I am quite sure it isn´t possible to use a smart contract like a cron. I will investigate more and return here if I find more about it.

But for now, you may create a job/service that could watch your update event (https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter) and then execute a transaction calling finish().

Or you can add an if check inside setState. If state == "end", execute finish().

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.