Web3-игра под ключ: архитектура, смарт-контракты, токеномика

Проектирование Web3-игры Средняя транзакция в ончейн-игре стоит $0.01 на Polygon, но если разместить всю логику on-chain, игра станет неиграбельной из-за задержек в 15 секунд на блок. Правильная архитектура Web3-игры — это чёткая граница между тем, что должно быть on-chain, и тем, что должно оста

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

Часто задаваемые вопросы

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

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

Проектирование Web3-игры

Средняя транзакция в ончейн-игре стоит $0.01 на Polygon, но если разместить всю логику on-chain, игра станет неиграбельной из-за задержек в 15 секунд на блок. Правильная архитектура Web3-игры — это чёткая граница между тем, что должно быть on-chain, и тем, что должно оставаться off-chain. Без этого игра либо неиграбельна, либо блокчейн-часть декоративна. Наш опыт 10+ лет в блокчейн-разработке позволяет создавать решения, которые работают в реальном продакшене. 95% геймплея должно быть off-chain, чтобы обеспечить отзывчивость. Оцените свой проект — получите консультацию разработчика.

Почему игры нуждаются в блокчейне?

Блокчейн добавляет trustless ownership и прозрачную экономику. Игроки действительно владеют своими активами, могут торговать ими вне игры, участвовать в управлении проектом. Но просто добавить блокчейн в игру — плохая идея. Важно правильно разделить on-chain и off-chain логику. Оценим ваш проект — свяжитесь с нами для консультации.

Как разделить on-chain и off-chain?

Вот чёткие критерии:

  • Должно быть on-chain: Ownership активов (NFT персонажи, предметы, земли); финансовые операции (покупка, продажа, стейкинг, награды); критические результаты, влияющие на экономику (победа в турнире, редкий дроп); governance решения (DAO).
  • Должно быть off-chain: Игровая механика в реальном времени; позиции игроков, столкновения, физика; большинство gameplay событий; социальные функции (чат, гильдии); аналитика и логирование.

Хорошая модель: игровой сервер — источник правды для gameplay, блокчейн — источник правды для ownership и экономики. Синхронизация происходит в определённых checkpoint.

Архитектура: серверы, контракты, клиент

Игровой бэкенд

Game Client (Unity/Unreal/Web) ↓ Game Server (authoritative) └── Game State DB (Redis для real-time, PostgreSQL для persistence) ↓ (при значимых событиях) Blockchain Sync Service ↓ Smart Contracts (Assets, Economy, Rewards) ↓ The Graph (индексирование для UI/лидерборды) 

Authoritative server model — клиент никогда не принимает финальных решений. Клиент отправляет input, сервер верифицирует и применяет. Это предотвращает читинг без какого-либо блокчейна. Authoritative server model эффективнее клиентского anti-cheat в 100 раз, так как клиент не контролирует результат.

Blockchain Sync Service — отдельный сервис, который слушает игровые события и транслирует значимые из них в on-chain транзакции. Работает асинхронно, не блокирует gameplay.

NFT активы: стандарты и метаданные

Согласно ERC-1155 (EIP-1155), мультитокен стандарт позволяет управлять несколькими типами NFT в одном контракте. Мы используем комбинацию ERC-721 для уникальных предметов и ERC-1155 для stackable items. Метаданные: on-chain (maximum permanence, дорого), IPFS (компромисс) или централизованный сервер (быстро, дёшево, но зависит от нас).

contract GameItem is ERC1155 { struct ItemType { string name; uint8 rarity; // 1=Common, 2=Rare, 3=Epic, 4=Legendary uint16 baseAttack; uint16 baseDefense; bool tradeable; } mapping(uint256 => ItemType) public itemTypes; mapping(uint256 => uint256) public itemMaxSupply; mapping(uint256 => uint256) public itemCurrentSupply; bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); function mintItem( address to, uint256 itemTypeId, uint256 amount, bytes memory data ) external onlyRole(MINTER_ROLE) { require( itemCurrentSupply[itemTypeId] + amount <= itemMaxSupply[itemTypeId], "Max supply exceeded" ); itemCurrentSupply[itemTypeId] += amount; _mint(to, itemTypeId, amount, data); } function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal override { for (uint i = 0; i < ids.length; i++) { if (from != address(0) && to != address(0)) { require(itemTypes[ids[i]].tradeable, "Item is soulbound"); } } super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } } 

Игровой токен: tokenomics

Большинство провальных GameFi проектов провалились из-за плохой tokenomics, а не игры. Основные ошибки: инфляционная спираль (токен выдаётся без достаточного sink'а — пример Axie Infinity), попытка двухтокенной модели без правильного пега. Правильный подход — балансировать emission и sink.

contract GameEconomy { function claimDailyReward( address player, uint256 amount, uint256 nonce, bytes memory serverSignature ) external { bytes32 message = keccak256(abi.encodePacked(player, amount, nonce)); require( ECDSA.recover(message.toEthSignedMessageHash(), serverSignature) == GAME_SERVER, "Invalid server signature" ); require(!usedNonces[nonce], "Nonce already used"); usedNonces[nonce] = true; require(dailyClaimed[player][today()] + amount <= MAX_DAILY_REWARD, "Daily limit"); dailyClaimed[player][today()] += amount; gameToken.mint(player, amount); } function craftItem(uint256 recipeId) external { Recipe memory recipe = recipes[recipeId]; gameToken.burnFrom(msg.sender, recipe.tokenCost); // mint NFT предмет } } 

Game Server Signature Pattern

Критический паттерн для Web3-игр: игровой сервер является доверенным источником правды, его решения верифицируются on-chain через подпись. Пользователь не может сам вызвать claimReward — он получает подписанный сервером ваучер. Это предотвращает фабрикацию, двойную трату и читинг.

// Game Server side (Node.js) import { ethers } from "ethers"; const serverWallet = new ethers.Wallet(process.env.SERVER_PRIVATE_KEY); async function generateRewardVoucher( playerAddress: string, rewardAmount: bigint, gameSessionId: string ): Promise<{ nonce: string; signature: string; amount: string }> { const nonce = ethers.hexlify(ethers.randomBytes(32)); const message = ethers.solidityPackedKeccak256( ["address", "uint256", "bytes32"], [playerAddress, rewardAmount, nonce] ); const signature = await serverWallet.signMessage(ethers.getBytes(message)); return { nonce, signature, amount: rewardAmount.toString() }; } 

Anti-cheat на уровне блокчейна

On-chain верификация через commit-reveal для случайности: игрок коммитит hash(seed) до игры, после игры раскрывает seed, блокчейн верифицирует random = hash(seed, block.hash). Chainlink VRF v2 для on-chain randomness (дропы, матчмейкинг).

import { VRFConsumerBaseV2 } from "@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol"; contract LootBox is VRFConsumerBaseV2 { mapping(uint256 => address) public requestToPlayer; function openLootBox() external returns (uint256 requestId) { requestId = vrfCoordinator.requestRandomWords( keyHash, subscriptionId, 3, 100_000, 3 ); requestToPlayer[requestId] = msg.sender; } function fulfillRandomWords(uint256 requestId, uint256[] memory words) internal override { address player = requestToPlayer[requestId]; uint256 itemTier = words[0] % 1000; _mintReward(player, itemTier); } } 

Технический стек для Web3-игр

Game Engine: Unity (WebGL + native mobile) или Phaser 3 (browser-first). Web3 интеграция: Nethereum для EVM, Solana.Unity-SDK для Solana. Бэкенд: Go или Node.js для game server, отдельный TypeScript сервис для blockchain interactions. Индексирование: The Graph для лидербордов и истории, своя PostgreSQL для аналитики. Сети: Polygon PoS или Arbitrum Nova для частых транзакций, Ethereum mainnet для ценных активов. Экономия на газе ~90% при использовании L2.

Сеть TPS Стоимость транзакции Финализация Подходит для
Polygon PoS 7000 $0.01 2-3 мин Frequent microtransactions
Arbitrum Nova 40000 $0.001 5-10 мин High-throughput game actions
Ethereum L1 15 $5-50 ~13 сек High-value assets, governance
Solana 50000 $0.0001 400 мс Real-time gameplay
Типичные ошибки в токеномике GameFi - Бесконечная эмиссия без механизмов сжигания (burn) — инфляция убивает экономику. - Двухтокенная модель без стабильного пега (например, governance token с фиксированной ценой) — ведёт к коллапсу. - Отсутствие sink-механизмов: игроки не знают, на что тратить токены, кроме как продать.

Правильный подход: каждый эмитированный токен должен иметь запланированное применение (crafting, уплата комиссий, повышение уровней).

Пошаговый процесс работы над GameFi-проектом

  1. Проектирование токеномики и геймдизайн (4-6 недель).
  2. Разработка смарт-контрактов (ERC-1155, маркетплейс, стейкинг) (4-8 недель).
  3. Создание authoritative game server на Go или Node.js (4-8 недель).
  4. Интеграция клиента (Unity/Phaser) с Web3 (6-12 недель).
  5. Аудит смарт-контрактов и тестнет (4-6 недель).
  6. Запуск в mainnet и мониторинг (2 недели).

Как предотвратить читинг через блокчейн?

  1. Используйте authoritative server model: сервер принимает решения, клиент только отправляет input.
  2. Применяйте commit-reveal для случайных событий — это не позволяет игрокам предсказывать результат.
  3. Подписывайте каждое экономическое действие сервером (server signature pattern).

Объем работ

В рамках проекта мы предоставляем: документацию (архитектура, спецификации), полный исходный код, аудит безопасности, деплой в mainnet, мониторинг и поддержка после запуска. Гарантируем корректную работу смарт-контрактов и игрового сервера. Оценим ваш проект — свяжитесь с нами.

Команда имеет сертификаты, 10+ лет опыта. Обеспечиваем прозрачный процесс и аудит. Свяжитесь с нами для обсуждения вашего GameFi-проекта.