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 } }