/ test / contracts / oracle_register_response.aes
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