Bläddra i källkod

fix: implement proper data source clearing in set_data_sources

- Iterate through existing valid_data_sources to invalidate them in is_valid_data_source mapping
- Clear the storage vector using truncate(0) before adding new data sources
- Match Solidity PythGovernance.sol behavior: invalidate old sources, clear array, add new sources
- Fix unused Result warning in authorize_governance_transfer call
- All cargo tests pass (13 passed, 0 failed)

Co-Authored-By: ayush.suresh@dourolabs.xyz <byteSlayer31037@gmail.com>
Devin AI 4 månader sedan
förälder
incheckning
38d1f61b50
1 ändrade filer med 12 tillägg och 1 borttagningar
  1. 12 1
      target_chains/stylus/contracts/pyth-receiver/src/lib.rs

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

@@ -553,7 +553,7 @@ impl PythReceiver {
                 return Err(PythReceiverError::InvalidGovernanceMessage);
             }
             GovernancePayload::AuthorizeGovernanceDataSourceTransfer(payload) => {
-                self.authorize_governance_transfer(payload.claim_vaa);
+                self.authorize_governance_transfer(payload.claim_vaa)?;
             }
             GovernancePayload::UpgradeContract(_payload) => {}
             GovernancePayload::SetValidPeriod(payload) => {
@@ -749,6 +749,17 @@ fn parse_wormhole_proof(vaa: Vaa) -> Result<MerkleRoot<Keccak160>, PythReceiverE
 }
 
 fn set_data_sources(receiver: &mut PythReceiver, data_sources: Vec<DataSource>) {
+    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(),
+            };
+            receiver.is_valid_data_source.setter(data_source).set(false);
+        }
+    }
+    
+    receiver.valid_data_sources.truncate(0);
     
     for data_source in data_sources {
         let mut storage_data_source = receiver.valid_data_sources.grow();