x
83
{ parameter (or (pair %addClaimTopic (address %caller_alias) (nat %topic)) (or (pair %removeClaimTopic (address %caller_alias) (nat %topic)) (or (pair %setOwner (address %caller_alias) (address %new_owner)) (address %setAdmin)))) ; storage (pair (set %topics nat) (pair (address %admin) (address %owner))) ; code { UNPAIR ; IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; SWAP ; DUP ; CAR ; PUSH bool True ; DIG 3 ; CDR ; UPDATE ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; DUP 2 ; CAR ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "TOPIC_NOT_FOUND" ; FAILWITH } ; SWAP ; DUP ; CAR ; PUSH bool False ; DIG 3 ; CDR ; UPDATE ; UPDATE 1 } { IF_LEFT { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; DUP 2 ; GET 4 ; DUP 2 ; CAR ; COMPARE ; NEQ ; IF { PUSH string "NOT_OWNER" ; FAILWITH } {} ; CDR ; UPDATE 4 } { DUP 2 ; GET 3 ; SENDER ; COMPARE ; NEQ ; IF { PUSH string "NOT_ADMIN" ; FAILWITH } {} ; UPDATE 3 } } } ; NIL operation ; PAIR } ; view "getClaimTopics" unit (set nat) { GET 3 } ; view "hasClaimTopic" nat bool { UNPAIR ; SWAP ; CAR ; SWAP ; MEM } }