Почему простой 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