x
78
parameter (or (contract %get_price nat)
(or (contract %internal_get_price nat) (nat %set_tzbtc_sirs_price)));
storage (pair (pair (address %generic_oracle_address) (string %generic_oracle_symbol))
(pair (address %tzbtc_sirs_oracle_address) (nat %tzbtc_sirs_price)));
code { UNPAIR ;
IF_LEFT
{ AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
NIL operation ;
DUP 3 ;
GET 3 ;
CONTRACT %get_price (contract nat) ;
IF_NONE { PUSH int 165 ; FAILWITH } {} ;
PUSH mutez 0 ;
SELF %set_tzbtc_sirs_price ;
TRANSFER_TOKENS ;
CONS ;
SELF %internal_get_price ;
PUSH mutez 0 ;
DIG 3 ;
TRANSFER_TOKENS ;
CONS }
{ IF_LEFT
{ AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
SELF_ADDRESS ;
SENDER ;
COMPARE ;
EQ ;
IF {} { PUSH int 400 ; FAILWITH } ;
SWAP ;
DUP ;
CAR ;
CAR ;
SWAP ;
DUP ;
DUG 3 ;
CAR ;
CDR ;
VIEW "get_price" nat ;
IF_NONE { PUSH int 502 ; FAILWITH } {} ;
PUSH nat 1000000 ;
DUP 4 ;
GET 4 ;
MUL ;
EDIV ;
IF_NONE { PUSH int 191 ; FAILWITH } { CAR } ;
NIL operation ;
DIG 2 ;
PUSH mutez 0 ;
DIG 3 ;
TRANSFER_TOKENS ;
CONS }
{ AMOUNT ;
PUSH mutez 0 ;
COMPARE ;
EQ ;
IF {} { AMOUNT ; FAILWITH } ;
SWAP ;
DUP ;
DUG 2 ;
GET 3 ;
SENDER ;
COMPARE ;
EQ ;
IF {} { PUSH int 504 ; FAILWITH } ;
UPDATE 4 ;
NIL operation } } ;
NIL operation ;
SWAP ;
ITER { CONS } ;
PAIR }