x
493
1091
{ parameter (or (or (nat %delete_message) (or (nat %execute_proposal) (pair %post_message (bytes %content) (pair (option %parent_id nat) (address %recipient))))) (or (or %submit_proposal (or (address %set_fee_recipient) (mutez %set_message_fee)) (or (bool %set_pause) (or (pair %update_metadata (string %key) (bytes %value)) (address %update_multisig_address)))) (or (pair %update_room_metadata (bytes %metadata_uri) (address %peer)) (pair %vote_proposal (nat %proposal_id) (bool %approval))))) ; storage (pair (nat %counter) (pair (address %fee_recipient) (pair (mutez %message_fee) (pair (nat %message_id_counter) (pair (big_map %messages nat (pair (bytes %content) (pair (option %parent_id nat) (pair (pair %room_key (address %participant_a) (address %participant_b)) (pair (address %sender) (timestamp %timestamp)))))) (pair (big_map %metadata string bytes) (pair (address %multisig_address) (pair (bool %paused) (pair (big_map %proposals nat (pair (or %action (or (address %set_fee_recipient) (mutez %set_message_fee)) (or (bool %set_pause) (or (pair %update_metadata (string %key) (bytes %value)) (address %update_multisig_address)))) (pair (bool %executed) (pair (address %issuer) (pair (timestamp %timestamp) (pair (nat %positive_votes) (nat %negative_votes))))))) (pair (big_map %rooms (pair (address %participant_a) (address %participant_b)) (pair (nat %message_count) (pair (bytes %metadata_uri) (timestamp %timestamp)))) (big_map %votes (pair nat address) bool))))))))))) ; code { LAMBDA (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { CDR ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "TEZ_TRANSFER" ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair timestamp (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { UNPAIR ; DUP 2 ; GET 13 ; UNIT ; VIEW "get_expiration_time" nat ; IF_NONE { PUSH string "DM_GET_EXPIRATION_FAILED" ; FAILWITH } {} ; PUSH nat 86400 ; SWAP ; MUL ; INT ; ADD ; NOW ; COMPARE ; GT ; IF { PUSH string "DM_PROPOSAL_EXPIRED" ; FAILWITH } {} ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { CDR ; DUP ; GET 15 ; IF { PUSH string "CONTRACT_PAUSED" ; FAILWITH } {} ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair (pair address address) (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { UNPAIR ; DUP ; CAR ; SENDER ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { CDR ; SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_PARTICIPANT" ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair (pair address address) (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair (pair address address) (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { UNPAIR ; DUP ; CDR ; DUP 2 ; CAR ; COMPARE ; LT ; IF {} { UNPAIR ; SWAP ; PAIR } ; PAIR } ; SWAP ; LAMBDA (pair mutez (pair (list operation) (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool))))))))))))) (pair unit (pair (list operation) (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool))))))))))))) { UNPAIR 3 ; SWAP ; PUSH mutez 0 ; DUP 3 ; COMPARE ; GT ; IF { DUP 3 ; GET 3 ; CONTRACT unit ; IF_NONE { PUSH int 162 ; FAILWITH } {} ; DIG 2 ; UNIT ; TRANSFER_TOKENS ; CONS } { SWAP ; DROP } ; UNIT ; PAIR 3 } ; SWAP ; LAMBDA (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { CDR ; DUP ; GET 13 ; SENDER ; VIEW "is_user" bool ; IF_NONE { PUSH string "DM_VIEW_FAILED" ; FAILWITH } {} ; IF {} { PUSH string "DM_NOT_MULTISIG_USER" ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair unit (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) (pair nat (pair nat (pair address (pair mutez (pair nat (pair (big_map nat (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp))))) (pair (big_map string bytes) (pair address (pair bool (pair (big_map nat (pair (or (or address mutez) (or bool (or (pair string bytes) address))) (pair bool (pair address (pair timestamp (pair nat nat)))))) (pair (big_map (pair address address) (pair nat (pair bytes timestamp))) (big_map (pair nat address) bool)))))))))))) { CDR ; DUP ; GET 13 ; UNIT ; VIEW "get_minimum_votes" nat ; IF_NONE { PUSH string "DM_GET_MIN_VOTES_FAILED" ; FAILWITH } {} ; PAIR } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 4 ; DROP ; DIG 3 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DIG 3 ; DIG 3 ; DIG 2 ; DIG 3 ; DIG 3 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DIG 2 ; SWAP ; DIG 2 ; DUP 2 ; GET 9 ; DUP 2 ; MEM ; IF {} { PUSH string "MESSAGE_NOT_FOUND" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH int 261 ; FAILWITH } {} ; DUP 3 ; GET 19 ; DUP 2 ; GET 5 ; MEM ; IF {} { PUSH string "ROOM_NOT_FOUND" ; FAILWITH } ; DIG 3 ; SWAP ; DUP ; GET 5 ; DIG 2 ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 2 ; DUP 3 ; GET 19 ; DUP 2 ; GET 5 ; GET ; IF_NONE { PUSH int 266 ; FAILWITH } {} ; DIG 3 ; DUP ; GET 19 ; DUP 3 ; GET 4 ; DUP 4 ; GET 3 ; PUSH nat 1 ; DIG 5 ; CAR ; SUB ; ISNAT ; IF_NONE { PUSH string "UNDERFLOW" ; FAILWITH } {} ; PAIR 3 ; SOME ; DUP 4 ; GET 5 ; UPDATE ; UPDATE 19 ; DUP ; GET 9 ; NONE (pair bytes (pair (option nat) (pair (pair address address) (pair address timestamp)))) ; DUP 5 ; UPDATE ; UPDATE 9 ; DUG 2 ; GET 5 ; NIL operation ; SWAP ; DIG 2 ; SENDER ; PAIR 3 ; EMIT %message_deleted (pair (address %deleted_by) (pair (nat %message_id) (pair %room_key (address %participant_a) (address %participant_b)))) ; CONS } { IF_LEFT { DUP 4 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 9 ; DUG 9 ; DIG 8 ; DIG 9 ; DUP 2 ; GET 17 ; DUP 2 ; MEM ; IF {} { PUSH string "DM_NO_PROPOSAL" ; FAILWITH } ; DUP 2 ; GET 17 ; DUP 2 ; GET ; IF_NONE { PUSH int 363 ; FAILWITH } {} ; DUP ; GET 3 ; IF { PUSH string "DM_ALREADY_EXECUTED" ; FAILWITH } {} ; DUP 4 ; UNIT ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 11 ; DUG 11 ; DUG 11 ; DUG 11 ; DIG 9 ; DIG 11 ; DIG 11 ; DIG 11 ; DUP 2 ; GET 9 ; COMPARE ; GE ; IF {} { PUSH string "DM_NOT_ENOUGH_VOTES" ; FAILWITH } ; DUP 10 ; SWAP ; DUP ; GET 7 ; DIG 2 ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 10 ; DUG 10 ; DUG 10 ; DIG 8 ; DIG 10 ; DIG 10 ; PUSH bool True ; UPDATE 3 ; DIG 2 ; DUP ; GET 17 ; DUP 3 ; SOME ; DUP 5 ; UPDATE ; UPDATE 17 ; DUG 2 ; DUP ; CAR ; IF_LEFT { DROP ; PUSH bool False } { IF_LEFT { DROP ; PUSH bool True } { DROP ; PUSH bool False } } ; IF { DIG 2 ; DUP 2 ; CAR ; IF_LEFT { PUSH int 373 ; FAILWITH } { IF_LEFT {} { PUSH int 373 ; FAILWITH } } ; UPDATE 15 ; DUG 2 } {} ; DUP ; CAR ; IF_LEFT { IF_LEFT { DROP ; PUSH bool False } { DROP ; PUSH bool True } } { DROP ; PUSH bool False } ; IF { DIG 2 ; DUP 2 ; CAR ; IF_LEFT { IF_LEFT { PUSH int 376 ; FAILWITH } {} } { PUSH int 376 ; FAILWITH } ; UPDATE 5 ; DUG 2 } {} ; DUP ; CAR ; IF_LEFT { IF_LEFT { DROP ; PUSH bool True } { DROP ; PUSH bool False } } { DROP ; PUSH bool False } ; IF { DIG 2 ; DUP 2 ; CAR ; IF_LEFT { IF_LEFT {} { PUSH int 379 ; FAILWITH } } { PUSH int 379 ; FAILWITH } ; UPDATE 3 ; DUG 2 } {} ; DUP ; CAR ; IF_LEFT { DROP ; PUSH bool False } { IF_LEFT { DROP ; PUSH bool False } { IF_LEFT { DROP ; PUSH bool False } { DROP ; PUSH bool True } } } ; IF { DIG 2 ; DUP 2 ; CAR ; IF_LEFT { PUSH int 382 ; FAILWITH } { IF_LEFT { PUSH int 382 ; FAILWITH } { IF_LEFT { PUSH int 382 ; FAILWITH } {} } } ; UPDATE 13 ; DUG 2 } {} ; DUP ; CAR ; IF_LEFT { DROP ; PUSH bool False } { IF_LEFT { DROP ; PUSH bool False } { IF_LEFT { DROP ; PUSH bool True } { DROP ; PUSH bool False } } } ; IF { SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; CAR ; IF_LEFT { PUSH int 385 ; FAILWITH } { IF_LEFT { PUSH int 385 ; FAILWITH } { IF_LEFT {} { PUSH int 385 ; FAILWITH } } } ; SWAP ; DUP ; GET 11 ; DUP 3 ; CDR ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 11 } { DROP 2 ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP } ; NIL operation } { DUP 8 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 9 ; DUG 9 ; DIG 8 ; DIG 9 ; DUP ; GET 4 ; SENDER ; COMPARE ; NEQ ; IF {} { PUSH string "CANNOT_MESSAGE_SELF" ; FAILWITH } ; PUSH nat 0 ; DUP 2 ; CAR ; SIZE ; COMPARE ; GT ; IF {} { PUSH string "EMPTY_CONTENT" ; FAILWITH } ; PUSH nat 32768 ; DUP 2 ; CAR ; SIZE ; COMPARE ; LE ; IF {} { PUSH string "CONTENT_TOO_LARGE" ; FAILWITH } ; DUP 6 ; DUP 2 ; GET 4 ; SENDER ; PAIR ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DUG 10 ; DUG 10 ; DUG 10 ; DIG 9 ; DIG 10 ; DIG 10 ; DUP 3 ; GET 19 ; DUP 2 ; MEM ; IF { NIL operation } { DIG 2 ; DUP ; GET 19 ; NOW ; PUSH bytes 0x ; PUSH nat 0 ; PAIR 3 ; SOME ; DUP 4 ; UPDATE ; UPDATE 19 ; DUG 2 ; NIL operation ; NOW ; DUP 3 ; PAIR ; EMIT %room_created (pair (pair %room_key (address %participant_a) (address %participant_b)) (timestamp %timestamp)) ; CONS } ; DUP 3 ; GET 3 ; IF_NONE {} { DROP ; DUP 3 ; GET 3 ; IF_NONE { PUSH int 213 ; FAILWITH } {} ; DUP 5 ; GET 9 ; DUP 2 ; MEM ; IF {} { PUSH string "PARENT_NOT_FOUND" ; FAILWITH } ; DUP 5 ; GET 9 ; SWAP ; GET ; IF_NONE { PUSH int 215 ; FAILWITH } {} ; DUP 3 ; SWAP ; GET 5 ; COMPARE ; EQ ; IF {} { PUSH string "PARENT_WRONG_ROOM" ; FAILWITH } } ; DUP 4 ; GET 5 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "INCORRECT_FEE" ; FAILWITH } ; DUP 7 ; DUP 5 ; GET 5 ; SWAP ; DIG 5 ; DIG 3 ; DIG 3 ; PAIR 3 ; EXEC ; CDR ; UNPAIR ; DUG 11 ; DUG 11 ; DUG 11 ; DUG 11 ; DIG 9 ; DIG 11 ; DIG 11 ; DIG 11 ; DUP 4 ; GET 7 ; DIG 4 ; DUP ; GET 9 ; NOW ; SENDER ; DUP 7 ; DUP 9 ; GET 3 ; DUP 10 ; CAR ; PAIR 5 ; SOME ; DUP 4 ; UPDATE ; UPDATE 9 ; DUG 4 ; DUP 5 ; GET 19 ; DUP 4 ; GET ; IF_NONE { PUSH int 232 ; FAILWITH } {} ; DIG 5 ; DUP ; GET 19 ; DUP 3 ; GET 4 ; DUP 4 ; GET 3 ; PUSH nat 1 ; DUP 6 ; CAR ; ADD ; PAIR 3 ; SOME ; DUP 7 ; UPDATE ; UPDATE 19 ; DUP ; GET 7 ; PUSH nat 1 ; ADD ; UPDATE 7 ; DUG 5 ; DUP 3 ; NOW ; SENDER ; DUP 7 ; DUP 9 ; GET 3 ; DUP 7 ; DUP 11 ; CAR ; PAIR 6 ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; EMIT %message_posted (pair (bytes %content) (pair (nat %message_id) (pair (option %parent_id nat) (pair (pair %room_key (address %participant_a) (address %participant_b)) (pair (address %sender) (timestamp %timestamp)))))) ; CONS } } } { IF_LEFT { DUP 4 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 9 ; DUG 9 ; DIG 8 ; DIG 9 ; DUP 2 ; DUP ; GET 17 ; PUSH nat 0 ; DUP ; NOW ; SENDER ; PUSH bool False ; DUP 8 ; PAIR 6 ; DIG 3 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 17 ; DUP ; CAR ; PUSH nat 1 ; ADD ; UPDATE 1 } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 5 ; DROP ; DIG 4 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 4 ; DUG 4 ; DIG 3 ; DIG 4 ; DIG 4 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DIG 3 ; DIG 3 ; DIG 2 ; DIG 3 ; DIG 2 ; DUP 2 ; CDR ; SENDER ; PAIR ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 3 ; DIG 2 ; DIG 3 ; DIG 3 ; DUP 3 ; GET 19 ; DUP 2 ; MEM ; IF {} { PUSH string "ROOM_NOT_FOUND" ; FAILWITH } ; DIG 3 ; DUP 2 ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 2 ; PUSH nat 0 ; DUP 3 ; CAR ; SIZE ; COMPARE ; GT ; IF {} { PUSH string "EMPTY_METADATA" ; FAILWITH } ; DUP 3 ; GET 19 ; DUP 2 ; GET ; IF_NONE { PUSH int 300 ; FAILWITH } {} ; DIG 3 ; DUP ; GET 19 ; DUP 3 ; GET 4 ; DIG 5 ; CAR ; DIG 4 ; CAR ; PAIR 3 ; SOME ; DIG 3 ; UPDATE ; UPDATE 19 } { DIG 2 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 4 ; DROP ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; DIG 2 ; SWAP ; DIG 2 ; DUP 2 ; GET 17 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "DM_NO_PROPOSAL" ; FAILWITH } ; DUP 2 ; GET 17 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 335 ; FAILWITH } {} ; DUP ; GET 3 ; IF { PUSH string "DM_ALREADY_EXECUTED" ; FAILWITH } {} ; DIG 3 ; SWAP ; DUP ; GET 7 ; DIG 2 ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 2 ; SENDER ; DUP 3 ; CAR ; PAIR ; DUP 4 ; GET 20 ; DUP 2 ; MEM ; IF { DUP 4 ; GET 20 ; DUP 2 ; GET ; IF_NONE { PUSH int 342 ; FAILWITH } {} ; IF { PUSH nat 1 ; DUP 3 ; GET 9 ; SUB ; ISNAT ; IF_NONE { PUSH int 343 ; FAILWITH } {} ; DIG 2 ; SWAP ; UPDATE 9 ; SWAP } { PUSH nat 1 ; DUP 3 ; GET 10 ; SUB ; ISNAT ; IF_NONE { PUSH int 345 ; FAILWITH } {} ; DIG 2 ; SWAP ; UPDATE 10 ; SWAP } } {} ; DUP 3 ; CDR ; IF { SWAP ; DUP ; GET 9 ; PUSH nat 1 ; ADD ; UPDATE 9 ; SWAP } { SWAP ; DUP ; GET 10 ; PUSH nat 1 ; ADD ; UPDATE 10 ; SWAP } ; DIG 3 ; DUP ; GET 20 ; DUP 5 ; CDR ; SOME ; DIG 3 ; UPDATE ; UPDATE 20 ; DUP ; GET 17 ; DIG 2 ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 17 } } ; NIL operation } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR } ; view "get_room" (pair (address %participant_a) (address %participant_b)) (pair (nat %message_count) (pair (bytes %metadata_uri) (timestamp %timestamp))) { UNPAIR ; DUP 2 ; GET 19 ; DUP 2 ; MEM ; IF {} { PUSH string "ROOM_NOT_FOUND" ; FAILWITH } ; SWAP ; GET 19 ; SWAP ; GET ; IF_NONE { PUSH int 397 ; FAILWITH } {} } ; view "get_message" nat (pair (bytes %content) (pair (option %parent_id nat) (pair (pair %room_key (address %participant_a) (address %participant_b)) (pair (address %sender) (timestamp %timestamp))))) { UNPAIR ; DUP 2 ; GET 9 ; DUP 2 ; MEM ; IF {} { PUSH string "MESSAGE_NOT_FOUND" ; FAILWITH } ; SWAP ; GET 9 ; SWAP ; GET ; IF_NONE { PUSH int 404 ; FAILWITH } {} } ; view "get_message_fee" unit mutez { CDR ; GET 5 } ; view "is_room_participant" (pair (address %address) (pair %room_key (address %participant_a) (address %participant_b))) bool { CAR ; DUP ; GET 3 ; DUP 2 ; CAR ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { DUP ; GET 4 ; SWAP ; CAR ; COMPARE ; EQ } } ; view "get_proposal" nat (pair (or %action (or (address %set_fee_recipient) (mutez %set_message_fee)) (or (bool %set_pause) (or (pair %update_metadata (string %key) (bytes %value)) (address %update_multisig_address)))) (pair (bool %executed) (pair (address %issuer) (pair (timestamp %timestamp) (pair (nat %positive_votes) (nat %negative_votes)))))) { UNPAIR ; DUP 2 ; GET 17 ; DUP 2 ; MEM ; IF {} { PUSH string "DM_NO_PROPOSAL" ; FAILWITH } ; SWAP ; GET 17 ; SWAP ; GET ; IF_NONE { PUSH int 422 ; FAILWITH } {} } ; view "get_vote" (pair nat address) bool { UNPAIR ; SWAP ; GET 20 ; SWAP ; GET ; IF_NONE { PUSH bool False } {} } }