x
106
parameter (or (unit %buy_ticket) (nat %end_game));storage (pair (pair (nat %max_tickets) (address %operator)) (pair (map %players nat address) (pair (mutez %ticket_cost) (nat %tickets_available))));code { UNPAIR ; IF_LEFT { DROP ; DUP ; CAR ; CDR ; SENDER ; COMPARE ; NEQ ; IF {} { PUSH string "Operator cannot but tickets." ; FAILWITH } ; DUP ; GET 6 ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "No Tickets Available." ; FAILWITH } ; DUP ; GET 5 ; AMOUNT ; COMPARE ; GE ; IF {} { PUSH string "Invalid Amount" ; FAILWITH } ; DUP ; DUP ; GET 3 ; SENDER ; SOME ; DIG 3 ; GET 3 ; SIZE ; UPDATE ; UPDATE 3 ; DUP ; PUSH nat 1 ; DIG 2 ; GET 6 ; SUB ; ISNAT ; IF_NONE { PUSH int 27 ; FAILWITH } {} ; UPDATE 6 ; NIL operation } { PUSH nat 0 ; DUP 3 ; GET 6 ; COMPARE ; EQ ; IF {} { PUSH string "Tickets still Available" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "Only operator can end game" ; FAILWITH } ; NIL operation ; DIG 2 ; DUP ; GET 3 ; SWAP ; DUP ; DUG 4 ; CAR ; CAR ; DIG 3 ; EDIV ; IF_NONE { PUSH int 36 ; FAILWITH } { CDR } ; GET ; IF_NONE { PUSH int 39 ; FAILWITH } {} ; CONTRACT unit ; IF_NONE { PUSH int 42 ; FAILWITH } {} ; PUSH mutez 2000000 ; BALANCE ; SUB_MUTEZ ; IF_NONE { PUSH int 42 ; FAILWITH } {} ; UNIT ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CONTRACT unit ; IF_NONE { PUSH int 44 ; FAILWITH } {} ; PUSH mutez 2000000 ; UNIT ; TRANSFER_TOKENS ; CONS ; SWAP ; EMPTY_MAP nat address ; UPDATE 3 ; DUP ; CAR ; CAR ; UPDATE 6 ; SWAP } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR }