Интеграция игры с блокчейн-кошельком — Web3 и Unity

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Интеграция игры с блокчейн-кошельком — Web3 и Unity
Средний
~3-5 дней
Часто задаваемые вопросы

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

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

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

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

Представьте: игрок в хардкорный экшен должен в разгар битвы открыть MetaMask и подтвердить транзакцию на покупку зелья. В 80% случаев он либо провалит миссию, либо разочаруется в процессе. Наша задача — убрать этот разрыв, сделав криптотранзакции невидимыми для геймплея. Мы интегрировали блокчейн-кошельки в более чем 50 игровых проектов — от инди до AAA, с 6-летним опытом в GameFi. Пользователи приходят играть, а не разбираться с gas, approve и seed phrases. Разберём конкретные паттерны для разных типов игр: от WebGL на Unity до мобильных билдов с WalletConnect.

Как выбрать метод интеграции блокчейн-кошелька?

Внешние кошельки (MetaMask, Phantom)

Стандарт для аудитории, уже знакомой с криптой. Через Wagmi (React) или WalletConnect AppKit подключение выглядит так:

import { useConnect, useAccount } from "wagmi";
import { injected, walletConnect } from "wagmi/connectors";

function WalletConnect() {
  const { connect, connectors } = useConnect();
  const { address, isConnected } = useAccount();

  if (isConnected) return <GameLobby address={address} />;

  return (
    <div>
      <button onClick={() => connect({ connector: injected() })}>MetaMask</button>
      <button onClick={() => connect({ connector: walletConnect({ projectId: WC_PROJECT_ID }) })}>WalletConnect</button>
    </div>
  );
}

Embedded wallets — для массовой аудитории

Для casual игр — пользователи не хотят устанавливать расширения. Embedded wallet создаётся автоматически при регистрации через Google/Apple, используя SDK вроде Web3Auth или Privy. Игра получает готовый адрес без установки кошелька. Это снижает конверсию потери на 40% по сравнению с требованием установки расширения.

Session keys: взаимодействие без подписи каждый раз

Главная UX-проблема GameFi — каждое действие требует подписи в MetaMask. Session keys решают это: пользователь один раз авторизует сессионный ключ, игра использует его для транзакций автоматически. На практике мы реализовали это через ZeroDev SDK для пошаговой RPG — количество подписей на игрока снизилось с 10 до 1 за сессию (в 10 раз быстрее).

import { createKernelAccountClient, toPermissionValidator, toCallPolicy } from "@zerodev/sdk";

const sessionPrivateKey = generatePrivateKey();
const sessionAccount = privateKeyToAccount(sessionPrivateKey);

const callPolicy = toCallPolicy({
  permissions: [{
    target: GAME_CONTRACT_ADDRESS,
    functionName: "claimReward",
  }, {
    target: GAME_CONTRACT_ADDRESS,
    functionName: "useItem",
  }]
});

const permissionValidator = await toPermissionValidator(publicClient, {
  signer: sessionAccount,
  policies: [callPolicy],
  validUntil: Math.floor(Date.now() / 1000) + 3600,
});

const kernelClient = await createKernelAccountClient({ account: kernelAccount });

Unity интеграция: WebGL и Mobile

WebGL: JSLib bridge

В Unity WebGL нет прямого доступа к MetaMask — нужен JavaScript bridge. Мы используем готовую обёртку для вызова ethereum API:

// Plugins/WebGL/wallet.jslib
mergeInto(LibraryManager.library, {
  ConnectWallet: async function() {
    if (typeof window.ethereum === 'undefined') alert('MetaMask not installed');
    const accounts = await window.ethereum.request({ method: 'eth_requestAccounts' });
    unityInstance.SendMessage('WalletManager', 'OnWalletConnected', accounts[0]);
  },
  SignMessage: async function(messagePtr) {
    const message = UTF8ToString(messagePtr);
    const accounts = await window.ethereum.request({ method: 'eth_accounts' });
    const signature = await window.ethereum.request({ method: 'personal_sign', params: [message, accounts[0]] });
    unityInstance.SendMessage('WalletManager', 'OnMessageSigned', signature);
  }
});

На стороне C# достаточно обернуть это в MonoBehaviour:

using System.Runtime.InteropServices;

public class WalletManager : MonoBehaviour {
    [DllImport("__Internal")] private static extern void ConnectWallet();
    [DllImport("__Internal")] private static extern void SignMessage(string message);
    public string ConnectedAddress { get; private set; }

    public void Connect() {
        #if UNITY_WEBGL && !UNITY_EDITOR
        ConnectWallet();
        #endif
    }

    public void OnWalletConnected(string address) {
        ConnectedAddress = address;
        GameEvents.WalletConnected?.Invoke(address);
    }
}

Mobile: WalletConnect deep links

На мобильном Unity используем WalletConnect Sharp для открытия приложения кошелька через deep link. Это протестировано на iOS и Android — пользователь переходит в MetaMask или Trust Wallet и возвращается в игру после подписи.

Почему важна обработка транзакций в игровом контексте?

Optimistic UI updates

Ждать finality транзакции (10–30 секунд на L2, минуты на mainnet) в игре неприемлемо. Мы применяем optimistic updates: показываем результат немедленно, откатываем если транзакция фейлится. Это стандарт в нашей практике — ни один игрок не должен видеть "Pending..." дольше 2 секунд.

Account Abstraction бьёт батчингом

Account Abstraction позволяет отправить несколько операций в одной транзакции. Вместо approve + buy (2 подписи) — один multicall. Средняя экономия на gas составляет 30-50%:

const txHash = await smartAccountClient.sendUserOperation({
  calls: [
    { to: TOKEN_ADDRESS, abi: erc20Abi, functionName: "approve", args: [MARKETPLACE_ADDRESS, price] },
    { to: MARKETPLACE_ADDRESS, abi: marketplaceAbi, functionName: "buyItem", args: [itemId] },
  ],
});

Сравнение: session keys vs стандартные подписи

Параметр Стандартная подпись Session keys
Количество кликов на операцию 2-3 (popup + confirm) 0 (автоматически)
UX в быстрой игре Катастрофа (отвлекает) Плавный
Безопасность Полный доступ Ограниченный (scope)
Время настройки Минуты Часы (конфигурация политик)

Session keys — выбор для Action/RPG с высокой частотой транзакций. Для кэжуал (одна транзакция в час) достаточно embedded wallet.

Что такое session keys и как они работают?

Session keys — это механизм, при котором пользователь подписывает сессионный ключ с ограниченными правами (например, только на функции claimReward и useItem). Ключ хранится в игре и используется для автоматической отправки транзакций в течение заданного времени. В нашем кейсе с RPG время настройки политик заняло 2 дня, но результат — 10-кратное ускорение взаимодействия.

Как мы это делаем: процесс интеграции за 4 шага

  1. Анализ архитектуры — выбираем метод подключения под платформу (WebGL, mobile, desktop) с учётом целевой аудитории.
  2. Реализация подключения — интеграция Wagmi/WalletConnect или embedded SDK.
  3. Настройка session keys — если требуется частая отправка транзакций, конфигурируем политики и срок действия ключей.
  4. UI/UX для транзакций — optimistic updates, pending-индикаторы, recovery после ошибок. Тестируем все кейсы: отказ, network switch, gas failure.

Что входит в интеграцию

  • Разработка API-обёрток для взаимодействия с кошельками
  • Документация по интеграции SDK и конфигурации
  • Обучение команды заказчика (2-3 рабочих дня)
  • Тестовая среда с mock транзакциями
  • Поддержка в течение 2 недель после релиза

Сроки — от 2 недель (базовая интеграция) до 2 месяцев (полный цикл с session keys и account abstraction). Стоимость рассчитывается индивидуально. Свяжитесь с нами для предварительной оценки вашего проекта. Закажите интеграцию — получите игру, где криптотранзакции стали невидимыми.

Мы сталкивались с типичными проблемами: закрытие MetaMask popup, ошибки gas estimation, несоответствие сети и отклонение транзакции. Для каждой есть решение: очередь транзакций, статические лимиты газа с fallback RPC, автоматическое переключение сети через wallet_switchEthereumChain и корректная обработка отмены. Ключевой принцип: блокчейн асинхронен, игра — синхронна. Мы проектируем UI так, чтобы pending состояние было явным, а failure — recoverable. Получите консультацию по вашей игре — сделаем ваш GameFi проект дружелюбным для миллионов игроков.

Игровая экономика, контракты и on-chain механика

Мы видели этот сценарий не раз. Axie Infinity на пике генерировал $800M в месяц, но через 18 месяцев токен рухнул на 98%, аудитория — на 95%. Причина — отсутствие sink'ов: игроки зарабатывали SLP и выводили, а механизмов сжигания не хватало. Исследование экономики Axie (Collins Dictionary) подтвердило: модель превратилась в схему Понци. Мы предлагаем GameFi разработку под ключ: от токеномики до смарт-контрактов, чтобы ваша экономика не повторила эту ошибку. Оценим ваш проект на meetup или онлайн.

Где ломается Play-to-Earn экономика

Инфляционная токеномика без sink'ов. Игрок получает токены за геймплей. Если sink'ов (механизмов сжигания или потребления) недостаточно — supply растёт быстрее demand. Цена падает. Доход игрока в fiat уменьшается. Игроки уходят. Смертельная спираль.

Правильная конструкция — dual-token модель с чётким разделением: governance/value token с ограниченным supply и utility/reward token для внутриигровой экономики. Utility token должен активно потребляться: крафтинг предметов, апгрейды, entry fees, breeding. Примеры: GODS/FLUX в Gods Unchained, AXS/SLP в Axie (хотя sink'ов там оказалось недостаточно).

Какие sink-механизмы реально работают?

  • Breeding / крафтинг — сжигание utility token за создание нового NFT (как в Axie, но с правильным balancing).
  • Апгрейды персонажей — каждая эволюция требует сжигания токена.
  • PvP entry fee — вход в турнир сжигает токены, часть идёт в призовой пул.
  • Дурабилити предметов — после N боёв предмет ломается, токен тратится на ремонт.
  • Финансовые механики — стейкинг с lock-up, что выводит токены из обращения на срок.

On-chain vs Off-chain: где проходит граница

Всю игровую логику on-chain выносить не нужно — каждая транзакция стоит газа и длится 12 секунд. Игровой цикл — миллисекунды. Баланс:

Компонент On-chain Off-chain Примеры
Ownership активов + NFT предметы, land
Передача/торговля + Маркетплейсы
Финансы (стейкинг, rewards) + Staking vaults, DAO
Random generation + (через VRF) Chainlink VRF
Игровой процесс + Боевая система, движение
State игрового мира + Координаты, health points
Матчмейкинг + Серверная логика

Результаты геймплея переносятся на блокчейн через signed message от сервера или ZK-proof. Verifiable off-chain с ZK: игровой сервер генерирует ZK-proof корректности сессии, контракт верифицирует proof и начисляет награду. Реализации: Cartridge (Starknet), zkSync game rollups.

Реализация NFT игровых предметов

Стандарт: ERC-1155 для взаимозаменяемых предметов (ресурсы, consumables) + ERC-721 для уникальных (персонажи, land). ERC-1155 даёт до 60% экономии на газе при batch transfer.

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

Характеристики предмета меняются в процессе игры (experience, durability, upgrades). Два подхода:

  • Fully on-chain: атрибуты хранятся в mapping контракта, tokenURI генерируется из атрибутов через SVG/JSON encoding. Дорого по газу при частом обновлении. Используется для land и ключевых активов.
  • Hybrid: атрибуты хранятся off-chain, в tokenURI — hash состояния. Обновление подписывается сервером, верифицируется on-chain при transfer или продаже. Дешевле, но требует доверия к серверу или ZK.

Breeding и crafting. Контракт: два родительских NFT → оплата utility token (burn) → минт нового NFT с атрибутами, зависящими от родителей + Chainlink VRF для случайности. Без VRF майнеры могут манипулировать рандомом через выбор блока.

// Simplified breeding with Chainlink VRF
function breed(uint256 parent1Id, uint256 parent2Id) external {
    require(ownerOf(parent1Id) == msg.sender);
    require(ownerOf(parent2Id) == msg.sender);
    require(breedingToken.burnFrom(msg.sender, BREEDING_COST));

    uint256 requestId = vrfCoordinator.requestRandomWords(...);
    pendingBreeds[requestId] = BreedRequest(parent1Id, parent2Id, msg.sender);
}

function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
    BreedRequest memory req = pendingBreeds[requestId];
    uint256 childAttributes = deriveAttributes(req.parent1Id, req.parent2Id, randomWords[0]);
    _mintWithAttributes(req.requester, childAttributes);
}

Маркетплейс и роялти

Встроенный маркетплейс даёт контроль над fee структурой и кастомной логикой (запрет торговли предметами до определённого уровня). Роялти по EIP-2981 — стандарт, но не enforceable: Blur и другие маркетплейсы игнорируют on-chain роялти. Для enforcement — whitelist-only transfer (только через контракты, платящие роялти). Жертвуем composability ради защиты прав.

Staking и rewards distribution

Staking NFT — механика для удержания игроков. Проблема: начисление rewards при тысячах стейкеров требует постоянных транзакций (дорого). Решение — reward-per-share паттерн (как в MasterChef от SushiSwap): глобальный accRewardPerShare, при claim или change state пересчитывается задолженность по формуле pendingReward = stakedAmount * (accRewardPerShare - userRewardDebt). O(1) сложность независимо от числа стейкеров. Экономия газа — до 70% по сравнению с поэлементным начислением.

Процесс и сроки

Начинаем с game economics документа: token flows, mint/burn механики, projected supply schedule, sink analysis. До написания кода экономика моделируется (Cadence, Python simulation).

Как мы строим GameFi: 5 этапов

  1. Экономическое моделирование — 1-2 недели. Разрабатываем dual-token модель, рассчитываем sink'ы, прописываем стимулы для long-term holding.
  2. Разработка токен-контрактов — 2-3 недели. ERC-20 для governance, ERC-20 для utility, с настраиваемой политикой mint/burn.
  3. Смарт-контракты NFT — 3-5 недель. ERC-721 / ERC-1155 с dynamic metadata, breeding/crafting, Chainlink VRF.
  4. Staking + rewards — 2-3 недели. Контракт на базе reward-per-share, интерфейсы для frontend.
  5. Маркетплейс (опционально) — 2-4 недели. Кастомный маркетплейс с enforced royalty.

Что входит в работу

  • Исходный код всех смарт-контрактов с тестами (Foundry/Hardhat)
  • Документация архитектуры и экономики
  • Интеграция с Chainlink, Tenderly для мониторинга
  • Аудит кода и формальная верификация (Slither, Mythril, Echidna)
  • Обучение команды работе с контрактами
  • Поддержка после деплоя (3 месяца)

Базовый GameFi стек (токены + NFT + staking + маркетплейс) — от 8 до 16 недель. Полная игра с on-chain рандомом, breeding, dynamic NFT — 4-8 месяцев. ZK-based verifiable gameplay — отдельный проект от 6 месяцев.

Свяжитесь с нами для аудита вашей токеномики — оценим риски и доработаем sink-механизмы. Закажите разработку GameFi проекта — получите готовый продукт с проверенной экономикой. Гарантируем стабильность контрактов и прозрачность кода. Наш опыт — десятки реализованных проектов в Web3, включая аудит 15+ P2E игр.