Розробка метавсесвіту (Metaverse)
Метавсесвіт — перевантажений термін. Перш ніж проєктувати, ми завжди уточнюємо: це persistent 3D world з real-time взаємодією (як Decentraland, The Sandbox) чи social layer поверх додатків, чи віртуальні офіси для enterprise? У кожної моделі — свій стек. Тут розберемо архітектуру web3-native persistent world: багатокористувацьке 3D середовище з NFT-землею, on-chain економікою та decentralized governance. Це найскладніший технічно та найзатребуваніший варіант.
За нами п'ять завершених проєктів метавсесвітів та понад 5 років досвіду у Web3. Ділимося досвідом, щоб ви могли оцінити обсяг робіт та уникнути типових помилок. При цьому важливо розуміти: порожній світ без контенту та ком'юніті — мертвий. Паралельно з розробкою ми запускаємо програму для early LAND holders та креаторів. Зв'яжіться з нами, щоб обговорити стратегію залучення творців.
Архітектура метавсесвіту: блокчейн, контент та real-time
Все, що має цінність, живе on-chain. Решта (3D-асети, сцени) — off-chain на IPFS або Arweave. Ось ключові шари.
Як розділяються ownership та економіка?
- LAND NFT — ділянки віртуальної землі (ERC-721).
- Avatar NFT — персонажі з атрибутами.
- Wearables — предмети (ERC-1155 або ERC-721).
- Governance token — голоси у DAO.
- In-world currency — ERC-20 для внутрішніх розрахунків.
Контент на LAND не on-chain. Власник деплоїть 3D-сцени та скрипти на IPFS — це гнучко та дешево.
LAND система: координатна сітка та Estate
Класична модель — карта з квадратних ділянок з координатами. Як зазначається в офіційній документації Decentraland, координатна сітка будується від центру. Decentraland використовує (-150,-150) до (150,150). Ми застосовуємо той самий підхід:
contract LandRegistry is ERC721 { int16 public constant MIN_X = -100; int16 public constant MAX_X = 100; int16 public constant MIN_Y = -100; int16 public constant MAX_Y = 100; function coordinatesToId(int16 x, int16 y) public pure returns (uint256) { require(x >= MIN_X && x <= MAX_X, "X out of range"); require(y >= MIN_Y && y <= MAX_Y, "Y out of range"); return uint256(uint16(x - MIN_X)) * 201 + uint256(uint16(y - MIN_Y)); } function idToCoordinates(uint256 tokenId) public pure returns (int16 x, int16 y) { y = int16(int256(tokenId % 201)) + MIN_Y; x = int16(int256(tokenId / 201)) + MIN_X; } function isAdjacent(uint256 tokenId1, uint256 tokenId2) public pure returns (bool) { (int16 x1, int16 y1) = idToCoordinates(tokenId1); (int16 x2, int16 y2) = idToCoordinates(tokenId2); int16 dx = x1 - x2; int16 dy = y1 - y2; return (dx == 0 && (dy == 1 || dy == -1)) || (dy == 0 && (dx == 1 || dx == -1)); } } Для об'єднання сусідніх наділів використовується Estate — складовий NFT. Володіння ділянкою дає контроль над вмістом сцени.
Чому контент зберігається off-chain?
Зберігати 3D-моделі та скрипти на блокчейні невиправдано дорого. Один гігабайт в Ethereum коштує тисячі доларів. Off-chain зберігання на IPFS або Arweave вирішує проблему: власник LAND публікує хеш сцени, а мережа завантажує контент через шлюз.
Content system: що деплоїться на LAND
Кожен LAND має сцену — JSON-дескриптор з посиланнями на 3D-моделі, скрипти та портали. Публікація через простий контракт:
contract LandContent { mapping(uint256 => string) public sceneHash; mapping(uint256 => uint256) public sceneVersion; function publishScene(uint256 landId, string calldata ipfsHash) external { require(landRegistry.ownerOf(landId) == msg.sender, "Not owner"); require(bytes(ipfsHash).length == 46, "Invalid IPFS hash"); sceneHash[landId] = ipfsHash; sceneVersion[landId]++; emit ScenePublished(landId, msg.sender, ipfsHash, sceneVersion[landId]); } } Розробники пишуть інтерактивні скрипти в sandbox-оточенні через SDK. Приклад — двері, що відкриваються по кліку, або NFT-гейт для доступу.
Як влаштована real-time синхронізація аватарів?
Гравці бачать один одного через game servers, кожен регіон (N×N LAND) обслуговується окремим сервером. При переході кордону — handoff.
Area server на Node.js
class AreaServer { private players = new Map<string, PlayerState>(); private physicsWorld = new World({ x: 0, y: -9.81, z: 0 }); handlePlayerJoin(playerId: string, ws: WebSocket, position: Vector3) { // ... додавання гравця, відправка снапшоту, broadcast } handleMovement(playerId: string, movement: MovementPacket) { // server-side validation, broadcast з delta compression } private tick() { this.physicsWorld.step(); const updates = this.getDirtyPlayerStates(); if (updates.length > 0) this.broadcast({ type: 'batch_update', updates }); } } Для зниження навантаження застосовуємо proximity-based broadcasting — видимість обмежена радіусом (наприклад, 100 метрів). Це перетворює O(N²) на O(N×K).
Економіка метавсесвіту та управління
In-world marketplace з роялті
Власник LAND заробляє 2.5% з продажів на своїй землі:
contract InWorldMarketplace { uint256 public constant LAND_ROYALTY = 250; function buy(uint256 listingId) external { // перевірки, розрахунок, переказ токенів та NFT } } Play-to-earn генерує in-world currency за відвідування подій, виконання квестів, участь у міні-іграх. Емісія контролюється weekly cap та halvening.
DAO та голосування
Управління через Compound-style Governor. Володіння LAND дає голос (1 LAND = 1 vote + бонус за стейкінг governance token). Вирішуються питання: розширення карти, параметри економіки, апгрейди контрактів.
Технологічний стек та процес розробки
Повний стек
| Шар | Технологія |
|---|---|
| Blockchain | Polygon PoS / Arbitrum |
| LAND/NFT | Solidity + Foundry |
| Governance | OpenZeppelin Governor |
| Storage | IPFS + Arweave |
| Real-time | Node.js + uWebSockets.js |
| Physics | Rapier3D (WASM) |
| 3D Web | Three.js + React Three Fiber |
| Avatar | ReadyPlayerMe або VRM |
| Indexing | The Graph |
Зверніть увагу: вибір L2 (Polygon або Arbitrum) дає драматичне зниження gas — у 100 разів дешевше Ethereum. Це критично для масового прийняття.
Що входить у роботу
- Аудит смарт-контрактів (LAND, marketplace, token) — гарантуємо відсутність reentrancy та типових вразливостей.
- Повна документація з інтеграції SDK для творців контенту.
- Налаштування інфраструктури: IPFS-піннінг, game servers, бази даних.
- Підтримка після запуску: моніторинг, хотфікси, доопрацювання економіки.
Етапи та строки
| Фаза | Зміст | Строк |
|---|---|---|
| Foundation | LAND контракти, координати, базовий marketplace | 4–6 тиж |
| Content system | Scene descriptor, IPFS, публікація | 3–4 тиж |
| 3D Client | Three.js світ, завантаження сцен, навігація | 6–8 тиж |
| Real-time | Area servers, синхронізація | 6–8 тиж |
| Economy | In-world token, marketplace, P2E | 4–6 тиж |
| Scripting SDK | Sandbox, NFT gates | 4–6 тиж |
| Governance | DAO контракти, UI | 3–4 тиж |
| Audit | Всі контракти | 5–8 тиж |
| Alpha launch | Обмежена карта | 2–4 тиж |
Реалістичні строки: 12–18 місяців до public alpha для команди 8–12 осіб. Це один з наймасштабніших проєктів у Web3.
Головний ризик — не технічний, а продуктовий: без контенту та ком'юніті світ буде порожнім. Тому паралельно ми запускаємо програму для early LAND holders та креаторів. Щоб оцінити ваш проєкт та запропонувати оптимальну архітектуру, замовте консультацію.







