x
648
1559
{ parameter (or (or (or (or (nat %cleanup) (nat %cleanup_offline)) (or (pair %collect (mutez %amount) (pair (nat %channel_id) (signature %signature))) (nat %collect_offline))) (or (or (pair %donate_offline (nat %cid) (bytes %message)) (pair %extend (nat %channel_id) (timestamp %new_expiration))) (or (nat %mark_offline) (or (pair %open_channel (nat %cid) (pair (timestamp %expiration) (pair (bytes %offer) (pair (key %recipient_key) (key %sender_key))))) (pair %post_answer (bytes %answer) (nat %channel_id)))))) (or (or (or (pair %post_offer (nat %channel_id) (bytes %offer)) (pair %rebind_key (nat %channel_id) (key %new_key))) (or (pair %set_block (nat %cid) (pair (bool %on) (address %user))) (or (pair %set_mute (nat %cid) (pair (bool %on) (address %user))) (pair %set_status (nat %cid) (bool %online))))) (or (or (pair %signal_answer (bytes %answer) (nat %channel_id)) (pair %signal_offer (nat %channel_id) (bytes %offer))) (or (nat %timeout) (or (nat %top_up) (unit %withdraw_fees)))))) ; storage (pair (big_map %blocked (pair nat address) bool) (pair (big_map %channels nat (pair (bytes %answer) (pair (nat %answer_round) (pair (nat %cid) (pair (mutez %deposit) (pair (timestamp %expiration) (pair (bytes %offer) (pair (nat %offer_round) (pair (timestamp %offer_ts) (pair (address %recipient) (pair (key %recipient_key) (pair (nat %seen_round) (pair (address %sender) (pair (key %sender_key) (mutez %withdrawn))))))))))))))) (pair (big_map %donations nat (pair (nat %last_week) (pair (mutez %w0) (pair (mutez %w1) (pair (mutez %w2) (mutez %w3)))))) (pair (mutez %fees) (pair (big_map %mailbox nat (pair (mutez %amount) (pair (nat %cid) (pair (bytes %message) (pair (timestamp %posted) (pair (address %recipient) (address %sender))))))) (pair (big_map %muted (pair nat address) bool) (pair (nat %next_id) (pair (nat %next_mail_id) (pair (address %owner) (pair (address %registry) (big_map %status nat (pair (bool %online) (timestamp %since))))))))))))) ; code { LAMBDA (pair (pair nat mutez) (pair (big_map (pair nat address) bool) (pair (big_map nat (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez)))))))))))))) (pair (big_map nat (pair nat (pair mutez (pair mutez (pair mutez mutez))))) (pair mutez (pair (big_map nat (pair mutez (pair nat (pair bytes (pair timestamp (pair address address)))))) (pair (big_map (pair nat address) bool) (pair nat (pair nat (pair address (pair address (big_map nat (pair bool timestamp))))))))))))) (pair unit (pair (big_map (pair nat address) bool) (pair (big_map nat (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez)))))))))))))) (pair (big_map nat (pair nat (pair mutez (pair mutez (pair mutez mutez))))) (pair mutez (pair (big_map nat (pair mutez (pair nat (pair bytes (pair timestamp (pair address address)))))) (pair (big_map (pair nat address) bool) (pair nat (pair nat (pair address (pair address (big_map nat (pair bool timestamp))))))))))))) { UNPAIR ; PUSH timestamp "1970-01-01T00:00:00Z" ; NOW ; SUB ; PUSH nat 604800 ; PUSH int 259200 ; DUP 3 ; ADD ; EDIV ; IF_NONE { PUSH string "WEEK" ; FAILWITH } {} ; CAR ; ISNAT ; IF_NONE { PUSH int 177 ; FAILWITH } {} ; DUP 4 ; GET 5 ; DUP 4 ; CAR ; MEM ; IF { DUP 4 ; GET 5 ; DUP 4 ; CAR ; GET ; IF_NONE { PUSH int 179 ; FAILWITH } {} ; DUP ; CAR ; DUP 3 ; SUB ; DUP 5 ; CDR ; PUSH mutez 0 ; PUSH mutez 0 ; PUSH mutez 0 ; DUP 5 ; EQ ; IF { DIG 3 ; DROP 4 ; DUP 5 ; CDR ; DUP 3 ; GET 3 ; ADD ; DUP 3 ; GET 5 ; DUP 4 ; GET 7 ; DUP 5 ; GET 8 } { PUSH int 1 ; DUP 6 ; COMPARE ; EQ ; IF { DIG 2 ; DROP 3 ; DUP 3 ; GET 3 ; DUP 4 ; GET 5 ; DUP 5 ; GET 7 } { PUSH int 2 ; DUP 6 ; COMPARE ; EQ ; IF { DROP 2 ; DUP 4 ; GET 3 ; DUP 5 ; GET 5 } { PUSH int 3 ; DUP 6 ; COMPARE ; EQ ; IF { DROP ; DUP 5 ; GET 3 } {} } } } ; DIG 9 ; DUP ; GET 5 ; DUP 3 ; DUP 5 ; DUP 7 ; DUP 9 ; DUP 13 ; PAIR 5 ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 5 } { DIG 3 ; DUP ; GET 5 ; PUSH mutez 0 ; DUP ; DUP ; DUP 8 ; CDR ; DUP 7 ; PAIR 5 ; DIG 3 ; DROP ; DIG 3 ; DROP ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 5 } ; UNIT ; PAIR } ; SWAP ; LAMBDA (pair nat (pair (big_map (pair nat address) bool) (pair (big_map nat (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez)))))))))))))) (pair (big_map nat (pair nat (pair mutez (pair mutez (pair mutez mutez))))) (pair mutez (pair (big_map nat (pair mutez (pair nat (pair bytes (pair timestamp (pair address address)))))) (pair (big_map (pair nat address) bool) (pair nat (pair nat (pair address (pair address (big_map nat (pair bool timestamp))))))))))))) (pair bool (pair (big_map (pair nat address) bool) (pair (big_map nat (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez)))))))))))))) (pair (big_map nat (pair nat (pair mutez (pair mutez (pair mutez mutez))))) (pair mutez (pair (big_map nat (pair mutez (pair nat (pair bytes (pair timestamp (pair address address)))))) (pair (big_map (pair nat address) bool) (pair nat (pair nat (pair address (pair address (big_map nat (pair bool timestamp))))))))))))) { UNPAIR ; SWAP ; DUP ; GET 19 ; DIG 2 ; VIEW "get_channel" (pair (bytes %name_enc) (pair (bytes %name_hash) (pair (address %owner) (bool %primary)))) ; IF_NONE { PUSH string "NO_SUCH_CONTENT_CHANNEL" ; FAILWITH } {} ; GET 5 ; DUP ; SENDER ; COMPARE ; EQ ; DUP ; IF { SWAP ; DROP } { DUP 3 ; GET 19 ; DIG 2 ; VIEW "get_burner_key" key ; DUP ; IF_NONE { DROP } { DROP ; SWAP ; DROP ; IF_NONE { PUSH int 235 ; FAILWITH } {} ; HASH_KEY ; IMPLICIT_ACCOUNT ; ADDRESS ; SENDER ; COMPARE ; EQ } } ; PAIR } ; SWAP ; LAMBDA (pair nat (pair (big_map (pair nat address) bool) (pair (big_map nat (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez)))))))))))))) (pair (big_map nat (pair nat (pair mutez (pair mutez (pair mutez mutez))))) (pair mutez (pair (big_map nat (pair mutez (pair nat (pair bytes (pair timestamp (pair address address)))))) (pair (big_map (pair nat address) bool) (pair nat (pair nat (pair address (pair address (big_map nat (pair bool timestamp))))))))))))) (pair address (pair (big_map (pair nat address) bool) (pair (big_map nat (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez)))))))))))))) (pair (big_map nat (pair nat (pair mutez (pair mutez (pair mutez mutez))))) (pair mutez (pair (big_map nat (pair mutez (pair nat (pair bytes (pair timestamp (pair address address)))))) (pair (big_map (pair nat address) bool) (pair nat (pair nat (pair address (pair address (big_map nat (pair bool timestamp))))))))))))) { UNPAIR ; SWAP ; DUP ; GET 19 ; DIG 2 ; VIEW "get_channel" (pair (bytes %name_enc) (pair (bytes %name_hash) (pair (address %owner) (bool %primary)))) ; IF_NONE { PUSH string "NO_SUCH_CONTENT_CHANNEL" ; FAILWITH } {} ; GET 5 ; PAIR } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { IF_LEFT { DIG 3 ; DROP ; DIG 3 ; DROP ; IF_LEFT { DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; GET ; IF_NONE { PUSH int 409 ; FAILWITH } {} ; PUSH int 2592000 ; DUP 2 ; GET 9 ; ADD ; NOW ; COMPARE ; GT ; IF {} { PUSH string "NOT_STALE_YET" ; FAILWITH } ; DUP ; GET 26 ; DUP 2 ; GET 7 ; SUB_MUTEZ ; IF_NONE { PUSH int 412 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 2 ; COMPARE ; GT ; IF { NIL operation ; DIG 2 ; GET 23 ; CONTRACT unit ; IF_NONE { PUSH int 414 ; FAILWITH } {} ; DIG 2 ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP 2 ; NIL operation } ; DIG 2 ; DUP ; GET 3 ; NONE (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez))))))))))))) ; DUP 5 ; UPDATE ; UPDATE 3 ; DUG 2 ; SWAP ; EMIT %channel_cleaned nat ; CONS } { DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_MAIL" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH int 670 ; FAILWITH } {} ; PUSH int 2592000 ; DUP 2 ; GET 7 ; ADD ; NOW ; COMPARE ; GT ; IF {} { PUSH string "NOT_STALE_YET" ; FAILWITH } ; PUSH mutez 0 ; DUP 2 ; CAR ; COMPARE ; GT ; IF { NIL operation ; DUP 2 ; GET 10 ; CONTRACT unit ; IF_NONE { PUSH int 673 ; FAILWITH } {} ; DIG 2 ; CAR ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP ; NIL operation } ; DIG 2 ; DUP ; GET 9 ; NONE (pair mutez (pair nat (pair bytes (pair timestamp (pair address address))))) ; DUP 5 ; UPDATE ; UPDATE 9 ; DUG 2 ; SWAP ; EMIT %offline_cleaned nat ; CONS } } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; GET 3 ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; GET 3 ; GET ; IF_NONE { PUSH int 316 ; FAILWITH } {} ; DUP ; GET 19 ; HASH_KEY ; IMPLICIT_ACCOUNT ; ADDRESS ; DUP 2 ; GET 17 ; SENDER ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ; DUP ; GET 7 ; DUP 3 ; CAR ; COMPARE ; LE ; IF {} { PUSH string "AMOUNT_EXCEEDS_DEPOSIT" ; FAILWITH } ; DUP ; GET 26 ; DUP 3 ; CAR ; COMPARE ; GT ; IF {} { PUSH string "NOTHING_TO_COLLECT" ; FAILWITH } ; SELF_ADDRESS ; DUP 3 ; GET 3 ; DUP 4 ; CAR ; PAIR 3 ; PACK ; DUP 3 ; GET 4 ; DUP 3 ; GET 25 ; CHECK_SIGNATURE ; IF {} { PUSH string "BAD_SIGNATURE" ; FAILWITH } ; DUP ; GET 26 ; DUP 3 ; CAR ; SUB_MUTEZ ; IF_NONE { PUSH int 364 ; FAILWITH } {} ; PUSH nat 100 ; PUSH nat 1 ; DUP 3 ; MUL ; EDIV ; IF_NONE { PUSH int 365 ; FAILWITH } {} ; CAR ; DIG 4 ; DUP ; GET 7 ; DUP 3 ; ADD ; UPDATE 7 ; DUG 4 ; NIL operation ; DUP 4 ; GET 17 ; CONTRACT unit ; IF_NONE { PUSH int 367 ; FAILWITH } {} ; DIG 2 ; DUP 4 ; SUB_MUTEZ ; IF_NONE { PUSH int 367 ; FAILWITH } {} ; UNIT ; TRANSFER_TOKENS ; CONS ; DIG 2 ; DUP 4 ; CAR ; UPDATE 26 ; DUG 2 ; DIG 4 ; DUP ; GET 3 ; DUP 5 ; SOME ; DUP 7 ; GET 3 ; UPDATE ; UPDATE 3 ; DUG 4 ; DUP 5 ; GET 11 ; DUP 4 ; GET 23 ; DUP 5 ; GET 5 ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { SWAP ; DROP ; SWAP ; DROP ; SWAP ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP } { DIG 3 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DIG 2 ; DIG 3 ; GET 5 ; PAIR ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; SWAP } } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_MAIL" ; FAILWITH } ; DUP 2 ; GET 9 ; DUP 2 ; GET ; IF_NONE { PUSH int 650 ; FAILWITH } {} ; DUP 5 ; SWAP ; DUP ; GET 3 ; DIG 2 ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 6 ; DIG 6 ; DIG 6 ; DIG 4 ; DIG 6 ; DIG 6 ; DIG 6 ; IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ; PUSH nat 100 ; PUSH nat 1 ; DUP 3 ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 654 ; FAILWITH } {} ; CAR ; DIG 3 ; DUP ; GET 7 ; DUP 3 ; ADD ; UPDATE 7 ; DUG 3 ; NIL operation ; DUP 3 ; GET 9 ; CONTRACT unit ; IF_NONE { PUSH int 656 ; FAILWITH } {} ; DIG 2 ; DUP 4 ; CAR ; SUB_MUTEZ ; IF_NONE { PUSH int 656 ; FAILWITH } {} ; UNIT ; TRANSFER_TOKENS ; CONS ; DUP 4 ; GET 11 ; DUP 3 ; GET 10 ; DUP 4 ; GET 3 ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { SWAP ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP ; DIG 3 ; DROP } { DIG 4 ; DROP ; DIG 4 ; DROP ; DIG 4 ; DUP 3 ; CAR ; DIG 3 ; GET 3 ; PAIR ; SWAP ; DIG 4 ; DIG 2 ; PAIR ; EXEC ; CDR ; DUG 2 } ; DIG 2 ; DUP ; GET 9 ; NONE (pair mutez (pair nat (pair bytes (pair timestamp (pair address address))))) ; DIG 4 ; UPDATE ; UPDATE 9 ; SWAP } } } { IF_LEFT { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; GT ; IF {} { PUSH string "EMPTY_DONATION" ; FAILWITH } ; DUP 3 ; SWAP ; DUP ; CAR ; DIG 2 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; PUSH nat 0 ; DUP 3 ; CDR ; SIZE ; COMPARE ; GT ; IF { DUP 3 ; CAR ; SENDER ; DUP 4 ; CAR ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "BLOCKED" ; FAILWITH } {} ; DUP 3 ; GET 11 ; SENDER ; DUP 4 ; CAR ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "MUTED" ; FAILWITH } {} } {} ; DUP 3 ; GET 15 ; DIG 3 ; DUP ; GET 9 ; SENDER ; DUP 5 ; NOW ; DUP 8 ; CDR ; DUP 9 ; CAR ; AMOUNT ; PAIR 6 ; DIG 6 ; DROP ; DIG 6 ; DROP ; DIG 6 ; DROP ; SOME ; DUP 4 ; UPDATE ; UPDATE 9 ; DUP ; GET 15 ; PUSH nat 1 ; ADD ; UPDATE 15 ; DUG 3 ; NIL operation ; DUG 2 ; DIG 3 ; CAR ; PAIR 3 ; EMIT %offline_donation (pair (nat %cid) (pair (nat %mail_id) (address %recipient))) ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 454 ; FAILWITH } {} ; DUP ; GET 23 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ; DUP ; GET 9 ; DUP 3 ; CDR ; COMPARE ; GT ; IF {} { PUSH string "NOT_LATER" ; FAILWITH } ; DUP 2 ; CDR ; UPDATE 9 ; DIG 2 ; DUP ; GET 3 ; DIG 2 ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 3 ; NIL operation } } { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; SWAP ; DUP ; GET 3 ; DIG 2 ; GET ; IF_NONE { PUSH int 699 ; FAILWITH } {} ; DUP ; GET 21 ; DUP 2 ; GET 13 ; COMPARE ; GT ; IF {} { PUSH string "ANSWERED" ; FAILWITH } ; PUSH int 120 ; DUP 2 ; GET 15 ; ADD ; NOW ; COMPARE ; GT ; IF {} { PUSH string "NOT_STALE_YET" ; FAILWITH } ; DUP 2 ; GET 20 ; DUP 2 ; GET 5 ; GET ; IF_NONE { PUSH (pair bool timestamp) (Pair False "1970-01-01T00:00:00Z") } {} ; CDR ; DUP 2 ; GET 15 ; COMPARE ; GT ; IF {} { PUSH string "RECENTLY_ONLINE" ; FAILWITH } ; SWAP ; DUP ; GET 20 ; NOW ; PUSH bool False ; PAIR ; SOME ; DUP 4 ; GET 5 ; UPDATE ; UPDATE 20 ; SWAP ; NIL operation ; PUSH bool False ; DIG 2 ; GET 5 ; PAIR ; EMIT %status_changed (pair (nat %cid) (bool %online)) ; CONS } { IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; GT ; IF {} { PUSH string "EMPTY_DEPOSIT" ; FAILWITH } ; NOW ; DUP 2 ; GET 3 ; COMPARE ; GT ; IF {} { PUSH string "EXPIRATION_IN_PAST" ; FAILWITH } ; DUP 3 ; SWAP ; DUP ; CAR ; DIG 2 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; DIG 5 ; DIG 5 ; DIG 5 ; DIG 4 ; DIG 5 ; DIG 5 ; DUP 3 ; CAR ; SENDER ; DUP 4 ; CAR ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "BLOCKED" ; FAILWITH } {} ; DUP 3 ; GET 13 ; DIG 3 ; DUP ; GET 3 ; PUSH mutez 0 ; DUP 6 ; GET 8 ; SENDER ; PUSH nat 0 ; DUP 9 ; GET 7 ; DUP 9 ; NOW ; PUSH nat 1 ; DUP 13 ; GET 5 ; DUP 14 ; GET 3 ; AMOUNT ; DUP 16 ; CAR ; PUSH nat 0 ; PUSH bytes 0x ; PAIR 14 ; DIG 6 ; DROP ; DIG 6 ; DROP ; DIG 6 ; DROP ; SOME ; DUP 4 ; UPDATE ; UPDATE 3 ; DUP ; GET 13 ; PUSH nat 1 ; ADD ; UPDATE 13 ; DUG 3 ; NIL operation ; DIG 2 ; DIG 3 ; CAR ; DIG 3 ; PAIR 3 ; EMIT %channel_opened (pair (nat %channel_id) (pair (nat %cid) (address %recipient))) ; CONS } { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH int 471 ; FAILWITH } {} ; DUP ; GET 19 ; HASH_KEY ; IMPLICIT_ACCOUNT ; ADDRESS ; DUP 2 ; GET 17 ; SENDER ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ; DUP 2 ; CAR ; UPDATE 1 ; DUP ; GET 13 ; UPDATE 3 ; DUP ; GET 13 ; UPDATE 21 ; DIG 2 ; DUP ; GET 3 ; DIG 2 ; SOME ; DIG 3 ; CDR ; UPDATE ; UPDATE 3 ; NIL operation } } } } } { IF_LEFT { IF_LEFT { DIG 2 ; DROP ; DIG 2 ; DROP ; DIG 2 ; DROP ; IF_LEFT { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 505 ; FAILWITH } {} ; DUP ; GET 25 ; HASH_KEY ; IMPLICIT_ACCOUNT ; ADDRESS ; DUP 2 ; GET 23 ; SENDER ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ; DUP 3 ; CAR ; DUP 2 ; GET 23 ; DUP 3 ; GET 5 ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "BLOCKED" ; FAILWITH } {} ; DUP 2 ; CDR ; UPDATE 11 ; DUP ; GET 13 ; PUSH nat 1 ; ADD ; UPDATE 13 ; NOW ; UPDATE 15 ; DIG 2 ; DUP ; GET 3 ; DIG 2 ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 3 } { PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 547 ; FAILWITH } {} ; DUP ; GET 23 ; SENDER ; COMPARE ; EQ ; IF { DUP 2 ; CDR ; UPDATE 25 } { DUP ; GET 17 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_PARTY" ; FAILWITH } ; DUP 2 ; CDR ; UPDATE 19 } ; DIG 2 ; DUP ; GET 3 ; DIG 2 ; SOME ; DIG 3 ; CAR ; UPDATE ; UPDATE 3 } ; NIL operation } { IF_LEFT { DIG 2 ; DROP ; DIG 3 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DIG 2 ; SWAP ; DUP ; CAR ; DIG 2 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ; SWAP ; DUP ; CAR ; DUP 3 ; GET 3 ; SOME ; DIG 3 ; DUP ; GET 4 ; SWAP ; CAR ; PAIR ; UPDATE ; UPDATE 1 ; NIL operation } { IF_LEFT { DIG 2 ; DROP ; DIG 3 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DIG 2 ; SWAP ; DUP ; CAR ; DIG 2 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ; SWAP ; DUP ; GET 11 ; DUP 3 ; GET 3 ; SOME ; DIG 3 ; DUP ; GET 4 ; SWAP ; CAR ; PAIR ; UPDATE ; UPDATE 11 ; NIL operation } { DIG 2 ; DROP ; DIG 3 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DIG 2 ; SWAP ; DUP ; CAR ; DIG 2 ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; UNPAIR ; SWAP ; DUG 2 ; IF {} { PUSH string "NOT_AUTHORIZED" ; FAILWITH } ; SWAP ; DUP ; GET 20 ; NOW ; DUP 4 ; CDR ; PAIR ; SOME ; DUP 4 ; CAR ; UPDATE ; UPDATE 20 ; SWAP ; EMIT %status_changed (pair (nat %cid) (bool %online)) ; NIL operation ; SWAP ; CONS } } } } { DIG 3 ; DROP ; DIG 3 ; DROP ; IF_LEFT { IF_LEFT { DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CDR ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CDR ; GET ; IF_NONE { PUSH int 594 ; FAILWITH } {} ; DUP ; GET 19 ; HASH_KEY ; IMPLICIT_ACCOUNT ; ADDRESS ; DUP 2 ; GET 17 ; SENDER ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_RECIPIENT" ; FAILWITH } ; DUP ; GET 13 ; UPDATE 21 ; DIG 2 ; DUP ; GET 3 ; DIG 2 ; SOME ; DUP 4 ; CDR ; UPDATE ; UPDATE 3 ; SWAP ; NIL operation ; SWAP ; UNPAIR ; SWAP ; PAIR ; EMIT %answer_signal (pair (nat %channel_id) (bytes %sdp)) ; CONS } { DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; CAR ; GET ; IF_NONE { PUSH int 567 ; FAILWITH } {} ; DUP ; GET 25 ; HASH_KEY ; IMPLICIT_ACCOUNT ; ADDRESS ; DUP 2 ; GET 23 ; SENDER ; COMPARE ; EQ ; IF { DROP ; PUSH bool True } { SENDER ; COMPARE ; EQ } ; IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ; DUP 3 ; CAR ; SWAP ; DUP ; GET 23 ; SWAP ; GET 5 ; PAIR ; GET ; IF_NONE { PUSH bool False } {} ; IF { PUSH string "BLOCKED" ; FAILWITH } {} ; EMIT %offer_signal (pair (nat %channel_id) (bytes %sdp)) ; NIL operation ; SWAP ; CONS } } { IF_LEFT { DIG 2 ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; GET ; IF_NONE { PUSH int 384 ; FAILWITH } {} ; DUP ; GET 23 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ; DUP ; GET 9 ; NOW ; COMPARE ; GE ; IF {} { PUSH string "NOT_EXPIRED" ; FAILWITH } ; DUP ; GET 26 ; DUP 2 ; GET 7 ; SUB_MUTEZ ; IF_NONE { PUSH int 389 ; FAILWITH } {} ; PUSH mutez 0 ; DUP 2 ; COMPARE ; GT ; IF { NIL operation ; DIG 2 ; GET 23 ; CONTRACT unit ; IF_NONE { PUSH int 391 ; FAILWITH } {} ; DIG 2 ; UNIT ; TRANSFER_TOKENS ; CONS } { DROP 2 ; NIL operation } ; DIG 2 ; DUP ; GET 3 ; NONE (pair bytes (pair nat (pair nat (pair mutez (pair timestamp (pair bytes (pair nat (pair timestamp (pair address (pair key (pair nat (pair address (pair key mutez))))))))))))) ; DIG 4 ; UPDATE ; UPDATE 3 ; SWAP } { IF_LEFT { DIG 2 ; DROP ; DUP 2 ; GET 3 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; DUP 2 ; GET 3 ; DUP 2 ; GET ; IF_NONE { PUSH int 437 ; FAILWITH } {} ; DUP ; GET 23 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_SENDER" ; FAILWITH } ; PUSH mutez 0 ; AMOUNT ; COMPARE ; GT ; IF {} { PUSH string "EMPTY_TOPUP" ; FAILWITH } ; DUP ; GET 7 ; AMOUNT ; ADD ; UPDATE 7 ; DIG 2 ; DUP ; GET 3 ; DIG 2 ; SOME ; DIG 3 ; UPDATE ; UPDATE 3 ; NIL operation } { DROP ; SWAP ; DROP ; PUSH mutez 0 ; AMOUNT ; COMPARE ; EQ ; IF {} { PUSH string "NO_TEZ_ACCEPTED" ; FAILWITH } ; DUP ; GET 17 ; SENDER ; COMPARE ; EQ ; IF {} { PUSH string "NOT_OWNER" ; FAILWITH } ; PUSH mutez 0 ; DUP 2 ; GET 7 ; COMPARE ; GT ; IF {} { PUSH string "NO_FEES" ; FAILWITH } ; DUP ; GET 7 ; SWAP ; PUSH mutez 0 ; UPDATE 7 ; SWAP ; NIL operation ; DUP 3 ; GET 17 ; CONTRACT unit ; IF_NONE { PUSH int 428 ; FAILWITH } {} ; DIG 2 ; UNIT ; TRANSFER_TOKENS ; CONS } } } } } ; NIL operation ; SWAP ; ITER { CONS } ; PAIR } ; view "get_next_id" unit nat { CDR ; GET 13 } ; view "get_channel" nat (pair (bytes %answer) (pair (nat %answer_round) (pair (nat %cid) (pair (mutez %deposit) (pair (timestamp %expiration) (pair (bytes %offer) (pair (nat %offer_round) (pair (timestamp %offer_ts) (pair (address %recipient) (pair (key %recipient_key) (pair (nat %seen_round) (pair (address %sender) (pair (key %sender_key) (mutez %withdrawn)))))))))))))) { UNPAIR ; DUP 2 ; GET 3 ; DUP 2 ; MEM ; IF {} { PUSH string "NO_SUCH_CHANNEL" ; FAILWITH } ; SWAP ; GET 3 ; SWAP ; GET ; IF_NONE { PUSH int 742 ; FAILWITH } {} } ; view "get_donations" nat (option (pair (nat %last_week) (pair (mutez %w0) (pair (mutez %w1) (pair (mutez %w2) (mutez %w3)))))) { UNPAIR ; SWAP ; GET 5 ; SWAP ; GET } ; view "get_status" nat (option (pair (bool %online) (timestamp %since))) { UNPAIR ; SWAP ; GET 20 ; SWAP ; GET } ; view "get_mail" nat (option (pair (mutez %amount) (pair (nat %cid) (pair (bytes %message) (pair (timestamp %posted) (pair (address %recipient) (address %sender))))))) { UNPAIR ; SWAP ; GET 9 ; SWAP ; GET } ; view "get_next_mail_id" unit nat { CDR ; GET 15 } ; view "is_muted" (pair (nat %cid) (address %user)) bool { UNPAIR ; SWAP ; GET 11 ; SWAP ; GET ; IF_NONE { PUSH bool False } {} } ; view "is_blocked" (pair (nat %cid) (address %user)) bool { UNPAIR ; SWAP ; CAR ; SWAP ; GET ; IF_NONE { PUSH bool False } {} } }