x
222
{ parameter (or (pair %addModule (address %caller_alias) (address %mod_addr)) (or (pair %removeModule (address %caller_alias) (address %mod_addr)) (or (pair %bindToken (address %caller_alias) (address %token_addr)) (or (pair %transferred (address %from_) (pair (address %to_) (nat %amount))) (or (pair %created (address %to_) (nat %amount)) (or (pair %destroyed (address %from_) (nat %amount)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin)))))))) ; storage (pair (address %admin) (pair (address %owner) (pair (address %admin_sentinel) (pair (address %bound_token) (pair (list %modules address) (big_map %bound_modules address unit)))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 10 ; DUP 2 ; CDR ; MEM ; IF { DROP } { DUP 2 ; DUP 3 ; GET 9 ; DUP 3 ; CDR ; CONS ; UPDATE 9 ; DIG 2 ; GET 10 ; UNIT ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 } ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 10 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "MC_MODULE_NOT_BOUND" ; FAILWITH } ; NIL address ; DUP 3 ; GET 9 ; ITER { SWAP ; DUP 3 ; CDR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP } { SWAP ; CONS } } ; NIL address ; SWAP ; ITER { CONS } ; DUP 3 ; SWAP ; UPDATE 9 ; DIG 2 ; GET 10 ; NONE unit ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 ; NIL operation } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 7 ; COMPARE ; EQ ; IF {} { PUSH string "MC_ALREADY_BOUND" ; FAILWITH } ; CDR ; UPDATE 7 ; NIL operation } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_TOKEN" ; FAILWITH } {} ; NIL operation ; DUP 3 ; GET 9 ; ITER { CONTRACT %transferred (pair (address %from_) (pair (address %to_) (nat %amount))) ; IF_NONE { PUSH string "MC_MODULE_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_TOKEN" ; FAILWITH } {} ; NIL operation ; DUP 3 ; GET 9 ; ITER { CONTRACT %created (pair (address %to_) (nat %amount)) ; IF_NONE { PUSH string "MC_MODULE_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { IF_LEFT { DUP 2 ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_TOKEN" ; FAILWITH } {} ; NIL operation ; DUP 3 ; GET 9 ; ITER { CONTRACT %destroyed (pair (address %from_) (nat %amount)) ; IF_NONE { PUSH string "MC_MODULE_HOOK_NOT_FOUND" ; FAILWITH } {} ; PUSH mutez 0 ; DUP 4 ; TRANSFER_TOKENS ; CONS } ; SWAP ; DROP } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 3 } { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "MC_NOT_ADMIN" ; FAILWITH } {} ; UPDATE 1 } ; NIL operation } } } } } } ; PAIR } ; view "canTransfer" (pair (address %from_) (pair (address %to_) (nat %amount))) bool { UNPAIR ; PUSH bool True ; DIG 2 ; GET 9 ; ITER { SWAP ; IF { DUP 2 ; VIEW "moduleCheck" bool ; IF_NONE { PUSH bool False } {} } { DROP ; PUSH bool False } } ; SWAP ; DROP } ; view "getModules" unit (list address) { GET 11 } ; view "isModuleBound" address bool { UNPAIR ; SWAP ; GET 10 ; SWAP ; MEM } ; view "getTokenBound" unit address { GET 9 } }