Почему долг Aave v3 меняется без нового заимствования
Токен переменного долга учитывает масштабированный баланс и индекс заимствования. Это непередаваемый учётный токен, поэтому модель ленты кошельковых переводов здесь плохо подходит.
Восстановите долг на нужное время
Получите variableDebtTokenAddress из резерва и прочтите масштабированный баланс аккаунта. На том же блоке запросите нормализованный индекс переменного долга. В эталонной реализации balanceOf перемножает эти величины в арифметике ray.
scaled variable debt = 2000
normalized variable debt index = 1.10 × 10^27
visible variable debt = 2200 raw units
При масштабированном значении 2 000 и индексе 1,10 в примере получается 2 200 минимальных единиц. Если масштабированная база прежняя, рост видимого долга вслед за индексом не означает второго заимствования.
Отделите проценты от изменения позиции
Сопоставляйте выдачу и возврат с изменениями масштабированного учёта, а движение индекса классифицируйте отдельно. Отказ обычного перевода соответствует ограничениям токена долга. Правила округления и режим долга сверяйте с развёрнутым резервом. github.com VariableDebtToken.sol