Разработка метавселенной (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 и креаторов. Чтобы оценить ваш проект и предложить оптимальную архитектуру, закажите консультацию.
Разработка метавселенных: как мы строим 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 уязвимостей.
Процесс и сроки
- Аналитика (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 недели). Средний бюджет аудита — $50k–$150k в зависимости от сложности.
- Деплой (1 неделя): mainnet / testnet, настройка пиннинга и CDN.
Сроки: минимальная метавселенная (land ownership + basic 3D + avatar + marketplace) — от 4 до 6 месяцев. Полная платформа с realtime multiplayer, rich economy, content tools — от 12 до 18 месяцев. Оценим ваш проект бесплатно — напишите, обсудим детали.
Важно: не начинайте с визуальной части. Экономика должна быть спроектирована в первую очередь — именно она определяет долгосрочную выживаемость. Закажите консультацию по архитектуре вашей метавселенной — расскажем, как избежать ошибок первых проектов. Свяжитесь с нами — получите детальный план реализации.