fix: filter out changes that aren't balancer related
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user