Explain a changing Aave v3 debt balance without a new borrow

The variable debt token tracks debt using a scaled balance and the reserve borrowing index. It is a non-transferable accounting token, so a wallet transfer-feed model is a poor fit.

Rebuild the debt at the requested timestamp

Resolve variableDebtTokenAddress from the reserve and read the account’s scaled balance. Obtain the reserve’s normalized variable debt at the same block. In the reference implementation balanceOf multiplies these two quantities using ray math.

scaled variable debt = 2000
normalized variable debt index = 1.10 × 10^27
visible variable debt = 2200 raw units

A scaled amount of 2,000 at index 1.10 gives 2,200 base units in the illustrative fixture. If the scaled balance is constant while the index increases, a larger reported debt does not imply a second borrow transaction.

Separate interest from position changes

Map borrow and repayment activity to scaled mint and burn changes, and classify index movement separately. Unexpected transfer failures are consistent with the debt token disabling ordinary ERC-20 transfers. Match rounding and debt mode to the actual reserve deployment. github.com VariableDebtToken.sol