Розробка маркетплейсу віртуальної нерухомості під ключ

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1305 послуг
Розробка маркетплейсу віртуальної нерухомості під ключ
Складний
від 1 тижня до 3 місяців
Часті запитання

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

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1352
  • 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
    643
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    922

Кілька років тому, коли Decentraland запустила LAND, координати парцелей зберігалися в одному контракті. Сучасні метавсесвіти вимагають гнучких рішень: on-chain оренда, аукціони, adjacency premium. Ми створюємо торгові майданчики для віртуальної нерухомості, які підтримують Decentraland LAND, Sandbox LAND, Otherside Otherdeed та власні L2-рішення. Кожен проєкт потребує власного майданчика для вторинної торгівлі, оренди та забудови. Розробка маркетплейсу віртуальної нерухомості — це перетин інфраструктури NFT marketplace, on-chain rental механік та spatial data management. Наш досвід включає понад 5 проєктів у цій області, і ми гарантуємо аудит смарт-контрактів.

Технічна специфіка порівняно з generic NFT marketplace: парцелі мають координати (x, y), можливе сусідство та adjacency бонуси, оренда тимчасова з поверненням прав, забудова створює metadata relationship між LAND NFT та content NFT. Ці нюанси вимагають нестандартних рішень: від coordinate-based tokenId до тимчасового делегування прав через ERC-4907.

Як працює on-chain оренда віртуальної нерухомості?

ERC-4907: Rentable NFT стандарт

Оренда віртуальної нерухомості — значний use case: власник зберігає LAND як інвестицію, орендар використовує для забудови/заходів. Необхідно розділити ownership (NFT у власника) та usage rights (у орендаря). ERC-4907 додає роль user до ERC-721 — тимчасовий користувач з expiry timestamp. Контракти можуть перевіряти userOf(tokenId) замість ownerOf для доступу.

contract RentalMarketplace {
    struct RentalOffer {
        uint256 tokenId;
        address landContract;
        uint256 pricePerDay;
        uint256 minDays;
        uint256 maxDays;
        address paymentToken;    // ERC-20 або address(0) для native
        bool active;
    }

    mapping(bytes32 => RentalOffer) public rentalOffers;

    function createRentalOffer(
        uint256 tokenId,
        address landContract,
        uint256 pricePerDay,
        uint256 minDays,
        uint256 maxDays,
        address paymentToken
    ) external {
        require(IERC721(landContract).ownerOf(tokenId) == msg.sender, "Not owner");

        bytes32 offerId = keccak256(abi.encode(tokenId, landContract, msg.sender, block.timestamp));
        rentalOffers[offerId] = RentalOffer({
            tokenId: tokenId,
            landContract: landContract,
            pricePerDay: pricePerDay,
            minDays: minDays,
            maxDays: maxDays,
            paymentToken: paymentToken,
            active: true
        });
    }

    function rent(bytes32 offerId, uint256 days) external payable {
        RentalOffer storage offer = rentalOffers[offerId];
        require(offer.active, "Offer not active");
        require(days >= offer.minDays && days <= offer.maxDays, "Invalid duration");

        uint256 totalCost = offer.pricePerDay * days;
        uint256 expiry = block.timestamp + days * 1 days;

        // Оплата
        if (offer.paymentToken == address(0)) {
            require(msg.value >= totalCost, "Insufficient payment");
        } else {
            IERC20(offer.paymentToken).safeTransferFrom(msg.sender, address(this), totalCost);
        }

        // Встановлюємо user через ERC-4907
        IERC4907(offer.landContract).setUser(offer.tokenId, msg.sender, uint64(expiry));

        // Виплачуємо власнику (minus protocol fee)
        uint256 fee = totalCost * PROTOCOL_FEE_BPS / 10000;
        _transferPayment(offer.paymentToken, IERC721(offer.landContract).ownerOf(offer.tokenId), totalCost - fee);

        emit Rented(offerId, msg.sender, days, expiry);
    }
}

Collateral rental (без ERC-4907)

Якщо LAND контракт не підтримує ERC-4907: тимчасова передача NFT з collateral. Орендар вносить заставу (рівну або більшу за вартість LAND), NFT передається, після закінчення — автоматичне повернення через keeper або manual claim. Проблема: орендодавець втрачає фізичне володіння NFT на час оренди (хоча має право повернути). Ризик: орендар продає NFT незважаючи на collateral. Рішення: NFT передається в escrow контракт, не орендарю.

Які механіки marketplace необхідні?

Listing та аукціони

enum SaleType { FIXED_PRICE, ENGLISH_AUCTION, DUTCH_AUCTION }

struct Listing {
    uint256 tokenId;
    address seller;
    SaleType saleType;
    address paymentToken;
    uint256 startPrice;
    uint256 endPrice;          // для Dutch auction: кінцева ціна
    uint256 startTime;
    uint256 endTime;
    uint256 highestBid;        // для English auction
    address highestBidder;
}

Dutch Auction особливо релевантний для первинного продажу LAND: ціна починається високо, автоматично знижується до резервної. Усуває газову війну при mint — порівняння: Dutch auction знижує комісії на 40% порівняно з fixed-price mint.

English Auction для вторинного ринку рідкісних Estate: бідинг з outbid захистом (мінімальне підвищення ставки на X%).

Royalties та fee структура

ERC-2981 для on-chain royalties. Стандартна структура маркетплейсу віртуальної нерухомості:

Fee Отримувач Розмір
Marketplace fee Protocol treasury 2-2.5%
Creator royalty Оригінальний творець метавсесвіту 2.5-5%
Referral Якщо є referral program 0.5-1%
Seller Власник LAND Залишок

Royalties для віртуальної нерухомості — контроверсійна тема. Платформи типу Blur підірвали enforcement. Рішення: royalties enforcement через контракт (не залежить від marketplace), або royalty-free модель з revenue sharing іншого типу.

Що таке adjacency premium?

Унікальна риса земельних маркетплейсів: сусідні парцелі коштують більше разом, ніж окремо. Алгоритм пошуку adjacency перевіряє координати на суміжність за кардинальними та діагональними напрямками. Frontend відображає на карті виділені суміжні лоти при hover на один — користувач бачить потенційні bundle покупки. Типова премія за формування estate становить 15-30% від суми окремих ділянок. Наприклад, дві сусідні ділянки окремо коштують 10 ETH кожна, а при об'єднанні в estate їх сумарна ціна — 23 ETH замість 20, тобто премія 3 ETH (15%).

LAND NFT: специфіка даних

Coordinate system on-chain

Кожна парцель — NFT з координатами в сітці. Стандартний підхід: tokenId кодує координати.

contract VirtualLand is ERC721 {
    struct Parcel {
        int256 x;
        int256 y;
        address tenant;         // поточний орендар (якщо здано)
        uint256 leaseExpiry;    // timestamp закінчення оренди
        string contentURI;      // що побудовано на ділянці
        uint8 zoneType;         // 0=residential, 1=commercial, 2=plaza
    }

    mapping(uint256 => Parcel) public parcels;
    mapping(int256 => mapping(int256 => uint256)) public coordToTokenId;
    // coordToTokenId[x][y] = tokenId

    int256 public constant GRID_MIN = -150;
    int256 public constant GRID_MAX = 150;

    // tokenId = унікальний індекс з координат
    function coordsToTokenId(int256 x, int256 y) public pure returns (uint256) {
        // Зсуваємо в невід'ємні значення
        uint256 ux = uint256(x - GRID_MIN);
        uint256 uy = uint256(y - GRID_MIN);
        uint256 size = uint256(GRID_MAX - GRID_MIN + 1);
        return ux * size + uy;
    }

    function tokenIdToCoords(uint256 tokenId) public pure returns (int256 x, int256 y) {
        uint256 size = uint256(GRID_MAX - GRID_MIN + 1);
        x = int256(tokenId / size) + GRID_MIN;
        y = int256(tokenId % size) + GRID_MIN;
    }
}

Estate: об'єднані парцелі

Estate = кілька суміжних парцелей, об'єднаних в один актив. Це значимо: велика забудована ділянка цінніша за суму частин. Механіка:

contract EstateRegistry is ERC721 {
    struct Estate {
        uint256[] parcels;      // масив tokenId вхідних парцелей
        address landContract;
    }

    mapping(uint256 => Estate) public estates;
    // парцель → estate (якщо входить в estate)
    mapping(uint256 => uint256) public parcelToEstate;

    function createEstate(uint256[] calldata parcelIds) external returns (uint256 estateId) {
        // Перевіряємо adjacency
        require(_areAdjacent(parcelIds), "Parcels must be adjacent");
        // Перевіряємо ownership всіх парцелей
        for (uint i = 0; i < parcelIds.length; i++) {
            require(landNft.ownerOf(parcelIds[i]) == msg.sender, "Not owner");
        }

        estateId = ++_estateIdCounter;
        // Передаємо парцелі в escrow цього контракту
        for (uint i = 0; i < parcelIds.length; i++) {
            landNft.transferFrom(msg.sender, address(this), parcelIds[i]);
            parcelToEstate[parcelIds[i]] = estateId;
        }

        estates[estateId] = Estate({ parcels: parcelIds, landContract: address(landNft) });
        _mint(msg.sender, estateId);
    }
}

Spatial Data та Map Interface

Інтерактивна карта — основний UI майданчика. Вимоги: відображення тисяч парцелей з кольоровим кодуванням (продається, здається, зайнято), плавний zoom/pan, клік на парцель → детальна інформація.

WebGL та deck.gl — найбільш продуктивні варіанти для spatial rendering тисяч об'єктів. deck.gl (Uber) оптимізований для геоданих і працює з WebGL.

import { DeckGL } from '@deck.gl/react'
import { ScatterplotLayer } from '@deck.gl/layers'

const parcelLayer = new ScatterplotLayer({
    data: parcels,
    getPosition: (d) => [d.x * PARCEL_SIZE, d.y * PARCEL_SIZE, 0],
    getFillColor: (d) => {
        if (d.forSale) return [0, 200, 100]       // зелений — на продаж
        if (d.forRent) return [0, 100, 200]        // синій — в оренду
        if (d.hasContent) return [150, 100, 200]   // фіолетовий — забудований
        return [100, 100, 100]                     // сірий — пусто
    },
    getRadius: PARCEL_SIZE / 2,
    pickable: true,
    onClick: ({ object }) => setSelectedParcel(object),
})

Content Layer: що будують на LAND

Забудова LAND — окремий шар даних. Стандартні формати: Decentraland SDK scene (Babylon.js-based), GLTF/GLB assets, iframe-based content. Content URI зберігається в LAND NFT metadata. При зміні забудови власник оновлює contentURI через setContentURI(tokenId, newURI). Це on-chain транзакція, історія змін зберігається.

Аналітика та price discovery

Майданчик без аналітики — не конкурентоспроможний. Необхідний мінімум: floor price по зонах, price history, volume, heatmap активності, rental yield calculator. Дані індексуються через The Graph subgraph для on-chain подій та PostgreSQL з PostGIS для off-chain метаданих і просторових запитів.

Як створити маркетплейс віртуальної нерухомості: поетапне керівництво

  1. Product design (1-2 тижні). Карта світу, зонування, модель первинного продажу, rental модель, fee структура.
  2. Смарт-контракти (4-6 тижнів). LAND NFT, Estate контракт, Rental marketplace, Sale marketplace. Обов'язковий аудит.
  3. Backend та indexer (3-4 тижні). Subgraph, REST/GraphQL API, spatial queries, price analytics.
  4. Map Frontend (4-6 тижнів). Інтерактивна карта, parcel detail page, listing/rental UI, analytics dashboard.
  5. 3D Content preview (2-3 тижні, опціонально). GLTF preview для забудованих парцелей.
  6. Тестування та launch. End-to-end тест, навантажувальний тест карти.

MVP без Estate та 3D content займе 3-4 місяці. Повна версія з Estate, rental, аналітикою та 3D preview — 6-8 місяців.

Стек розробки

Компонент Технологія
LAND NFT Solidity ERC-721 + ERC-4907
Estate контракт Solidity з adjacency validation
Rental контракт Solidity + ERC-4907
Marketplace контракт Solidity + ERC-2981
Indexer The Graph (subgraph)
Spatial DB PostgreSQL + PostGIS
Map frontend deck.gl / Mapbox GL JS + React
3D preview Three.js / Babylon.js
Backend API Node.js + Fastify
Storage IPFS (Pinata) + Arweave

Замовте розробку під ключ — наші інженери з досвідом понад 5 років у blockchain оцінять ваш проєкт і запропонують оптимальне рішення.

Що входить в роботу

  • Розробка та аудит смарт-контрактів (Solidity, Foundry)
  • Інтеграція з The Graph для індексації
  • Реалізація інтерактивної карти (deck.gl)
  • Backend API та база даних (PostgreSQL + PostGIS)
  • Документація з інтеграції та деплою
  • Технічна підтримка протягом 1 місяця після запуску

Отримайте консультацію з розробки маркетплейсу віртуальної нерухомості. Власники LAND економлять до 30% при bundle-продажу завдяки adjacency premium.

Як створити метавсесвіт з нуля?

Розробка метавсесвітів: як ми будуємо land, аватари та інтероперабельність

Decentraland продавав ділянки віртуальної землі за значні суми на піку хайпу. Середньодобова аудиторія тоді впала до близько 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 місяців був значним при середній заповнюваності 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 тижні). Середній бюджет аудиту залежить від складності.
  6. Деплой (1 тиждень): mainnet / testnet, налаштування піннінгу та CDN.

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

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