@@ -9,11 +9,9 @@ pub use pyth::{Event, PriceFeedUpdateEvent};
9
9
pub trait IPyth <T > {
10
10
fn get_price_unsafe (self : @ T , price_id : u256 ) -> Result <Price , GetPriceUnsafeError >;
11
11
fn get_ema_price_unsafe (self : @ T , price_id : u256 ) -> Result <Price , GetPriceUnsafeError >;
12
- fn set_data_sources (
13
- ref self : T , sources : Array <DataSource >
14
- ) -> Result <(), GovernanceActionError >;
15
- fn set_fee (ref self : T , single_update_fee : u256 ) -> Result <(), GovernanceActionError >;
16
- fn update_price_feeds (ref self : T , data : ByteArray ) -> Result <(), UpdatePriceFeedsError >;
12
+ fn set_data_sources (ref self : T , sources : Array <DataSource >);
13
+ fn set_fee (ref self : T , single_update_fee : u256 );
14
+ fn update_price_feeds (ref self : T , data : ByteArray );
17
15
}
18
16
19
17
#[derive(Copy , Drop , Debug , Serde , PartialEq )]
@@ -333,51 +331,44 @@ mod pyth {
333
331
Result :: Ok (price )
334
332
}
335
333
336
- fn set_data_sources (
337
- ref self : ContractState , sources : Array <DataSource >
338
- ) -> Result <(), GovernanceActionError > {
334
+ fn set_data_sources (ref self : ContractState , sources : Array <DataSource >) {
339
335
if self . owner. read () != get_caller_address () {
340
- return Result :: Err (GovernanceActionError :: AccessDenied );
336
+ panic_with_felt252 (GovernanceActionError :: AccessDenied . into () );
341
337
}
342
338
write_data_sources (ref self , sources );
343
- Result :: Ok (())
344
339
}
345
340
346
- fn set_fee (
347
- ref self : ContractState , single_update_fee : u256
348
- ) -> Result <(), GovernanceActionError > {
341
+ fn set_fee (ref self : ContractState , single_update_fee : u256 ) {
349
342
if self . owner. read () != get_caller_address () {
350
- return Result :: Err (GovernanceActionError :: AccessDenied );
343
+ panic_with_felt252 (GovernanceActionError :: AccessDenied . into () );
351
344
}
352
345
self . single_update_fee. write (single_update_fee );
353
- Result :: Ok (())
354
346
}
355
347
356
- fn update_price_feeds (
357
- ref self : ContractState , data : ByteArray
358
- ) -> Result <(), UpdatePriceFeedsError > {
348
+ fn update_price_feeds (ref self : ContractState , data : ByteArray ) {
359
349
let mut reader = ReaderImpl :: new (data );
360
350
let x = reader . read_u32 ();
361
351
if x != ACCUMULATOR_MAGIC {
362
- return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData );
352
+ panic_with_felt252 (UpdatePriceFeedsError :: InvalidUpdateData . into () );
363
353
}
364
354
if reader . read_u8 () != MAJOR_VERSION {
365
- return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData );
355
+ panic_with_felt252 (UpdatePriceFeedsError :: InvalidUpdateData . into () );
366
356
}
367
357
if reader . read_u8 () < MINIMUM_ALLOWED_MINOR_VERSION {
368
- return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData );
358
+ panic_with_felt252 (UpdatePriceFeedsError :: InvalidUpdateData . into () );
369
359
}
370
360
371
361
let trailing_header_size = reader . read_u8 ();
372
362
reader . skip (trailing_header_size );
373
363
374
- let update_type : Option <UpdateType > = reader . read_u8 (). try_into ();
364
+ let update_type : UpdateType = reader
365
+ . read_u8 ()
366
+ . try_into ()
367
+ . expect (UpdatePriceFeedsError :: InvalidUpdateData . into ());
368
+
375
369
match update_type {
376
- Option :: Some (v ) => match v {
377
- UpdateType :: WormholeMerkle => {}
378
- },
379
- Option :: None => { return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData ); }
380
- };
370
+ UpdateType :: WormholeMerkle => {}
371
+ }
381
372
382
373
let wh_proof_size = reader . read_u16 ();
383
374
let wh_proof = reader . read_byte_array (wh_proof_size . into ());
@@ -388,22 +379,23 @@ mod pyth {
388
379
emitter_chain_id : vm . emitter_chain_id, emitter_address : vm . emitter_address
389
380
};
390
381
if ! self . is_valid_data_source. read (source ) {
391
- return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateDataSource );
382
+ panic_with_felt252 (UpdatePriceFeedsError :: InvalidUpdateDataSource . into () );
392
383
}
393
384
394
385
let mut payload_reader = ReaderImpl :: new (vm . payload);
395
386
let x = payload_reader . read_u32 ();
396
387
if x != ACCUMULATOR_WORMHOLE_MAGIC {
397
- return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData );
388
+ panic_with_felt252 (UpdatePriceFeedsError :: InvalidUpdateData . into () );
398
389
}
399
390
400
- let update_type : Option <UpdateType > = payload_reader . read_u8 (). try_into ();
391
+ let update_type : UpdateType = payload_reader
392
+ . read_u8 ()
393
+ . try_into ()
394
+ . expect (UpdatePriceFeedsError :: InvalidUpdateData . into ());
395
+
401
396
match update_type {
402
- Option :: Some (v ) => match v {
403
- UpdateType :: WormholeMerkle => {}
404
- },
405
- Option :: None => { return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData ); }
406
- };
397
+ UpdateType :: WormholeMerkle => {}
398
+ }
407
399
408
400
let _slot = payload_reader . read_u64 ();
409
401
let _ring_size = payload_reader . read_u32 ();
@@ -419,50 +411,39 @@ mod pyth {
419
411
let caller = execution_info . caller_address;
420
412
let contract = execution_info . contract_address;
421
413
if fee_contract . allowance (caller , contract ) < total_fee {
422
- return Result :: Err (UpdatePriceFeedsError :: InsufficientFeeAllowance );
414
+ panic_with_felt252 (UpdatePriceFeedsError :: InsufficientFeeAllowance . into () );
423
415
}
424
416
if ! fee_contract . transferFrom (caller , contract , total_fee ) {
425
- return Result :: Err (UpdatePriceFeedsError :: InsufficientFeeAllowance );
417
+ panic_with_felt252 (UpdatePriceFeedsError :: InsufficientFeeAllowance . into () );
426
418
}
427
419
428
420
let mut i = 0 ;
429
- let mut result = Result :: Ok (());
430
421
while i < num_updates {
431
- let r = read_and_verify_message (ref reader , root_digest );
432
- match r {
433
- Result :: Ok (message ) => { update_latest_price_if_necessary (ref self , message ); },
434
- Result :: Err (err ) => {
435
- result = Result :: Err (err );
436
- break ;
437
- }
438
- }
422
+ let message = read_and_verify_message (ref reader , root_digest );
423
+ update_latest_price_if_necessary (ref self , message );
439
424
i += 1 ;
440
425
};
441
- result ? ;
442
426
443
427
if reader . len () != 0 {
444
- return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData );
428
+ panic_with_felt252 (UpdatePriceFeedsError :: InvalidUpdateData . into () );
445
429
}
446
-
447
- Result :: Ok (())
448
430
}
449
431
}
450
432
451
- fn read_and_verify_message (
452
- ref reader : Reader , root_digest : u256
453
- ) -> Result <PriceFeedMessage , UpdatePriceFeedsError > {
433
+ fn read_and_verify_message (ref reader : Reader , root_digest : u256 ) -> PriceFeedMessage {
454
434
let message_size = reader . read_u16 ();
455
435
let message = reader . read_byte_array (message_size . into ());
456
- read_and_verify_proof (root_digest , @ message , ref reader ). map_err () ? ;
436
+ read_and_verify_proof (root_digest , @ message , ref reader );
457
437
458
438
let mut message_reader = ReaderImpl :: new (message );
459
- let message_type : Option <MessageType > = message_reader . read_u8 (). try_into ();
439
+ let message_type : MessageType = message_reader
440
+ . read_u8 ()
441
+ . try_into ()
442
+ . expect (UpdatePriceFeedsError :: InvalidUpdateData . into ());
443
+
460
444
match message_type {
461
- Option :: Some (v ) => match v {
462
- MessageType :: PriceFeed => {}
463
- },
464
- Option :: None => { return Result :: Err (UpdatePriceFeedsError :: InvalidUpdateData ); }
465
- };
445
+ MessageType :: PriceFeed => {}
446
+ }
466
447
467
448
let price_id = message_reader . read_u256 ();
468
449
let price = u64_as_i64 (message_reader . read_u64 ());
@@ -473,10 +454,9 @@ mod pyth {
473
454
let ema_price = u64_as_i64 (message_reader . read_u64 ());
474
455
let ema_conf = message_reader . read_u64 ();
475
456
476
- let message = PriceFeedMessage {
457
+ PriceFeedMessage {
477
458
price_id , price , conf , expo , publish_time , prev_publish_time , ema_price , ema_conf ,
478
- };
479
- Result :: Ok (message )
459
+ }
480
460
}
481
461
482
462
fn update_latest_price_if_necessary (ref self : ContractState , message : PriceFeedMessage ) {
0 commit comments