x
884
1663
{ parameter (or (address %trigger_kernel_upgrade) (or (string %vote) (or (bytes %upvote_proposal) (bytes %new_proposal)))) ; storage (pair (pair %config (nat %started_at_level) (pair (nat %period_length) (pair (nat %adoption_period_sec) (pair (nat %upvoting_limit) (pair (nat %scale) (pair (nat %proposal_quorum) (pair (nat %promotion_quorum) (pair (nat %promotion_supermajority) (address %delegation_contract))))))))) (pair (option %voting_context (pair (nat %period_index) (or %period (pair %proposal (big_map %upvoters_upvotes_count key_hash nat) (pair (big_map %upvoters_proposals (pair key_hash bytes) unit) (pair (big_map %proposals bytes (pair (set %proposers key_hash) (nat %upvotes_voting_power))) (pair (option %max_upvotes_voting_power nat) (pair (option %winner_candidate bytes) (nat %total_voting_power)))))) (pair %promotion (big_map %voters key_hash string) (pair (nat %yea_voting_power) (pair (nat %nay_voting_power) (pair (nat %pass_voting_power) (pair (nat %total_voting_power) (bytes %winner_candidate))))))))) (pair (option %last_winner (pair (bytes %payload) (big_map %trigger_history address unit))) (big_map %metadata string bytes)))) ; code { PUSH string "NOT_PROPOSAL_PERIOD" ; PUSH string "NOT_PROMOTION_PERIOD" ; PUSH string "UPVOTING_LIMIT_EXCEEDED" ; PUSH string "PROPOSAL_ALREADY_UPVOTED" ; PUSH string "PROMOTION_ALREADY_VOTED" ; LAMBDA (pair nat nat) bytes { UNPAIR ; PUSH nat 56 ; DUP 2 ; COMPARE ; LT ; IF { ADD ; BYTES } { BYTES ; DUP ; SIZE ; PUSH nat 9 ; DUP 2 ; COMPARE ; LT ; IF {} { PUSH string "INPUT_TOO_LONG_FOR_RLP" ; FAILWITH } ; SWAP ; PUSH nat 55 ; DIG 3 ; DIG 3 ; ADD ; ADD ; BYTES ; CONCAT } } ; LAMBDA unit unit { DROP ; PUSH string "TEZ_IN_TRANSACTION_DISALLOWED" ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF { DROP ; UNIT } { FAILWITH } } ; LAMBDA nat unit { PUSH nat 0 ; SWAP ; COMPARE ; GT ; IF { UNIT } { PUSH string "NO_VOTING_POWER" ; FAILWITH } } ; LAMBDA (pair nat (pair nat (pair nat (pair nat (pair nat (pair nat (pair nat (pair nat address)))))))) nat { DUP ; CAR ; LEVEL ; SUB ; ISNAT ; IF_NONE { DROP ; PUSH string "CURRENT_LEVEL_LESS_THAN_START_LEVEL" ; FAILWITH } { SWAP ; GET 3 ; SWAP ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } } ; LAMBDA address (list key_hash) { SELF_ADDRESS ; SOME ; SENDER ; PAIR ; VIEW "list_voters" (list key_hash) ; IF_NONE { PUSH string "ASSERTION_FAILURE_DELEGATION_CONTRACT_MISSING_OR_INCONSISTENT" ; FAILWITH } { SENDER ; DUP ; PACK ; PUSH bytes 0x00 ; DUP 2 ; PUSH nat 1 ; PUSH nat 6 ; SLICE ; IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ; COMPARE ; EQ ; IF {} { PUSH string "NOT_IMPLICIT_ADDRESS" ; FAILWITH } ; NIL bytes ; DUP 2 ; PUSH nat 21 ; PUSH nat 7 ; SLICE ; IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ; CONS ; PUSH bytes 0x00000015 ; CONS ; SWAP ; PUSH nat 2 ; PUSH nat 0 ; SLICE ; IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ; CONS ; CONCAT ; UNPACK key_hash ; PUSH string "FAILED_TO_CAST_ADDRESS_TO_KEY_HASH" ; SWAP ; IF_NONE { FAILWITH } { SWAP ; DROP } ; PUSH string "KEY_HASH_NOT_EQUAL_TO_SOURCE_ADDRESS" ; DIG 2 ; DUP 3 ; IMPLICIT_ACCOUNT ; ADDRESS ; COMPARE ; EQ ; IF { DROP } { FAILWITH } ; CONS } } ; DIG 10 ; UNPAIR ; IF_LEFT { DIG 2 ; DIG 4 ; DIG 7 ; DIG 8 ; DIG 9 ; DIG 10 ; DIG 11 ; DROP 7 ; UNIT ; DIG 4 ; SWAP ; EXEC ; DROP ; DUP 2 ; CAR ; DIG 3 ; SWAP ; EXEC ; DUP 3 ; GET 3 ; IF_NONE { NONE (pair nat (pair (or unit unit) (option bytes))) ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DIG 2 ; PAIR } { DUP ; CAR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP } { DUP 4 ; CAR ; DUP 2 ; CDR ; IF_LEFT { DUP 2 ; GET 11 ; DUP 2 ; GET 10 ; MUL ; DIG 2 ; GET 9 ; DUP 3 ; GET 7 ; IF_NONE { PUSH nat 0 } {} ; MUL ; COMPARE ; GE ; IF { DUP ; GET 9 } { NONE bytes } ; IF_NONE { GET 7 ; IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ; IF { NONE bytes ; UNIT ; LEFT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME } { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) } ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } { SWAP ; DROP ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; DUP ; DUP 4 ; COMPARE ; EQ ; IF { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP ; TOTAL_VOTING_POWER ; PUSH nat 0 ; PUSH nat 0 ; PUSH nat 0 ; EMPTY_BIG_MAP key_hash string ; PAIR 6 ; RIGHT (pair (big_map key_hash nat) (pair (big_map (pair key_hash bytes) unit) (pair (big_map bytes (pair (set key_hash) nat)) (pair (option nat) (pair (option bytes) nat))))) } { SWAP ; DROP ; NONE bytes ; UNIT ; RIGHT unit ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } } } { UNPAIR 6 ; DROP ; DIG 3 ; DUP 6 ; GET 13 ; MUL ; DUP 6 ; GET 9 ; DIG 4 ; DUP 5 ; DUP 5 ; ADD ; ADD ; MUL ; COMPARE ; GE ; DIG 2 ; DUP 3 ; ADD ; DUP ; DUP 6 ; GET 15 ; MUL ; DIG 5 ; GET 9 ; DIG 4 ; MUL ; COMPARE ; GE ; PUSH nat 0 ; DIG 2 ; COMPARE ; GT ; AND ; AND ; IF { SOME } { DROP ; NONE bytes } ; UNIT ; RIGHT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } ; DIG 2 ; PAIR } } ; DUP 2 ; DIG 2 ; IF_NONE { DUP 4 ; GET 5 } { GET 4 ; IF_NONE { DUP 4 ; GET 5 } { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ; DIG 2 ; SWAP ; IF_NONE { PUSH string "LAST_WINNER_NOT_FOUND" ; FAILWITH } {} ; DUP ; CDR ; DUP 5 ; MEM ; NOT ; IF {} { PUSH string "UPGRADE_FOR_ADDRESS_ALREADY_TRIGGERED" ; FAILWITH } ; DUP 4 ; CONTRACT (or (or (pair %d bytes (ticket (pair nat (option bytes)))) (bytes %a)) (bytes %u)) ; IF_NONE { PUSH string "ROLLUP_ENTRYPOINT_NOT_FOUND" ; FAILWITH } {} ; DUP 6 ; CAR ; GET 5 ; INT ; NOW ; ADD ; PUSH timestamp 0 ; SWAP ; SUB ; ISNAT ; PUSH string "NEGATIVE_TIMESTAMP" ; SWAP ; IF_NONE { FAILWITH } { SWAP ; DROP } ; BYTES ; PUSH bytes 0x ; PUSH int 1 ; PUSH int 1 ; DUP 4 ; SIZE ; SUB ; PUSH int 0 ; DUP 2 ; DUP 2 ; COMPARE ; LE ; LOOP { DUP ; DUG 3 ; DIP 3 { ISNAT ; PUSH string "INDEX_NOT_NAT" ; SWAP ; IF_NONE { FAILWITH } { SWAP ; DROP } ; SWAP ; DUP 3 ; PUSH nat 1 ; DIG 3 ; SLICE ; IF_NONE { PUSH string "SLICE" ; FAILWITH } {} ; CONCAT } ; DUP 3 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LE } ; DROP 3 ; SWAP ; DROP ; DUP ; SIZE ; INT ; PUSH int 1 ; PUSH int 1 ; PUSH nat 8 ; SUB ; DIG 2 ; DUP 2 ; DUP 2 ; COMPARE ; LE ; LOOP { DUP ; DUG 3 ; DIP 3 { DROP ; PUSH bytes 0x00 ; SWAP ; CONCAT } ; DUP 3 ; ADD ; DUP 2 ; DUP 2 ; COMPARE ; LE } ; DROP 3 ; NIL bytes ; SWAP ; CONS ; DUP 3 ; CAR ; CONS ; MAP { DUP ; SIZE ; PUSH bytes 0x80 ; DUP 3 ; COMPARE ; LT ; PUSH nat 1 ; DUP 3 ; COMPARE ; EQ ; AND ; IF { DROP ; PUSH bytes 0x } { PUSH nat 128 ; SWAP ; PAIR ; DUP 9 ; SWAP ; EXEC } ; CONCAT } ; CONCAT ; PUSH nat 192 ; DUP 2 ; SIZE ; PAIR ; DIG 8 ; SWAP ; EXEC ; CONCAT ; RIGHT (or (pair bytes (ticket (pair nat (option bytes)))) bytes) ; SWAP ; PUSH mutez 0 ; DIG 2 ; TRANSFER_TOKENS ; DIG 3 ; IF_NONE { NIL operation } { NIL operation ; SWAP ; EMIT %voting_finished (pair (nat %finished_at_period_index) (pair (or %finished_at_period_type (unit %proposal) (unit %promotion)) (option %winner_proposal_payload bytes))) ; CONS } ; DIG 5 ; DIG 4 ; SOME ; UPDATE 3 ; DUP 4 ; DIG 4 ; CDR ; UNIT ; SOME ; DIG 6 ; UPDATE ; UPDATE 2 ; SOME ; UPDATE 5 ; SWAP ; DIG 2 ; CONS } { DIG 6 ; DROP ; IF_LEFT { DIG 7 ; DIG 8 ; DIG 10 ; DROP 3 ; UNIT ; DIG 6 ; SWAP ; EXEC ; DROP ; DUP 2 ; CAR ; DIG 4 ; SWAP ; EXEC ; DUP 3 ; GET 3 ; IF_NONE { NONE (pair nat (pair (or unit unit) (option bytes))) ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DIG 2 ; PAIR } { DUP ; CAR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP } { DUP 4 ; CAR ; DUP 2 ; CDR ; IF_LEFT { DUP 2 ; GET 11 ; DUP 2 ; GET 10 ; MUL ; DIG 2 ; GET 9 ; DUP 3 ; GET 7 ; IF_NONE { PUSH nat 0 } {} ; MUL ; COMPARE ; GE ; IF { DUP ; GET 9 } { NONE bytes } ; IF_NONE { GET 7 ; IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ; IF { NONE bytes ; UNIT ; LEFT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME } { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) } ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } { SWAP ; DROP ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; DUP ; DUP 4 ; COMPARE ; EQ ; IF { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP ; TOTAL_VOTING_POWER ; PUSH nat 0 ; PUSH nat 0 ; PUSH nat 0 ; EMPTY_BIG_MAP key_hash string ; PAIR 6 ; RIGHT (pair (big_map key_hash nat) (pair (big_map (pair key_hash bytes) unit) (pair (big_map bytes (pair (set key_hash) nat)) (pair (option nat) (pair (option bytes) nat))))) } { SWAP ; DROP ; NONE bytes ; UNIT ; RIGHT unit ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } } } { UNPAIR 6 ; DROP ; DIG 3 ; DUP 6 ; GET 13 ; MUL ; DUP 6 ; GET 9 ; DIG 4 ; DUP 5 ; DUP 5 ; ADD ; ADD ; MUL ; COMPARE ; GE ; DIG 2 ; DUP 3 ; ADD ; DUP ; DUP 6 ; GET 15 ; MUL ; DIG 5 ; GET 9 ; DIG 4 ; MUL ; COMPARE ; GE ; PUSH nat 0 ; DIG 2 ; COMPARE ; GT ; AND ; AND ; IF { SOME } { DROP ; NONE bytes } ; UNIT ; RIGHT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } ; DIG 2 ; PAIR } } ; SWAP ; DROP ; DUP 3 ; CAR ; GET 16 ; DIG 4 ; SWAP ; EXEC ; DUP 2 ; CDR ; IF_LEFT { DROP ; DUP 7 ; FAILWITH } {} ; PUSH nat 0 ; EMPTY_MAP key_hash nat ; PAIR ; DIG 2 ; ITER { SWAP ; UNPAIR ; DUP 3 ; VOTING_POWER ; DUP 5 ; CAR ; DUP 5 ; MEM ; NOT ; NOT ; PUSH nat 0 ; DUP 3 ; COMPARE ; EQ ; OR ; IF { DIG 3 ; DROP ; DIG 2 ; ADD ; SWAP } { DIG 2 ; DUP 2 ; ADD ; DUG 2 ; SOME ; DIG 3 ; UPDATE } ; PAIR } ; SWAP ; DROP ; UNPAIR ; SWAP ; DIG 5 ; SWAP ; EXEC ; DROP ; PUSH nat 0 ; DUP 2 ; SIZE ; COMPARE ; GT ; IF {} { DUP 5 ; FAILWITH } ; DUP 2 ; SWAP ; ITER { UNPAIR ; DIG 2 ; CDR ; IF_LEFT { DROP ; DUP 7 ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; MEM ; NOT ; IF {} { DUP 7 ; FAILWITH } ; PUSH string "yea" ; DUP 6 ; COMPARE ; EQ ; IF { DUP ; DIG 3 ; DUP 3 ; GET 3 ; ADD ; UPDATE 3 } { PUSH string "nay" ; DUP 6 ; COMPARE ; EQ ; IF { DUP ; DIG 3 ; DUP 3 ; GET 5 ; ADD ; UPDATE 5 } { PUSH string "pass" ; DUP 6 ; COMPARE ; EQ ; IF { DUP ; DIG 3 ; DUP 3 ; GET 7 ; ADD ; UPDATE 7 } { DIG 2 ; DROP ; PUSH string "INCORRECT_VOTE_VALUE" ; FAILWITH } } } ; SWAP ; CAR ; DUP 5 ; SOME ; DIG 3 ; UPDATE ; UPDATE 1 ; RIGHT (pair (big_map key_hash nat) (pair (big_map (pair key_hash bytes) unit) (pair (big_map bytes (pair (set key_hash) nat)) (pair (option nat) (pair (option bytes) nat))))) ; DUP 2 ; SWAP ; UPDATE 2 } ; SWAP ; DIG 2 ; DIG 4 ; DIG 5 ; DROP 4 ; SOME ; UPDATE 3 ; NIL operation } { DIG 6 ; DIG 9 ; DROP 2 ; IF_LEFT { UNIT ; DIG 6 ; SWAP ; EXEC ; DROP ; DUP 2 ; CAR ; DIG 4 ; SWAP ; EXEC ; DUP 3 ; GET 3 ; IF_NONE { NONE (pair nat (pair (or unit unit) (option bytes))) ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DIG 2 ; PAIR } { DUP ; CAR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP } { DUP 4 ; CAR ; DUP 2 ; CDR ; IF_LEFT { DUP 2 ; GET 11 ; DUP 2 ; GET 10 ; MUL ; DIG 2 ; GET 9 ; DUP 3 ; GET 7 ; IF_NONE { PUSH nat 0 } {} ; MUL ; COMPARE ; GE ; IF { DUP ; GET 9 } { NONE bytes } ; IF_NONE { GET 7 ; IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ; IF { NONE bytes ; UNIT ; LEFT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME } { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) } ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } { SWAP ; DROP ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; DUP ; DUP 4 ; COMPARE ; EQ ; IF { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP ; TOTAL_VOTING_POWER ; PUSH nat 0 ; PUSH nat 0 ; PUSH nat 0 ; EMPTY_BIG_MAP key_hash string ; PAIR 6 ; RIGHT (pair (big_map key_hash nat) (pair (big_map (pair key_hash bytes) unit) (pair (big_map bytes (pair (set key_hash) nat)) (pair (option nat) (pair (option bytes) nat))))) } { SWAP ; DROP ; NONE bytes ; UNIT ; RIGHT unit ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } } } { UNPAIR 6 ; DROP ; DIG 3 ; DUP 6 ; GET 13 ; MUL ; DUP 6 ; GET 9 ; DIG 4 ; DUP 5 ; DUP 5 ; ADD ; ADD ; MUL ; COMPARE ; GE ; DIG 2 ; DUP 3 ; ADD ; DUP ; DUP 6 ; GET 15 ; MUL ; DIG 5 ; GET 9 ; DIG 4 ; MUL ; COMPARE ; GE ; PUSH nat 0 ; DIG 2 ; COMPARE ; GT ; AND ; AND ; IF { SOME } { DROP ; NONE bytes } ; UNIT ; RIGHT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } ; DIG 2 ; PAIR } } ; DUP 2 ; DIG 2 ; IF_NONE { DUP 4 ; GET 5 } { GET 4 ; IF_NONE { DUP 4 ; GET 5 } { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ; DIG 2 ; DUP ; CDR ; IF_LEFT {} { DROP ; DUP 10 ; FAILWITH } ; DUP 6 ; CAR ; GET 16 ; DIG 7 ; SWAP ; EXEC ; PUSH bool False ; PUSH nat 0 ; EMPTY_MAP key_hash nat ; PAIR 3 ; SWAP ; ITER { SWAP ; UNPAIR 3 ; DUP 4 ; VOTING_POWER ; DUP 11 ; CAR ; GET 7 ; DUP 7 ; CAR ; DUP 7 ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; LT ; NOT ; PUSH nat 0 ; DUP 3 ; COMPARE ; EQ ; OR ; IF { DIG 4 ; DROP ; DIG 3 ; DIG 3 ; DIG 2 ; ADD ; DIG 2 } { DUP 6 ; GET 3 ; DUP 11 ; DUP 7 ; PAIR ; MEM ; IF { DIG 3 ; DIG 4 ; DROP 2 ; PUSH bool True ; DIG 3 ; DIG 2 ; ADD ; DIG 2 } { DIG 3 ; DIG 3 ; DUP 3 ; ADD ; DIG 3 ; DIG 3 ; SOME ; DIG 4 ; UPDATE } } ; PAIR 3 } ; SWAP ; DROP ; UNPAIR 3 ; SWAP ; DIG 8 ; SWAP ; EXEC ; DROP ; PUSH nat 0 ; DUP 2 ; SIZE ; COMPARE ; GT ; IF { SWAP ; DROP } { SWAP ; IF { DUP 7 } { DUP 8 } ; FAILWITH } ; DUP 2 ; SWAP ; ITER { UNPAIR ; DIG 2 ; CDR ; IF_LEFT {} { DROP ; DUP 10 ; FAILWITH } ; DUP ; CAR ; DUP 9 ; CAR ; GET 7 ; DUP 2 ; DUP 5 ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; LT ; IF {} { DUP 11 ; FAILWITH } ; DUP 2 ; GET 5 ; DUP 9 ; GET ; IF_NONE { PUSH string "PROPOSAL_NOT_FOUND" ; FAILWITH } {} ; DUP 3 ; GET 3 ; DUP ; DUP 11 ; DUP 7 ; PAIR ; MEM ; NOT ; IF {} { DUP 12 ; FAILWITH } ; DIG 5 ; DUP 3 ; CDR ; ADD ; DUP 5 ; DUP 5 ; DUP 8 ; GET ; IF_NONE { DIG 4 ; PUSH nat 1 ; SOME ; DUP 8 ; UPDATE } { DIG 5 ; PUSH nat 1 ; DIG 2 ; ADD ; SOME ; DUP 8 ; UPDATE } ; UPDATE 1 ; DIG 2 ; UNIT ; SOME ; DUP 11 ; DIG 7 ; PAIR ; UPDATE ; UPDATE 3 ; DIG 3 ; GET 5 ; DIG 3 ; DUP 4 ; UPDATE 2 ; SOME ; DUP 8 ; UPDATE ; UPDATE 5 ; DUP ; GET 7 ; IF_NONE { SWAP ; SOME ; UPDATE 7 ; DUP 5 ; SOME ; UPDATE 9 } { DUP ; DUP 4 ; COMPARE ; GT ; IF { DROP ; SWAP ; SOME ; UPDATE 7 ; DUP 5 ; SOME ; UPDATE 9 } { DIG 2 ; COMPARE ; EQ ; IF { NONE bytes ; UPDATE 9 } {} } } ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DUP 2 ; SWAP ; UPDATE 2 } ; SWAP ; DIG 4 ; DIG 6 ; DIG 7 ; DIG 8 ; DROP 5 ; DIG 2 ; IF_NONE { NIL operation } { NIL operation ; SWAP ; EMIT %voting_finished (pair (nat %finished_at_period_index) (pair (or %finished_at_period_type (unit %proposal) (unit %promotion)) (option %winner_proposal_payload bytes))) ; CONS } ; DIG 3 ; DIG 2 ; SOME ; UPDATE 3 ; DIG 2 ; UPDATE 5 } { DIG 6 ; DROP ; PUSH nat 33 ; DUP 2 ; SIZE ; COMPARE ; EQ ; IF {} { PUSH string "INCORRECT_KERNEL_ROOT_HASH_LENGTH" ; FAILWITH } ; UNIT ; DIG 6 ; SWAP ; EXEC ; DROP ; DUP 2 ; CAR ; DIG 4 ; SWAP ; EXEC ; DUP 3 ; GET 3 ; IF_NONE { NONE (pair nat (pair (or unit unit) (option bytes))) ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DIG 2 ; PAIR } { DUP ; CAR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP } { DUP 4 ; CAR ; DUP 2 ; CDR ; IF_LEFT { DUP 2 ; GET 11 ; DUP 2 ; GET 10 ; MUL ; DIG 2 ; GET 9 ; DUP 3 ; GET 7 ; IF_NONE { PUSH nat 0 } {} ; MUL ; COMPARE ; GE ; IF { DUP ; GET 9 } { NONE bytes } ; IF_NONE { GET 7 ; IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ; IF { NONE bytes ; UNIT ; LEFT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME } { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) } ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } { SWAP ; DROP ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; DUP ; DUP 4 ; COMPARE ; EQ ; IF { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP ; TOTAL_VOTING_POWER ; PUSH nat 0 ; PUSH nat 0 ; PUSH nat 0 ; EMPTY_BIG_MAP key_hash string ; PAIR 6 ; RIGHT (pair (big_map key_hash nat) (pair (big_map (pair key_hash bytes) unit) (pair (big_map bytes (pair (set key_hash) nat)) (pair (option nat) (pair (option bytes) nat))))) } { SWAP ; DROP ; NONE bytes ; UNIT ; RIGHT unit ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } } } { UNPAIR 6 ; DROP ; DIG 3 ; DUP 6 ; GET 13 ; MUL ; DUP 6 ; GET 9 ; DIG 4 ; DUP 5 ; DUP 5 ; ADD ; ADD ; MUL ; COMPARE ; GE ; DIG 2 ; DUP 3 ; ADD ; DUP ; DUP 6 ; GET 15 ; MUL ; DIG 5 ; GET 9 ; DIG 4 ; MUL ; COMPARE ; GE ; PUSH nat 0 ; DIG 2 ; COMPARE ; GT ; AND ; AND ; IF { SOME } { DROP ; NONE bytes } ; UNIT ; RIGHT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } ; DIG 2 ; PAIR } } ; DUP 2 ; DIG 2 ; IF_NONE { DUP 4 ; GET 5 } { GET 4 ; IF_NONE { DUP 4 ; GET 5 } { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ; DIG 2 ; DUP ; CDR ; IF_LEFT { DIG 9 ; DROP } { DROP ; DIG 8 ; FAILWITH } ; DUP 6 ; CAR ; GET 16 ; DIG 7 ; SWAP ; EXEC ; PUSH nat 0 ; PUSH nat 0 ; EMPTY_SET key_hash ; PAIR 3 ; SWAP ; ITER { SWAP ; UNPAIR 3 ; DUP 4 ; VOTING_POWER ; DUP 11 ; CAR ; GET 7 ; DUP 7 ; CAR ; DUP 7 ; GET ; IF_NONE { PUSH nat 0 } {} ; COMPARE ; LT ; NOT ; PUSH nat 0 ; DUP 3 ; COMPARE ; EQ ; OR ; IF { DIG 4 ; DROP ; DIG 3 ; DIG 3 ; DIG 2 ; ADD ; DIG 2 } { DIG 3 ; DUP 2 ; ADD ; DIG 3 ; DIG 2 ; ADD ; DIG 2 ; PUSH bool True ; DIG 4 ; UPDATE } ; PAIR 3 } ; UNPAIR 3 ; SWAP ; DIG 9 ; SWAP ; EXEC ; DROP ; PUSH nat 0 ; DUP 2 ; SIZE ; COMPARE ; GT ; IF { DIG 8 ; DROP } { DIG 8 ; FAILWITH } ; DUP 3 ; GET 5 ; DUP 8 ; MEM ; NOT ; IF {} { PUSH string "PROPOSAL_ALREADY_CREATED" ; FAILWITH } ; DUP 3 ; GET 3 ; DUP 4 ; CAR ; PAIR ; DUP 2 ; ITER { SWAP ; UNPAIR ; SWAP ; UNIT ; SOME ; DUP 11 ; DUP 5 ; PAIR ; UPDATE ; DUP 2 ; DUP 4 ; GET ; IF_NONE { SWAP ; PUSH nat 1 ; SOME ; DIG 3 ; UPDATE } { DIG 2 ; PUSH nat 1 ; DIG 2 ; ADD ; SOME ; DIG 3 ; UPDATE } ; PAIR } ; UNPAIR ; DUP 5 ; SWAP ; UPDATE 1 ; SWAP ; UPDATE 3 ; DIG 3 ; GET 5 ; DUP 4 ; DIG 3 ; PAIR ; SOME ; DUP 8 ; UPDATE ; UPDATE 5 ; DUP ; GET 7 ; IF_NONE { SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 } { DUP ; DUP 4 ; COMPARE ; GT ; IF { DROP ; SWAP ; SOME ; UPDATE 7 ; DIG 4 ; SOME ; UPDATE 9 } { DIG 6 ; DROP ; DIG 2 ; COMPARE ; EQ ; IF { NONE bytes ; UPDATE 9 } {} } } ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DIG 3 ; IF_NONE { NIL operation } { NIL operation ; SWAP ; EMIT %voting_finished (pair (nat %finished_at_period_index) (pair (or %finished_at_period_type (unit %proposal) (unit %promotion)) (option %winner_proposal_payload bytes))) ; CONS } ; DIG 4 ; DIG 3 ; DIG 3 ; UPDATE 2 ; SOME ; UPDATE 3 ; DIG 2 ; UPDATE 5 } ; SWAP } } ; PAIR } ; view "get_voting_state" unit (pair (nat %period_index) (pair (or %period_type (unit %proposal) (unit %promotion)) (pair (nat %remaining_blocks) (option %finished_voting (pair (nat %finished_at_period_index) (pair (or %finished_at_period_type (unit %proposal) (unit %promotion)) (option %winner_proposal_payload bytes))))))) { PUSH string "CURRENT_LEVEL_LESS_THAN_START_LEVEL" ; SWAP ; CDR ; DUP ; CAR ; DUP ; CAR ; LEVEL ; SUB ; ISNAT ; IF_NONE { DROP ; DUP 2 ; FAILWITH } { SWAP ; GET 3 ; SWAP ; EDIV ; IF_NONE { PUSH string "DIV by 0" ; FAILWITH } {} ; CAR } ; DUP 2 ; GET 3 ; IF_NONE { NONE (pair nat (pair (or unit unit) (option bytes))) ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) ; DIG 2 ; PAIR } { DUP ; CAR ; DUP 3 ; COMPARE ; EQ ; IF { SWAP ; DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP } { DUP 3 ; CAR ; DUP 2 ; CDR ; IF_LEFT { DUP 2 ; GET 11 ; DUP 2 ; GET 10 ; MUL ; DIG 2 ; GET 9 ; DUP 3 ; GET 7 ; IF_NONE { PUSH nat 0 } {} ; MUL ; COMPARE ; GE ; IF { DUP ; GET 9 } { NONE bytes } ; IF_NONE { GET 7 ; IF_NONE { PUSH bool False } { DROP ; PUSH bool True } ; IF { NONE bytes ; UNIT ; LEFT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME } { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) } ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } { SWAP ; DROP ; PUSH nat 1 ; DIG 2 ; CAR ; ADD ; DUP ; DUP 4 ; COMPARE ; EQ ; IF { DROP ; NONE (pair nat (pair (or unit unit) (option bytes))) ; SWAP ; TOTAL_VOTING_POWER ; PUSH nat 0 ; PUSH nat 0 ; PUSH nat 0 ; EMPTY_BIG_MAP key_hash string ; PAIR 6 ; RIGHT (pair (big_map key_hash nat) (pair (big_map (pair key_hash bytes) unit) (pair (big_map bytes (pair (set key_hash) nat)) (pair (option nat) (pair (option bytes) nat))))) } { SWAP ; DROP ; NONE bytes ; UNIT ; RIGHT unit ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } } } { UNPAIR 6 ; DROP ; DIG 3 ; DUP 6 ; GET 13 ; MUL ; DUP 6 ; GET 9 ; DIG 4 ; DUP 5 ; DUP 5 ; ADD ; ADD ; MUL ; COMPARE ; GE ; DIG 2 ; DUP 3 ; ADD ; DUP ; DUP 6 ; GET 15 ; MUL ; DIG 5 ; GET 9 ; DIG 4 ; MUL ; COMPARE ; GE ; PUSH nat 0 ; DIG 2 ; COMPARE ; GT ; AND ; AND ; IF { SOME } { DROP ; NONE bytes } ; UNIT ; RIGHT unit ; DIG 2 ; CAR ; DUG 2 ; PUSH nat 1 ; DIG 3 ; ADD ; PAIR 3 ; SOME ; TOTAL_VOTING_POWER ; NONE bytes ; NONE nat ; EMPTY_BIG_MAP bytes (pair (set key_hash) nat) ; EMPTY_BIG_MAP (pair key_hash bytes) unit ; EMPTY_BIG_MAP key_hash nat ; PAIR 6 ; LEFT (pair (big_map key_hash string) (pair nat (pair nat (pair nat (pair nat bytes))))) } ; DIG 2 ; PAIR } } ; DUP 2 ; DIG 2 ; IF_NONE { DUP 3 ; GET 5 } { GET 4 ; IF_NONE { DUP 3 ; GET 5 } { EMPTY_BIG_MAP address unit ; SWAP ; PAIR ; SOME } } ; DIG 2 ; PAIR 3 ; DUP ; CAR ; SWAP ; GET 4 ; DIG 2 ; CAR ; DUP ; CAR ; LEVEL ; SUB ; SWAP ; GET 3 ; SWAP ; ISNAT ; IF_NONE { DROP ; DIG 2 ; FAILWITH } { DIG 4 ; DROP ; DUP 2 ; SWAP ; EDIV ; IF_NONE { PUSH string "MOD by 0" ; FAILWITH } {} ; CDR ; SWAP ; SUB ; ISNAT ; IF_NONE { PUSH string "option is None" ; FAILWITH } {} } ; DUP 3 ; CDR ; IF_LEFT { DROP ; UNIT ; LEFT unit } { DROP ; UNIT ; RIGHT unit } ; DIG 3 ; CAR ; PAIR 4 } }