Разработка системы виртуальных земельных участков (virtual land)

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка системы виртуальных земельных участков (virtual land)
Сложный
от 1 недели до 3 месяцев
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1351
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1247
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    951
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1186
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    922

Встречали проекты, где виртуальная земля продаётся как NFT, а потом никто не знает, что с ней делать? Без продуманной архитектуры координатной системы, гибкой системы прав и экономики с дефицитом карта остаётся пустой. Мы разработали десятки таких систем — от простых 2D гридов до полноценных 3D миров. Закажите разработку virtual land под ключ — от смарт-контрактов до клиентского рендеринга.

Основные проблемы: как хранить координаты в смарт-контрактах без безумных газ-трат? Как объединять участки в Estate с проверкой смежности? Как дать владельцам права настройки своей земли? Ниже разберём каждую из проблем с кодом и цифрами.

Координатная система и хранение

Земля обычно представлена как 2D Grid — целочисленные координаты (x, y). Каждый участок — уникальный NFT с координатами как ключевым атрибутом. Упаковка координат в tokenId (x: int16, y: int16 → uint32) ограничивает мир, но снижает газ.

contract VirtualLand is ERC721 {
    struct LandInfo {
        int16 x;
        int16 y;
        address owner;
        bool developed;
        uint32 districtId;
    }
    
    mapping(uint256 => LandInfo) public lands;
    mapping(bytes32 => uint256) public coordsToTokenId;
    
    function _coordsToId(int16 x, int16 y) internal pure returns (uint256) {
        return uint256(uint32(uint16(int16(x))) | (uint32(uint16(int16(y))) << 16));
    }
    
    function _hashCoords(int16 x, int16 y) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked(x, y));
    }
    
    function mint(int16 x, int16 y, address to) external onlyMinter {
        bytes32 coordHash = _hashCoords(x, y);
        require(coordsToTokenId[coordHash] == 0, "Land already exists");
        uint256 tokenId = _coordsToId(x, y);
        _safeMint(to, tokenId);
        lands[tokenId] = LandInfo({x: x, y: y, owner: to, developed: false, districtId: _getDistrictId(x, y)});
        coordsToTokenId[coordHash] = tokenId;
    }
}

Estate: объединение участков

Estate — несколько соседних участков, объединённых в один NFT. Упрощает управление большим пространством. Проверка смежности on-chain — дорогая для крупных объединений, поэтому для estates до 20–30 участков используется O(n²) алгоритм, а для больших — off-chain с Merkle proof или ZK proof.

Детали проверки смежностиДля on-chain проверки можно использовать алгоритм поиска в глубину (DFS), ограниченный по газу. Примерный лимит — 2000 единиц на участок. Off-chain с Merkle proof дешевле в 10 раз.

Как проверить смежность участков on‑chain?

Проверка того, что набор участков образует связный граф, — дорогая on-chain операция. Оптимизация: проверять, что каждый участок имеет хотя бы одного соседа в множестве. Это не полная связность, но достаточно для Estate. On-chain проверка в 10 раз дороже, чем off-chain с ZK proof, поэтому для крупных объединений используйте off-chain.

Система прав и операторов

Владелец участка должен контролировать, кто может строить на его земле. Реализуем через bitmap прав: BUILD, SCRIPT, ADMIN.

uint8 public constant RIGHT_BUILD  = 1 << 0;
uint8 public constant RIGHT_SCRIPT = 1 << 1;
uint8 public constant RIGHT_ADMIN  = 1 << 3;

mapping(uint256 => mapping(address => uint8)) public landOperators;

function grantRights(uint256 landId, address operator, uint8 rights) external {
    require(ownerOf(landId) == msg.sender, "Not owner");
    landOperators[landId][operator] |= rights;
}

function hasRight(uint256 landId, address operator, uint8 right) public view returns (bool) {
    return ownerOf(landId) == operator || (landOperators[landId][operator] & right) != 0;
}

Экономика виртуальной земли

District — административная единица, объединяющая участки. Может иметь свой governance и общий доход. Adjacency bonus — участки рядом с landmarks (центр города) дороже. Реализуется через хранение landmark-координат и расчёт расстояния. Например, для каждого соседнего участка проверяется наличие landmark и присваивается бонус. Такая механика создаёт ажиотаж на primary sale, но без контента земля бесполезна. Наш опыт показывает: сначала first-party контент, потом сценарии использования.

Marketplace и торговля

Встроенный marketplace с EIP-2981 роялти позволяет торговать участками. Газ-эффективная реализация с проверкой авторских прав.

struct Listing {
    uint256 tokenId;
    uint256 price;
    address seller;
    uint256 expiresAt;
}

mapping(uint256 => Listing) public listings;

function buy(uint256 tokenId) external payable {
    Listing memory listing = listings[tokenId];
    require(block.timestamp <= listing.expiresAt, "Listing expired");
    require(msg.value >= listing.price, "Insufficient payment");
    delete listings[tokenId];
    (address royaltyReceiver, uint256 royaltyAmount) = royaltyInfo(tokenId, listing.price);
    uint256 sellerProceeds = listing.price - royaltyAmount - (listing.price * PLATFORM_FEE / 10000);
    payable(royaltyReceiver).transfer(royaltyAmount);
    payable(PLATFORM_TREASURY).transfer(listing.price * PLATFORM_FEE / 10000);
    payable(listing.seller).transfer(sellerProceeds);
    _safeTransfer(listing.seller, msg.sender, tokenId, "");
}

Что входит в работу над проектом?

  • Аудит и оптимизация смарт-контрактов (экономия на gas до 30%).
  • Полная документация и тесты (Foundry/Hardhat).
  • Интеграция с The Graph или кастомным индексером.
  • Передача доступа к контрактам, IPFS и CDN.
  • Обучение команды заказчика работе с системой.
  • Техническая поддержка на этапе запуска.

Рендеринг карты: 2D vs 3D

Подход Технология Производительность Сложность
2D top-down React + Pixi.js/Konva.js Высокая (viewport culling) Средняя
3D world Three.js/Babylon.js Средняя (LOD, streaming) Высокая

Для первой версии достаточно 2D карты. 3D рендеринг — отдельная итерация, требующая CDN для сцен и системы LOD.

Индексирование данных

On-chain данные неэффективно читать напрямую. Используйте индексер: The Graph или кастомный с PostGIS.

type Land @entity {
  id: ID!
  x: Int!
  y: Int!
  owner: Bytes!
  districtId: Int
  content: LandContent
  listings: [Listing!]! @derivedFrom(field: "land")
  transactions: [Transfer!]! @derivedFrom(field: "land")
}

Стек технологий

Компонент Технология
Land NFT контракт ERC-721 + Solidity
Estate контракт ERC-721 + adjacency logic
Marketplace Solidity (кастомный или Seaport)
Индексер The Graph / кастомный + PostGIS
2D карта React + Pixi.js / Konva.js
3D рендеринг Three.js / Babylon.js
Content storage IPFS + Pinata / Arweave
Сеть Polygon / Immutable zkEVM

Сроки и бюджет

MVP (Land NFT, базовый marketplace, 2D карта, загрузка контента) — 2–3 месяца. Полная система с Estate, Districts, 3D рендерингом, системой прав, индексером — 5–7 месяцев. 3D world engine — отдельный проект, 6–12 месяцев. Каждый проект оценивается индивидуально — получите консультацию. Гарантируем безопасность контрактов (аудит обязателен) и опыт в подобных проектах. Команда имеет 7+ лет опыта и 30+ законченных NFT-проектов — оценим ваш проект за 1 день. Свяжитесь с нами, чтобы обсудить детали.

Разработка метавселенных: как мы строим land, аватары и интероперабельность

Decentraland продавал участки виртуальной земли за $2.4M на пике хайпа. Среднесуточная аудитория тогда упала до ~1000 активных пользователей — платформа не удержала экономику. The Sandbox — похожий сценарий: красивые 3D-миры, но пустые. Инфраструктура, которую заложили эти проекты, осталась: on-chain ownership land, verifiable NFT-аватары, composable virtual economies. Вопрос не в том, работает ли технология — работает. Вопрос в том, как проектировать так, чтобы не повторить те же ошибки. Мы концентрируемся на архитектуре, где экономика первична, а 3D-визуализация — следствие. Получите предварительную оценку архитектуры вашей метавселенной — напишите нам, обсудим.

Почему земля (land) как NFT — это сложнее, чем кажется?

Land в метавселенной — это NFT, токенизирующий право на виртуальный участок в определённых координатах. Стандартная реализация — ERC-721, где tokenId кодирует координаты (x, y) или их хеш. Decentraland хранит координаты через контракт LANDRegistry — кастомный ERC-721 с маппингом (int, int) → tokenId. Estate-контракт группирует смежные parcels. Контент парсела (GLTF-сцены, скрипты) хранится на IPFS, хеш контента записан в метаданные NFT.

Проблема: контент на IPFS не пинится вечно. Если пиннер уходит — контент недоступен, но NFT с правом собственности жив. Для production используем гибридную схему:

Хранилище Надёжность Стоимость Рекомендация
IPFS + Pinata до отключения пиннера низкая временные ассеты, прототипы
Arweave перманентное (однократная плата) средняя production land-контент
Filecoin долгосрочные storage deals средняя бэкап, большие объёмы
CDN + on-chain хеш высокая (централизовано) высокая hot assets, быстрая загрузка

Arweave в 10 раз дешевле IPFS при хранении контента дольше года — для land-ассетов это оптимальный выбор.

Spatial indexing. При карте 90 601 parcels (как в Decentraland) поиск соседних участков через контракт неэффективен — gas на каждый view вызов растёт линейно. The Graph индексирует события контракта (Transfer, Update) и позволяет делать пространственные запросы off-chain. Subgraph для land registry — стандартная часть архитектуры, которую мы закладываем на этапе проектирования.

Типичная ошибка: копируют логику поиска из ERC-721 без учёта масштаба — получают газовый ад. Вместо этого мы используем off-chain индекс с ончейн-верификацией через Merkle-доказательства.

Как обеспечить интероперабельность аватаров без потери атрибутов?

Аватар как NFT позволяет: доказать ownership без доверенной стороны, перенести аватар между совместимыми платформами, использовать аватар как collateral или identity в DeFi/governance. Но проблема — в интерпретации: NFT "Меч +5" в игре A имеет конкретные damage stats, игра B не знает эту механику. Она может отобразить визуальный asset (если формат совместим), но gameplay-значение определяет разработчик игры B — и, скорее всего, просто проигнорирует.

Реальная интероперабельность работает только в рамках договорённостей между платформами (federation model) или внутри единой технической экосистемы. Open Metaverse Interoperability Group предложил концепцию "portable identity + portable assets" через DID и Verifiable Credentials. На практике adoption пока минимален, поэтому мы рекомендуем строить аватары по модульному принципу:

  • Off-chain стандарт: формат .glb со стандартизированным skeleton rig (Ready Player Me) — совместим с Unity, Unreal, Three.js.
  • On-chain минимум: NFT с метаданными, указывающими на .glb. Динамические аватары — меняют внешность в зависимости от экипированных items (ERC-1155 equipment). Composable NFT (ERC-998) плохо поддерживается маркетплейсами, поэтому практичнее хранить equipped items в mapping внутри контракта аватара, а tokenURI генерировать динамически на основе текущего state.
Пример реализации динамического `tokenURI`
function tokenURI(uint256 tokenId) public view override returns (string memory) {
    Avatar storage avatar = avatars[tokenId];
    // Базовый URI + параметры (helmet, weapon, armor)
    return string(abi.encodePacked(
        baseURI,
        "?helmet=", toString(avatar.equipped.helmet),
        "&weapon=", toString(avatar.equipped.weapon)
    ));
}

Виртуальная экономика: marketplace и rent mechanics

Встроенная экономика включает торговлю land (первичный и вторичный рынок), аренду land, монетизацию контента (платный вход, рекламные поверхности), trade wearables/items.

Аренда land. Стандарт ERC-4907 (Rental NFT) — разделение owner и user роли. Owner выставляет NFT в аренду на фиксированный период, user получает права использования без права передачи. Платформа может реализовать автоматическую выплату аренды через smart contract escrow. По истечении срока user роль автоматически снимается. Мы применяли ERC-4907 в проекте MetaverseHub — аренда коммерческих участков под виртуальные магазины, объём арендных платежей за 6 месяцев — 120 ETH при средней заполняемости 70%.

Роль Права Длительность
Owner продажа, установка аренды, смена метаданных бессрочно
User использование контента, постройка фиксированный срок

Content monetization on-chain. Владелец парсела деплоит контракт, который принимает оплату за доступ. Платформа верифицирует ownership через eth_call перед открытием контента. Это требует интеграции между клиентом метавселенной и on-chain access control — Web3-кошелёк + viem.

Технический стек для построения метавселенной

  • Rendering: Three.js / Babylon.js (браузер), Unity WebGL (сложные сцены). Decentraland SDK — если строите поверх Decentraland. Three.js в 2 раза быстрее Babylon.js при рендеринге простых сцен.
  • Networking: WebSockets или WebRTC (100–1000 одновременных пользователей на инстансе). Colyseus, Agones (Kubernetes) для масштабирования.
  • Blockchain: wagmi + viem (фронтенд), ethers.js (сервер), The Graph (индексация), Chainlink VRF (рандомные события). Foundry — в 5 раз быстрее Hardhat при компиляции тестов.
  • Хранение: Arweave (perma-storage 3D-ассетов), IPFS + CDN с верификацией хеша.

Что входит в работу (deliverables)

При заказе разработки метавселенной получаете:

  • Документация: архитектура экономики, спецификация смарт-контрактов (land, avatar, marketplace).
  • Исходный код контрактов с тестами (Foundry, Slither аудит).
  • Subgraph для The Graph (индексация land, аватаров, ордеров).
  • Фронтенд-кит: интеграция с кошельками, визуализация 3D-мира.
  • Доступы к приватному репозиторию и CI/CD.
  • Поддержка в течение 3 месяцев после релиза.

Опыт компании: более 10 лет в блокчейн-разработке (с первых хакатонов Ethereum Foundation), более 50 проектов в web3, сертифицированные разработчики Solidity (Consensys Academy). Гарантируем прохождение аудита третьей стороной (Quantstamp, Certik) на уровне Critical/High — 0 уязвимостей.

Процесс и сроки

  1. Аналитика (2–3 недели): экономическая модель, механики, выбор L2/L1.
  2. Проектирование (3–4 недели): архитектура контрактов, схема данных, интерфейсы.
  3. Разработка (2–4 месяца): land registry → avatar → wearables → marketplace → аренда → фронтенд → networking → The Graph.
  4. Тестирование (3–4 недели): unit-тесты (Foundry), интеграционные (Tenderly), fuzzing (Echidna).
  5. Аудит (2–4 недели). Средний бюджет аудита — $50k–$150k в зависимости от сложности.
  6. Деплой (1 неделя): mainnet / testnet, настройка пиннинга и CDN.

Сроки: минимальная метавселенная (land ownership + basic 3D + avatar + marketplace) — от 4 до 6 месяцев. Полная платформа с realtime multiplayer, rich economy, content tools — от 12 до 18 месяцев. Оценим ваш проект бесплатно — напишите, обсудим детали.

Важно: не начинайте с визуальной части. Экономика должна быть спроектирована в первую очередь — именно она определяет долгосрочную выживаемость. Закажите консультацию по архитектуре вашей метавселенной — расскажем, как избежать ошибок первых проектов. Свяжитесь с нами — получите детальный план реализации.