Я пытаюсь создать 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 {
}
}
Я совершенно уверен, что невозможно использовать смарт-контракт, такой как cron. Я буду исследовать больше и вернусь сюда, если я найду больше об этом.
Но на данный момент вы можете создать задание/службу, которая могла бы наблюдать за вашим событием обновления ( https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter ), а затем выполнять транзакцию, вызывающую finish().
Или вы можете добавить проверку if внутри setState. Если состояние == "конец", выполнить finish()
.
СтаниславЛ
if(_state=="end") {finish();}
?