fix: filter out changes that aren't balancer related

This commit is contained in:
Florian Pellissier
2024-03-11 17:50:12 +01:00
parent 51275f0ccf
commit accfa074fd

View File

@@ -97,77 +97,98 @@ pub fn extract_contract_changes(
balance_changes.sort_unstable_by_key(|change| change.ordinal); balance_changes.sort_unstable_by_key(|change| change.ordinal);
code_changes.sort_unstable_by_key(|change| change.ordinal); code_changes.sort_unstable_by_key(|change| change.ordinal);
storage_changes.iter().for_each(|storage_change| { storage_changes
let contract_change = changed_contracts .iter()
.entry(storage_change.address.clone()) .filter(|changes| {
.or_insert_with(|| InterimContractChange { contracts
address: storage_change.address.clone(), .get_last(format!("pool:{0}", hex::encode(&changes.address)))
balance: Vec::new(), .is_some()
code: Vec::new(), })
slots: HashMap::new(), .for_each(|storage_change| {
change: if created_accounts.contains_key(&storage_change.address) { let contract_change = changed_contracts
tycho::ChangeType::Creation .entry(storage_change.address.clone())
} else { .or_insert_with(|| InterimContractChange {
tycho::ChangeType::Update address: storage_change.address.clone(),
}, balance: Vec::new(),
}); code: Vec::new(),
slots: HashMap::new(),
change: if created_accounts.contains_key(&storage_change.address) {
tycho::ChangeType::Creation
} else {
tycho::ChangeType::Update
},
});
let slot_value = contract_change let slot_value = contract_change
.slots .slots
.entry(storage_change.key.clone()) .entry(storage_change.key.clone())
.or_insert_with(|| SlotValue { .or_insert_with(|| SlotValue {
new_value: storage_change.new_value.clone(), new_value: storage_change.new_value.clone(),
start_value: storage_change.old_value.clone(), start_value: storage_change.old_value.clone(),
}); });
slot_value slot_value
.new_value .new_value
.copy_from_slice(&storage_change.new_value); .copy_from_slice(&storage_change.new_value);
}); });
balance_changes.iter().for_each(|balance_change| { balance_changes
let contract_change = changed_contracts .iter()
.entry(balance_change.address.clone()) .filter(|changes| {
.or_insert_with(|| InterimContractChange { contracts
address: balance_change.address.clone(), .get_last(format!("pool:{0}", hex::encode(&changes.address)))
balance: Vec::new(), .is_some()
code: Vec::new(), })
slots: HashMap::new(), .for_each(|balance_change| {
change: if created_accounts.contains_key(&balance_change.address) { let contract_change = changed_contracts
tycho::ChangeType::Creation .entry(balance_change.address.clone())
} else { .or_insert_with(|| InterimContractChange {
tycho::ChangeType::Update address: balance_change.address.clone(),
}, balance: Vec::new(),
}); code: Vec::new(),
slots: HashMap::new(),
change: if created_accounts.contains_key(&balance_change.address) {
tycho::ChangeType::Creation
} else {
tycho::ChangeType::Update
},
});
if let Some(new_balance) = &balance_change.new_value { if let Some(new_balance) = &balance_change.new_value {
contract_change.balance.clear(); contract_change.balance.clear();
contract_change
.balance
.extend_from_slice(&new_balance.bytes);
}
});
code_changes
.iter()
.filter(|changes| {
contracts
.get_last(format!("pool:{0}", hex::encode(&changes.address)))
.is_some()
})
.for_each(|code_change| {
let contract_change = changed_contracts
.entry(code_change.address.clone())
.or_insert_with(|| InterimContractChange {
address: code_change.address.clone(),
balance: Vec::new(),
code: Vec::new(),
slots: HashMap::new(),
change: if created_accounts.contains_key(&code_change.address) {
tycho::ChangeType::Creation
} else {
tycho::ChangeType::Update
},
});
contract_change.code.clear();
contract_change contract_change
.balance .code
.extend_from_slice(&new_balance.bytes); .extend_from_slice(&code_change.new_code);
} });
});
code_changes.iter().for_each(|code_change| {
let contract_change = changed_contracts
.entry(code_change.address.clone())
.or_insert_with(|| InterimContractChange {
address: code_change.address.clone(),
balance: Vec::new(),
code: Vec::new(),
slots: HashMap::new(),
change: if created_accounts.contains_key(&code_change.address) {
tycho::ChangeType::Creation
} else {
tycho::ChangeType::Update
},
});
contract_change.code.clear();
contract_change
.code
.extend_from_slice(&code_change.new_code);
});
if !storage_changes.is_empty() || !balance_changes.is_empty() || !code_changes.is_empty() { if !storage_changes.is_empty() || !balance_changes.is_empty() || !code_changes.is_empty() {
transaction_contract_changes transaction_contract_changes