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

Land NFT: обзор

Land NFT — партнёрский продукт поверх ликвидности. Пользователь покупает землю — NFT уровня 1–15 — и строит на ней вышки — NFT доли в общей позиции ликвидности Uniswap/PancakeSwap V3. Земли выстраиваются в дерево по партнёрской структуре, и с каждой покупки земли или вышки партнёрское вознаграждение получают четыре владельца земель выше по этому дереву.

В коде земля — Ground, вышка — Tower. Раздел на фронте называется «Ликвидность» (/finances/liquidity) и пока открыт только для тестового раскатывания.

По какому коду написано

Раздел составлен по коду ветки preprod-start-v2 на 07.10.2026, номера строк в ссылках — по ней. В preprod контракты и логика земель, вышек и партнёрки те же; отличаются кросс-чейн обмен на фронте (1inch Fusion+ вместо 0x), скрытие раздела в меню и номера строк во фронте и бэкенде.

Глоссарий​

ТерминЧто значит
Земля (Ground, Land NFT)ERC721 MagnetLiquidityGround в BSC. Уровень, индекс, родитель, 4 места под вышки
Вышка (Tower)NFT MagnetLiquidityShared — доля в общей позиции ликвидности, купленная «на земле»
Уровень1–15. Землю уровня L можно купить с уровнем L в Program 1 и Program 2
Индекс земли (groundIndex)Номер земли пользователя на уровне: 0, 1, 2… У каждой пары «уровень + индекс» своё дерево
Дерево земельГраф в Neo4j groundmatrix: у земли один родитель и сколько угодно детей
Родитель (upline ground)Земля, под которую встала новая земля
Земля-хозяинЗемля аплайна, на которой вышка заняла место
Места (places)Свободные места земли под вышки: у обычной 4, у корневой — без ограничения
Корневая земляЗемля uid 1. По одной на уровень, минтятся при деплое контракта
Цепочка Program 1Все аплайны пользователя из Neo4j program1. По ней ищется место
inviterChain4 владельца земель вверх по дереву земель. Им идёт партнёрка
ЛинияПозиция в inviterChain: линия 1 — ближайшая
КешбэкДоля своей партнёрки, которую владелец земли отдаёт покупателю
ОбгонПропуск пригласителя без нужного уровня программы (в Diamond)
КомпрессияПропуск аплайнов без земли или без свободных мест при размещении
uidID пользователя в Diamond. Земли, места и партнёрка привязаны к uid, а не к адресу

Архитектура​

         Polygon                                         BSC
┌──────────────────────────┐ ┌─────────────────────────────────────┐
│ Diamond │ │ PartnerChainBridge uid ↔ адрес │
│ уровни Program 1 / 2 │ │ MagnetLiquidityGround земли │
│ MagnetBonuses.deposit │ │ MagnetLiquidityShared вышки │
└────────────┬─────────────┘ └───▲───────────┬──────────────▲──────┘
│ RegistrationInPrograms, │ мост │ GroundPurchased,
│ BuyP1Level, BuyP2Level │ │ NftPurchased │ tx с подписью
▼ │ ▼ │
┌─────────────────────────────────────────────┴──────────────────┐ │
│ p2-backend │ │
│ TreeEventService → Neo4j program1, MySQL lp1/lp2, мост │ │
│ LiquidityGroundEventsJob / LiquidityTowerEventsJob → groundmatrix │
│ TreeService: свободная земля, место под вышку, кешбэк │ │
└──────────────────────────────▲──────────────────────────────────┘ │
│ /service/ground/free, /tower/free │
┌──────────────────────────────┴────────────────────┐ │
│ backend: LiquidityService — подписи покупок │ │
└──────────────────────────────▲────────────────────┘ │
│ /liquidity/ground/sign, /shared/buy/sign │
┌──────────────────────────────┴───────────────────────────────────────────┴──┐
│ frontend: CrosschainSwapModal (земля), buyNftFx (вышка), GroundsSection │
└─────────────────────────────────────────────────────────────────────────────┘

Главный принцип: решения о размещении принимает бэкенд по графу, контракты только проверяют подпись. Контракт земли не знает про места и кешбэк, контракт вышек — про земли вообще. Поэтому граф в Neo4j — источник истины для мест, а его отставание или ошибка напрямую влияют на покупки.

Компоненты и код​

КомпонентГдеЧто делает
MagnetLiquidityGroundapps/contracts-v2/contracts/MagnetLiquidity/MagnetLiquidityGround.solNFT земли, проверка подписи, партнёрские балансы, клейм
MagnetLiquidityShared + …SharedOpsapps/contracts-v2/contracts/MagnetLiquidity/Вышки: покупка с подписью и полями земли, доли, доход, партнёрские балансы
PartnerChainBridgeapps/contracts-v2/contracts/PartnerChainBridge.soluid и адрес пользователя в BSC
LiquidityServiceapps/backend/src/liquidity/liquidity.service.tsПодписи buyGround и buyNft, локи и кулдауны
TreeServiceapps/p2-backend/src/tree.service.tsПоиск родителя и земли-хозяина, inviterChain, кешбэк, выборки
LiquidityGroundEventsJobapps/p2-backend/src/jobs/liquidityGroundEvents.job.tsИнициализация графа, индексация земель
LiquidityTowerEventsJobapps/p2-backend/src/jobs/liquidityTowerEvents.job.tsИндексация вышек, списание мест
TreeEventService + стрим p2:set-partners-chainapps/p2-backend/src/tree.event.service.ts, jobs/setPartnersChainBridge.job.tsProgram 1 в Neo4j, запись пользователей в мост
CrosschainSwapModalapps/frontend/src/widgets/liquidityManagement/ui/modals/CrosschainSwapModal.tsxПокупка уровней программ и земли
buyNftFx, BuyNftPositionModalapps/frontend/src/widgets/liquidityManagement/Покупка вышки
GroundsSection, EditGroundCashbackModalapps/frontend/src/widgets/liquidityManagement/ui/Просмотр земель и настройка кешбэка

Жизненный цикл коротко​

  1. Пользователь покупает уровни L в Program 1 и Program 2 (Polygon). p2-backend кладёт его в матрицу program1 и записывает в PartnerChainBridge в BSC.
  2. Бэкенд по графу находит родителя для земли — ближайшего аплайна с землёй того же уровня и индекса — и подписывает покупку.
  3. Пользователь вызывает buyGround. Доли партнёров записываются в контракт, индексатор добавляет землю в граф.
  4. На свою землю пользователь покупает вышки: каждая занимает место на его земле и на земле ближайшего аплайна со свободным местом. Доли партнёров с покупки вышки тоже записываются в контракт, остаток уходит в ликвидность.
  5. Владелец вышки клеймит доход позиции. Партнёрские балансы копятся по линиям (клейм партнёрки пока недоступен — см. известные проблемы).

Страницы раздела​

Смежные документы​