x
61
parameter (or (pair %mint (bytes %receiver) (address %rollup)) (pair %burn (contract %receiver unit) (ticket %ticket (pair nat (option bytes)))));storage unit;code { UNPAIR ; IF_LEFT { SWAP ; DROP ; UNPAIR ; PAIR ; DUP ; CDR ; CONTRACT (pair bytes (ticket (pair nat (option bytes)))) ; IF_NONE { PUSH string "invalid rollup" ; FAILWITH } {} ; DIP { CAR ; PUSH (pair nat (option bytes)) (Pair 0 None) ; AMOUNT ; PUSH mutez 1 ; SWAP ; EDIV ; IF_NONE { PUSH string "amount conversion failed" ; FAILWITH } { CAR } ; SWAP ; TICKET ; IF_NONE { PUSH string "zero amount deposit" ; FAILWITH } {} ; SWAP ; PAIR } ; SWAP ; PUSH mutez 0 ; SWAP ; TRANSFER_TOKENS ; NIL operation ; SWAP ; CONS ; UNIT ; SWAP ; PAIR } { SWAP ; DROP ; UNPAIR ; SWAP ; READ_TICKET ; UNPAIR 3 ; SELF_ADDRESS ; COMPARE ; EQ ; IF {} { PUSH string "unexpected ticket creator" ; FAILWITH } ; PUSH (pair nat (option bytes)) (Pair 0 None) ; COMPARE ; EQ ; IF {} { PUSH string "unexpected ticket contents" ; FAILWITH } ; DIP { DROP } ; PUSH mutez 1 ; MUL ; UNIT ; TRANSFER_TOKENS ; NIL operation ; SWAP ; CONS ; UNIT ; SWAP ; PAIR } }