x
199
{ parameter (or (pair %addCountry (address %caller_alias) (nat %country_code)) (or (pair %removeCountry (address %caller_alias) (nat %country_code)) (or (pair %bindMC (address %caller_alias) (address %mc_addr)) (or (pair %bindIR (address %caller_alias) (address %ir_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_mc) (pair (address %bound_ir) (big_map %allowed_countries nat unit)))))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; SWAP ; DUP ; GET 10 ; UNIT ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 10 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "CA_COUNTRY_NOT_FOUND" ; FAILWITH } ; SWAP ; DUP ; GET 10 ; NONE unit ; DIG 3 ; CDR ; UPDATE ; UPDATE 10 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 7 ; COMPARE ; EQ ; IF {} { PUSH string "CA_MC_ALREADY_BOUND" ; FAILWITH } ; CDR ; UPDATE 7 } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; GET 5 ; DUP 3 ; GET 9 ; COMPARE ; EQ ; IF {} { PUSH string "CA_IR_ALREADY_BOUND" ; FAILWITH } ; CDR ; UPDATE 9 } { IF_LEFT { DROP ; DUP ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_MC" ; FAILWITH } {} } { IF_LEFT { DROP ; DUP ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_MC" ; FAILWITH } {} } { IF_LEFT { DROP ; DUP ; GET 7 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_MC" ; FAILWITH } {} } { IF_LEFT { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 3 } { DUP 2 ; CAR ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "CA_NOT_ADMIN" ; FAILWITH } {} ; UPDATE 1 } } } } } } } } ; NIL operation ; PAIR } ; view "moduleCheck" (pair (address %from_) (pair (address %to_) (nat %amount))) bool { UNPAIR ; DUP 2 ; GET 5 ; DUP 3 ; GET 9 ; COMPARE ; EQ ; IF { DROP 2 ; PUSH bool False } { DUP 2 ; GET 9 ; DUP 2 ; CAR ; VIEW "countryOf" nat ; IF_NONE { PUSH bool False } { DUP 3 ; GET 10 ; SWAP ; MEM } ; IF { DUP 2 ; GET 9 ; SWAP ; GET 3 ; VIEW "countryOf" nat ; IF_NONE { DROP ; PUSH bool False } { SWAP ; GET 10 ; SWAP ; MEM } } { DROP 2 ; PUSH bool False } } } ; view "isAllowed" nat bool { UNPAIR ; SWAP ; GET 10 ; SWAP ; MEM } ; view "getMCBound" unit address { GET 9 } ; view "getIRBound" unit address { GET 11 } }