x
275
{ parameter (or (or (contract %get_price nat) (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 ; PUSH nat 1 ; DUP 2 ; CAR ; CAR ; SENDER ; GET ; IF_NONE { PUSH int 21 ; FAILWITH } {} ; COMPARE ; EQ ; IF {} { PUSH int 401 ; FAILWITH } ; UNIT ; PAIR } ; SWAP ; UNPAIR ; IF_LEFT { IF_LEFT { DIG 2 ; DROP ; AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; SELF_ADDRESS ; UNIT ; VIEW "get_price_view" nat ; IF_NONE { PUSH int 192 ; FAILWITH } {} ; NIL operation ; DIG 2 ; PUSH mutez 0 ; DIG 3 ; TRANSFER_TOKENS ; CONS } { 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 } ; NIL operation } } { IF_LEFT { DROP ; SWAP ; DROP ; AMOUNT ; PUSH mutez 0 ; COMPARE ; EQ ; IF {} { AMOUNT ; FAILWITH } ; PUSH nat 0 ; DUP 2 ; CAR ; CAR ; 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_view" unit nat { UNPAIR ; DUP 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 } {} ; DUP 2 ; GET 7 ; DUP 6 ; GET 4 ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 243 ; FAILWITH } { CAR } } { DROP ; DUP ; GET 5 ; IF_NONE { DUP ; CAR ; DUP 2 ; GET 3 ; IF_NONE { PUSH int 210 ; FAILWITH } {} ; VIEW "get_price" nat ; IF_NONE { PUSH string "Invalid view: get_price" ; FAILWITH } {} ; DUP 2 ; GET 7 ; DUP 6 ; GET 4 ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 233 ; FAILWITH } { CAR } } { DROP ; DUP ; CAR ; DUP 2 ; GET 3 ; IF_NONE { PUSH int 210 ; FAILWITH } {} ; VIEW "get_price_with_timestamp" (pair (nat %price) (timestamp %last_update_timestamp)) ; IF_NONE { PUSH string "Invalid view: get_price_with_timestamp" ; FAILWITH } {} ; DUP 2 ; GET 5 ; IF_NONE { PUSH int 217 ; FAILWITH } {} ; DUP 2 ; CDR ; ADD ; NOW ; COMPARE ; LE ; IF {} { PUSH string "PriceTooOld" ; FAILWITH } ; DUP 2 ; GET 7 ; DUP 6 ; GET 4 ; DIG 2 ; CAR ; MUL ; EDIV ; IF_NONE { PUSH int 224 ; FAILWITH } { CAR } } } ; PUSH bool True ; DIG 2 ; GET 8 ; COMPARE ; EQ ; IF { DUP 4 ; GET 4 ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 250 ; FAILWITH } { CAR } } { DUP 4 ; GET 4 ; SWAP ; DIG 2 ; MUL ; EDIV ; IF_NONE { PUSH int 254 ; FAILWITH } { CAR } } } ; SWAP ; DROP ; SWAP ; DROP } }