Skip to content

fix(flashloan): correct Aave V3 BSC PoolDataProvider + tolerate truncated getReserveData (closes #419)#421

Merged
obchain merged 2 commits intomainfrom
fix/419-aave-bsc-data-provider
May 3, 2026
Merged

fix(flashloan): correct Aave V3 BSC PoolDataProvider + tolerate truncated getReserveData (closes #419)#421
obchain merged 2 commits intomainfrom
fix/419-aave-bsc-data-provider

Conversation

@obchain
Copy link
Copy Markdown
Owner

@obchain obchain commented May 3, 2026

Summary

Two related defects on the Aave V3 BSC flash-loan path that together silenced the only flash-loan source on every fork demo and live run:

  1. `config/default.toml` and `config/fork.toml` baked the PoolDataProvider as `0x41393e5e337606dc3821075Af65AeE84D7688CBD` — that address has no code on BSC mainnet (`cast code` returns `0x`). Calls returned an empty buffer, surfaced as `buffer overrun` decode errors at every quote step.
  2. With the right data provider in place, `getReserveData` returns 12 fields on BSC, not the 15 our `sol!` ABI declares (newer-Aave fields `accruedToTreasury`, `unbacked`, `isolationModeTotalDebt` absent on BSC). Strict typed decoder still rejected the truncated tuple.

Fix

  • Update both configs to `0xc90Df74A7c16245c5F5C5870327Ceb38Fe5d5328` (sourced via `IPoolAddressesProvider.getPoolDataProvider()` on BSC).
  • Add `read_uint256_first_word` helper for `getReserveData` — we only consume the leading `configuration` word for paused/frozen bitmap, so issue the call ourselves and lift first 32 bytes. `getReserveConfigurationData` stays on typed decode (its 10-tuple matches BSC).

Test plan

obchain added 2 commits May 3, 2026 22:16
…ated getReserveData (closes #419)

Two related defects on the Aave V3 BSC flash-loan path that together
silenced the only flash-loan source on every fork demo and live run:

1. `config/default.toml` and `config/fork.toml` baked the
   PoolDataProvider as 0x41393e5e337606dc3821075Af65AeE84D7688CBD,
   which has no code on BSC mainnet — `cast code` returns 0x at
   any block. Calls returned an empty buffer and surfaced as
   "buffer overrun" decode errors at every quote step. Sourced the
   correct address from IPoolAddressesProvider.getPoolDataProvider()
   on BSC: 0xc90Df74A7c16245c5F5C5870327Ceb38Fe5d5328. Updated both
   profiles with a comment pointing at the on-chain source-of-truth
   so future drift is easier to spot.

2. With the right data provider in place, `getReserveData` returns
   12 fields on BSC, not the 15 our `sol!` ABI declares — newer-Aave
   fields (`accruedToTreasury`, `unbacked`, `isolationModeTotalDebt`)
   are absent on BSC's deploy. The strict typed decoder still rejects
   the truncated tuple, breaking every paused/frozen-bitmap probe.
   We only consume the leading `configuration` word for that check,
   so issue the call ourselves and lift the first 32 bytes via a new
   `read_uint256_first_word` helper. `getReserveConfigurationData`
   stays on the typed decode (its 10-tuple matches BSC).

Local validation: replay against block 91323624 with the four
documented seed borrowers now reaches the flash-loan quote stage
without buffer-overrun warnings (build pending in companion test
branch that also carries #418's vToken decoder relaxation).
@obchain obchain merged commit cd8ebbf into main May 3, 2026
4 checks passed
@obchain obchain deleted the fix/419-aave-bsc-data-provider branch May 3, 2026 16:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant