Fix the async flow with the Router

It had sequential async calls with complexity O(n), with a variety of redundant
calls. There was also a constant of... 4? 5? for each item. Now, the total
sequence depth is just 3-4.
This commit is contained in:
Luke Parker
2025-01-23 06:10:18 -05:00
parent 669b8b776b
commit 7e53eff642
7 changed files with 314 additions and 206 deletions

View File

@@ -162,12 +162,14 @@ impl<D: Db> ScannerFeed for Rpc<D> {
router: Router,
block: Header,
) -> Result<(Vec<EthereumInInstruction>, Vec<Executed>), RpcError<TransportErrorKind>> {
let mut instructions = router.in_instructions(block.number, &HashSet::from(TOKENS)).await?;
let mut instructions = router
.in_instructions_unordered(block.number, block.number, &HashSet::from(TOKENS))
.await?;
for token in TOKENS {
for TopLevelTransfer { id, transaction_hash, from, amount, data } in
Erc20::new(provider.clone(), **token)
.top_level_transfers(block.number, router.address())
Erc20::new(provider.clone(), token)
.top_level_transfers_unordered(block.number, block.number, router.address())
.await?
{
instructions.push(EthereumInInstruction {