x
377
parameter (or (or (pair %createVotingPeriod (pair (nat %votingPeriod) (nat %startLevel)) (pair (nat %endLevel) (map %delegators address nat))) (set %updateManagers address)) (or (pair %updateVotingParams (pair (nat %votingPeriod) (nat %startLevel)) (pair (nat %endLevel) (map %delegators address nat))) (pair %vote (nat %votingPeriod) (or %votingValue (unit %nay) (unit %yea)))));storage (pair (set %managers address) (big_map %votes nat (pair (pair (map %ballots address string) (pair %params (pair (map %delegators address nat) (nat %end)) (nat %start))) (map %results string (pair (nat %count) (nat %weight))))));code { DUP ; CDR ; PUSH mutez 0 ; AMOUNT ; COMPARE ; NEQ ; IF { DROP 2 ; PUSH string "This contract does not accept tez" ; FAILWITH } { SWAP ; CAR ; IF_LEFT { IF_LEFT { DUP ; CDR ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; CAR ; DUP 3 ; CAR ; CDR ; PAIR ; DIG 2 ; CAR ; CAR ; DIG 3 ; PAIR ; PAIR ; PAIR ; DUP ; CAR ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; PUSH bool True ; DUP 3 ; CAR ; SENDER ; MEM ; COMPARE ; NEQ ; IF { DROP 3 ; PUSH string "Only managers are allowed to perform this operation" ; FAILWITH } { SWAP ; DUP ; DUG 2 ; CDR ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE {} { DROP ; PUSH string "Voting period aleady configured for the provided period" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CDR ; EMPTY_MAP string (pair nat nat) ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; SOME ; PUSH string "yea" ; UPDATE ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; SOME ; PUSH string "total" ; UPDATE ; PUSH nat 0 ; PUSH nat 0 ; PAIR ; SOME ; PUSH string "nay" ; UPDATE ; DUP 5 ; CAR ; CDR ; CAR ; DUP 6 ; CAR ; CDR ; CDR ; DIG 6 ; CDR ; PAIR ; PAIR ; EMPTY_MAP address string ; PAIR ; PAIR ; DIG 2 ; SWAP ; SOME ; SWAP ; UPDATE ; SWAP ; CAR ; PAIR } } { PUSH bool True ; DUP 3 ; CAR ; SENDER ; MEM ; COMPARE ; NEQ ; IF { DROP 2 ; PUSH string "Only managers are allowed to perform this operation" ; FAILWITH } { PUSH nat 0 ; SWAP ; DUP ; DUG 2 ; SIZE ; COMPARE ; EQ ; IF { DROP 2 ; PUSH string "At least one manager must be assigned to the contract" ; FAILWITH } { SWAP ; CDR ; SWAP ; PAIR } } } } { IF_LEFT { DUP ; CDR ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; CAR ; DUP 3 ; CAR ; CDR ; PAIR ; DIG 2 ; CAR ; CAR ; DIG 3 ; PAIR ; PAIR ; PAIR ; DUP ; CAR ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; CDR ; PUSH bool True ; DUP 3 ; CAR ; SENDER ; MEM ; COMPARE ; NEQ ; IF { DROP 3 ; PUSH string "Only managers are allowed to perform this operation" ; FAILWITH } { SWAP ; DUP ; DUG 2 ; CDR ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH string "No voting period configured for the provided period" ; FAILWITH } {} ; DUP 3 ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; DUP 6 ; CAR ; CDR ; CAR ; DUP 7 ; CAR ; CDR ; CDR ; DIG 7 ; CDR ; PAIR ; PAIR ; DIG 3 ; CAR ; CAR ; PAIR ; PAIR ; SOME ; DIG 2 ; UPDATE ; SWAP ; CAR ; PAIR } } { UNPAIR ; DIG 2 ; PAIR ; PAIR ; DUP ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; SWAP ; DUP ; DUG 2 ; CDR ; SWAP ; DUP ; DUG 2 ; GET ; IF_NONE { PUSH string "No voting period configured for the provided period" ; FAILWITH } {} ; LEVEL ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CDR ; COMPARE ; GT ; IF { DROP 4 ; PUSH string "Voting period has not started yet" ; FAILWITH } { LEVEL ; SWAP ; DUP ; DUG 2 ; CAR ; CDR ; CAR ; CDR ; COMPARE ; LT ; IF { DROP 4 ; PUSH string "Voting period ended" ; FAILWITH } { DIG 3 ; CDR ; IF_LEFT { DROP ; PUSH string "nay" } { DROP ; PUSH string "yea" } ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SENDER ; GET ; IF_NONE {} { DROP ; PUSH string "A ballot has already been cast for this account" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; CAR ; CAR ; SWAP ; DUP ; DUG 2 ; SOME ; SENDER ; PAIR ; PAIR ; DUP 3 ; CAR ; CDR ; CAR ; CAR ; SENDER ; GET ; IF_NONE { PUSH string "This account was not a delegator in the active snapshot" ; FAILWITH } {} ; DUP 4 ; CDR ; DUP 4 ; GET ; IF_NONE { PUSH string "Invalid ballot submitted" ; FAILWITH } { SWAP ; DUP ; DUG 2 ; SWAP ; DUP ; DUG 2 ; CDR ; ADD ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; PAIR } ; DUP 5 ; CDR ; PUSH string "total" ; GET ; IF_NONE { SWAP ; DROP ; PUSH string "Invalid action" ; FAILWITH } { DIG 2 ; SWAP ; DUP ; DUG 2 ; CDR ; ADD ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; PAIR } ; DUP 7 ; CDR ; DUP 6 ; CDR ; DIG 3 ; SOME ; DIG 5 ; UPDATE ; DIG 2 ; SOME ; PUSH string "total" ; UPDATE ; DIG 3 ; CAR ; CDR ; DIG 3 ; UNPAIR ; UNPAIR ; UPDATE ; PAIR ; PAIR ; SOME ; DIG 2 ; UPDATE ; SWAP ; CAR ; PAIR } } } } ; NIL operation ; PAIR } }