x
109
parameter (or :_entries (pair %main address address) (key_hash %change_destination));storage (pair :storage (big_map :deposits address (pair :record (mutez %deposited) (address %delegate))) (pair (mutez %total) (pair (key_hash %destination) (address %admin))));code { DUP ; DIP { CDR @storage_slash_1 } ; CAR @parameter_slash_2 ; DUP @parameter ; IF_LEFT { RENAME @_source_proposed_delegate_slash_3 ; { DIP 2 { DUP @storage } ; DIG 3 } ; { DIP { DUP } ; SWAP } ; CAR @source ; { DIP 2 { DUP } ; DIG 3 } ; CDR @proposed_delegate ; AMOUNT @amount ; { DIP 3 { DUP @prev } ; DIG 4 } ; DUP ; CAR %deposits ; SWAP ; CDR ; CDR ; { DIP 2 { DUP @amount } ; DIG 3 } ; { DIP 6 { DUP @prev } ; DIG 7 } ; { CDR ; CAR %total } ; ADD ; PAIR %total ; SWAP ; PAIR @curr %deposits ; { DIP 4 { DUP @prev } ; DIG 5 } ; { CDR ; CDR ; CAR %destination } ; IMPLICIT_ACCOUNT ; { DIP 2 { DUP @amount } ; DIG 3 } ; UNIT ; TRANSFER_TOKENS @op ; { DIP { DUP @curr } ; SWAP } ; CDR ; { DIP 2 { DUP @curr } ; DIG 3 } ; CAR %deposits ; { DIP 7 { DUP @prev } ; DIG 8 } ; CAR %deposits ; { DIP 7 { DUP @source } ; DIG 8 } ; GET ; IF_NONE { { DIP 6 { DUP @source } ; DIG 7 } ; SENDER ; COMPARE ; EQ ; IF { { DIP 5 { DUP @proposed_delegate } ; DIG 6 } } { { DIP 6 { DUP @source } ; DIG 7 } } ; RENAME @delegate ; { DIP 5 { DUP @amount } ; DIG 6 } ; PAIR %deposited %delegate } { { DIP 7 { DUP @source } ; DIG 8 } ; SENDER ; COMPARE ; EQ ; IF { { DIP 6 { DUP @proposed_delegate } ; DIG 7 } } { DUP @r ; CDR %delegate } ; RENAME @delegate ; { DIP 6 { DUP @amount } ; DIG 7 } ; { DIP 2 { DUP @r } ; DIG 3 } ; DIP 3 { DROP } ; CAR %deposited ; ADD ; PAIR %deposited %delegate } ; RENAME @record ; { DIP 7 { DUP @source } ; DIG 8 } ; DIP { SOME } ; DIP 5 { DROP ; DROP ; DROP ; DROP ; DROP ; DROP } ; UPDATE ; PAIR @curr %deposits ; NIL operation ; { DIP 2 { DUP } ; DIG 3 } ; DIP 3 { DROP } ; CONS ; PAIR } { RENAME @destination_slash_15 ; { DIP 2 { DUP @storage } ; DIG 3 } ; DUP @prev ; { CDR ; CDR ; CDR @admin %admin } ; SENDER ; COMPARE ; EQ ; IF { DUP @prev ; DUP ; CAR %deposits ; SWAP ; CDR ; DUP ; CAR %total ; SWAP ; CDR ; CDR %admin ; { DIP 4 { DUP @destination } ; DIG 5 } ; PAIR %destination %admin ; SWAP ; PAIR %total ; SWAP ; PAIR %deposits ; NIL operation ; PAIR } { DUP @prev ; NIL operation ; PAIR } ; DIP { DROP ; DROP } } ; DIP { DROP ; DROP } }