oracle_register_response.aes
1 contract HailstormReportOracle = 2 record state = {fee : int, 3 oracle : option(oracle(string * int, bool)) 4 } 5 6 entrypoint init() : state = 7 {fee = 0, 8 oracle = None} 9 10 stateful entrypoint register(ttl: int) = 11 let o = Oracle.register(Contract.address, state.fee, RelativeTTL(ttl)) : oracle(string * int, bool) 12 put(state{ oracle = Some(o) }) 13 14 stateful entrypoint report_hailstorm(city : string, timestamp : int, had_storm : bool, response_ttl : int) = 15 assert_owner() 16 switch(state.oracle) 17 None => abort("no_oracle_yet") 18 Some(oracle) => 19 let query = Oracle.query(oracle, (city, timestamp), state.fee, RelativeTTL(10), RelativeTTL(response_ttl)) 20 Oracle.respond(oracle, query, had_storm) 21 query 22 23 stateful entrypoint withdraw(amount: int) = 24 assert_owner() 25 Chain.spend(Contract.creator, amount) 26 27 stateful payable entrypoint donate() = 28 "ok" 29 30 function assert_owner() = 31 if(Call.caller != Contract.creator) 32 abort("not_service_provider") 33