x
798
1583
{ parameter (or (or (or (or (unit %accept_admin) (pair %balance_of (list %requests (pair (address %owner) (nat %token_id))) (contract %callback (list (pair (pair %request (address %owner) (nat %token_id)) (nat %balance)))))) (or (list %burn (pair (address %from_) (pair (nat %token_id) (nat %amount)))) (nat %cancel_listing))) (or (or (pair %collect (nat %collect_id) (nat %amount)) (pair %create_listing (nat %token_id) (pair (timestamp %start_time) (pair (option %end_time timestamp) (pair (nat %token_edition_size) (pair (mutez %token_price) (pair (nat %max_editions_per_wallet) (pair (list %sale_split (pair (address %address) (nat %royalties))) (option %special_split (list (pair (address %address) (mutez %amount)))))))))))) (or (list %create_tokens (pair (map %metadata string bytes) (list %royalties (pair (address %address) (nat %royalties))))) (or (list %mint (pair (nat %token_id) (list %recipients (pair (address %address) (nat %amount))))) (address %propose_admin))))) (or (or (or (map %set_metadata string bytes) (pair %set_pause_states (option %mint_paused bool) (pair (option %listing_paused bool) (option %collects_paused bool)))) (or (list %transfer (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) (list %update_helpers (pair (address %address) (bool %is_admin))))) (or (or (list %update_info_maps (pair (address %address) (pair (list %token_ids nat) (pair (bool %delete) (bool %is_temp))))) (list %update_operators (or (pair %add_operator (address %owner) (pair (address %operator) (nat %token_id))) (pair %remove_operator (address %owner) (pair (address %operator) (nat %token_id)))))) (or (list %update_token_metadata (pair (nat %token_id) (map %new_metadata string bytes))) (or (pair %withdraw_tez (address %address) (mutez %amount)) (pair %withdraw_token (nat %token_id) (address %receiver_address))))))) ; storage (pair (pair (pair (pair (big_map %additional_infos (pair address nat) unit) (address %admin)) (pair (bool %collects_paused) (big_map %helpers address unit))) (pair (pair (nat %last_token_id) (big_map %ledger (pair address nat) nat)) (pair (bool %listing_paused) (big_map %listings nat (pair (pair (pair (bool %active) (address %creator)) (pair (option %end_time timestamp) (pair (nat %max_editions_per_wallet) (list %sale_split (pair (address %address) (nat %royalties)))))) (pair (pair (option %special_split (list (pair (address %address) (mutez %amount)))) (timestamp %start_time)) (pair (nat %token_edition_size) (pair (nat %token_id) (mutez %token_price))))))))) (pair (pair (pair (big_map %metadata string bytes) (bool %mint_paused)) (pair (big_map %minted nat nat) (big_map %operators (pair (address %owner) (pair (address %operator) (nat %token_id))) unit))) (pair (pair (option %proposed_admin address) (big_map %supply nat nat)) (pair (big_map %temp_infos (pair address nat) unit) (pair (big_map %token_metadata nat (pair (nat %token_id) (map %token_info string bytes))) (big_map %token_royalties nat (list (pair (address %address) (nat %royalties))))))))) ; code { UNPAIR ; IF_LEFT { IF_LEFT { IF_LEFT { IF_LEFT { DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP ; GET 5 ; CAR ; IF_NONE { PUSH string "NO_ADMIN_PROPOSED" ; FAILWITH } { DROP } ; DUP ; GET 5 ; CAR ; IF_NONE { PUSH int 640 ; FAILWITH } {} ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_PROPOSED_ADMIN" ; FAILWITH } ; UNPAIR ; UNPAIR ; UNPAIR ; CAR ; SENDER ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; NONE address ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; NIL operation ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; PAIR ; EMIT %admin_accepted (pair (address %new_admin) (address %old_admin)) ; CONS } { NIL operation ; DUP ; DUP 3 ; CDR ; PUSH mutez 0 ; DUP 5 ; CAR ; MAP { DUP 7 ; GET 9 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 7 ; CAR ; GET 3 ; CDR ; DUP 2 ; CDR ; DUP 3 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SWAP ; PAIR } ; DIG 4 ; DROP ; DIG 4 ; DROP ; TRANSFER_TOKENS ; CONS } } { IF_LEFT { DUP ; ITER { DUP 3 ; GET 9 ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 3 ; GET 3 ; GET 4 ; DUP 2 ; GET 3 ; SENDER ; DUP 4 ; CAR ; PAIR 3 ; MEM } ; IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ; DUP 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 6 ; GET 4 ; DIG 8 ; CAR ; GET 3 ; CDR ; DUP 8 ; GET 3 ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; SOME ; DUP 7 ; GET 3 ; DUP 8 ; CAR ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 ; DUP ; GET 4 ; DUP 4 ; GET 5 ; CDR ; DUP 3 ; GET 3 ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; PUSH (option nat) (Some 0) ; DIG 6 ; GET 3 ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP } { DIG 3 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DIG 5 ; SOME ; DIG 6 ; GET 3 ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP } } ; DROP } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; MEM ; IF {} { PUSH string "LISTING_NOT_FOUND" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 2 ; CAR ; CAR ; GET 4 ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; NONE (pair (pair (pair bool address) (pair (option timestamp) (pair nat (list (pair address nat))))) (pair (pair (option (list (pair address mutez))) timestamp) (pair nat (pair nat mutez)))) ; DIG 6 ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR } ; NIL operation } } { IF_LEFT { IF_LEFT { DUP 2 ; CAR ; CAR ; GET 3 ; IF { PUSH string "COLLECTS_PAUSED" ; FAILWITH } {} ; PUSH nat 0 ; DUP 2 ; CDR ; COMPARE ; GT ; IF {} { PUSH string "ZERO_AMOUNT_NOT_ALLOWED" ; FAILWITH } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "COLLECT_ID_NOT_FOUND" ; FAILWITH } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; CAR ; CAR ; IF {} { PUSH string "LISTING_NOT_ACTIVE" ; FAILWITH } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 3 ; CDR ; NOW ; COMPARE ; GE ; IF {} { PUSH string "LISTING_NOT_STARTED" ; FAILWITH } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; GET 3 ; IF_NONE {} { DROP ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; GET 3 ; IF_NONE { PUSH int 265 ; FAILWITH } {} ; NOW ; COMPARE ; LT ; IF {} { PUSH string "LISTING_ENDED" ; FAILWITH } } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 5 ; DUP 2 ; CDR ; DUP 4 ; GET 3 ; GET 3 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; COMPARE ; LE ; IF {} { PUSH string "NOT_ENOUGH_EDITIONS_LEFT" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CAR ; DUP 3 ; CAR ; GET 6 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; SENDER ; PAIR ; MEM ; IF { PUSH string "RESTRICTED_COLLECT" ; FAILWITH } {} ; PUSH nat 0 ; DUP 3 ; CAR ; GET 6 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; GET 5 ; COMPARE ; NEQ ; IF { DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; GET 5 ; DUP 2 ; CDR ; DUP 4 ; CAR ; GET 3 ; CDR ; DUP 5 ; CAR ; GET 6 ; DUP 5 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; SENDER ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; COMPARE ; LE ; IF {} { PUSH string "MAX_EDITIONS_EXCEEDED" ; FAILWITH } } {} ; PUSH mutez 0 ; DUP 3 ; CAR ; GET 6 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE {} { DROP ; DUP 3 ; CAR ; GET 6 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; ITER { CDR ; DUP 3 ; CDR ; MUL ; ADD } } ; DUP ; DUP 4 ; CAR ; GET 6 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 8 ; DUP 4 ; CDR ; MUL ; ADD ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "INCORRECT_AMOUNT_SENT" ; FAILWITH } ; PUSH mutez 0 ; DUP 2 ; DUP 5 ; CAR ; GET 6 ; DUP 5 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 8 ; DUP 5 ; CDR ; MUL ; ADD ; COMPARE ; GT ; IF { DUP 3 ; CAR ; GET 6 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE { NIL operation } { DROP ; NIL operation ; DUP 4 ; CAR ; GET 6 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 3 ; CAR ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; ITER { PUSH mutez 0 ; DUP 2 ; CDR ; DUP 6 ; CDR ; MUL ; COMPARE ; GT ; IF { SWAP ; DUP 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 308 ; FAILWITH } {} ; DIG 2 ; CDR ; DUP 5 ; CDR ; MUL ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP } } } ; DUP 4 ; CAR ; GET 6 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; CAR ; GET 6 ; ITER { PUSH mutez 0 ; PUSH nat 10000 ; DUP 3 ; CDR ; DUP 8 ; CAR ; GET 6 ; DUP 8 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 8 ; DUP 8 ; CDR ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 312 ; FAILWITH } {} ; CAR ; COMPARE ; GT ; IF { SWAP ; DUP 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 314 ; FAILWITH } {} ; PUSH nat 10000 ; DIG 3 ; CDR ; DUP 7 ; CAR ; GET 6 ; DUP 7 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 8 ; DUP 7 ; CDR ; MUL ; MUL ; EDIV ; IF_NONE { PUSH int 312 ; FAILWITH } {} ; CAR ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP } } ; SWAP ; DROP } { DROP ; NIL operation } ; DUP 3 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 7 ; CDR ; DUP 9 ; CAR ; GET 3 ; CDR ; DUP 10 ; CAR ; GET 6 ; DUP 10 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; SENDER ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DIG 8 ; CAR ; GET 6 ; DUP 9 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; SENDER ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 ; DUP 3 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 7 ; CDR ; DUP 9 ; GET 5 ; CDR ; DUP 10 ; CAR ; GET 6 ; DUP 10 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DIG 8 ; CAR ; GET 6 ; DUP 9 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 2 ; DUP 3 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; DUP 7 ; CDR ; DIG 8 ; GET 3 ; GET 3 ; DUP 9 ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 8 ; CAR ; UPDATE ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; DUG 2 ; DUP 3 ; CAR ; GET 6 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 5 ; DUP 4 ; GET 3 ; GET 3 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 327 ; FAILWITH } {} ; COMPARE ; EQ ; IF { DIG 2 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP ; DUP 8 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 328 ; FAILWITH } {} ; UNPAIR ; UNPAIR ; CDR ; PUSH bool False ; PAIR ; PAIR ; PAIR ; SOME ; SWAP ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 } {} ; AMOUNT ; DUP 4 ; CAR ; GET 6 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 255 ; FAILWITH } {} ; GET 7 ; PAIR ; SENDER ; DIG 3 ; CDR ; PAIR ; PAIR ; EMIT %collect (pair (pair (nat %amount) (address %collector)) (pair (nat %token_id) (mutez %total_paid))) ; CONS } { DUP 2 ; CAR ; GET 5 ; IF { PUSH string "LISTINGS_PAUSED" ; FAILWITH } {} ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 2 ; CAR ; CAR ; GET 4 ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP 2 ; CAR ; GET 6 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "LISTING_ALREADY_EXISTS" ; FAILWITH } {} ; PUSH nat 0 ; DUP 2 ; GET 7 ; COMPARE ; GT ; IF {} { PUSH string "LIST_AT_LEAST_1_EDITION" ; FAILWITH } ; NOW ; DUP 2 ; GET 3 ; COMPARE ; GE ; IF {} { PUSH string "START_TIME_IN_PAST" ; FAILWITH } ; DUP ; GET 5 ; IF_NONE {} { DROP ; DUP ; GET 3 ; DUP 2 ; GET 5 ; IF_NONE { PUSH int 187 ; FAILWITH } {} ; COMPARE ; GT ; IF {} { PUSH string "END_TIME_BEFORE_START_TIME" ; FAILWITH } } ; PUSH nat 30 ; DUP 2 ; GET 13 ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_SALE_SPLITS" ; FAILWITH } ; PUSH nat 0 ; EMPTY_SET address ; DUP 3 ; GET 13 ; ITER { DUP 2 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "DUPLICATE_SPLIT_ADDRESS" ; FAILWITH } {} ; SWAP ; PUSH bool True ; DUP 3 ; CAR ; UPDATE ; SWAP ; DIG 2 ; SWAP ; CDR ; ADD ; SWAP } ; PUSH nat 10000 ; DUP 3 ; COMPARE ; EQ ; IF {} { PUSH string "SALE_SPLIT_NOT_100" ; FAILWITH } ; DUP 3 ; GET 14 ; IF_NONE { DROP 2 } { DROP ; SWAP ; DROP ; PUSH nat 10 ; DUP 3 ; GET 14 ; IF_NONE { PUSH int 210 ; FAILWITH } {} ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_SPECIAL_SPLITS" ; FAILWITH } ; DUP 2 ; GET 14 ; IF_NONE { PUSH int 210 ; FAILWITH } {} ; ITER { DUP 2 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "DUPLICATE_SPLIT_ADDRESS" ; FAILWITH } {} ; SWAP ; PUSH bool True ; DUP 3 ; CAR ; UPDATE ; SWAP ; CDR ; PUSH mutez 0 ; COMPARE ; LT ; IF {} { PUSH string "SOME_SPECIAL_SPLIT_IS_ZERO" ; FAILWITH } } ; DROP } ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; DUP 6 ; GET 9 ; DUP 7 ; CAR ; PAIR ; DUP 7 ; GET 7 ; PAIR ; DUP 7 ; GET 3 ; DUP 8 ; GET 14 ; PAIR ; PAIR ; DUP 7 ; GET 13 ; DUP 8 ; GET 11 ; PAIR ; DUP 8 ; GET 5 ; PAIR ; SENDER ; PUSH bool True ; PAIR ; PAIR ; PAIR ; SOME ; DUP 7 ; CAR ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; NIL operation ; SWAP ; SENDER ; PAIR ; EMIT %create_listing (pair (address %creator) (pair %listing (nat %token_id) (pair (timestamp %start_time) (pair (option %end_time timestamp) (pair (nat %token_edition_size) (pair (mutez %token_price) (pair (nat %max_editions_per_wallet) (pair (list %sale_split (pair (address %address) (nat %royalties))) (option %special_split (list (pair (address %address) (mutez %amount)))))))))))) ; CONS } } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; GET 3 ; CAR ; CDR ; IF { PUSH string "MINT_PAUSED" ; FAILWITH } {} ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; PUSH nat 20 ; DUP 2 ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_TOKENS_IN_BATCH" ; FAILWITH } ; NIL operation ; DUP 2 ; ITER { PUSH nat 40 ; DUP 2 ; CDR ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "TOO_MANY_ROYALTY_RECIPIENTS" ; FAILWITH } ; PUSH nat 0 ; EMPTY_SET address ; DUP 3 ; CDR ; ITER { DUP 2 ; DUP 2 ; CAR ; MEM ; IF { PUSH string "DUPLICATE_SPLIT_ADDRESS" ; FAILWITH } {} ; SWAP ; PUSH bool True ; DUP 3 ; CAR ; UPDATE ; SWAP ; DIG 2 ; SWAP ; CDR ; ADD ; SWAP } ; DROP ; PUSH nat 10000 ; SWAP ; COMPARE ; LE ; IF {} { PUSH string "ROYALTIES_EXCEED_MAX_PERCENTAGE" ; FAILWITH } ; DUP 4 ; CAR ; GET 3 ; CAR ; DIG 4 ; DUP ; GET 9 ; DUP 4 ; CAR ; DUP 4 ; PAIR ; SOME ; DUP 4 ; UPDATE ; UPDATE 9 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; PUSH (option nat) (Some 0) ; DUP 7 ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUP ; GET 10 ; DUP 4 ; CDR ; SOME ; DIG 3 ; UPDATE ; UPDATE 10 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; PUSH nat 1 ; ADD ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 3 ; SENDER ; PAIR ; EMIT %create_token (pair (address %creator) (pair %tokens (map %metadata string bytes) (list %royalties (pair (address %address) (nat %royalties))))) ; CONS } ; SWAP ; DROP } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; NIL operation ; DUP 2 ; ITER { DUP 4 ; GET 9 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 4 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 4 ; CAR ; CAR ; GET 4 ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP ; CDR ; ITER { DUP 5 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 6 ; CDR ; DIG 10 ; CAR ; GET 3 ; CDR ; DUP 9 ; CAR ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 8 ; CAR ; DUP 8 ; CAR ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 4 ; DUP 5 ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 6 ; CDR ; DIG 10 ; GET 5 ; CDR ; DUP 9 ; CAR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 8 ; CAR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; DUG 4 ; DIG 2 ; DUP 3 ; CAR ; DUP 3 ; CAR ; PAIR ; SENDER ; DIG 3 ; CDR ; PAIR ; PAIR ; EMIT %mint (pair (pair (nat %amount) (address %minter)) (pair (address %recipient) (nat %token_id))) ; CONS ; SWAP } ; DROP } ; SWAP ; DROP } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; CDR ; DUP 5 ; SOME ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; SWAP ; NIL operation ; SWAP ; DUP 3 ; CAR ; CAR ; CAR ; CDR ; PAIR ; EMIT %admin_proposed (pair (address %current_admin) (address %proposed_admin)) ; CONS } } } } } { IF_LEFT { IF_LEFT { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP ; ITER { DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; DUP 6 ; CDR ; SOME ; DIG 6 ; CAR ; UPDATE ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP } ; DROP ; NIL operation ; SENDER ; EMIT %metadata_updated address ; CONS } { DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 2 ; CAR ; CAR ; GET 4 ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP ; CAR ; IF_NONE {} { DROP ; SWAP ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; CAR ; DUP 5 ; CAR ; IF_NONE { PUSH int 439 ; FAILWITH } {} ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP } ; DUP ; GET 3 ; IF_NONE {} { DROP ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; CDR ; DUP 5 ; GET 3 ; IF_NONE { PUSH int 443 ; FAILWITH } {} ; PAIR ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } ; DUP ; GET 4 ; IF_NONE { DROP } { DROP ; SWAP ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; CDR ; DIG 4 ; GET 4 ; IF_NONE { PUSH int 447 ; FAILWITH } {} ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR } ; NIL operation } } { IF_LEFT { DUP ; ITER { DUP ; CDR ; ITER { DUP 4 ; CAR ; CAR ; CAR ; CAR ; DUP 2 ; GET 3 ; DUP 3 ; CAR ; PAIR ; MEM ; IF { PUSH string "RESTRICTED_TRANSFER" ; FAILWITH } {} ; DUP 4 ; GET 7 ; DUP 2 ; GET 3 ; DUP 3 ; CAR ; PAIR ; MEM ; IF { DUP 4 ; CAR ; GET 6 ; DUP 2 ; GET 3 ; GET ; IF_NONE { PUSH int 509 ; FAILWITH } {} ; CAR ; CAR ; CAR ; IF { PUSH string "SALE_ONGOING" ; FAILWITH } {} } {} ; DUP 4 ; GET 9 ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 2 ; CAR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 4 ; GET 3 ; GET 4 ; DUP 2 ; GET 3 ; SENDER ; DUP 5 ; CAR ; PAIR 3 ; MEM } ; IF {} { PUSH string "FA2_NOT_OPERATOR" ; FAILWITH } ; PUSH nat 0 ; DUP 2 ; GET 4 ; COMPARE ; GT ; IF { DUP 4 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 6 ; GET 4 ; DIG 9 ; CAR ; GET 3 ; CDR ; DUP 8 ; GET 3 ; DUP 10 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SUB ; ISNAT ; IF_NONE { PUSH string "FA2_INSUFFICIENT_BALANCE" ; FAILWITH } {} ; SOME ; DUP 7 ; GET 3 ; DUP 9 ; CAR ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 3 ; DUP 4 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; DUP 6 ; GET 4 ; DIG 9 ; CAR ; GET 3 ; CDR ; DUP 8 ; GET 3 ; DUP 9 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; ADD ; SOME ; DUP 7 ; GET 3 ; DIG 7 ; CAR ; PAIR ; UPDATE ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; PAIR ; DUG 2 } { DROP } } ; DROP } ; DROP } { DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP ; ITER { DUP ; CDR ; IF { DIG 2 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; PUSH (option unit) (Some Unit) ; DIG 6 ; CAR ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP } { DIG 2 ; UNPAIR ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; NONE unit ; DIG 6 ; CAR ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; PAIR ; SWAP } } ; DROP } ; NIL operation } } { IF_LEFT { IF_LEFT { DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 2 ; CAR ; CAR ; GET 4 ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DUP ; ITER { DUP ; GET 3 ; ITER { DUP 2 ; GET 6 ; IF { DUP 2 ; GET 5 ; IF { DIG 3 ; DUP ; GET 7 ; NONE unit ; DIG 3 ; DUP 5 ; CAR ; PAIR ; UPDATE ; UPDATE 7 ; DUG 2 } { DIG 3 ; DUP ; GET 7 ; PUSH (option unit) (Some Unit) ; DIG 3 ; DUP 5 ; CAR ; PAIR ; UPDATE ; UPDATE 7 ; DUG 2 } } { DUP 2 ; GET 5 ; IF { DIG 3 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; NONE unit ; DIG 6 ; DUP 8 ; CAR ; PAIR ; UPDATE ; PAIR ; PAIR ; PAIR ; PAIR ; DUG 2 } { DIG 3 ; UNPAIR ; UNPAIR ; UNPAIR ; UNPAIR ; PUSH (option unit) (Some Unit) ; DIG 6 ; DUP 8 ; CAR ; PAIR ; UPDATE ; PAIR ; PAIR ; PAIR ; PAIR ; DUG 2 } } } ; DROP } ; DROP } { DUP ; ITER { IF_LEFT { SENDER ; DUP 2 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DUP 3 ; CAR ; CAR ; CAR ; CAR ; DUP 2 ; GET 4 ; DUP 3 ; GET 3 ; PAIR ; MEM ; IF { PUSH string "RESTRICTED_OPERATOR" ; FAILWITH } {} ; DUP 3 ; GET 7 ; DUP 2 ; GET 4 ; DUP 3 ; GET 3 ; PAIR ; MEM ; IF { DUP 3 ; CAR ; GET 6 ; DUP 2 ; GET 4 ; GET ; IF_NONE { PUSH int 491 ; FAILWITH } {} ; CAR ; CAR ; CAR ; IF { PUSH string "SALE_ONGOING" ; FAILWITH } {} } {} ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; PUSH (option unit) (Some Unit) ; DIG 6 ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP } { SENDER ; DUP 2 ; CAR ; COMPARE ; EQ ; IF {} { PUSH string "FA2_NOT_OWNER" ; FAILWITH } ; DIG 2 ; UNPAIR ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; NONE unit ; DIG 6 ; UPDATE ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP ; PAIR ; SWAP } } ; DROP } ; NIL operation } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP ; ITER { DUP 3 ; GET 9 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 3 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { DUP 3 ; CAR ; CAR ; GET 4 ; SENDER ; MEM } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; DIG 2 ; DUP ; GET 9 ; DUP ; DUP 4 ; CAR ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 416 ; FAILWITH } {} ; DIG 4 ; CDR ; UPDATE 2 ; SOME ; SWAP ; UPDATE ; UPDATE 9 ; SWAP } ; DROP ; NIL operation } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; NIL operation ; DUP 2 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 602 ; FAILWITH } {} ; DIG 2 ; CDR ; UNIT ; TRANSFER_TOKENS ; CONS } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; DUP 2 ; CAR ; CAR ; CAR ; CDR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; PUSH nat 0 ; DUP 3 ; CAR ; GET 3 ; CDR ; DUP 3 ; CAR ; SELF_ADDRESS ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; GT ; IF {} { PUSH string "FA2_TOKEN_NOT_FOUND" ; FAILWITH } ; NIL operation ; SELF_ADDRESS ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH string "TRANSFER_EP_MISSING" ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; PUSH nat 1 ; DIG 6 ; UNPAIR ; SWAP ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } } } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR } ; view "get_balance_of" (list (pair (address %owner) (nat %token_id))) (list (pair (pair %request (address %owner) (nat %token_id)) (nat %balance))) { UNPAIR ; DUP ; MAP { DUP 3 ; GET 9 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "FA2_TOKEN_UNDEFINED" ; FAILWITH } ; DUP 3 ; CAR ; GET 3 ; CDR ; DUP 2 ; CDR ; DUP 3 ; CAR ; PAIR ; GET ; IF_NONE { PUSH nat 0 } {} ; SWAP ; PAIR } ; SWAP ; DROP ; SWAP ; DROP } ; view "token_royalties" nat (list (pair (address %address) (nat %royalties))) { UNPAIR ; SWAP ; GET 10 ; SWAP ; GET ; IF_NONE { PUSH int 687 ; FAILWITH } {} } }