Почему простой flash loan Aave v3 откатывается после callback
Получатель может вернуть true из executeOperation, но не пройти расчёт. Эталонный пул затем списывает с него основную сумму и premium.
Проверьте получателя на выходе из callback
В тестовой транзакции сверьте вызывающий пул, инициатора и базовый актив. Возьмите premium из аргументов callback. В примере при возврате управления у получателя должны быть баланс и разрешение на 1 000 500 минимальных единиц.
principal = 1000000 raw units
callback premium = 500
required post-callback balance and pool allowance = 1000500
Если разрешена только основная сумма, финальному transferFrom не хватит 500. Разрешение нужно пулу, который списывает средства; отдельно проверьте баланс базового токена. Разрешение адресу aToken не авторизует вызов пула.
Используйте правила простой формы займа
Простой flash loan требует возврата и не принимает режим ставки для открытия долга. Не переносите сюда возможность создания долга из многоактивной формы. При откате расчёта откатится вся транзакция со всеми промежуточными переводами. github.com FlashLoanLogic.sol