> ## Documentation Index
> Fetch the complete documentation index at: https://whitepaper.rwanftfi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Архитектура смарт-контракта

> Diamond Pattern и 7 фасетов.

Платформа RWANFTFI построена на надёжной, модульной и безопасной архитектуре смарт-контрактов, которая управляет всеми взаимодействиями, распределениями и механикой токенов без централизованного контроля.

<video autoPlay muted loop playsInline preload="metadata" style={{ width: '100%', borderRadius: '12px', marginTop: '24px', marginBottom: '24px' }} src="https://mintcdn.com/rwanftfi/UElUUQE-oWUZwJoB/bx2.mp4?fit=max&auto=format&n=UElUUQE-oWUZwJoB&q=85&s=6802a0aa8f6c63b7cba3032a69e6a3a5" data-path="bx2.mp4" />

## Diamond Pattern (EIP-2535)

Ядро системы RWANFTFI реализовано с использованием паттерна Diamond (EIP-2535). Этот архитектурный выбор позволяет протоколу обойти стандартный лимит размера смарт-контракта (24КБ), разделив функциональность на несколько независимых модулей, называемых «фасетами» (модули смарт-контрактов, доступные через единый прокси-контракт).

## Основные фасеты

<CardGroup cols={2}>
  <Card title="AdminFacet" icon="gear">
    Параметры системы, роли, продажи бизнеса и минт специальных NFT.
  </Card>

  <Card title="MarketingFacet" icon="bullhorn">
    Регистрация пользователей, покупки NFT и распределение маркетинговых вознаграждений.
  </Card>

  <Card title="FarmingFacet" icon="seedling">
    Управление циклом майнинга NFTM и фарминга DA.
  </Card>

  <Card title="PaymentFacet" icon="wallet">
    Депозиты, выводы, создание ваучеров и накопительные переводы.
  </Card>

  <Card title="TreeFacet" icon="sitemap">
    Логика 22-уровневого бинарного дерева и алгоритмы размещения пользователей.
  </Card>

  <Card title="ResolverFacet" icon="rotate">
    Обработка просроченных стеков DA, сжигание ваучеров и разрешение замороженных аккаунтов.
  </Card>

  <Card title="ViewFacet" icon="eye">
    Запросы только для чтения пользовательских данных, балансов и структур дерева.
  </Card>
</CardGroup>

## Матрица обновляемости

* **Diamond Contract (EIP-2535):** Обновляется через Facet cuts — позволяет добавлять, заменять или удалять отдельные модули без передеплоя всей системы.
* **TokenReserve (DA):** Обновляется через Transparent Proxy — обновления логики возможны без изменения адреса контракта.
* **NFT (Regular, Gift, Ambassador), GovToken, AdminContract:** Необновляемые — обеспечивают неизменность основных активов и правил управления.

## Управление ролями

Система использует иерархическую структуру ролей (AccessControlEnumerable) для безопасного управления разрешениями:

* `ADMIN_ROLE`: Может выдавать/отзывать другие роли и изменять критически важные параметры системы.
* `SERVICE_ROLE`: Выполняется бэкенд-скриптами для автоматизированных задач (например, разрешение просроченных стеков, обработка кросс-чейн депозитов).
* `SIGNER_ROLE`: Используется для криптографической верификации подписей для авторизации определённых действий, таких как переводы ваучеров.
* `MINTER_ROLE`: Авторизована для минта определённых токенов или NFT.

## Схема балансов и приоритет платежей

Для управления сложным потоком средств RWANFTFI использует многоуровневую схему балансов в смарт-контракте.

**Балансы пользователей:**

1. **Обычный Баланс (`balance`):** Основной кошелёк для доступного USDT. Средства здесь можно вывести в любое время, использовать для покупки NFT или генерации ваучеров.
2. **Накопительный Баланс (`accumulativeBalance`):** Обязательный сберегательный счёт, куда 20% каждого маркетингового вознаграждения зачисляется сразу после начисления.
   * **Использование:** Может использоваться только для покупки NFT того же уровня или покупки NFT более высокого уровня.
   * **Комиссии:** Использование этого баланса для покупок NFT облагается 20% комиссией, **которая направляется в Пул ликвидности DA**. Перевод его другому пользователю также облагается 20% комиссией, **направляемой в Пул ликвидности DA**. Любое движение Накопительного Баланса генерирует приток в Пул и создаёт основу для нового DA.
   * **120-дневное перераспределение:** Если пользователь не использует свой Накопительный Баланс в течение 120 дней, неиспользованный баланс перераспределяется. Распределение зависит от типа NFT пользователя:
     * **Держатели Regular NFT:** **70%** направляется в Пул ликвидности DA для минтинга новых токенов DA; **30%** передаётся прямому вышестоящему спонсору пользователя.
     * **Держатели Gift NFT:** **80%** направляется в Пул ликвидности DA; **20%** передаётся прямому вышестоящему спонсору (регулируется отдельным параметром `accumulativeClaimDistributeGift`).
     * **Каскадное правило (для обоих типов):** Если лимит дохода спонсора исчерпан (равен нулю), доля спонсора передаётся выше следующему подходящему участнику в структуре. Если ни у одного участника в цепочке нет активного лимита дохода, вся сумма направляется в Пул ликвидности DA.
3. **Лимит (`limit`):** Представляет максимальный оставшийся доход, который может сгенерировать NFT.

### Системные балансы

В дополнение к балансам пользователей смарт-контракт поддерживает три внутренних системных баланса:

* **Dev Balance (`devBalance`):** Накапливает платёжные комиссии и сборы для операционного финансирования.
* **Token Reserve Balance (`tokenReserveBalance`):** Пул ликвидности USDT, который на 100% обеспечивает токен DA. Каждый источник дохода в экосистеме поступает в этот пул.
* **Price Impact Balance (`priceImpactBalance`):** Специальный резерв, используемый для управления стабильностью цены токена DA в ходе определённых событий экосистемы.

Эти балансы полностью управляются смарт-контрактом и недоступны ни одному отдельному пользователю или администратору.

### Приоритет платежей

При совершении покупки смарт-контракт списывает средства в следующем порядке:

<Steps>
  <Step title="Ваучеры (вручную)">
    Если пользователь явно применил ваучер при оформлении покупки, его стоимость списывается первой. Без ручного применения ваучер не используется автоматически.
  </Step>

  <Step title="Накопительный Баланс">
    Если пользователь выбрал использование Накопительного, он применяется со 100% покрытием (если хватает баланса) или комбинируется с Обычным Балансом. 20% комиссии направляются в Пул ликвидности DA.
  </Step>

  <Step title="Обычный Баланс">
    Любая оставшаяся сумма списывается с Обычного Баланса.
  </Step>
</Steps>

<Warning>
  Ваучер и Накопительный Баланс **нельзя** использовать одновременно при одной покупке NFT — это два взаимоисключающих способа скидки. Допустимые комбинации: \[Ваучер + Обычный Баланс], \[Накопительный Баланс] (полное покрытие или) \[Накопительный + Обычный Баланс].
</Warning>

<Note>
  Все транзакции в Binance Smart Chain требуют стандартных сетевых комиссий за газ, оплачиваемых в **BNB**. Пользователи должны держать небольшое количество BNB в кошельке для выполнения любых ончейн операций (покупки, выводы, переводы). Это отдельно от балансов USDT, используемых внутри экосистемы.
</Note>
