x
201
{ parameter (or
(or (unit %default)
(or (contract %getPrice nat) (address %propose_administrator)))
(or (or (address %remove_administrator) (unit %set_administrator))
(or (address %set_price_oracle)
(list %set_symbol_relation_path (pair (string %symbol)
(bool %inversed)))))) ;
storage (pair (big_map %administrators address int)
(pair (address %generic_oracle)
(list %symbol_relation_path (pair (string %symbol) (bool %inversed))))) ;
code { LAMBDA
(pair unit
(pair (big_map address int) (pair address (list (pair string bool)))))
(pair unit
(pair (big_map address int) (pair address (list (pair string bool)))))
{ CDR ;
DUP ;
CAR ;
PUSH int 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
{ DROP ;
SWAP ;
DROP ;
NIL operation ;
SENDER ;
CONTRACT unit ;
IF_NONE { PUSH int 391 ; FAILWITH } {} ;
AMOUNT ;
UNIT ;
TRANSFER_TOKENS ;
CONS }
{ IF_LEFT
{ DIG 2 ;
DROP ;
AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
NIL operation ;
SWAP ;
PUSH mutez 0 ;
SELF_ADDRESS ;
UNIT ;
VIEW "get_price" nat ;
IF_NONE { PUSH int 502 ; FAILWITH } {} ;
TRANSFER_TOKENS ;
CONS }
{ AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
DIG 2 ;
UNIT ;
SWAP ;
DIG 3 ;
DIG 2 ;
PAIR ;
EXEC ;
CDR ;
DUP ;
CAR ;
PUSH (option int) (Some 0) ;
DIG 3 ;
UPDATE ;
UPDATE 1 ;
NIL operation } } }
{ IF_LEFT
{ IF_LEFT
{ AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
DIG 2 ;
UNIT ;
SWAP ;
DIG 3 ;
DIG 2 ;
PAIR ;
EXEC ;
CDR ;
DUP ;
CAR ;
NONE int ;
DIG 3 ;
UPDATE ;
UPDATE 1 }
{ DROP ;
SWAP ;
DROP ;
AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
DUP ;
CAR ;
PUSH int 0 ;
SWAP ;
SENDER ;
GET ;
IF_NONE { PUSH int 46 ; FAILWITH } {} ;
COMPARE ;
EQ ;
IF {} { PUSH int 405 ; FAILWITH } ;
DUP ;
CAR ;
PUSH (option int) (Some 1) ;
SENDER ;
UPDATE ;
UPDATE 1 } }
{ IF_LEFT
{ AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
DIG 2 ;
UNIT ;
SWAP ;
DIG 3 ;
DIG 2 ;
PAIR ;
EXEC ;
CDR ;
SWAP ;
UPDATE 3 }
{ 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 ;
PUSH nat 1000000 ;
DUP 3 ;
GET 4 ;
ITER { DUP ;
CDR ;
PUSH bool False ;
COMPARE ;
EQ ;
IF
{ PUSH nat 1000000 ;
DUP 5 ;
GET 3 ;
DIG 2 ;
CAR ;
VIEW "get_price" nat ;
IF_NONE { PUSH int 502 ; FAILWITH } {} ;
DIG 2 ;
MUL ;
EDIV ;
IF_NONE { PUSH int 420 ; FAILWITH } { CAR } }
{ DUP 4 ;
GET 3 ;
SWAP ;
CAR ;
VIEW "get_price" nat ;
IF_NONE { PUSH int 502 ; FAILWITH } {} ;
PUSH nat 1000000 ;
DIG 2 ;
MUL ;
EDIV ;
IF_NONE { PUSH int 422 ; FAILWITH } { CAR } } } ;
SWAP ;
DROP ;
SWAP ;
DROP ;
PUSH nat 1000000000 ;
PUSH nat 2718281828 ;
DIG 2 ;
MUL ;
EDIV ;
IF_NONE { PUSH int 423 ; FAILWITH } { CAR } } }