@@ -547,18 +547,20 @@ impl PythReceiver {
547
547
set_data_sources ( self , payload. sources ) ;
548
548
}
549
549
GovernancePayload :: SetWormholeAddress ( payload) => {
550
- self . set_wormhole_address ( payload. address , data. clone ( ) ) ;
550
+ self . set_wormhole_address ( payload. address , data. clone ( ) ) ? ;
551
551
}
552
552
GovernancePayload :: RequestGovernanceDataSourceTransfer ( _) => {
553
553
return Err ( PythReceiverError :: InvalidGovernanceMessage ) ;
554
554
}
555
555
GovernancePayload :: AuthorizeGovernanceDataSourceTransfer ( payload) => {
556
556
self . authorize_governance_transfer ( payload. claim_vaa ) ;
557
557
}
558
- GovernancePayload :: UpgradeContract ( payload) => { }
559
- GovernancePayload :: SetValidPeriod ( payload) => todo ! ( ) ,
560
- GovernancePayload :: SetTransactionFee ( payload) => todo ! ( ) ,
561
- GovernancePayload :: WithdrawFee ( payload) => todo ! ( ) ,
558
+ GovernancePayload :: UpgradeContract ( _payload) => { }
559
+ GovernancePayload :: SetValidPeriod ( payload) => {
560
+ self . set_valid_period ( payload. valid_time_period_seconds ) ;
561
+ }
562
+ GovernancePayload :: SetTransactionFee ( _payload) => todo ! ( ) ,
563
+ GovernancePayload :: WithdrawFee ( _payload) => todo ! ( ) ,
562
564
}
563
565
564
566
Ok ( ( ) )
@@ -589,27 +591,34 @@ impl PythReceiver {
589
591
590
592
fn set_fee ( & mut self , value : u64 , expo : u64 ) {
591
593
let new_fee = U256 :: from ( value) * U256 :: from ( 10 ) . pow ( U256 :: from ( expo) ) ;
592
- let old_fee = self . single_update_fee_in_wei . get ( ) ;
594
+ let _old_fee = self . single_update_fee_in_wei . get ( ) ;
593
595
594
596
self . single_update_fee_in_wei . set ( new_fee) ;
595
597
596
598
// TODO: HANDLE EVENT EMISSION
597
599
}
598
600
601
+ fn set_valid_period ( & mut self , valid_time_period_seconds : u64 ) {
602
+ let _old_valid_period = self . valid_time_period_seconds . get ( ) ;
603
+ self . valid_time_period_seconds . set ( U256 :: from ( valid_time_period_seconds) ) ;
604
+
605
+ // TODO: HANDLE EVENT EMISSION
606
+ }
607
+
599
608
fn set_wormhole_address (
600
609
& mut self ,
601
610
address : Address ,
602
- data : & Vec < u8 > ,
611
+ data : Vec < u8 > ,
603
612
) -> Result < ( ) , PythReceiverError > {
604
613
let wormhole: IWormholeContract = IWormholeContract :: new ( address) ;
605
614
let config = Call :: new ( ) ;
606
615
wormhole
607
- . parse_and_verify_vm ( config, data)
616
+ . parse_and_verify_vm ( config, data. clone ( ) )
608
617
. map_err ( |_| PythReceiverError :: InvalidGovernanceMessage ) ?;
609
618
610
619
// if !is_valid_governance_data_source()
611
620
612
- let vm = Vaa :: read ( & mut Vec :: from ( data. clone ( ) ) . as_slice ( ) )
621
+ let vm = Vaa :: read ( & mut data. as_slice ( ) )
613
622
. map_err ( |_| PythReceiverError :: VaaVerificationFailed ) ?;
614
623
615
624
if vm. body . emitter_chain != self . governance_data_source_chain_id . get ( ) . to :: < u16 > ( ) {
@@ -659,8 +668,9 @@ impl PythReceiver {
659
668
let instruction = governance_structs:: parse_instruction ( claim_vm. body . payload . to_vec ( ) )
660
669
. map_err ( |_| PythReceiverError :: InvalidGovernanceMessage ) ?;
661
670
671
+ let config2 = Call :: new ( ) ;
662
672
if instruction. target_chain_id != 0
663
- && instruction. target_chain_id != wormhole. chain_id ( ) as u16
673
+ && instruction. target_chain_id != wormhole. chain_id ( config2 ) . unwrap_or ( 0 )
664
674
{
665
675
return Err ( PythReceiverError :: InvalidGovernanceTarget ) ;
666
676
}
@@ -678,19 +688,18 @@ impl PythReceiver {
678
688
}
679
689
680
690
self . governance_data_source_index . set ( U32 :: from ( new_index) ) ;
681
- let old_data_source = self . governance_data_source_index . get ( ) ;
691
+ let _old_data_source = self . governance_data_source_index . get ( ) ;
682
692
683
693
self . governance_data_source_chain_id
684
694
. set ( U16 :: from ( claim_vm. body . emitter_chain ) ) ;
695
+ let emitter_bytes: [ u8 ; 32 ] = claim_vm
696
+ . body
697
+ . emitter_address
698
+ . as_slice ( )
699
+ . try_into ( )
700
+ . map_err ( |_| PythReceiverError :: InvalidEmitterAddress ) ?;
685
701
self . governance_data_source_emitter_address
686
- . set ( FixedBytes :: from (
687
- claim_vm
688
- . body
689
- . emitter_address
690
- . as_slice ( )
691
- . try_into ( )
692
- . map_err ( |_| PythReceiverError :: InvalidEmitterAddress ) ?,
693
- ) ) ;
702
+ . set ( FixedBytes :: from ( emitter_bytes) ) ;
694
703
695
704
let last_executed_governance_sequence = claim_vm. body . sequence . to :: < u64 > ( ) ;
696
705
self . last_executed_governance_sequence
@@ -739,10 +748,8 @@ fn parse_wormhole_proof(vaa: Vaa) -> Result<MerkleRoot<Keccak160>, PythReceiverE
739
748
Ok ( root)
740
749
}
741
750
742
- fn set_data_sources ( & mut receiver: PythReceiver , data_sources : Vec < DataSource > ) {
743
- receiver. valid_data_sources . erase ( ) ; // emptying the data sources
744
- receiver. is_valid_data_source . erase ( ) ;
745
-
751
+ fn set_data_sources ( receiver : & mut PythReceiver , data_sources : Vec < DataSource > ) {
752
+
746
753
for data_source in data_sources {
747
754
let mut storage_data_source = receiver. valid_data_sources . grow ( ) ;
748
755
storage_data_source. chain_id . set ( data_source. chain_id ) ;
0 commit comments