Перейти к основному содержанию

Архитектура контракта

Контракт Native DEX — специализированная децентрализованная биржа, построенная для yield-bearing токенов. В отличие от стандартных AMM, AREAL DEX передаёт встроенную доходность токенов в пулах ликвидности LP-провайдерам — поверх обычных swap-комиссий. DEX работает на — все свопы исполняются с субмиллисекундной финальностью внутри rollup, а начисление доходности LP происходит в реальном времени. Состояние пулов периодически коммитится на Solana L1. DEX поддерживает два типа пулов, автоматическую ребалансировку master pools и является единственной торговой площадкой для портфельных операций RWT Vault.

On-Chain аккаунты

PoolState

Основной аккаунт состояния для каждого пула ликвидности. Хранит тип пула (concentrated/standard), минты токенов, общую ликвидность, параметры комиссий и текущую цену. Seeds: ["pool", token_a_mint, token_b_mint].

BinArray

Для concentrated пулов: хранит bin-based распределение ликвидности. Каждый bin представляет дискретный ценовой диапазон со своей глубиной ликвидности. Seeds: ["bins", pool].

LpPosition

Представляет индивидуальную LP-позицию. Отслеживает депонированные суммы, заработанные комиссии, накопленную доходность и диапазон bins (для concentrated пулов). Seeds: ["lp", pool, owner].

DexConfig

Глобальная конфигурация DEX: базовая комиссия (0.5%), разделение комиссий (50/50 LP/DAO), порог ребалансировки (1%) и аккаунт комиссий AREAL DAO. Seeds: ["dex_config"].

PoolCreators

Вайтлист адресов кошельков, авторизованных создавать новые пулы ликвидности. Управляется Engine Authority (AREAL DAO). Только внесённые в вайтлист сотрудники AREAL Foundation могут вызывать create_pool. Внешние пользователи не могут создавать пулы. Seeds: ["pool_creators"].

Основные инструкции

create_pool

Создаёт новый пул ликвидности для пары токенов. Все пары деноминированы в RWT. Тип пула (concentrated или standard) задаётся при создании и не может быть изменён.Вызвать эту инструкцию могут только кошельки из вайтлиста PoolCreators. Внешние пользователи не могут создавать пулы — это ограничено сотрудниками AREAL Foundation, которым DAO предоставило такие права.Authority: Только вайтлист-кошелёк pool creator
Accounts:
  - creator:             Signer (должен быть в вайтлисте PoolCreators)
  - pool_creators:       PDA (проверка вайтлиста)
  - pool_state:          PDA (init)
  - bin_array:           PDA (init, только concentrated)
  - rebalance_state:     PDA (init, только master pools)
  - dex_config:          PDA
  - token_a_mint:        Mint RWT
  - token_b_mint:        Mint парного токена
  - system_program

Args:
  - pool_type: enum      { Concentrated, StandardCurve }
  - bin_step: u16         Шаг цены на bin (только concentrated)
  - initial_price: u64    Начальная цена token B в token A
Добавляет или удаляет адреса кошельков из вайтлиста PoolCreators. AREAL DAO предоставляет права на создание пулов конкретным сотрудникам Foundation. Несколько кошельков могут быть в вайтлисте одновременно.Authority: Engine Authority (DAO governance)
Accounts:
  - engine_authority:    Signer (текущий engine authority)
  - pool_creators:       PDA (mut)

Args:
  - wallet: Pubkey       Адрес кошелька сотрудника
  - action: enum         { Add, Remove }
Выполняет swap токенов через пул внутри MagicBlock Ephemeral Rollup с субмиллисекундной финальностью. Применяет базовую комиссию (0.5%), разделённую между LP и AREAL DAO. Поддерживает режимы exact-input и exact-output. Результаты свопа коммитятся на Solana L1 в следующем цикле коммита.Authority: Permissionless
Accounts:
  - user:                Signer
  - pool_state:          PDA (mut)
  - bin_array:           PDA (mut, только concentrated)
  - user_token_a_ata:    Аккаунт token A пользователя (mut)
  - user_token_b_ata:    Аккаунт token B пользователя (mut)
  - pool_token_a_vault:  Vault token A пула (mut)
  - pool_token_b_vault:  Vault token B пула (mut)
  - dao_fee_ata:         Аккаунт комиссий AREAL DAO (mut)
  - token_program

Args:
  - amount: u64          Входная или выходная сумма
  - min_out: u64         Минимальный выход (защита от проскальзывания)
  - direction: enum      { AtoB, BtoA }
Депонирует токены в пул в качестве LP-провайдера. Для concentrated пулов LP указывает диапазон bins. Для standard пулов ликвидность покрывает весь ценовой диапазон.Authority: Permissionless
Accounts:
  - lp:                  Signer
  - pool_state:          PDA (mut)
  - bin_array:           PDA (mut, только concentrated)
  - lp_position:         PDA (init или mut)
  - lp_token_a_ata:      Аккаунт token A LP (mut)
  - lp_token_b_ata:      Аккаунт token B LP (mut)
  - pool_token_a_vault:  Vault token A пула (mut)
  - pool_token_b_vault:  Vault token B пула (mut)
  - token_program

Args:
  - amount_a: u64        Депозит token A
  - amount_b: u64        Депозит token B
  - lower_bin: i32       Нижний bin ID (только concentrated)
  - upper_bin: i32       Верхний bin ID (только concentrated)
Выводит ликвидность из пула. Возвращает токены LP плюс накопленные комиссии и доходность.Authority: Владелец LP (должен подписать)
Accounts:
  - lp:                  Signer
  - pool_state:          PDA (mut)
  - bin_array:           PDA (mut, только concentrated)
  - lp_position:         PDA (mut)
  - lp_token_a_ata:      Аккаунт token A LP (mut)
  - lp_token_b_ata:      Аккаунт token B LP (mut)
  - pool_token_a_vault:  Vault token A пула (mut)
  - pool_token_b_vault:  Vault token B пула (mut)
  - token_program

Args:
  - liquidity_amount: u64  Количество ликвидности для вывода (0 = вся позиция)
Забирает накопленные протокольные стимулирующие награды для LP-позиции. Swap-комиссии и доходность токенов автоматически капитализируются в позицию (выводятся через remove_liquidity), но протокольные стимулирующие награды отслеживаются отдельно и забираются здесь.Authority: Владелец LP (должен подписать)
Accounts:
  - lp:                  Signer
  - lp_position:         PDA (mut)
  - pool_state:          PDA
  - lp_reward_ata:       Аккаунт reward-токена LP (mut)
  - incentive_vault:     Резерв протокольных стимулов (mut)
  - token_program

Типы пулов

Bin-based пулы, где ликвидность распределена по дискретным ценовым бинам. Используются исключительно для master pools RWT:
  • RWT / USDY — основной пул, 50 bins вокруг NAV Book Value
  • RWT / USDC — вторичный пул, та же concentrated структура
Ликвидность автоматически ребалансируется через rebalance_pool при отклонении NAV >1%. Максимальная капиталоэффективность — глубокая ликвидность именно там, где происходит торговля.

Передача доходности

AREAL DEX захватывает встроенную доходность токенов в пулах и передаёт её LP-провайдерам. LP зарабатывают из трёх источников:

Swap-комиссии

0.25% от каждой сделки (доля LP от базовой комиссии 0.5%) — автоматически капитализируется в LP-позицию

Доходность токенов

Рост NAV Book Value (RWT), доходность реальных активов (OT), доходность стейблкоинов (USDY) — увеличивает стоимость позиции

Протокольные стимулы

Дополнительные награды от протокольных и проектных программ стимулирования

Как работает начисление доходности LP

Заработок LP (swap-комиссии + доходность токенов) не переводится на кошелёк LP — вместо этого он автоматически капитализируется прямо в LP-позицию, увеличивая её размер. Это означает, что позиция LP растёт со временем без каких-либо ручных действий — капитал компаундится автоматически. Когда LP вызывает remove_liquidity, он выводит первоначальный капитал плюс всю накопленную доходность в одной транзакции.
Модель автокомпаундинга устраняет необходимость для LP вручную собирать и реинвестировать комиссии. Позиция растёт каждую секунду по мере совершения свопов и роста yield-bearing токенов внутри пула.

Структура комиссий

DEX применяет базовую swap-комиссию 0.5%, разделённую поровну — но две половины обрабатываются по-разному:
ПолучательДоляМеханизм
Провайдеры ликвидности0.25%Капитализируется в LP-позиции — автоматически увеличивает размер позиции, компаундится со временем
AREAL DAO0.25%Переводится напрямую на кошелёк DAO при каждом свопе — немедленно доступна в Treasury
Комиссия 0.5% — начальная модель. В разработке система динамических комиссий, которая будет корректировать ставки в зависимости от рыночных условий, волатильности и загрузки пула.

Протокольная ликвидность и авторебалансировка

AREAL DAO предоставляет собственную ликвидность в master pools через Master Pool Rebalancer — независимый протокольный модуль, управляющий протокольными LP-позициями и авторебалансирующий их вокруг NAV Book Value.

Master Pool Rebalancer

Автономный протокольный модуль для депонирования, ребалансировки и вывода ликвидности DAO в master pools. Автоматически ребалансируется только протокольная ликвидность — пользовательские LP-позиции никогда не затрагиваются.
Ребалансировщик — отдельная программа, взаимодействующая с этим DEX через CPI. Он вызывает стандартные инструкции add_liquidity / remove_liquidity — без специального доступа к внутренностям DEX.

Интеграция с MagicBlock

Весь исполнительный слой DEX работает на . Это критично по двум причинам: исполнение свопов в реальном времени и посекундное начисление доходности LP.

Делегированные аккаунты

Следующие аккаунты делегируются в Ephemeral Rollup:
АккаунтЗачем делегирован
PoolStateИсполнение свопов обновляет резервы и цену пула — требуется запись в ER для торговли в реальном времени
BinArrayСостояние bins concentrated пула меняется при каждом свопе — требуется доступ на запись в ER
LpPositionНачисление комиссий и доходности обновляется при каждом свопе — отслеживание в реальном времени для каждого LP

Свопы в реальном времени

Все инструкции swap исполняются внутри Ephemeral Rollup с субмиллисекундной финальностью. Трейдеры получают практически мгновенное исполнение без ожидания подтверждения блока Solana L1.

Посекундное начисление доходности

Комиссионные доходы LP и рост yield-bearing токенов отслеживаются каждую секунду внутри ER. Когда LP вызывает collect_fees, актуальный начисленный баланс доступен немедленно.

Периодические коммиты на L1

Состояние пулов коммитится на Solana L1 с настраиваемым интервалом (по умолчанию каждые 60 секунд). L1 отражает последний закоммиченный снапшот для внешних чтений и межпрограммных взаимодействий.

Поток исполнения

1

Делегирование аккаунтов

Аккаунты PoolState, BinArray и LpPosition делегируются в MagicBlock через delegation program. Они становятся доступными для записи в ER, оставаясь доступными для чтения на L1.
2

Свопы в ER

Все вызовы swap исполняются внутри Ephemeral Rollup. Резервы пула, состояние bins и счётчики комиссий LP обновляются в реальном времени при каждой сделке.
3

Начисление доходности в ER

Встроенная доходность токенов (рост NAV RWT, рост USDY, доходность OT) рассчитывается и зачисляется в аккаунты LpPosition каждую секунду crank-сервисом внутри ER.
4

Коммит на L1

Периодически ER коммитит все делегированные аккаунты обратно на Solana L1. После коммита collect_fees, remove_liquidity и rebalance_pool могут исполняться на L1 с актуальными балансами.
Неторговые операции — create_pool, add_liquidity, remove_liquidity и rebalance_pool — исполняются на Solana L1, так как они модифицируют структурное состояние, которое должно быть финализировано на базовом уровне. Только высокочастотные операции (свопы, начисление комиссий) работают в Ephemeral Rollup.

Безопасность

Неизменяемость пулов

Тип пула (concentrated/standard) задаётся при создании и не может быть изменён. Предотвращает governance-манипуляцию механиками существующих пулов.

Защита от проскальзывания

Все свопы требуют параметр min_out. Транзакция откатывается, если выход ниже указанного минимума.

Внешняя ребалансировка

Авторебалансировка осуществляется модулем Master Pool Rebalancer — отдельной программой, управляющей только капиталом DAO через CPI. Пользовательские LP-позиции никогда не затрагиваются.

Деноминация в RWT

Все пулы деноминированы в RWT. Это ограничивает DEX экосистемой AREAL и предотвращает несанкционированный листинг токенов.

Создание пулов по вайтлисту

Только внесённые в вайтлист DAO сотрудники AREAL Foundation могут создавать пулы. Внешние пользователи не могут разворачивать произвольные пулы — предотвращение спама, скам-токенов и непроверенных листингов.
Контракт Native DEX в настоящее время находится в разработке. Эта документация описывает целевую архитектуру. Код контракта ещё не прошёл аудит.