Разработка DEX на TON: AMM-свопы, Telegram и аудит

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка DEX на TON: AMM-свопы, Telegram и аудит
Сложный
от 2 недель до 3 месяцев
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1360
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1251
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    957
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1188
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    646
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    929

На прошлой неделе клиент попросил портировать AMM с Ethereum на TON за два месяца. EVM-рефлексы тут же сломались: синхронный вызов swap() на роутере — атомарная цепочка, а на TON каждый шаг — отдельное сообщение. Пять транзакций, разнесённых во времени, bounce-сообщения при ошибках, неочевидные race conditions. Пришлось перепроектировать архитектуру слёт на паттерне Jetton-to-Jetton под TON. Заказчик сэкономил месяц и 40% бюджета, потому что мы уже прошли эти грабли на пяти DEX-проектах. Разработка DEX на TON — это не портирование EVM-логики, а проектирование заново. Ниже рассказываем, как избежать переписывания дважды.

Разработка DEX на TON требует принципиально иного подхода к межконтрактному взаимодействию. — Документация TON

В чём главная сложность разработки DEX на TON?

На Ethereum вызов swap() на роутере — синхронная цепочка: роутер вызывает пул, пул обновляет резервы, возвращает результат — всё в одной транзакции. На TON каждый вызов между контрактами — отдельное сообщение. Роутер отправляет internal message в пул, пул обрабатывает его в отдельной транзакции, отправляет ответное сообщение роутеру. Это две транзакции, разнесённые во времени. Атомарности в EVM-смысле нет.

Для DEX это означает:

  • Своп не атомарен: между отправкой входящих токенов и получением выходящих проходит 2-3 секунды
  • Reentrancy в EVM-смысле невозможна, но race conditions между сообщениями реальны
  • Откат всей цепочки при ошибке требует явной обработки: bounce-сообщения для возврата токенов

EVM-своп — одна транзакция, на TON — пять, что увеличивает время и требует управления bounce. Без корректной обработки bounced messages токены теряются навсегда. Ниже — обязательный паттерн для любого контракта DEX.

Обработка bounce-сообщения
() on_bounce(slice in_msg_body) impure {
    int op = in_msg_body~load_uint(32);
    if (op == op::transfer_notification) {
        ;; Получили bounce при transfer — возвращаем токены отправителю
        send_tokens(original_sender, amount, jetton_wallet_addr);
    }
}

Архитектура AMM на TON: от Jetton до свопа

TON не имеет native ERC-20. Вместо него — Jetton standard (TEP-74): каждый пользователь имеет отдельный jetton wallet контракт. Для свопа пользователь отправляет transfer на свой jetton wallet с payload, который содержит данные свопа. Jetton wallet отправляет transfer_notification в пул.

Архитектура пула для AMM:

User Jetton Wallet A
    → transfer(amount, pool_address, forward_payload=swap_data)
    → Pool Jetton Wallet A (transfer_notification)
    → Pool Contract (swap message)
    → Pool Jetton Wallet B (transfer)
    → User Jetton Wallet B

Пять контрактов, пять транзакций на один своп. Это нормально для TON, но требует аккуратного fee management: каждый шаг потребляет TON на gas. Пользователь должен приложить достаточно TON (обычно 0.1–0.3 TON) для оплаты всей цепочки. Экономия газа достигается за счёт оптимизации структуры сообщений — мы добиваемся снижения на 30% по сравнению с наивной реализацией.

Сравнение архитектур: Jetton vs Vault

Параметр Jetton (Ston.fi) Vault (DeDust)
Транзакций на своп 5 4
Газ-затраты на своп (TON) ~0.25 TON ~0.18 TON
Совместимость со стандартами Полная Ограниченная (собственный flow)
Сложность реализации Высокая Средняя

DeDust использует Vault и экономит 30% газа по сравнению с Ston.fi, но жертвует совместимостью с Jetton-потоком. Выбор архитектуры зависит от приоритетов проекта: если интеграция с другими Jetton-контрактами не критична, Vault — более эффективное решение.

Почему стоит выбрать Tact для новых проектов?

FunC — низкоуровневый язык, напоминающий C. Полный контроль над stack и cell операциями. Обязателен для понимания внутреннего устройства TON, но для коммерческой разработки DEX мы рекомендуем Tact. Tact — высокоуровневый язык с типизацией, struct-ами и более читаемым синтаксисом. Он компилируется в FunC, что даёт производительность низкого уровня без ручного управления ячейками.

contract LiquidityPool {
    reserve0: Int as coins;
    reserve1: Int as coins;
    totalLpSupply: Int as uint128;
    
    receive(msg: SwapRequest) {
        let amountOut = self.calculateAmountOut(msg.tokenIn, msg.amountIn);
        require(amountOut >= msg.minAmountOut, "Slippage exceeded");
        self.updateReserves(msg.tokenIn, msg.amountIn, amountOut);
        self.sendTokens(msg.recipient, amountOut, msg.tokenOut);
    }
}

Контракт на Tact в 2 раза короче аналогичного на FunC, а риск ошибок при парсинге cell/slice снижается на порядок. Для новых DEX мы всегда начинаем с Tact, переходя на FunC только если требуется экстремальная оптимизация газа.

Сравнение FunC и Tact

Характеристика FunC Tact
Уровень Низкий Высокий
Типизация Нет Строгая
Ошибки cell-парсинга Частые Редкие
Скорость разработки Медленная Быстрая
Популярность в сообществе Устаревает Растёт

Как мы тестируем контракты DEX?

Blueprint — официальный фреймворк для разработки и тестирования TON контрактов (аналог Hardhat для TON). Поддерживает sandbox для локального тестирования без реальной ноды.

Sandbox (из @ton/sandbox) — in-process TON VM для unit тестов. Критично для тестирования bounce message handling и многошаговых транзакционных цепочек.

import { Blockchain } from '@ton/sandbox'
import { LiquidityPool } from '../build/LiquidityPool'

const blockchain = await Blockchain.create()
const pool = blockchain.openContract(await LiquidityPool.fromInit(token0, token1))

const swapResult = await pool.sendSwap(user.getSender(), {
  tokenIn: token0Address,
  amountIn: toNano('100'),
  minAmountOut: toNano('95')
})

expect(swapResult.transactions).toHaveTransaction({
  to: pool.address,
  success: true
})

Мы используем fuzzing с Echidna и формальную верификацию для критичных контрактов — это позволяет выявить race conditions, которые не ловятся unit-тестами.

Шаги интеграции TON Connect в Telegram Mini App

  1. Подключите библиотеку @tonconnect/ui-react.
  2. Настройте манифест приложения с параметрами подключения.
  3. Реализуйте вызов connector.connect(wallet) при клике на кнопку.
  4. После подключения используйте connector.account для получения адреса.
  5. Для отправки транзакций создайте Transaction объект и вызовите connector.sendTransaction().

Что вы получите

  • Архитектуру смарт-контрактов с детальной схемой сообщений и bounce-handling
  • Полный репозиторий с контрактами на FunC/Tact и тестами в Blueprint
  • Обучение вашей команды работе с TON, FunC/Tact и отладке
  • Поддержку в тестнете и помощь при деплое в mainnet
  • Код-ревью и опциональный аудит безопасности с формальной верификацией

Процесс работы и сроки

Этап Длительность Результат
Аналитика 2–3 дня Тип AMM, экономическая модель, список пулов
Проектирование контрактов 3–5 дней Схема сообщений, bounce handling, fee accumulation
Разработка 4–8 недель Pool, Router, LP Jetton, тесты в Blueprint
Фронтенд и TON Connect 2–3 недели Swap UI, liquidity management, аналитика
Деплой и тестнет 1 неделя Testnet → mainnet

Базовый AMM x*y=k с одним пулом и minimal UI — 6–8 недель. Полноценный DEX с роутером для мультихопов, аналитикой, Telegram Mini App — 3–4 месяца. Concentrated liquidity с менеджментом позиций — добавляет ещё 4–6 недель.

Мы — команда с 5+ годами опыта в блокчейн-разработке, на счету 15+ DeFi-проектов, включая один из первых DEX на TON. Всегда используем практики формальной верификации и fuzzing, чтобы минимизировать риски потери средств.

Для оценки вашего проекта свяжитесь с нами. Получите консультацию по архитектуре DEX на TON и расчёт сроков под ваши задачи. Оценим проект бесплатно и предложим оптимальное решение.

Разработка DeFi-протоколов

Мы проектируем модульные DeFi-протоколы, в которых математика стейблкоинов, ликвидности и оракулов работает без сбоев. Mango Markets — краш-тест: атакующий манипулировал spot price через один аккаунт, взял кредит под завышенный collateral и вывел $114 млн. Оракул брал цену с единственного источника без TWAP. Не баг в коде — это архитектурное решение, которое стало уязвимостью. Наш опыт показывает: любой DeFi-протокол — это система ставок на то, что все компоненты, от расчётов до экономических стимулов, выстроены правильно одновременно.

Мы не пишем код под «если всё работает, не трогай». Мы моделируем стресс-сценарии: каскадные ликвидации, депег, флеш-кредиты. И только после этого — события, которые не сломают протокол.

Почему оракулы — критический компонент DeFi?

Большинство крупных взломов DeFi начинались с манипуляции оракулом. Разберём три слоя, которые мы используем в каждом проекте.

Spot price как оракул — не вариант. Uniswap v2 spot price можно сдвинуть flash loan за одну транзакцию. Цена в конце блока — единственное, что попадает в state, её и читает оракул. Схема атаки: занять через flash loan → купить актив в пул → цена поднялась → взять кредит под завышенный collateral → продать актив → вернуть flash loan. Одна транзакция.

TWAP как защита. Uniswap v3 observe() усредняет цену за период (30 минут). Манипуляция требует удерживать цену несколько блоков — это стоит дорого. Но TWAP медленно реагирует на легитимные изменения, что открывает окно для arbitrage на liquidation при резких движениях.

Chainlink Price Feeds — агрегация от множества data providers с медианой. Стандарт для lending. Проблема: heartbeat 1–24 часа и deviation threshold 0.5%. Если цена не двигается, фид может не обновляться сутки. В волатильном рынке — lag.

Оракул Механизм Защита от манипуляции Задержка
Chainlink Медиана от независимых провайдеров Высокая (децентрализация) До 24 ч при 0% движения
Uniswap v3 TWAP Средняя цена за N блоков Высокая (сложно удерживать) 30 мин — 1 ч
Pyth Network Cross-chain low-latency Средняя (зависимость от publisher) Секунды

В продакшене мы используем двухуровневую проверку: Chainlink aggregator + Uniswap v3 TWAP как верификатор. Если расхождение больше N% — транзакция отклоняется, система ставится на паузу.

Как защитить DeFi-протокол от flash loan атак?

Flash loan превращает любого пользователя в обладателя неограниченного капитала на одну транзакцию. Поэтому при проектировании контрактов мы предполагаем: доступ к неограниченному капиталу есть у всех. Это меняет threat model полностью.

Легитимные применения flash loan — arbitrage, liquidation, самоликвидация. Но протокол должен проверять, что заём не используется для манипуляции: оракул не должен читать цену из пула, который можно сдвинуть за одну транзакцию. Мы добавляем проверки на block.timestamp и минимальную глубину ликвидности.

Ключевые компоненты DeFi-архитектуры

Тип протокола Основная механика Главный риск
DEX (AMM) x*y=k или concentrated liquidity impermanent loss, oracle manipulation
Lending collateral ratio, liquidation bad debt при каскадных ликвидациях
Yield aggregator автокомпаундинг стратегий rug через strategy upgrade
Derivatives / Perps funding rate, mark price liquidation cascades, socialized losses
Liquid staking stETH-style rebasing depegging при mass unstake

AMM: от x*y=k до concentrated liquidity

Uniswap v2 использует x * y = k. LP-токены ERC-20 — каждый пул выпускает свой токен пропорционально доле. Проблема: ликвидность размазана по всей кривой, большая часть не используется.

Uniswap v3 и позиции ERC-721: concentrated liquidity — LP предоставляет ликвидность в диапазоне [priceLow, priceHigh]. Capital efficiency до 4000x для стабильных пар. Но ERC-721 ломает vault-стратегии под ERC-20. Управление ranges — отдельная инженерная задача: позиция выходит из диапазона при движении цены, перестаёт зарабатывать fees, становится single-asset. Протоколы типа Arrakis Finance автоматически rebalance. Если строите vault поверх v3, нужен собственный range manager или интеграция с существующим.

Slippage в v3 рассчитывается через sqrtPriceX96 — 96-битная fixed-point математика. Ошибки на фронтенде приводят к расхождению между видимым и фактическим slippage.

Curve для пар с близкими ценами (stablecoin/stablecoin, stETH/ETH) использует инвариант, комбинирующий constant product и constant sum. Меньше slippage в диапазоне peg. Контракты на Vyper, код математически плотный, аудировать сложно.

Lending протоколы: collateral, liquidation, bad debt

LTV определяет максимальный кредит под collateral. Liquidation threshold — уровень ликвидации. Разница — буфер для liquidator. Типичный пример: LTV 75%, liquidation threshold 80%, bonus 5%. Если цена падает на 20%+, позиция открыта к ликвидации.

Каскадные ликвидации: много позиций ликвидируется одновременно → ликвидаторы продают collateral → цена падает → следующая волна. LUNA/UST 2022 — классический каскад.

Если collateral обесценивается быстрее ликвидации, протокол получает bad debt. Aave использует Safety Module (застейканный AAVE), Compound — reserves. Без backstop bad debt социализируется через dilution supply-токена или взаимозачёт.

Проектирование системы ликвидации требует моделирования стресс-сценариев: падение единственного liquidation bot, высокий gas, делистинг collateral.

Yield farming и incentive mechanics

Liquidity mining — раздача governance-токенов LP-провайдерам. Проблема mercenary capital: фармеры приходят, продают токены, уходят. TVL фиктивный.

Устойчивые механики: protocol-owned liquidity (Olympus bonding), veToken (CRV locked → boost + governance), locked staking с penalty. Ve-модель при неправильной реализации создаёт governance concentration. Нужен timelock на изменения gauge weights и лимиты на votingPower.

Что входит в нашу разработку DeFi-протоколов

  • Архитектурная документация: диаграммы взаимодействия контрактов, стресс-тесты ликвидаций, расчёты оракулов.
  • Реализация на Solidity 0.8.x с OpenZeppelin 5.x (AccessControl, ReentrancyGuard, Pausable, TimelockController) и Solmate для gas-optimised base contracts.
  • Foundry fork-тесты на реальном mainnet (Uniswap, Chainlink, Aave) — тесты до деплоя покрывают все сценарии.
  • Аудит: минимум два независимых аудитора для TVL от $1M. Code4rena или Sherlock для bug bounty.
  • Деплой с Gnosis Safe 3/5 multisig + timelock 48–72 часа.
  • Мониторинг через Tenderly (alerts, симуляции), OpenZeppelin Defender (automation), Forta (on-chain threat detection).
  • Поддержка после запуска: обновления, патчи, апгрейды через proxy.

Наши компетенции и опыт

Мы разрабатываем DeFi-протоколы с 2020 года — за это время реализовали 30+ проектов с общим TVL более $150 млн. Среди клиентов — протоколы в топ-20 по TVL на Ethereum, Arbitrum и Base. Команда сертифицированных разработчиков Solidity, прошедших аудиторские треки ConsenSys Diligence.

DeFi на Wikipedia — базовые принципы, которые мы применяем на практике.

Сроки

  • DEX с AMM (Uniswap v2 fork): 6–10 недель
  • Lending protocol (Aave-style, один collateral): 3–5 месяцев
  • Yield aggregator с несколькими стратегиями: 2–4 месяца
  • Полноценный DeFi-протокол с governance: 5–8 месяцев включая аудит

Стоимость рассчитывается индивидуально — свяжитесь для оценки вашего проекта.

Получите консультацию по архитектуре DeFi-протокола — мы проанализируем риски и предложим оптимальное решение.