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

Обзор

Модуль Lending & Borrowing позволяет пользователям депонировать RWT или стейблкоины (USDC, USDY) для получения процентов, а также занимать стейблкоины под залог RWT. Работает как самостоятельный кредитный рынок на нативной инфраструктуре AREAL. Основной сценарий: пользователь держит RWT и хочет получить ликвидность в USDC не продавая свой RWT. Он депонирует RWT как залог, занимает USDC и продолжает получать выгоду от роста NAV Book Value, используя заёмные стейблкоины.
Этот модуль сфокусирован только на парах RWT ↔ стейблкоин. Кредитование Ownership Tokens может быть добавлено в будущем как отдельный рынок с другими параметрами риска.

Как это работает

Для депозиторов (зарабатывать проценты)

Депонируйте USDC или USDY в кредитный рынок. Ваши токены становятся доступными для заёмщиков. Взамен вы получаете посекундные проценты — начисляются непрерывно через MagicBlock Ephemeral Rollup и автокомпаундятся в вашу позицию.
  • Без lock-up — вывод в любое время (при наличии доступной ликвидности)
  • Процентная ставка корректируется динамически на основе утилизации рынка
  • Выше утилизация = выше APY для депозиторов

Для заёмщиков (получить стейблкоины без продажи RWT)

Депонируйте RWT как залог и займите USDC или USDY. Ваш RWT остаётся в протоколе и продолжает расти в цене от роста NAV Book Value — вы не теряете экспозицию к доходности.
  • Займ до настроенного LTV от стоимости залога
  • Проценты начисляются посекундно — возврат в любое время, без дедлайнов
  • Если Health Factor падает ниже 1.0, позиция может быть ликвидирована

On-Chain аккаунты

LendingMarket

Основной PDA рынка. Хранит общие депозиты, общие займы, текущую процентную ставку, коэффициент утилизации и резервный фактор. Один рынок на стейблкоин (рынок USDC, рынок USDY). Seeds: ["lending_market", stablecoin_mint].

DepositPosition

PDA депозитора. Отслеживает депонированную сумму стейблкоина и начисленные проценты. Проценты автокомпаундятся — стоимость позиции растёт каждую секунду. Seeds: ["deposit", market, depositor].

BorrowPosition

PDA заёмщика. Хранит сумму залога в RWT, заёмную сумму стейблкоина, начисленные проценты, timestamp входа и снапшот Health Factor. Seeds: ["borrow", market, borrower].

LendingConfig

Глобальная конфигурация, управляемая AREAL DAO: LTV, порог ликвидации, штраф за ликвидацию, параметры модели процентной ставки, резервный фактор и ссылки на оракулы. Seeds: ["lending_config"].

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

initialize_market

Создаёт новый кредитный рынок для конкретного стейблкоина (USDC или USDY). Задаёт модель процентной ставки, LTV, порог ликвидации и другие параметры. Только AREAL DAO может создавать рынки.Authority: Engine Authority (AREAL DAO)
Accounts:
  - engine_authority:    Signer
  - lending_market:      PDA (init)
  - lending_config:      PDA
  - stablecoin_mint:     Mint USDC или USDY
  - rwt_mint:            Mint RWT (залог)
  - system_program

Args:
  - ltv_bps: u16                    Loan-to-Value (напр., 7500 = 75%)
  - liquidation_threshold_bps: u16  Порог ликвидации (напр., 8000 = 80%)
  - liquidation_penalty_bps: u16    Штраф за ликвидацию (напр., 500 = 5%)
  - reserve_factor_bps: u16         Доля протокола от процентов → AREAL DAO (напр., 1000 = 10%)
  - rate_model: RateModel           Параметры кривой процентной ставки
Депонирует стейблкоины (USDC или USDY) в кредитный рынок для получения процентов. Создаёт или обновляет PDA DepositPosition. Проценты начисляются посекундно и автокомпаундятся — ручной claim не нужен.Authority: Permissionless
Accounts:
  - depositor:           Signer
  - lending_market:      PDA (mut)
  - deposit_position:    PDA (init или mut)
  - depositor_stable_ata: Аккаунт стейблкоина депозитора (mut)
  - market_vault:        Vault стейблкоинов рынка (mut)
  - token_program

Args:
  - amount: u64          Сумма стейблкоина для депозита
Выводит депонированные стейблкоины плюс начисленные проценты. Может быть частично ограничен при очень высокой утилизации (большая часть стейблкоинов выдана заёмщикам).Authority: Депозитор (должен подписать)
Accounts:
  - depositor:           Signer
  - lending_market:      PDA (mut)
  - deposit_position:    PDA (mut)
  - market_vault:        Vault стейблкоинов рынка (mut)
  - depositor_stable_ata: Аккаунт стейблкоина депозитора (mut)
  - token_program

Args:
  - amount: u64          Сумма для вывода (0 = вся позиция + проценты)
Депонирует RWT как залог и занимает стейблкоины. Максимальная сумма займа определяется:
max_borrow = rwt_collateral_value_usd × LTV
Стоимость RWT определяется по текущей рыночной цене из master pool RWT/USDY на native DEX. Это реальная цена, по которой ликвидаторы могут продать — что делает оценку залога точной и актуальной.Authority: Permissionless
Accounts:
  - borrower:            Signer
  - lending_market:      PDA (mut)
  - borrow_position:     PDA (init или mut)
  - rwt_usdy_pool:       PDA master pool RWT/USDY (источник цены)
  - borrower_rwt_ata:    Аккаунт RWT заёмщика (mut)
  - borrower_stable_ata: Аккаунт стейблкоина заёмщика (mut)
  - collateral_vault:    Vault залога RWT рынка (mut)
  - market_vault:        Vault стейблкоинов рынка (mut)
  - token_program

Args:
  - collateral_amount: u64   RWT для депозита как залог
  - borrow_amount: u64       Сумма стейблкоина для займа
Возвращает заёмные стейблкоины плюс начисленные проценты. После полного возврата залог RWT высвобождается обратно заёмщику. Частичный возврат улучшает Health Factor.Authority: Заёмщик (должен подписать)
Accounts:
  - borrower:            Signer
  - lending_market:      PDA (mut)
  - borrow_position:     PDA (mut)
  - borrower_stable_ata: Аккаунт стейблкоина заёмщика (mut)
  - borrower_rwt_ata:    Аккаунт RWT заёмщика (mut)
  - market_vault:        Vault стейблкоинов рынка (mut)
  - collateral_vault:    Vault залога рынка (mut)
  - token_program

Args:
  - repay_amount: u64    Сумма для возврата (0 = полный возврат + все проценты)
Добавляет дополнительный залог RWT к существующей позиции займа без увеличения займа. Улучшает Health Factor.Authority: Заёмщик (должен подписать)
Accounts:
  - borrower:            Signer
  - borrow_position:     PDA (mut)
  - borrower_rwt_ata:    Аккаунт RWT заёмщика (mut)
  - collateral_vault:    Vault залога рынка (mut)
  - token_program

Args:
  - amount: u64          Дополнительный залог RWT
Ликвидирует недостаточно обеспеченную позицию займа (Health Factor < 1.0). Ликвидатор погашает часть долга и получает залог RWT заёмщика со скидкой (штраф за ликвидацию).
  • HF между 0.95 и 1.0 → можно ликвидировать до 50% позиции
  • HF ниже 0.95 → можно ликвидировать до 100%
Authority: Permissionless (любой может ликвидировать нездоровые позиции)
Accounts:
  - liquidator:          Signer
  - lending_market:      PDA (mut)
  - borrow_position:     PDA (mut)
  - rwt_usdy_pool:       PDA master pool RWT/USDY (источник цены)
  - liquidator_stable_ata: Аккаунт стейблкоина ликвидатора (mut)
  - liquidator_rwt_ata:    Ликвидатор получает RWT со скидкой (mut)
  - collateral_vault:    Vault залога рынка (mut)
  - market_vault:        Vault стейблкоинов рынка (mut)
  - token_program

Args:
  - repay_amount: u64    Сумма долга для погашения за заёмщика
Начисляет проценты на все позиции в рынке. Выполняется каждую секунду внутри MagicBlock Ephemeral Rollup. Обновляет стоимость депозитных позиций (автокомпаунд) и суммы долга по займам.Authority: Permissionless (crank, работает в ER)
Accounts:
  - crank:               Signer
  - lending_market:      PDA (mut)
Обновляет параметры рынка: LTV, порог ликвидации, модель процентной ставки, резервный фактор. Изменения применяются только к новым позициям — существующие сохраняют параметры на момент входа.Authority: Engine Authority (AREAL DAO)
Accounts:
  - engine_authority:    Signer
  - lending_config:      PDA (mut)

Args:
  - ltv_bps: Option<u16>
  - liquidation_threshold_bps: Option<u16>
  - liquidation_penalty_bps: Option<u16>
  - reserve_factor_bps: Option<u16>
  - rate_model: Option<RateModel>

Health Factor

Health Factor определяет, насколько позиция займа близка к ликвидации:
Health Factor = (стоимость залога RWT × порог ликвидации) / общий долг
Где:
  • Стоимость залога RWT = rwt_amount × рыночная цена RWT (из master pool RWT/USDY на native DEX, обновляется каждую секунду в ER)
  • Общий долг = заёмная сумма + начисленные проценты
Health FactorСтатус
> 1.5Безопасно — хорошо обеспечена
1.0 – 1.5Осторожно — стоит добавить залог или частично вернуть
< 1.0Ликвидируема — любой может ликвидировать позицию
Рыночная цена RWT считывается из master pool RWT/USDY на native DEX — это реальная цена, по которой ликвидаторы могут продать изъятый залог. Использование рыночной цены (не NAV) гарантирует, что оценка залога отражает реальные условия ликвидности.
Хотя NAV Book Value растёт детерминированно от доходности, рыночная цена может временно торговаться ниже или выше NAV. Health Factor следует за рыночной реальностью, а не только теоретической справедливой стоимостью — защищая протокол от сценариев, где NAV высок, но реальная рыночная ликвидность ограничена.

Модель процентной ставки

Модель на основе утилизации, балансирующая доходность депозиторов и стоимость для заёмщиков:
utilization = total_borrows / (total_deposits + total_borrows)
1

Низкая утилизация (0-70%)

Процентная ставка растёт постепенно. Депозиторы получают умеренный APY, заёмщики платят низкие ставки. Стимулирует заимствование.
2

Оптимальный диапазон (70-80%)

Целевая зона утилизации. Сбалансированные ставки — депозиторы получают конкурентный APY, заёмщики платят справедливые ставки.
3

Высокая утилизация (80-100%)

Процентная ставка растёт резко (экспоненциально). Отпугивает новые займы, стимулирует возврат и привлекает новые депозиты. Обеспечивает ликвидность для выводов.
ПараметрОписаниеПо умолчанию
Оптимальная утилизацияЦелевой уровень заимствования75%
Базовая ставкаМинимальная процентная ставка2% APR
Slope 1Рост ставки ниже оптимума4% APR на 100% утилизации
Slope 2Рост ставки выше оптимума (крутой)300% APR на 100% утилизации
Резервный факторДоля протокола от процентов → AREAL DAO10%

RWT как залог — почему это работает

RWT уникально подходит как залоговый актив, потому что его стоимость детерминирована и растёт:

Рыночная цена из native DEX

Залог RWT оценивается по реальной рыночной цене из master pool RWT/USDY на native DEX — цена, по которой ликвидаторы реально могут продать. Обновляется каждую секунду в MagicBlock ER.

NAV как ценовой пол

NAV Book Value растёт каждую секунду от доходности OT, создавая растущий ценовой пол. Рыночная цена стремится следовать за NAV со временем, что означает естественный рост стоимости залога и постепенное улучшение Health Factor.

Глубокая ликвидность

RWT торгуется на native DEX в concentrated master pools (RWT/USDY, RWT/USDC). Ликвидаторы могут эффективно продать изъятый залог без чрезмерного проскальзывания.

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

ОперацияГде выполняетсяЧастота
accrue_interestEphemeral RollupКаждую секунду
Чтение рыночной цены RWTEphemeral RollupКаждую секунду (из пула RWT/USDY)
deposit / withdrawSolana L1По запросу
borrow / repaySolana L1По запросу
liquidateSolana L1По запросу

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

Оценка по рыночной цене

Залог RWT оценивается по реальной рыночной цене из master pool RWT/USDY — цена, по которой ликвидаторы реально могут продать. Обновляется каждую секунду в MagicBlock ER. Нет зависимости от внешних оракулов.

Переменная ликвидация

Переменный close factor: 50% при HF 0.95-1.0, 100% при HF < 0.95. Предотвращает ситуации, когда частичная ликвидация оставляет underwater-позиции.

NAV как растущий пол

Health Factor использует рыночную цену, но NAV Book Value растёт каждую секунду от доходности — создавая растущий ценовой пол. Рыночная цена стремится к NAV, снижая долгосрочный риск ликвидации.

Изоляция рынков

Рынки USDC и USDY полностью изолированы. Плохой долг в одном рынке не затрагивает другой.

DAO-управляемые параметры

LTV, порог ликвидации, модель ставок и резервный фактор управляются AREAL DAO. Изменения применяются только к новым позициям — существующие заёмщики защищены.

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

Проценты начисляются каждую секунду в MagicBlock ER. Нет устаревших процентов — позиции всегда отражают актуальное состояние.
Модуль Lending & Borrowing в настоящее время находится в разработке. Эта документация описывает целевую архитектуру. Код модуля ещё не прошёл аудит.