Tracking Contract Balances
Implementation Steps:
use tycho_substreams::models::{InterimContractChange, TransactionChangesBuilder};
// all changes on this block, aggregated by transaction
let mut transaction_changes: HashMap<_, TransactionChanges> = HashMap::new();
// Extract token balances for vault contract
block
.transaction_traces
.iter()
.for_each(|tx| {
// use helper function to get absolute balances at this transaction
let vault_balance_change = get_vault_reserves(tx, &components_store, &tokens_store);
if !vault_balance_change.is_empty() {
let tycho_tx = Transaction::from(tx);
let builder = transaction_changes
.entry(tx.index.into())
.or_insert_with(|| TransactionChangesBuilder::new(&tycho_tx));
let mut vault_contract_changes = InterimContractChange::new(VAULT_ADDRESS, false);
for (token_addr, reserve_value) in vault_balance_change {
vault_contract_changes.upsert_token_balance(
token_addr.as_slice(),
reserve_value.value.as_slice(),
);
}
builder.add_contract_changes(&vault_contract_changes);
}
});Last updated
Was this helpful?

