Принципы дизайна
Каждый агент в системе спроектирован против четырёх обязательных ограничений:Одна функция
У каждого агента ровно одна цель. Accumulation Agent накапливает OT. Rebalancer управляет геометрией пула. Yield Harvester забирает и реинвестирует доходность. LP Manager обрабатывает позиции Nexus. Ни один агент не пересекается с доменом другого.
Ограниченная поверхность действий
Агент может вызывать опубликованный, минимальный набор инструкций — ничего более. Его keypair отклоняется любой инструкцией за пределами этого набора. Поверхность перечислена on-chain как
allowed_instructions: Vec<u8> на каждую агентскую роль.Без политики
Агенты не решают что делать. Они оптимизируют как и когда внутри параметров, заданных governance. Агент не может спросить «стоит ли купить больше этого OT?» — он может спросить только «при целевой аллокации, каков лучший путь исполнения сейчас?»
Аудируемо на каждое действие
Каждое действие агента эмитирует структурированное событие, содержащее версию StrategyConfig, которую он читал, целевое состояние, которое он вычислил, и on-chain результат. Форенсическая реконструкция не требует off-chain логов.
Четыре агента
1. Accumulation Agent
Цель. Приобретать Ownership Tokens для RWT Vault для достижения целей аллокации, заданных governance. Поверхность действий:rwt_engine::vault_swap— ограничен swap’ами, гдеtoken_in ∈ {USDC}иtoken_out ∈ StrategyConfig.allowed_ot_mints- Не может вызывать никакие другие инструкции vault
RwtVault.total_invested_capital,.current_ot_positionsStrategyConfig.allowed_ot_mints,.max_alloc_per_ot_bps,.max_total_ot_exposure_bps,.max_daily_swap_volume_usdc,.max_single_swap_volume_usdc,.max_slippage_bps,.allowed_swap_venues- On-chain цены OT через состояния пулов DEX
- Какой OT приобрести сейчас — выбран для минимизации дистанции между текущей и целевой аллокацией, внутри разрешённого набора
- Сколько свопить — ограничено
max_single_swap_volume_usdcи оставшимся бюджетомmax_daily_swap_volume_usdc - Через какую площадку маршрутизировать — выбирает пул с наименьшим slippage среди
allowed_swap_venues - Когда действовать — ждёт отклонения от цели, превышающее
rebalance_deviation_bps
- Свопить на любой mint вне
allowed_ot_mints - Превысить лимит аллокации на OT
- Превысить дневной бюджет объёма
- Маршрутизировать через неодобренную площадку
- Трогать USDY, LP-позиции, распределение доходности или любые не-OT активы
- Менять любой параметр стратегии
- Развёртывается через
initialize_agent(role: Accumulation, keypair: new_agent_pk)— предложение governance - Заменяется через
rotate_agent(role: Accumulation, new_keypair: ...)— предложение governance, timelock 24ч - Скомпрометированный агент: обнаруживается по аномальным событиям или обзору governance → активируется kill switch → ротация замены
2. Rebalancer Agent
Цель. Поддерживать геометрию Monotonic Ladder мастер-пулов по мере эволюции NAV. Поверхность действий:native_dex::grow_liquidity— расширение вправо при росте NAVnative_dex::compress_liquidity— сжатие влево при уценке- Не может вызывать никакие другие инструкции DEX
RwtVault.nav_book_valuePoolState.last_rebalance_nav_bin,.active_zone_lower,.active_bin_idBinArrayдля текущего распределенияStrategyConfig.rebalance_deviation_bps,.rebalance_cooldown_secs,.geometric_density_r_bps,.max_active_zone_width
- Когда ребалансировка оправдана — порог отклонения пересечён И cooldown истёк
- Целевой bin детерминированно выведен из NAV
- Ширина активной зоны внутри максимума, заданного governance
- Направление — путь роста vs сжатия на основе знака отклонения
- Менять
bin_step_bpsилиpermanent_tail_floor_bin(это неизменяемое состояние пула) - Трогать bin’ы ниже
left_anchor_bin(permanent tail) - Извлекать любые токены
- Действовать вне окна cooldown
- Превысить сконфигурированную ширину активной зоны
grow_liquidity аддитивен (добавляет USDC из Nexus); compress_liquidity консервативен (перераспределяет существующий капитал без списания). Цель формальной верификации.
3. Yield Harvester Agent
Цель. Забирать доходность, распределённую в RWT Vault, и маршрутизировать её по распределению, определённому governance. Поверхность действий:rwt_engine::claim_yield— забрать RWT из merkle tree Yield Distribution от имени vault- Не может вызывать никакие другие инструкции vault
- Merkle-доказательства от off-chain publisher Yield Distribution
StrategyConfig.yield_split(book_value_bps/arl_treasury_bps/nexus_bps)- Правомочность claim из аккаунтов
MerkleDistributor
- Когда забирать — обычно когда невостребованный баланс превышает порог, оправдывающий gas
- Батчинг — объединяет несколько ожидающих распределений в одной транзакции, когда возможно
- Менять распределение (это параметр governance)
- Перемещать RWT куда-либо, кроме назначений распределения
- Свопить забранные токены
- Пропустить распределение (попытка маршрутизировать в другое место отклоняется)
vault_swap ненужно расширяла бы его поверхность.
4. LP Manager Agent
Цель. Управлять LP-позициями Nexus на нативном DEX — как финансирование мастер-пулов, так и стратегические пары со сторонними токенами. Поверхность действий:native_dex::nexus_deposit— принимать входящий USDC/RWT в аккумулятор Nexusnative_dex::nexus_swap— свопить между токенами, которые держит Nexus (напр. USDC ↔ RWT для балансировки финансирования)native_dex::nexus_add_liquidity— предоставлять LP в не-мастер пулыnative_dex::nexus_remove_liquidity— забирать LP, когда governance перераспределяет- Не может вызывать никакие другие инструкции
LiquidityNexus.usdc_balance,.rwt_balance,.lp_positionsStrategyConfig.master_pool_funding_priority,.min_nexus_usdc_reserve_bps,.permanent_tail_refill_enabled- Состояние конкретного пула
- Когда маршрутизировать USDC в Rebalancer (для
grow_liquidity) vs. держать как резерв - Какую стороннюю пару пополнить, если governance одобрил несколько
- Когда ребалансировать внутренний баланс USDC/RWT для операций Nexus
- Разворачивать ниже уровня
min_nexus_usdc_reserve_bps - Добавлять ликвидность в любой пул, не в whitelist governance
- Извлекать токены в любое место назначения, кроме Казначейства Areal (через
nexus_claim_rewards) - Вызывать
grow_liquidityилиcompress_liquidity— это роль Rebalancer
Анализ радиуса поражения
Ценность сепарации: рассмотрим каждый сценарий компрометации.| Скомпрометированный агент | Потеря в худшем случае | Почему ограничено |
|---|---|---|
| Accumulation Agent | Slippage на swap’ах до дневного лимита объёма; вынужденные покупки OT с худшими ценами из whitelist | Не может превысить дневной лимит; не может купить не из whitelist; не может трогать не-OT активы |
| Rebalancer Agent | Потраченные вычисления на избыточные ребалансировки внутри лимита cooldown; субоптимальное размещение bin’ов | Не может извлекать средства; не может трогать permanent tail; инварианты сохранения держатся |
| Yield Harvester Agent | Неудачное время claim’ов; слегка более высокие gas-расходы | Назначения claim захардкожены в распределении; нет полномочий swap |
| LP Manager Agent | Неправильно размещённое LP внутри whitelist; slippage на внутренних swap’ах Nexus | Не может разворачивать ниже минимума резерва; не может выйти из whitelist; не может извлекать во внешние кошельки |
| Все четыре одновременно | Ограничено суммой лимитов на агента | Kill switch governance активируется → все агенты заморожены в пределах одного блока после подписания pause authority |
Идентичность агента и ротация
Идентичность
Каждый агент — единичный keypair, хранимый on-chain как:signer == AgentRegistry.<role>_agent перед исполнением.
Ротация
Ротация — governance-действие:- Pause Authority (Team Multisig) активирует kill switch мгновенно
- Предложение ротации отправляется через futarchy
- Истекает 24ч timelock
- Ротация применяется; деактивация kill switch запускает свой собственный 7-дневный timelock
- Параллельный аудит охвата компрометации в окне деактивации
Паттерн взаимодействия
Типичная эпоха (напр. 24 часа) выглядит так:Что агенты НЕ будут делать
Никакого формирования мнения
Агенты не «решают, что недвижимость в тренде в этом квартале». Они исполняют цели аллокации, заданные governance. Фраза «AI выбирает портфель» явно не является моделью.
Никакого пересечения функций
Accumulation Agent не будет «заодно делать сбор доходности». Каждый агент вызывает ровно свой опубликованный набор инструкций. Пересечение функций требует нового специализированного агента через governance.
Никакого market-making на ордерах пользователей
Агенты не берут другую сторону сделок пользователей. Они исполняют операции на уровне протокола против ликвидности DEX на тех же условиях, что и любой другой участник.
Никакого дискреционного вмешательства
Агенты не «приостанавливаются в волатильный рынок». Это решение governance, исполняемое через kill switch. Агенты исполняют равномерно в своих границах независимо от рыночных условий.
Резюме
Агенты единой функции
Accumulation, Rebalancer, Yield Harvester, LP Manager — каждый делает ровно одну вещь
Ограниченные поверхности
Каждый агент может вызывать только свой опубликованный набор инструкций; все другие попытки отклоняются on-chain
Исполнение без политики
Агенты оптимизируют как и когда — никогда что. Стратегия живёт слоем выше.
Аудит-след по дизайну
Каждое действие эмитирует структурированные события, ссылающиеся на версию конфига, против которой оно исполнилось
Сдерживание компрометации
Ограниченный радиус поражения на агента; одновременная компрометация всё равно ограничена StrategyConfig
Ротация через governance
Агенты заменяемы через futarchy с timelock 24ч; аварийная остановка через kill switch мгновенна