| 1 | [ |
| 2 | "autonomous agent", |
| 3 | { |
| 4 | "doc_url": "https://raw.githubusercontent.com/jldevelops/aa-lotto-oracle/master/description.json", |
| 5 | "getters": "{ |
| 6 | $ENTRY = => params.entry > 10000 ? params.entry : 10000; |
| 7 | $TRIGGER_FEE = => params.trigger_fee > 0 ? params.trigger_fee : 1; |
| 8 | $ORACLE = => params.oracle; |
| 9 | $FEED_NAME = => params.feed_name; |
| 10 | |
| 11 | $ticketsSold = => var['trigger_pot'] / $TRIGGER_FEE(); |
| 12 | $actualWinner = => $ticketsSold() > 1 ? number_from_seed(data_feed[[oracles=$ORACLE(), feed_name=$FEED_NAME()]],$ticketsSold()-1) : 0; |
| 13 | $aaBalance = => balance[base] - storage_size - var['user_bytes']; |
| 14 | $opFee = => var['low_fee_mode'] ? 0 : 5000; |
| 15 | $ticket = $addr => var[$addr]; |
| 16 | $amountToClaim = $ti => { |
| 17 | $date = $ti[0]; |
| 18 | if(var['amount_'||$date]){ |
| 19 | $number = var['winner_'||$date]; |
| 20 | $fr = $ti[1]+0; |
| 21 | $to = $ti[2]+0; |
| 22 | if($fr <= $number AND $to > $number){ |
| 23 | $to_claim = var['amount_'||$date]; |
| 24 | } |
| 25 | } |
| 26 | $to_claim |
| 27 | }; |
| 28 | $now = => timestamp_to_string(timestamp, 'date'); |
| 29 | $day = => var['today']?var['today']:$now(); |
| 30 | $triggerAvailable = => $now() != $day() AND $ticketsSold() > 0; |
| 31 | }", |
| 32 | "init": "{ |
| 33 | $input = => trigger.output[[asset=base]]; |
| 34 | |
| 35 | if(trigger.output[[asset!=base]].asset != 'none') |
| 36 | bounce('no asset'); |
| 37 | }", |
| 38 | "messages": { |
| 39 | "cases": [ |
| 40 | { |
| 41 | "if": "{trigger.data.trigger AND $triggerAvailable() AND $input() >= 10000}", |
| 42 | "messages": [ |
| 43 | { |
| 44 | "app": "payment", |
| 45 | "payload": { |
| 46 | "asset": "base", |
| 47 | "outputs": [ |
| 48 | { |
| 49 | "address": "{trigger.address}", |
| 50 | "amount": "{var['trigger_pot'] + $input() - $opFee()}" |
| 51 | } |
| 52 | ] |
| 53 | } |
| 54 | }, |
| 55 | { |
| 56 | "app": "state", |
| 57 | "state": "{ |
| 58 | $d = $day(); |
| 59 | var['winner_'||$d] = $actualWinner(); |
| 60 | var['amount_'||$d] = var['winner_pot']; |
| 61 | var['user_bytes'] -= var['trigger_pot']; |
| 62 | var['today'] = $now(); |
| 63 | var['winner_pot'] = 0; |
| 64 | var['trigger_pot'] = 0; |
| 65 | if(var['low_fee_mode'] AND ($aaBalance() - $input()) < 50000) |
| 66 | var['low_fee_mode'] = false; |
| 67 | else{ |
| 68 | if(!var['low_fee_mode'] AND ($aaBalance() - $input()) > 100000) |
| 69 | var['low_fee_mode'] = true; |
| 70 | } |
| 71 | response['message'] = 'Winner ticket '||$d||': '||var['winner_'||$d]; |
| 72 | }" |
| 73 | } |
| 74 | ] |
| 75 | }, |
| 76 | { |
| 77 | "init": "{ |
| 78 | if($triggerAvailable()) |
| 79 | bounce('Trigger available, send trigger = 1 to win '||var['trigger_pot']||' bytes'); |
| 80 | if(trigger.data.trigger) |
| 81 | bounce('Trigger not available'); |
| 82 | $t = $ticket(trigger.address); |
| 83 | if($t){ |
| 84 | if($t[0] == $day()) |
| 85 | bounce('Address already registered'); |
| 86 | $pay = $amountToClaim($t); |
| 87 | } |
| 88 | if(!$pay AND (($input() % $ENTRY()) != 0)) |
| 89 | bounce('Amount has to be multiple of '||$ENTRY()||' bytes. An address can buy tickets once a day.'); |
| 90 | |
| 91 | }", |
| 92 | "messages": [ |
| 93 | { |
| 94 | "if": "{$pay}", |
| 95 | "app": "payment", |
| 96 | "payload": { |
| 97 | "asset": "base", |
| 98 | "outputs": [ |
| 99 | { |
| 100 | "address": "{trigger.address}", |
| 101 | "amount": "{$pay + $input() - $opFee()}" |
| 102 | } |
| 103 | ] |
| 104 | } |
| 105 | }, |
| 106 | { |
| 107 | "app": "state", |
| 108 | "state": "{ |
| 109 | if($pay){ |
| 110 | var['user_bytes'] -= var['amount_'||$t[0]]; |
| 111 | var['amount_'||$t[0]] = false; |
| 112 | var['winner_'||$t[0]] = false; |
| 113 | response['message'] = 'You won '||$t[0]||' draw. Congratulations!'; |
| 114 | } |
| 115 | else{ |
| 116 | $tickets = $input() / $ENTRY(); |
| 117 | $total_fee = $tickets * $TRIGGER_FEE(); |
| 118 | if(!var['today']) var['today'] = $now(); |
| 119 | if($ticketsSold() == 0 and $now() != $day()) var['today'] = $now(); |
| 120 | var[trigger.address] = [$day(), $ticketsSold(), ($tickets + $ticketsSold())]; |
| 121 | var['user_bytes'] += $input(); |
| 122 | var['winner_pot'] += $input() - $total_fee; |
| 123 | var['trigger_pot'] += $total_fee; |
| 124 | response['message'] = 'You bought '||$tickets||' tickets.'; |
| 125 | response['winner pot'] = var['winner_pot']; |
| 126 | response['trigger pot'] = var['trigger_pot']; |
| 127 | } |
| 128 | }" |
| 129 | } |
| 130 | ] |
| 131 | } |
| 132 | ] |
| 133 | } |
| 134 | } |
| 135 | ] |