Архитектура контракта
Контракт Ownership Token (OT) управляет жизненным циклом проектных токенов, представляющих реальное, юридически обеспеченное владение активами, принадлежащими . Каждый проект разворачивает собственный экземпляр контракта OT на Solana — со своим mint, governance и логикой распределения доходов.On-Chain аккаунты
OtConfig
Основной PDA конфигурации Ownership Token. Хранит authority DAO проекта, метаданные токена, лимит предложения и ссылки на revenue и governance аккаунты. Seeds:
["ot_config", ot_mint].OtMint
SPL-токен mint для Ownership Token этого проекта. Mint authority принадлежит PDA
OtConfig — только контракт может минтить новые токены. У каждого проекта уникальный mint.RevenueAccount
Аккумулирует доход, депонированный DAO проекта от реальных операций (аренда, комиссии, роялти). Средства хранятся здесь до распределения согласно
RevenueConfig. Seeds: ["revenue", ot_mint].RevenueConfig
Хранит список направлений распределения с их процентами аллокации. Каждое направление имеет имя, целевой адрес и долю в базисных пунктах. DAO проекта может добавлять, удалять и обновлять направления в любой момент. Seeds:
["revenue_config", ot_mint].OtGovernance
Хранит параметры governance DAO проекта: пороги предложений, конфигурацию рынков футархии, периоды голосования и текущий governance authority. Seeds:
["ot_governance", ot_mint].Основные инструкции
initialize_ot
initialize_ot
Разворачивает новый Ownership Token для проекта. Создаёт PDA
OtConfig, OtMint, RevenueAccount, RevenueConfig и OtGovernance. Устанавливает authority DAO проекта, метаданные токена, лимит предложения и начальные направления распределения.Authority: Деплоер проекта (однократный вызов)mint_ot
mint_ot
Минтит новые Ownership Tokens указанному получателю. Контролирует лимит предложения, определённый в
OtConfig. Обычно используется при первичном распределении токенов или последующих раундах финансирования, одобренных governance.Authority: Governance DAO проектаdeposit_revenue
deposit_revenue
Депонирует доход от реальных операций в
RevenueAccount. Вызывается DAO проекта, когда off-chain доход переводится on-chain (собрана аренда, получены комиссии, поступили роялти).Это автоматически запускает distribute_revenue — как только средства поступают в RevenueAccount, контракт разделяет их согласно предварительно настроенному RevenueConfig и пересылает долю Holders в контракт Yield Distribution. Дополнительное голосование не требуется.Authority: Governance DAO проектаdistribute_revenue
distribute_revenue
Срабатывает автоматически при поступлении средств в
RevenueAccount через deposit_revenue. Разделяет депонированную сумму согласно предварительно настроенному RevenueConfig — отдельное голосование для каждого распределения не требуется.DAO голосует один раз — при настройке или изменении RevenueConfig (через add_destination, update_destination, remove_destination). После этого каждый депозит дохода автоматически проходит через настроенные направления.Для направлений типа Holders контракт автоматически вызывает create_distribution на контракте Yield Distribution через CPI — создаётся новый изолированный цикл распределения.С общей суммы распределения удерживается комиссия протокола AREAL 0.25%.Authority: Автоматически (вызывается внутренне из deposit_revenue)add_destination
add_destination
Добавляет новое направление распределения в
RevenueConfig. DAO проекта голосует (через футархию) за создание новых потоков дохода — например, маркетинговый бюджет, фонд разработки или новая аллокация команде. Общая аллокация по всем направлениям должна составлять 100%.Authority: Governance DAO проектаupdate_destination
update_destination
Обновляет существующее направление распределения — изменяет имя, целевой адрес, процент аллокации или тип. DAO проекта голосует за корректировку распределения дохода по мере развития проекта. Общая аллокация после обновления должна оставаться 100%.Authority: Governance DAO проекта
remove_destination
remove_destination
Удаляет направление распределения из
RevenueConfig. Освободившаяся аллокация должна быть перераспределена между оставшимися направлениями, чтобы сумма оставалась 100%. Нельзя удалить последнее направление.Authority: Governance DAO проектаtransfer_ot_authority
transfer_ot_authority
update_ot_config
update_ot_config
Обновляет параметры конфигурации токена — метаданные, корректировки лимита предложения или параметры governance. Требует authority DAO проекта.Authority: Governance DAO проекта
Распределение дохода
Как это работает
DAO голосует один раз за настройкуRevenueConfig — задавая направления и проценты. После этого всё автоматически: при каждом депозите дохода в RevenueAccount инструкция distribute_revenue срабатывает немедленно и разделяет средства по предварительно настроенным направлениям. Повторные голосования не нужны.
Структура RevenueConfig
RevenueConfig хранит список направлений — каждое с именем, типом, целевым адресом и аллокацией в базисных пунктах. Сумма всех аллокаций должна равняться 10 000 bps (100%).
| Поле | Тип | Описание |
|---|---|---|
name | String | Читаемое название (напр., “Держатели токенов”, “Операционная деятельность команды”) |
dest_type | enum | Holders — пересылка в контракт Yield Distribution; Wallet — прямой перевод; DaoTreasury — казна DAO проекта |
destination | Pubkey | Целевой адрес (программа Yield Distribution, кошелёк команды, PDA казны DAO) |
share_bps | u16 | Аллокация в базисных пунктах (5000 = 50%) |
Пример конфигурации
50% → Держатели OT
Тип:
Holders. Контракт OT автоматически вызывает create_distribution на контракте Yield Distribution через CPI — создаётся новый изолированный цикл распределения. Средства размещаются в master pool RWT/USDY через DCA и распределяются посекундно держателям OT в RWT. Дополнительное голосование не требуется.30% → Операционная деятельность команды
Тип:
Wallet. Прямой перевод на операционный кошелёк команды. Покрывает зарплаты, обслуживание, управление имуществом и повседневные расходы.Это лишь пример. DAO проекта имеет полную гибкость для создания любого количества направлений с любой аллокацией. Проект может добавить «Маркетинговый фонд» на 5%, уменьшить аллокацию команды или создать направление «Программа обратного выкупа» — всё через голосования governance.
Управление направлениями
DAO проекта может изменять структуру распределения в любой момент через governance:Добавить
add_destination — создать новый поток дохода. Пример: добавить «Фонд устойчивости» на 10% и пропорционально уменьшить другие аллокации.Обновить
update_destination — изменить % аллокации, целевой адрес или имя. Пример: увеличить долю держателей с 50% до 60% по мере развития проекта.Удалить
remove_destination — удалить направление и перераспределить его долю. Пример: убрать временный маркетинговый фонд после завершения кампании.Все модификации требуют голосования governance DAO проекта (через футархию). Контракт гарантирует, что аллокации всегда в сумме равны ровно 100% — любая инструкция, нарушающая этот инвариант, отклоняется.
Жизненный цикл дохода
Одноразовая настройка конфига (голосование DAO)
DAO голосует (через футархию) за настройку или изменение
RevenueConfig — определяя направления и проценты. Это происходит только один раз (или когда DAO хочет изменить пропорции). После этого повторные голосования не нужны.Генерация дохода
Реальные активы, принадлежащие DAO Ownership Company, генерируют доход — аренда, сервисные комиссии, лицензионные роялти, процентный доход.
On-chain депозит → автоматическое распределение
DAO проекта переводит доход on-chain, вызывая
deposit_revenue. Как только средства поступают в RevenueAccount, distribute_revenue срабатывает автоматически — разделяя средства согласно RevenueConfig. Дополнительное голосование не требуется.Связь с RWT Vault
Ownership Tokens — это строительные блоки RWT Vault. Strategy authority RWT Vault покупает OT на native DEX для формирования диверсифицированного портфеля.Контракты OT независимы от контракта RWT. Каждый проект управляет своим токеном, governance и доходом. RWT Vault взаимодействует с OT только через рыночные операции на native DEX — привилегированного доступа или особых отношений нет.
Безопасность
Изоляция проектов
Каждый контракт OT — отдельное развёртывание со своими PDA. Контракт одного проекта не может получить доступ к состоянию или средствам другого.
Контроль предложения
supply_cap в OtConfig контролируется on-chain. После установки не может быть превышен — даже authority DAO проекта.Инвариант 100%
Контракт гарантирует, что все аллокации направлений в
RevenueConfig всегда в сумме равны ровно 10 000 bps (100%). Любая инструкция, нарушающая этот инвариант, отклоняется.Учёт доходов
Все депозиты и распределения доходов отслеживаются on-chain с полным аудиторским следом. Никакие off-chain посредники не управляют средствами.
Передача authority
Governance проекта может быть передан любому адресу через
transfer_ot_authority, обеспечивая прогрессивную децентрализацию или передачу DAO→DAO.Изменения через governance
Все модификации направлений (
add, update, remove) требуют голосования governance DAO проекта. Ни один актор не может перенаправить доход без одобрения сообщества.