x
65
{ parameter (or (lambda %lambda unit (list operation)) (or %update_admin (unit %confirm_new_admin) (address %set_new_admin))) ; storage (pair (pair %admin (address %current_admin) (option %pending_admin address)) (address %mt_contract)) ; code { UNPAIR ; IF_LEFT { DUP 2 ; CAR ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "SENDER_NOT_ADMIN" ; FAILWITH } {} ; SWAP ; UNIT ; DIG 2 ; SWAP ; EXEC ; PAIR } { PUSH mutez 0 ; AMOUNT ; COMPARE ; NEQ ; IF { PUSH string "NO_TEZ_EXPECTED" ; FAILWITH } {} ; DUP 2 ; CDR ; UNIT ; VIEW "whitelist_contract" address ; IF_NONE { PUSH string "CALL_MT_WHITELIST_VIEW_FAILED" ; FAILWITH } {} ; NIL address ; SENDER ; CONS ; VIEW "are_whitelisted" bool ; IF_NONE { PUSH string "CALL_ARE_WHITELISTED_VIEW_FAILED" ; FAILWITH } {} ; IF { DUP 2 ; CAR ; SWAP ; IF_LEFT { DROP ; CDR ; IF_NONE { PUSH string "NO_PENDING_ADMIN" ; FAILWITH } { DUP ; SENDER ; COMPARE ; NEQ ; IF { DROP ; PUSH string "NOT_PENDING_ADMIN" ; FAILWITH } { NONE address ; SWAP ; PAIR } } } { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "SENDER_NOT_ADMIN" ; FAILWITH } {} ; SOME ; UPDATE 2 } ; NIL operation ; DUG 2 ; UPDATE 1 ; SWAP ; PAIR } { DROP 2 ; PUSH string "ADDRESS_NOT_WHITELISTED" ; FAILWITH } } } ; view "admin" unit address { CDR ; CAR ; CAR } }