DeFi Looping: как за 221 промпт AI-ассистент помог выстроить от формул до production-инструмента

Я начал с простой формулы на бумаге. Закончил production-инструментом с монорепо, flash loans и автоматизацией через Reactive Network. Между первым и последним шагами - 221 промпт с Claude Code, два проекта и несколько неприятных открытий про то, как работают риски в DeFi.

Вот что получилось и почему это стоило каждого промпта.


Зачем я вообще это сделал

DeFi looping - это рекурсивная стратегия: вносишь коллатераль, занимаешь актив, меняешь его обратно на коллатераль, повторяешь. Математически это позволяет получить плечо в несколько раз, не имея дополнительного капитала.

Проблема в том, что простая формула не показывает реальную картину. Я хотел проверить: работает ли это так, как написано в документации? Чего стоят friction costs - gas, slippage? И главное - где скрывается риск?

Первый проект, looping-test, занял 101 промпт. Цель была минималистичная: JavaScript-скрипты для расчётов, тесты, форк-симуляция против mainnet. Никакого UI, никаких контрактов. Просто проверить математику.

Второй проект, looping-tool, уже полноценный инструмент: монорепо, смарт-контракты, SDK, React-фронтенд, деплой через Coolify. Ещё 120 промптов.

Я не эксперт в Solidity. Но я понимаю, как работает DeFi. Claude Code знает Solidity. Разделение труда получилось рабочим - с оговорками, о которых расскажу позже.


Формулы, которые сломали мне мозг

Базовая механика выглядит элегантно.

Максимальное плечо:

Leverage = 1 / (1 - LTV)

При LTV 80% теория обещает 5x. Aave v3 E-Mode для стейблкойнов даёт LTV до 93% - это теоретические ~14x. Звучит захватывающе. Реальность - 3-5 циклов и friction costs режут результат.

Реальная доходность:

Net APY = (Supply APY × Leverage) − (Borrow APY × (Leverage − 1))

Пример с числами из реальных протоколов: Supply APY 5.5%, Borrow APY 3.5%, leverage 3.68x.

Gross Yield = 5.5% × 3.68 = 20.24%
Borrow Cost = 3.5% × 2.68 = 9.38%
Net APY = 20.24% − 9.38% = 10.86%

Выглядит неплохо. Но это до учёта gas на каждый loop и slippage на каждый своп.

За 5 loops на позицию в $10k friction costs съедают значительную часть доходности. Breakeven-период для такой позиции - около месяца. То есть первый месяц вы просто отбиваете расходы на открытие.

Хуже, когда спред становится отрицательным. Если borrow APY выше supply APY, leverage работает против вас. Из реального примера на DeFi Saver: позиция wstETH/USDC с $25k коллатераля приносила -$242 в год после всех расчётов. Net APY -1.43%. Это не катастрофа, но это и не то, что ожидает пользователь, глядя на headline-цифры протокола.

Первые 35 промптов в looping-test ушли почти целиком на то, чтобы написать калькулятор Net APY, а потом добавить sanity checks, потому что первые результаты казались нереалистичными. Они и были нереалистичными - я забыл про friction costs.


Риск, которого не видно в формулах

Health Factor - это главный показатель безопасности позиции в Aave:

Health Factor = (Collateral Value × Liquidation Threshold) / Total Debt

Если HF падает ниже 1.0 - ликвидация. Ликвидаторы выкупают часть коллатераля по дисконту, чтобы вернуть долг протоколу.

Критические уровни простые: HF > 1.5 - консервативно, HF 1.15-1.25 - агрессивно, HF < 1.0 - ликвидация немедленно.

Что не очевидно: в лупированной позиции падение цены не линейное. При leverage 3.68x и падении цены коллатераля на 5% - потеря капитала около 18%. Не 5%, а 18%. Это может запустить каскад: HF падает → ликвидаторы продают коллатераль → цена падает ещё → следующая ликвидация. Так работает liquidity death spiral, который протоколы очень не любят, потому что в итоге остаются с bad debt.

Промпты 40-60 в looping-test я буквально просил Claude проверять Health Factor-логику после каждых трёх новых функций. Это было избыточно, но я дважды поймал ситуацию, где расчёты давали HF ниже 1.2 без предупреждений.

Решение - автоматический unwinding через Reactive Network. Подписываешься на события Chainlink price feed, при падении HF ниже порога - контракт начинает разматывать позицию сам, без участия пользователя. deadrosesxyz/AaveLoopSwap на DoraHacks реализовал это как supplyAndLoop() → Reactive callbacks для каждой итерации. Намного лучше, чем ручной контроль.


Первый проект: 101 промпт на математику

looping-test был намеренно простым. JavaScript, тесты, fork simulation. Никаких контрактов.

Первые 30 промптов - базовые функции: расчёт leverage, Net APY, Health Factor. Выглядело просто. Потом следующие 40 промптов ушли на интеграцию с Aave SDK - получение реальных данных о LTV, liquidationThreshold, текущих APY.

Промпт примерно 45: “интегрируй Aave SDK для получения пользовательских данных позиции”. Результат не компилировался. Пять итераций с различными версиями библиотек и час в документации позже - заработало.

Последние 31 промпт - тесты и edge cases. После того как узнал про Moonwell exploit (о нём ниже), я добавил дополнительный слой тестов специально для проверки oracle-логики и аномальных цен. Это стоило времени, но это именно то, чего не хватило в Moonwell.

Главный вывод из looping-test: fork simulation против реальных mainnet-данных ловит проблемы, которые unit-тесты с моками пропускают. Несколько раз симуляция показывала поведение, которое тесты считали корректным.


Второй проект: 120 промптов до production

looping-tool - это уже полноценный DeFi-инструмент. Архитектура: Turborepo-монорепо с четырьмя пакетами.

packages/core - финансовая математика, стратегии, Zod-схемы для валидации. packages/contracts - Solidity-контракты: AaveLooper, ReactiveCallback, OracleValidator. packages/sdk - TypeScript-клиент для взаимодействия с контрактами. packages/web - React-фронтенд.

Первые 50 промптов второго проекта - почти полностью архитектура. “Как организовать монорепо для DeFi-проекта?” - Turborepo. “Какую базу данных?” - PostgreSQL. “Shared types между пакетами?” - Zod-first, типы выводятся из runtime-схем. Я просто соглашался. Claude предлагал разумные решения, я не видел причин возражать.

Промпты 50-90 - реальная работа. Интеграция Odos Smart Order Routing заняла почти треть этого блока. Odos анализирует более 900 источников ликвидности - DEX, пулы, стейкинг - и строит оптимальный маршрут. Для looping это критично: каждый своп в цикле должен терять минимум. Debugging занял несколько итераций: pathId в Odos действителен 60 секунд, и если сборка транзакции затягивалась, приходилось запрашивать котировку заново.

Flash loan-реализация через Aave заняла промпты 80-95. Схема простая: занять USDC через flash loan → своп в WETH через Odos → депозит в Aave → заём USDC против нового коллатераля → вернуть flash loan с 0.09% комиссией. Всё в одной атомарной транзакции. Gas-estimate получился в диапазоне 150-250k для базовой операции.

Промпты 100-120 - деплой и мониторинг. Coolify вместо Vercel: $2-5 в месяц за VPS против значительно большего за SaaS-план. GitHub webhook, Docker, автоматические SSL-сертификаты. Настройка через UI, никакого ручного nginx.


Moonwell: почему framework важнее скорости

В феврале 2026 Moonwell потеряла $1.78M из-за oracle-бага. Логика читала raw cbETH/ETH exchange rate - примерно 1.12 - и не умножала на ETH/USD. Система оценивала актив стоимостью $2200 в $1.12. Это почти стопроцентная ошибка валуации.

Второй oracle failure за четыре месяца. GitHub-история проекта показывала темп, характерный для AI-assisted разработки: тысяча+ коммитов за неделю. Аудитор Pashov написал, что любой integration test поймал бы эту ошибку.

Circuit breaker с пятидневным governance timelock оказался бесполезным - к моменту голосования деньги уже ушли.

После этого случая я переписал большой блок кода в looping-tool, добавив явную валидацию oracle-данных. Понадобилось ещё около 25 промптов, но это стоило каждого.

Паттерн безопасности, который использую теперь:

const validateOraclePrice = async (
  asset: Address,
  newPrice: bigint,
  expectedRange: [bigint, bigint]
): Promise<boolean> => {
  const [minPrice, maxPrice] = expectedRange;
  if (newPrice < minPrice || newPrice > maxPrice) {
    throw new Error("ORACLE_PRICE_ANOMALY");
  }
  return true;
};

Никакого деплоя без fork-симуляции против реальных данных mainnet. Никакого изменения oracle-логики без явных range-проверок. При аномалии - пауза, не продолжаем.

AI-код на 50-90% - нормально. Без автоматического тестирования, симуляции и мониторинга - нет.


Что получилось

221 промпт - это примерно месяц работы в режиме “несколько часов в день”. Результат: два рабочих проекта, один из которых находится в production.

Где AI реально помогает: boilerplate, интеграции с внешними API (Odos, Aave SDK), тесты, рефакторинг. Claude отлично помнит контекст в пределах сессии и хорошо генерирует повторяющиеся структуры.

Где нужен человек: архитектурные решения - особенно те, которые сложно откатить. Security review критических путей. И главное - понимание того, что именно должен делать код. Claude генерирует технически правильный код, который решает не ту задачу, быстрее, чем вы успеваете заметить.

Около 60% всех промптов - это “это не работает, почему?” или “результат выглядит неправильно, проверь логику”. AI хорошо отлаживает, если вы можете объяснить, что ожидаете увидеть. Если не можете - это ваша работа, не его.

Looping-стратегии занимают значительную долю объёмов на lending-протоколах. DeFi looping работает, если считать правильно. Health Factor нужно мониторить в реальном времени, а не раз в день. Friction costs реальные и съедают значительную часть headline-доходности. И никогда не деплоить oracle-логику без integration tests.

Код на GitHub. Если хотите разобраться с механикой - начните с формулы Leverage = 1/(1-LTV) и калькулятора Net APY. Остальное оттуда.