x
944
1063
parameter (or (or (nat %accept_trade) (or (nat %cancel_trade_proposal) (address %modify_administrator))) (or (pair %modify_admins (address %admin) (bool %isAdmin)) (or (pair %modify_denylist (address %contract) (bool %deny)) (pair %propose_trade (address %proposer) (pair (address %acceptor) (pair (mutez %mutez_amount1) (pair (mutez %mutez_amount2) (pair (list %tokens1 (pair (address %fa2) (pair (nat %id) (pair (nat %amount) (list %royalty_addresses address))))) (list %tokens2 (pair (address %fa2) (pair (nat %id) (pair (nat %amount) (list %royalty_addresses address)))))))))))));storage (pair (pair (address %administrator) (pair (map %admins address bool) (nat %counter))) (pair (big_map %denylist address bool) (pair (big_map %metadata string bytes) (big_map %trades nat (pair (pair (bool %acceptor_accepted) (bool %executed)) (pair (address %executor) (pair (pair %proposal (address %proposer) (pair (address %acceptor) (pair (mutez %mutez_amount1) (pair (mutez %mutez_amount2) (pair (list %tokens1 (pair (address %fa2) (pair (nat %id) (pair (nat %amount) (list %royalty_addresses address))))) (list %tokens2 (pair (address %fa2) (pair (nat %id) (pair (nat %amount) (list %royalty_addresses address)))))))))) (bool %proposer_accepted))))))));code { UNPAIR ; IF_LEFT { IF_LEFT { SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; MEM ; IF {} { PUSH string "The provided trade id doesn't exist" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 167 ; FAILWITH } {} ; CAR ; CDR ; IF { PUSH string "Trade already executed" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 3 ; SENDER ; COMPARE ; EQ ; IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 3 ; SELF_ADDRESS ; COMPARE ; EQ } ; IF {} { PUSH string "This can only be executed by the trade acceptor" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; CAR ; SENDER ; COMPARE ; NEQ ; IF {} { PUSH string "This can not be executed by the trade proposer" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; CAR ; CAR ; IF { PUSH string "The trade is already accepted" ; FAILWITH } {} ; SWAP ; DUP ; GET 6 ; DUP ; DUP 4 ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 259 ; FAILWITH } {} ; UNPAIR ; CDR ; PUSH bool True ; PAIR ; PAIR ; SOME ; SWAP ; UPDATE ; UPDATE 6 ; SWAP ; PUSH mutez 0 ; DUP 3 ; GET 6 ; DUP 3 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; COMPARE ; NEQ ; IF { SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "The sent tez amount does not coincide trade proposal amount with 5% royalties" ; FAILWITH } } {} ; PUSH bool True ; DUP 3 ; GET 6 ; DUP 3 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 6 ; COMPARE ; EQ ; IF { PUSH bool True ; DUP 3 ; GET 6 ; DUP 3 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; CAR ; CAR ; COMPARE ; EQ } { PUSH bool False } ; IF {} { PUSH string "Trade is not completely accepted" ; FAILWITH } ; SWAP ; DUP ; GET 6 ; DUP ; DUP 4 ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 270 ; FAILWITH } {} ; UNPAIR ; CAR ; PUSH bool True ; SWAP ; PAIR ; PAIR ; SOME ; SWAP ; UPDATE ; UPDATE 6 ; DUP ; GET 6 ; DUP ; DUP 4 ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 271 ; FAILWITH } {} ; SENDER ; UPDATE 3 ; SOME ; SWAP ; UPDATE ; UPDATE 6 ; SWAP ; PUSH nat 0 ; PUSH nat 0 ; DUP 4 ; GET 6 ; DUP 4 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 9 ; ITER { GET 6 ; SIZE ; DIG 2 ; ADD ; SWAP } ; PUSH mutez 0 ; DUP 5 ; GET 6 ; DUP 5 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; COMPARE ; NEQ ; IF { PUSH nat 0 ; DUP 3 ; COMPARE ; GT ; IF { PUSH mutez 0 ; PUSH nat 20 ; PUSH nat 1 ; DUP 7 ; GET 6 ; DUP 7 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; MUL ; EDIV ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; CAR ; DUP 6 ; GET 6 ; DUP 6 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; SUB_MUTEZ ; IF_NONE { PUSH int 289 ; FAILWITH } {} ; COMPARE ; NEQ ; IF { NIL operation ; SENDER ; CONTRACT unit ; IF_NONE { PUSH int 291 ; FAILWITH } {} ; PUSH nat 20 ; PUSH nat 1 ; DUP 8 ; GET 6 ; DUP 8 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; MUL ; EDIV ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; CAR ; DUP 7 ; GET 6 ; DUP 7 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; SUB_MUTEZ ; IF_NONE { PUSH int 291 ; FAILWITH } {} ; UNIT ; TRANSFER_TOKENS ; CONS } { NIL operation } } { NIL operation ; SENDER ; CONTRACT unit ; IF_NONE { PUSH int 293 ; FAILWITH } {} ; DUP 6 ; GET 6 ; DUP 6 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; UNIT ; TRANSFER_TOKENS ; CONS } } { NIL operation } ; DUP 5 ; GET 6 ; DUP 5 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 10 ; ITER { GET 6 ; SIZE ; DIG 2 ; ADD ; SWAP } ; PUSH mutez 0 ; DUP 6 ; GET 6 ; DUP 6 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; COMPARE ; NEQ ; IF { PUSH nat 0 ; DUP 3 ; COMPARE ; GT ; IF { PUSH mutez 0 ; PUSH nat 20 ; PUSH nat 1 ; DUP 8 ; GET 6 ; DUP 8 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; MUL ; EDIV ; IF_NONE { PUSH int 302 ; FAILWITH } {} ; CAR ; DUP 7 ; GET 6 ; DUP 7 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; SUB_MUTEZ ; IF_NONE { PUSH int 303 ; FAILWITH } {} ; COMPARE ; NEQ ; IF { DUP 5 ; GET 6 ; DUP 5 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 305 ; FAILWITH } {} ; PUSH nat 20 ; PUSH nat 1 ; DUP 8 ; GET 6 ; DUP 8 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; MUL ; EDIV ; IF_NONE { PUSH int 302 ; FAILWITH } {} ; CAR ; DUP 7 ; GET 6 ; DUP 7 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; SUB_MUTEZ ; IF_NONE { PUSH int 305 ; FAILWITH } {} ; UNIT ; TRANSFER_TOKENS ; CONS } {} } { DUP 5 ; GET 6 ; DUP 5 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; CAR ; CONTRACT unit ; IF_NONE { PUSH int 307 ; FAILWITH } {} ; DUP 6 ; GET 6 ; DUP 6 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; UNIT ; TRANSFER_TOKENS ; CONS } } {} ; DUP 5 ; GET 6 ; DUP 5 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 9 ; ITER { DUP 6 ; GET 3 ; SWAP ; DUP ; DUG 2 ; CAR ; MEM ; IF { PUSH bool False ; DUP 7 ; GET 3 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 175 ; FAILWITH } {} ; COMPARE ; EQ } { PUSH bool True } ; IF {} { PUSH string "The contract is on the denylist" ; FAILWITH } ; DUP ; DUG 2 ; CAR ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 414 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 5 ; DUP ; GET 5 ; SWAP ; DUP ; DUG 7 ; GET 3 ; SENDER ; PAIR 3 ; CONS ; DUP 10 ; GET 6 ; DUP 10 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; CAR ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; GET 6 ; ITER { PUSH mutez 0 ; DUP 6 ; PUSH nat 1 ; PUSH nat 20 ; PUSH nat 1 ; DUP 12 ; GET 6 ; DUP 12 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; MUL ; EDIV ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 322 ; FAILWITH } {} ; CAR ; COMPARE ; NEQ ; IF { DIG 2 ; SWAP ; CONTRACT unit ; IF_NONE { PUSH int 324 ; FAILWITH } {} ; DUP 5 ; PUSH nat 1 ; PUSH nat 20 ; PUSH nat 1 ; DUP 11 ; GET 6 ; DUP 11 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 5 ; MUL ; EDIV ; IF_NONE { PUSH int 288 ; FAILWITH } {} ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 322 ; FAILWITH } {} ; CAR ; UNIT ; TRANSFER_TOKENS ; CONS ; SWAP } { DROP } } ; DROP } ; DUP 5 ; GET 6 ; DUP 5 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 10 ; ITER { DUP 6 ; GET 3 ; SWAP ; DUP ; DUG 2 ; CAR ; MEM ; IF { PUSH bool False ; DUP 7 ; GET 3 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 175 ; FAILWITH } {} ; COMPARE ; EQ } { PUSH bool True } ; IF {} { PUSH string "The contract is on the denylist" ; FAILWITH } ; DUP ; DUG 2 ; CAR ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 414 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 5 ; DUP ; GET 5 ; SWAP ; DUP ; DUG 7 ; GET 3 ; DUP 12 ; GET 6 ; DUP 12 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; CAR ; PAIR 3 ; CONS ; SENDER ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; GET 6 ; ITER { PUSH mutez 0 ; DUP 5 ; PUSH nat 1 ; PUSH nat 20 ; PUSH nat 1 ; DUP 12 ; GET 6 ; DUP 12 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; MUL ; EDIV ; IF_NONE { PUSH int 302 ; FAILWITH } {} ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 339 ; FAILWITH } {} ; CAR ; COMPARE ; NEQ ; IF { DIG 2 ; SWAP ; CONTRACT unit ; IF_NONE { PUSH int 341 ; FAILWITH } {} ; DUP 4 ; PUSH nat 1 ; PUSH nat 20 ; PUSH nat 1 ; DUP 11 ; GET 6 ; DUP 11 ; GET ; IF_NONE { PUSH int 250 ; FAILWITH } {} ; GET 5 ; GET 7 ; MUL ; EDIV ; IF_NONE { PUSH int 302 ; FAILWITH } {} ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 339 ; FAILWITH } {} ; CAR ; UNIT ; TRANSFER_TOKENS ; CONS ; SWAP } { DROP } } ; DROP } ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "The operation does not need tez" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; MEM ; IF {} { PUSH string "The provided trade id doesn't exist" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 167 ; FAILWITH } {} ; CAR ; CDR ; IF { PUSH string "Trade already executed" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 358 ; FAILWITH } {} ; GET 5 ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "This can only be executed by the trade proposer" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 6 ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 358 ; FAILWITH } {} ; GET 6 ; IF {} { PUSH string "The trade was not accepted before" ; FAILWITH } ; SWAP ; DUP ; GET 6 ; DUP ; DUP 4 ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH int 366 ; FAILWITH } {} ; PUSH bool False ; UPDATE 6 ; SOME ; SWAP ; UPDATE ; UPDATE 6 ; SWAP ; PUSH mutez 0 ; DUP 3 ; GET 6 ; DUP 3 ; GET ; IF_NONE { PUSH int 358 ; FAILWITH } {} ; GET 5 ; GET 5 ; COMPARE ; NEQ ; IF { NIL operation ; SENDER ; CONTRACT unit ; IF_NONE { PUSH int 370 ; FAILWITH } {} ; DUP 4 ; GET 6 ; DIG 3 ; GET ; IF_NONE { PUSH int 358 ; FAILWITH } {} ; GET 5 ; GET 5 ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP ; NIL operation } } { SWAP ; DUP ; DUG 2 ; CAR ; GET 3 ; SENDER ; MEM ; IF { PUSH bool True ; DUP 3 ; CAR ; GET 3 ; SENDER ; GET ; IF_NONE { PUSH int 115 ; FAILWITH } {} ; COMPARE ; EQ } { PUSH bool False } ; IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; SWAP ; UNPAIR ; CDR ; DIG 2 ; PAIR ; PAIR ; NIL operation } } } { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; GET 3 ; SENDER ; MEM ; IF { PUSH bool True ; DUP 3 ; CAR ; GET 3 ; SENDER ; GET ; IF_NONE { PUSH int 115 ; FAILWITH } {} ; COMPARE ; EQ } { PUSH bool False } ; IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; SWAP ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; DUP 5 ; CDR ; SOME ; DIG 5 ; CAR ; UPDATE ; PAIR ; SWAP ; PAIR ; PAIR ; NIL operation } { IF_LEFT { SWAP ; DUP ; DUG 2 ; CAR ; GET 3 ; SENDER ; MEM ; IF { PUSH bool True ; DUP 3 ; CAR ; GET 3 ; SENDER ; GET ; IF_NONE { PUSH int 115 ; FAILWITH } {} ; COMPARE ; EQ } { PUSH bool False } ; IF { PUSH bool True } { SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_ADMIN" ; FAILWITH } ; SWAP ; DUP ; GET 3 ; DUP 3 ; CDR ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 3 ; NIL operation } { DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "This can only be executed by the trade proposer" ; FAILWITH } ; DUP ; GET 3 ; SWAP ; DUP ; DUG 2 ; CAR ; COMPARE ; NEQ ; IF {} { PUSH string "The users involved in the trade need to be different" ; FAILWITH } ; DUP ; GET 9 ; SIZE ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "At least one FA2 token needs to be traded by proposer" ; FAILWITH } ; DUP ; GET 10 ; SIZE ; PUSH nat 0 ; COMPARE ; LT ; IF {} { PUSH string "At least one FA2 token needs to be traded by acceptor" ; FAILWITH } ; DUP ; GET 5 ; PUSH mutez 0 ; COMPARE ; NEQ ; IF { DUP ; GET 5 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "The sent tez amount does not coincide trade proposal amount with 5% royalties" ; FAILWITH } } {} ; DUP ; GET 9 ; NIL operation ; SWAP ; ITER { DUP 4 ; GET 3 ; SWAP ; DUP ; DUG 2 ; CAR ; MEM ; IF { PUSH bool False ; DUP 5 ; GET 3 ; DUP 3 ; CAR ; GET ; IF_NONE { PUSH int 175 ; FAILWITH } {} ; COMPARE ; EQ } { PUSH bool True } ; IF {} { PUSH string "The contract is on the denylist" ; FAILWITH } ; DUP ; DUG 2 ; CAR ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 414 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 5 ; DUP ; GET 5 ; SWAP ; DUP ; DUG 7 ; GET 3 ; SELF_ADDRESS ; PAIR 3 ; CONS ; SENDER ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS ; SWAP ; DUP ; DUG 2 ; CAR ; CONTRACT %transfer (list (pair (address %from_) (list %txs (pair (address %to_) (pair (nat %token_id) (nat %amount)))))) ; IF_NONE { PUSH int 414 ; FAILWITH } {} ; PUSH mutez 0 ; NIL (pair address (list (pair address (pair nat nat)))) ; NIL (pair address (pair nat nat)) ; DIG 5 ; DUP ; GET 5 ; SWAP ; GET 3 ; SENDER ; PAIR 3 ; CONS ; SELF_ADDRESS ; PAIR ; CONS ; TRANSFER_TOKENS ; CONS } ; DUP 3 ; DUP ; GET 6 ; PUSH bool True ; DIG 4 ; PAIR ; SELF_ADDRESS ; PAIR ; PUSH (pair bool bool) (Pair False False) ; PAIR ; SOME ; DIG 4 ; CAR ; GET 4 ; UPDATE ; UPDATE 6 ; UNPAIR ; UNPAIR ; SWAP ; UNPAIR ; SWAP ; PUSH nat 1 ; ADD ; SWAP ; PAIR ; SWAP ; PAIR ; PAIR ; SWAP } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR }