Сцена в Decentraland завантажується 20 секунд, інтерактивність гальмує, а Web3-гаманець видає помилку при кожному кліку. Якщо ви стикалися з цим, ви знаєте, як швидко падає залученість користувачів. Вирішуємо ці проблеми — від оптимізації асетів до деплою. Decentraland — браузерна метавсесвіт на базі Ethereum, де land-ділянки (LAND) є NFT (див. Wikipedia). Наш досвід: десятки сцен з NFT-логікою, мультиплеєром та серверною інтеграцією. Отримайте консультацію інженера — зв'яжіться з нами.
Проблеми, які ми вирішуємо
Повільне завантаження 3D-асетів
Неоптимізовані glb-моделі та текстури без LOD-рівнів тягнуть час завантаження до 30 секунд. Ми впроваджуємо progressive loading, використовуємо стиснення Draco та розбиваємо сцену на чанки. Результат — 5 секунд до повного рендеру. Порівняйте: без стиснення 30 секунд, з Draco — в 3 рази швидше.
Нестабільна Web3-авторизація
При перевірці володіння NFT через createEthereumProvider користувачі часто бачать «User rejected request» через невірний таймаут. Ми налаштовуємо повторні спроби з експоненційною затримкою та обробляємо винятки MetaMask. Гарантуємо, що 99% транзакцій проходять з першого разу.
Складності з мультиплеєром
Синхронізація станів гравців через WebSocket без централізованого сервера веде до розсинхронізації. Використовуємо Decentraland Scene Server з room-логікою та чергою повідомлень — latency не перевищує 200 мс.
Як ми це робимо
Стек: Decentraland SDK 7, TypeScript, ethers.js, WebSocket (ws), Tenderly для налагодження контрактів. Серверна частина пишеться на Node.js з Docker-контейнеризацією.
Ключовий кейс — сцена з NFT-дисплеєм, який показує ексклюзивний контент лише власникам токенів. Ось мінімальна реалізація:
import { engine, Entity, Transform, GltfContainer, PointerEvents, InputAction, inputSystem } from '@dcl/sdk/ecs'
import { Vector3, Quaternion } from '@dcl/sdk/math'
export function main() {
// Створюємо інтерактивний об'єкт
const nftDisplay = engine.addEntity()
Transform.create(nftDisplay, {
position: Vector3.create(8, 1, 8),
scale: Vector3.create(1, 1, 1),
rotation: Quaternion.fromEulerDegrees(0, 0, 0),
})
GltfContainer.create(nftDisplay, {
src: 'assets/nft_frame.glb',
})
PointerEvents.create(nftDisplay, {
pointerEvents: [{ eventType: PointerEventType.PET_DOWN,
info: { button: InputAction.IA_POINTER, hoverText: 'Inspect NFT' } }],
})
engine.addSystem(() => {
if (inputSystem.isTriggered(InputAction.IA_POINTER, PointerEventType.PET_DOWN, nftDisplay)) {
openNFTDetails()
}
})
}
Web3-інтеграція через @dcl/sdk/ethereum-provider та ethers.js — перевірка володіння NFT:
import { createEthereumProvider } from '@dcl/sdk/ethereum-provider'
import { ethers } from 'ethers'
async function checkNFTOwnership(tokenId: number): Promise<boolean> {
const provider = createEthereumProvider()
const ethProvider = new ethers.BrowserProvider(provider)
const signer = await ethProvider.getSigner()
const userAddress = await signer.getAddress()
const nftContract = new ethers.Contract(NFT_CONTRACT_ADDRESS, ERC721_ABI, ethProvider)
const owner = await nftContract.ownerOf(tokenId)
return owner.toLowerCase() === userAddress.toLowerCase()
}
async function unlockExclusiveArea() {
const hasAccess = await checkNFTOwnership(MEMBERSHIP_TOKEN_ID)
if (hasAccess) {
showExclusiveContent()
} else {
showPurchasePrompt()
}
}
Для мультиплеєра використовуємо сервер на WebSocket:
import { WebSocketServer } from 'ws'
const wss = new WebSocketServer({ port: 8080 })
const players = new Map<string, PlayerState>()
wss.on('connection', (ws, req) => {
const playerId = getPlayerIdFromRequest(req)
ws.on('message', (data) => {
const event = JSON.parse(data.toString())
switch(event.type) {
case 'MOVE':
players.set(playerId, event.position)
broadcastToAll({ type: 'PLAYER_MOVED', playerId, position: event.position })
break
case 'INTERACT':
handleInteraction(playerId, event.objectId)
break
}
})
})
Чому важлива газ-оптимізація?
Кожен виклик смарт-контракту в сцені — це транзакція з газом. Ми мінімізуємо кількість викликів, використовуючи eth_call для читання та батчинг для запису. Оптимізація газу знижує витрати на операції в сцені в середньому на 60% порівняно з наївною реалізацією — це критично при масових взаємодіях. Особливо актуально для ігрових механік з частими перевірками володіння.
Як прискорити завантаження сцени Decentraland?
Використовуйте стиснення Draco для 3D-моделей: воно зменшує розмір асетів втричі, скорочуючи час завантаження з 30 до 10 секунд. Порівняйте:
| Метод |
Час завантаження |
Розмір асетів |
| Без стиснення (glTF) |
30 секунд |
50 MB |
| З Draco-стисненням |
10 секунд |
15 MB |
Додатково налаштуйте LOD-рівні та прогресивне завантаження чанків.
Процес роботи
- Аналітика — вивчаємо вимоги, LAND-ділянку, існуючі сцени.
- Проектування — архітектура сцени, контракти, серверна логіка.
- Реалізація — написання коду, 3D-моделювання, налаштування Web3.
- Тестування — на local-сервері та testnet, юніт-тести та сценарії.
- Деплой — завантаження на Content Server, інструкція з управління.
Деплой публічної сцени: npx @dcl/sdk-commands deploy. Для приватних сцен — свій catalyst node. Зв'яжіться з нами для обговорення вашого проекту — ми підготуємо кошторис за 1 день.
Скільки часу займає розробка?
| Тип сцени |
Терміни |
| Проста інтерактивна з 1-2 об'єктами та Web3 |
3-5 тижнів |
| Сцена з мультиплеєром та ігровою логікою |
2-3 місяці |
Вартість розраховується індивідуально — пишіть, і ми оцінимо ваш проект за 1 день.
Що входить в роботу?
- Вихідний код сцени на TypeScript (репозиторій GitHub).
- 3D-моделі та текстури (glb, конвертація з Blender).
- Документація з розгортання (deploy guide).
- Доступ до тестової сцени та інструкція для менеджменту.
- Підтримка протягом 30 днів після здачі.
Чому варто обрати нас?
Досвід команди в Web3 — понад 5 років, сертифіковані розробники Solidity та TypeScript. Ми виконали понад 50 сцен з NFT-логікою та мультиплеєром. Гарантуємо, що сцена працюватиме без revert на mainnet, і даємо письмову гарантію сумісності з останніми оновленнями SDK. Замовте розробку — отримайте гарантію сумісності та 30 днів підтримки.
Типові проблеми деплою
Неправильні координати парцелі в scene.json — перевірте на explorer. Відсутність HTTPS для серверної частини — використовуйте Let's Encrypt. Неоновлений @dcl/sdk — виконайте npm update. Якщо помилка залишається — зверніться до нас, ми знайдемо причину за добу.
Замовте інтеграцію з Decentraland SDK прямо зараз — отримайте консультацію інженера та попередню оцінку безкоштовно.
Як створити метавсесвіт з нуля?
Розробка метавсесвітів: як ми будуємо 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 вразливостей.
Процес та терміни
- Аналітика (2–3 тижні): економічна модель, механіки, вибір L2/L1.
- Проектування (3–4 тижні): архітектура контрактів, схема даних, інтерфейси.
- Розробка (2–4 місяці): land registry → avatar → wearables → marketplace → оренда → фронтенд → networking → The Graph.
- Тестування (3–4 тижні): unit-тести (Foundry), інтеграційні (Tenderly), fuzzing (Echidna).
- Аудит (2–4 тижні). Середній бюджет аудиту залежить від складності.
- Деплой (1 тиждень): mainnet / testnet, налаштування піннінгу та CDN.
Терміни: мінімальний метавсесвіт (land ownership + basic 3D + avatar + marketplace) — від 4 до 6 місяців. Повна платформа з realtime multiplayer, rich economy, content tools — від 12 до 18 місяців. Оцінимо ваш проект безкоштовно — напишіть, обговоримо деталі.
Важливо: не починайте з візуальної частини. Економіка повинна бути спроектована в першу чергу — саме вона визначає довгострокову виживаність. Замовте консультацію з архітектури вашого метавсесвіту — розповімо, як уникнути помилок перших проектів. Зв'яжіться з нами — отримайте детальний план реалізації.