瀏覽代碼

feat: complete governance event implementation

- Add GovernanceDataSourceSet event for authorize_governance_transfer()
- Add DataSourcesSet event for set_data_sources()
- All governance instructions now emit corresponding events
- Maintains cross-chain consistency with Fuel/Starknet implementations

Co-Authored-By: ayush.suresh@dourolabs.xyz <byteSlayer31037@gmail.com>
Devin AI 4 月之前
父節點
當前提交
c783efadaf
共有 1 個文件被更改,包括 17 次插入1 次删除
  1. 17 1
      target_chains/stylus/contracts/pyth-receiver/src/lib.rs

+ 17 - 1
target_chains/stylus/contracts/pyth-receiver/src/lib.rs

@@ -52,6 +52,7 @@ sol! {
     event FeeWithdrawn(address indexed target_address, uint256 fee_amount);
     event ValidPeriodSet(uint256 indexed old_valid_period, uint256 indexed new_valid_period);
     event DataSourcesSet(bytes32[] old_data_sources, bytes32[] new_data_sources);
+    event GovernanceDataSourceSet(uint16 old_chain_id, bytes32 old_emitter_address, uint16 new_chain_id, bytes32 new_emitter_address, uint64 initial_sequence);
 }
 
 sol_interface! {
@@ -726,7 +727,13 @@ impl PythReceiver {
         self.last_executed_governance_sequence
             .set(U64::from(last_executed_governance_sequence));
 
-        // TODO: EVENT
+        evm::log(GovernanceDataSourceSet {
+            old_chain_id: current_index as u16,
+            old_emitter_address: self.governance_data_source_emitter_address.get(),
+            new_chain_id: claim_vm.body.emitter_chain,
+            new_emitter_address: FixedBytes::from(emitter_bytes),
+            initial_sequence: last_executed_governance_sequence,
+        });
 
         Ok(())
     }
@@ -802,18 +809,21 @@ fn parse_wormhole_proof(vaa: Vaa) -> Result<MerkleRoot<Keccak160>, PythReceiverE
 }
 
 fn set_data_sources(receiver: &mut PythReceiver, data_sources: Vec<DataSource>) {
+    let mut old_data_sources = Vec::new();
     for i in 0..receiver.valid_data_sources.len() {
         if let Some(storage_data_source) = receiver.valid_data_sources.get(i) {
             let data_source = DataSource {
                 chain_id: storage_data_source.chain_id.get(),
                 emitter_address: storage_data_source.emitter_address.get(),
             };
+            old_data_sources.push(data_source.emitter_address);
             receiver.is_valid_data_source.setter(data_source).set(false);
         }
     }
     
     receiver.valid_data_sources.erase();
     
+    let mut new_data_sources = Vec::new();
     for data_source in data_sources {
         let mut storage_data_source = receiver.valid_data_sources.grow();
         storage_data_source.chain_id.set(data_source.chain_id);
@@ -821,6 +831,12 @@ fn set_data_sources(receiver: &mut PythReceiver, data_sources: Vec<DataSource>)
             .emitter_address
             .set(data_source.emitter_address);
 
+        new_data_sources.push(data_source.emitter_address);
         receiver.is_valid_data_source.setter(data_source).set(true);
     }
+
+    evm::log(DataSourcesSet {
+        old_data_sources,
+        new_data_sources,
+    });
 }