refactor: Use new hybrid structs for Curve
This commit is contained in:
@@ -142,8 +142,8 @@ pub fn store_balances(deltas: BlockBalanceDeltas, store: StoreAddBigInt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// This is the main map that handles most of the indexing of this substream.
|
/// This is the main map that handles most of the indexing of this substream.
|
||||||
/// Every contract change is grouped by transaction index via the `transaction_contract_changes`
|
/// Every change is grouped by transaction index via the `transaction_changes`
|
||||||
/// map. Each block of code will extend the `TransactionContractChanges` struct with the
|
/// map. Each block of code will extend the `TransactionChanges` struct with the
|
||||||
/// cooresponding changes (balance, component, contract), inserting a new one if it doesn't exist.
|
/// cooresponding changes (balance, component, contract), inserting a new one if it doesn't exist.
|
||||||
/// At the very end, the map can easily be sorted by index to ensure the final
|
/// At the very end, the map can easily be sorted by index to ensure the final
|
||||||
/// `BlockContractChanges` is ordered by transactions properly.
|
/// `BlockContractChanges` is ordered by transactions properly.
|
||||||
@@ -154,25 +154,26 @@ pub fn map_protocol_changes(
|
|||||||
deltas: BlockBalanceDeltas,
|
deltas: BlockBalanceDeltas,
|
||||||
components_store: StoreGetString,
|
components_store: StoreGetString,
|
||||||
balance_store: StoreDeltas, // Note, this map module is using the `deltas` mode for the store.
|
balance_store: StoreDeltas, // Note, this map module is using the `deltas` mode for the store.
|
||||||
) -> Result<BlockContractChanges> {
|
) -> Result<BlockChanges> {
|
||||||
// We merge contract changes by transaction (identified by transaction index) making it easy to
|
// We merge contract changes by transaction (identified by transaction index) making it easy to
|
||||||
// sort them at the very end.
|
// sort them at the very end.
|
||||||
let mut transaction_contract_changes: HashMap<_, TransactionContractChanges> = HashMap::new();
|
let mut transaction_changes: HashMap<_, TransactionChanges> = HashMap::new();
|
||||||
|
|
||||||
// `ProtocolComponents` are gathered from `map_pools_created` which just need a bit of work to
|
// `ProtocolComponents` are gathered from `map_pools_created` which just need a bit of work to
|
||||||
// convert into `TransactionContractChanges`
|
// convert into `TransactionChanges`
|
||||||
grouped_components
|
grouped_components
|
||||||
.tx_components
|
.tx_components
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.for_each(|tx_component| {
|
.for_each(|tx_component| {
|
||||||
let tx = tx_component.tx.as_ref().unwrap();
|
let tx = tx_component.tx.as_ref().unwrap();
|
||||||
transaction_contract_changes
|
transaction_changes
|
||||||
.entry(tx.index)
|
.entry(tx.index)
|
||||||
.or_insert_with(|| TransactionContractChanges {
|
.or_insert_with(|| TransactionChanges {
|
||||||
tx: Some(tx.clone()),
|
tx: Some(tx.clone()),
|
||||||
contract_changes: vec![],
|
contract_changes: vec![],
|
||||||
component_changes: vec![],
|
component_changes: vec![],
|
||||||
balance_changes: vec![],
|
balance_changes: vec![],
|
||||||
|
entity_changes: vec![],
|
||||||
})
|
})
|
||||||
.component_changes
|
.component_changes
|
||||||
.extend_from_slice(
|
.extend_from_slice(
|
||||||
@@ -214,19 +215,20 @@ pub fn map_protocol_changes(
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
// We need to group the balance changes by tx hash for the `TransactionContractChanges` agg
|
// We need to group the balance changes by tx hash for the `TransactionChanges` agg
|
||||||
.chunk_by(|(tx, _)| TransactionWrapper(tx.clone()))
|
.chunk_by(|(tx, _)| TransactionWrapper(tx.clone()))
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.for_each(|(tx_wrapped, group)| {
|
.for_each(|(tx_wrapped, group)| {
|
||||||
let tx = tx_wrapped.0;
|
let tx = tx_wrapped.0;
|
||||||
|
|
||||||
transaction_contract_changes
|
transaction_changes
|
||||||
.entry(tx.index)
|
.entry(tx.index)
|
||||||
.or_insert_with(|| TransactionContractChanges {
|
.or_insert_with(|| TransactionChanges {
|
||||||
tx: Some(tx.clone()),
|
tx: Some(tx.clone()),
|
||||||
contract_changes: vec![],
|
contract_changes: vec![],
|
||||||
component_changes: vec![],
|
component_changes: vec![],
|
||||||
balance_changes: vec![],
|
balance_changes: vec![],
|
||||||
|
entity_changes: vec![],
|
||||||
})
|
})
|
||||||
.balance_changes
|
.balance_changes
|
||||||
.extend(group.map(|(_, change)| change));
|
.extend(group.map(|(_, change)| change));
|
||||||
@@ -242,10 +244,10 @@ pub fn map_protocol_changes(
|
|||||||
.get_last(format!("pool:{0}", hex::encode(addr)))
|
.get_last(format!("pool:{0}", hex::encode(addr)))
|
||||||
.is_some()
|
.is_some()
|
||||||
},
|
},
|
||||||
&mut transaction_contract_changes,
|
&mut transaction_changes,
|
||||||
);
|
);
|
||||||
|
|
||||||
for change in transaction_contract_changes.values_mut() {
|
for change in transaction_changes.values_mut() {
|
||||||
for balance_change in change.balance_changes.iter_mut() {
|
for balance_change in change.balance_changes.iter_mut() {
|
||||||
replace_eth_address(&mut balance_change.token);
|
replace_eth_address(&mut balance_change.token);
|
||||||
}
|
}
|
||||||
@@ -257,9 +259,9 @@ pub fn map_protocol_changes(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process all `transaction_contract_changes` for final output in the `BlockContractChanges`,
|
// Process all `transaction_changes` for final output in the `BlockContractChanges`,
|
||||||
// sorted by transaction index (the key).
|
// sorted by transaction index (the key).
|
||||||
Ok(BlockContractChanges {
|
Ok(BlockChanges {
|
||||||
block: Some(Block {
|
block: Some(Block {
|
||||||
number: block.number,
|
number: block.number,
|
||||||
hash: block.hash.clone(),
|
hash: block.hash.clone(),
|
||||||
@@ -271,7 +273,7 @@ pub fn map_protocol_changes(
|
|||||||
.clone(),
|
.clone(),
|
||||||
ts: block.timestamp_seconds(),
|
ts: block.timestamp_seconds(),
|
||||||
}),
|
}),
|
||||||
changes: transaction_contract_changes
|
changes: transaction_changes
|
||||||
.drain()
|
.drain()
|
||||||
.sorted_unstable_by_key(|(index, _)| *index)
|
.sorted_unstable_by_key(|(index, _)| *index)
|
||||||
.filter_map(|(_, change)| {
|
.filter_map(|(_, change)| {
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ modules:
|
|||||||
- store: store_balances
|
- store: store_balances
|
||||||
mode: deltas # This is the key property that simplifies `BalanceChange` handling
|
mode: deltas # This is the key property that simplifies `BalanceChange` handling
|
||||||
output:
|
output:
|
||||||
type: proto:tycho.evm.v1.BlockContractChanges
|
type: proto:tycho.evm.v1.BlockChanges
|
||||||
|
|
||||||
params:
|
params:
|
||||||
map_components: "address=bebc44782c7db0a1a60cb6fe97d0b483032ff1c7&tx_hash=20793bbf260912aae189d5d261ff003c9b9166da8191d8f9d63ff1c7722f3ac6&tokens[]=6b175474e89094c44da98b954eedeac495271d0f&tokens[]=a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&tokens[]=dac17f958d2ee523a2206206994597c13d831ec7&attribute_keys[]=name&attribute_vals[]=3pool&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=dc24316b9ae028f1497c275eb9192a3ea0f67022&tx_hash=fac67ecbd423a5b915deff06045ec9343568edaec34ae95c43d35f2c018afdaa&tokens[]=eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee&tokens[]=ae7ab96520de3a18e5e111b5eaab095312d7fe84&attribute_keys[]=name&attribute_vals[]=steth&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=d51a44d3fae010294c616388b506acda1bfaae46&tx_hash=dafb6385ed988ce8aacecfe1d97b38ea5e60b1ebce74d2423f71ddd621680138&tokens[]=dac17f958d2ee523a2206206994597c13d831ec7&tokens[]=2260fac5e5542a773aa44fbcfedf7c193bc2c599&tokens[]=c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&attribute_keys[]=name&attribute_vals[]=tricrypto2&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=a5407eae9ba41422680e2e00537571bcc53efbfd&tx_hash=51aca4a03a395de8855fa2ca59b7febe520c2a223e69c502066162f7c1a95ec2&tokens[]=6b175474e89094c44da98b954eedeac495271d0f&tokens[]=a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&tokens[]=dac17f958d2ee523a2206206994597c13d831ec7&tokens[]=57ab1ec28d129707052df4df418d58a2d46d5f51&attribute_keys[]=name&attribute_vals[]=susd&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=dcef968d416a41cdac0ed8702fac8128a64241a2&tx_hash=1f4254004ce9e19d4eb742ee5a69d30f29085902d976f73e97c44150225ef775&tokens[]=853d955acef822db058eb8505911ed77f175b99e&tokens[]=a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&attribute_keys[]=name&attribute_vals[]=fraxusdc&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000"
|
map_components: "address=bebc44782c7db0a1a60cb6fe97d0b483032ff1c7&tx_hash=20793bbf260912aae189d5d261ff003c9b9166da8191d8f9d63ff1c7722f3ac6&tokens[]=6b175474e89094c44da98b954eedeac495271d0f&tokens[]=a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&tokens[]=dac17f958d2ee523a2206206994597c13d831ec7&attribute_keys[]=name&attribute_vals[]=3pool&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=dc24316b9ae028f1497c275eb9192a3ea0f67022&tx_hash=fac67ecbd423a5b915deff06045ec9343568edaec34ae95c43d35f2c018afdaa&tokens[]=eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee&tokens[]=ae7ab96520de3a18e5e111b5eaab095312d7fe84&attribute_keys[]=name&attribute_vals[]=steth&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=d51a44d3fae010294c616388b506acda1bfaae46&tx_hash=dafb6385ed988ce8aacecfe1d97b38ea5e60b1ebce74d2423f71ddd621680138&tokens[]=dac17f958d2ee523a2206206994597c13d831ec7&tokens[]=2260fac5e5542a773aa44fbcfedf7c193bc2c599&tokens[]=c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&attribute_keys[]=name&attribute_vals[]=tricrypto2&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=a5407eae9ba41422680e2e00537571bcc53efbfd&tx_hash=51aca4a03a395de8855fa2ca59b7febe520c2a223e69c502066162f7c1a95ec2&tokens[]=6b175474e89094c44da98b954eedeac495271d0f&tokens[]=a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&tokens[]=dac17f958d2ee523a2206206994597c13d831ec7&tokens[]=57ab1ec28d129707052df4df418d58a2d46d5f51&attribute_keys[]=name&attribute_vals[]=susd&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000,address=dcef968d416a41cdac0ed8702fac8128a64241a2&tx_hash=1f4254004ce9e19d4eb742ee5a69d30f29085902d976f73e97c44150225ef775&tokens[]=853d955acef822db058eb8505911ed77f175b99e&tokens[]=a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&attribute_keys[]=name&attribute_vals[]=fraxusdc&attribute_keys[]=factory_name&attribute_vals[]=NA&attribute_keys[]=factory&attribute_vals[]=0x0000000000000000000000000000000000000000"
|
||||||
|
|||||||
Reference in New Issue
Block a user