x
277
{ parameter (or (or (address %propose_administrator) (address %remove_administrator)) (or (unit %set_administrator) (or (list %set_aggregation_path (pair (address %oracle) (pair (option %symbol string) (pair (option %validity_in_seconds int) (pair (nat %price_precision_factor) (bool %reverse)))))) (nat %set_price_precision_factor)))) ; storage (pair (pair (big_map %administrators address nat) (list %aggregation_path (pair (address %oracle) (pair (option %symbol string) (pair (option %validity_in_seconds int) (pair (nat %price_precision_factor) (bool %reverse))))))) (pair (big_map %metadata string bytes) (nat %price_precision_factor))) ; code { LAMBDA (pair unit (pair (pair (big_map address nat) (list (pair address (pair (option string) (pair (option int) (pair nat bool)))))) (pair (big_map string bytes) nat))) (pair unit (pair (pair (big_map address nat) (list (pair address (pair (option string) (pair (option int) (pair nat bool)))))) (pair (big_map string bytes) nat))) { CDR ; DUP ; CAR ; CAR ; PUSH nat 1 ; SWAP ; SENDER ; GET ; IF_NONE { PUSH int 21 ; FAILWITH } {} ; COMPARE ; EQ ; IF {} { PUSH int 401 ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; UNPAIR ; UNPAIR ; PUSH (option nat) (Some 0) ; DIG 4 ; UPDATE ; PAIR ; PAIR } { AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; UNPAIR ; UNPAIR ; NONE nat ; DIG 4 ; UPDATE ; PAIR ; PAIR } } { IF_LEFT { DROP ; SWAP ; DROP ; AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; DUP ; CAR ; CAR ; PUSH nat 0 ; SWAP ; SENDER ; GET ; IF_NONE { PUSH int 46 ; FAILWITH } {} ; COMPARE ; EQ ; IF {} { PUSH int 405 ; FAILWITH } ; UNPAIR ; UNPAIR ; PUSH (option nat) (Some 1) ; SENDER ; UPDATE ; PAIR ; PAIR } { IF_LEFT { AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; UNPAIR ; CAR ; DIG 2 ; SWAP ; PAIR ; PAIR } { AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; DIG 2 ; UNIT ; SWAP ; DIG 3 ; DIG 2 ; PAIR ; EXEC ; CDR ; SWAP ; UPDATE 4 } } } ; NIL operation ; PAIR } ; view "get_price" unit nat { UNPAIR ; SWAP ; DUP ; DUG 2 ; GET 4 ; DUP 3 ; CAR ; CDR ; ITER { DUP ; GET 3 ; IF_NONE { DUP ; CAR ; UNIT ; VIEW "get_price" nat ; IF_NONE { PUSH string "Invalid view: get_price" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; GET 7 ; DUP 6 ; GET 4 ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 123 ; FAILWITH } { CAR } } { DROP ; DUP ; GET 5 ; IF_NONE { DUP ; CAR ; SWAP ; DUP ; DUG 2 ; GET 3 ; IF_NONE { PUSH int 90 ; FAILWITH } {} ; VIEW "get_price" nat ; IF_NONE { PUSH string "Invalid view: get_price" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; GET 7 ; DUP 6 ; GET 4 ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 114 ; FAILWITH } { CAR } } { DROP ; DUP ; CAR ; SWAP ; DUP ; DUG 2 ; GET 3 ; IF_NONE { PUSH int 90 ; FAILWITH } {} ; VIEW "get_price_with_timestamp" (pair (nat %price) (timestamp %last_update_timestamp)) ; IF_NONE { PUSH string "Invalid view: get_price_with_timestamp" ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; GET 5 ; IF_NONE { PUSH int 97 ; FAILWITH } {} ; SWAP ; DUP ; DUG 2 ; CDR ; ADD ; NOW ; COMPARE ; LE ; IF {} { PUSH string "PriceTooOld" ; FAILWITH } ; SWAP ; DUP ; DUG 2 ; GET 7 ; DUP 6 ; GET 4 ; DIG 2 ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 104 ; FAILWITH } { CAR } } } ; PUSH bool True ; DIG 2 ; GET 8 ; COMPARE ; EQ ; IF { DIG 3 ; DUP ; GET 4 ; SWAP ; DUP ; DUG 5 ; GET 4 ; MUL ; EDIV ; IF_NONE { PUSH int 130 ; FAILWITH } { CAR } } {} ; DUP 4 ; GET 4 ; SWAP ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 136 ; FAILWITH } { CAR } } ; SWAP ; DROP ; SWAP ; DROP } }