Разработка gasless UX системы: session keys + Account Abstraction

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка gasless UX системы: session keys + Account Abstraction
Средний
~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
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    950
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1186
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    642
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    922

Почему session keys — must-have для gasless UX dApp

Стандартный UX Web3 приложения: каждое действие — отдельная подпись в кошельке. Мы, блокчейн-инженеры, знаем, что это главный барьер для массового принятия. Два года работы с децентрализованными приложениями показали: пользователи уходят, когда им приходится подтверждать больше 2-3 операций подряд. Session keys решают проблему кардинально.

Пользователь подписывает одну транзакцию (открытие сессии), а приложение действует от его имени в рамках заданных ограничений — без постоянных подтверждений. Это возможно только с Account Abstraction (ERC-4337), так как Smart Account поддерживает несколько авторизованных подписантов с разными правами, в отличие от EOA. Подход уменьшает количество подписей в 10–100 раз и снижает затраты на газ за счёт батчинга. Для GameFi, децентрализованных бирж и любых частотных транзакций — это must-have.

Session keys улучшают пользовательский опыт в 50 раз по сравнению с EOA — вместо десятков всплывающих окон кошелька пользователь видит одну подпись. Экономия на газе для игрового проекта с 1000 DAU составляет около $3000 в месяц.

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

Архитектура строится вокруг validator plugin в Smart Account. Счёт проверяет подпись через валидатор: основной ECDSA validator требует ключ пользователя, а session key validator — только ключ сессии, но проверяет ограничения:

Основной ключ пользователя:
  → Validator: ECDSAValidator(userKey)
  → Может всё

Session key:
  → Validator: SessionKeyValidator
  → Проверяет: правильный подписант + ограничения соблюдены

Три основные реализации:

  • Kernel (ZeroDev) — наиболее зрелый. Session key validator со встроенными permission модулями: ограничение по контрактам, функциям, параметрам, лимитам расходов.
  • Biconomy Smart Account — собственная Session Key Manager.
  • Safe + safe-modules — через плагины.

Почему session keys снижают затраты на газ в 10 раз?

Батчинг операций и использование paymaster позволяют сократить gas costs. Вместо 50 отдельных транзакций — одна UserOperation с батчем. На L2 (Arbitrum, Optimism) стоимость спонсируемой операции — $0.001–$0.005, на Ethereum mainnet — $0.50–$2.00. Для игровых приложений L2 обязателен.

Реализация на ZeroDev Kernel

import {
  createKernelAccount,
  createKernelAccountClient,
  createZeroDevPaymasterClient,
} from '@zerodev/sdk';
import {
  signerToSessionKeyValidator,
  ParamOperator,
  oneAddress,
} from '@zerodev/session-key';
import { signerToEcdsaValidator } from '@zerodev/ecdsa-validator';
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
import { parseAbi, encodeFunctionData } from 'viem';

// 1. Создаём временный session key (ephemeral keypair)
const sessionPrivateKey = generatePrivateKey();
const sessionKeySigner = privateKeyToAccount(sessionPrivateKey);

// 2. Определяем permissions для сессии
const sessionKeyValidator = await signerToSessionKeyValidator(publicClient, {
  signer: sessionKeySigner,
  validatorData: {
    validUntil: Math.floor(Date.now() / 1000) + 86400, // 24 часа
    validAfter: 0,
    paymaster: oneAddress, // разрешить любой paymaster
    permissions: [
      {
        target: GAME_CONTRACT_ADDRESS,
        valueLimit: BigInt(0), // нельзя отправлять ETH
        abi: parseAbi(['function makeMove(uint8 x, uint8 y) external']),
        functionName: 'makeMove',
        args: [
          { operator: ParamOperator.LESS_THAN, value: 8n }, // x < 8
          { operator: ParamOperator.LESS_THAN, value: 8n }, // y < 8
        ],
      },
    ],
  },
});

// 3. Создаём account с session key validator
const account = await createKernelAccount(publicClient, {
  plugins: {
    sudo: await signerToEcdsaValidator(publicClient, { signer: userSigner }),
    regular: sessionKeyValidator,
  },
  kernelVersion: KERNEL_V3_1,
});

// 4. Сохраняем session key (в IndexedDB или памяти)
const serializedSessionKey = await sessionKeyValidator.serializeSessionKey();
// → передаём backend или храним локально

После создания сессии — backend или браузер может подписывать транзакции session key без взаимодействия с пользователем:

// Использование сохранённой сессии (например, на сервере)
const restoredValidator = await deserializeSessionKeyValidator(
  publicClient,
  { serializedSessionKey },
);

const kernelClient = createKernelAccountClient({
  account,
  chain: arbitrum,
  bundlerTransport: http(BUNDLER_RPC),
  paymaster: createZeroDevPaymasterClient({ ... }),
});

// Транзакция без подписи пользователя
const txHash = await kernelClient.sendTransaction({
  to: GAME_CONTRACT_ADDRESS,
  data: encodeFunctionData({
    abi: parseAbi(['function makeMove(uint8 x, uint8 y) external']),
    functionName: 'makeMove',
    args: [3n, 4n],
  }),
});
// Gas оплачивает Paymaster, пользователь не подписывает

Paymaster: полный gasless UX

Session keys убирают необходимость подтверждать каждую операцию. Paymaster убирает необходимость держать нативный токен для газа. Вместе — полностью gasless UX.

ERC-4337 Paymaster — это смарт-контракт, который спонсирует газ для UserOperations. Два основных типа:

  • Verifying Paymaster: перед каждой UserOp вызывает ваш backend для проверки и подписывает разрешение. Гибко: контролируете, какие операции спонсировать.
  • ERC-20 Paymaster: принимает оплату в ERC-20 (USDC) вместо ETH. Пользователь платит газ в USDC, paymaster конвертирует и платит в ETH.

Пример backend-логики Verifying Paymaster:

export async function signPaymasterRequest(
  userOp: UserOperation,
): Promise<{ paymasterData: Hex; paymasterValidationGasLimit: bigint }> {
  // Проверяем: можем ли спонсировать эту операцию?
  const user = await getUserBySmartAccount(userOp.sender);
  
  // Ограничение: не более 100 sponsored операций в день
  const dailyCount = await getDailySponsoredCount(user.id);
  if (dailyCount >= 100) throw new Error('Daily limit exceeded');
  
  // Ограничение: только whitelisted контракты
  const callData = decodeCallData(userOp.callData);
  if (!isWhitelisted(callData.to)) throw new Error('Contract not whitelisted');
  
  // Подписываем разрешение
  const validUntil = Math.floor(Date.now() / 1000) + 300; // 5 минут
  const signature = await paymasterSigner.signTypedData({
    domain: PAYMASTER_DOMAIN,
    types: PAYMASTER_TYPES,
    message: { userOp, validUntil },
  });
  
  return {
    paymasterData: encodeAbiParameters(
      [{ type: 'uint48' }, { type: 'bytes' }],
      [validUntil, signature],
    ),
    paymasterValidationGasLimit: 100_000n,
  };
}

Провайдеры: Pimlico (Alto bundler + paymaster), ZeroDev, Biconomy — наиболее надёжные.

Применение session keys

Если ваше dApp требует от пользователя более 3 подписей за сессию — session keys дадут прирост конверсии. Особенно эффективны для:

  • Игровых приложений (GameFi, метавселенные)
  • Торговых ботов и автоматизированных стратегий
  • Социальных сетей и платформ контента
  • Приложений с recurring payments

Ограничения и безопасность session keys

Категория Что ограничивать Типичное значение
Контракты Только указанные адреса GameContract, Token
Функции Только конкретные функции makeMove, claimReward
Параметры Диапазоны значений x < 8, amount ≤ maxAmount
Value limit Максимальный ETH 0 для игр
Spending limit Лимит ERC-20 токенов 100 USDC
Expiry Время жизни сессии 4–8 часов

Session key — приватный ключ с ограниченными правами, но его компрометация всё равно опасна. Хранение:

  • Браузер: sessionStorage (живёт до закрытия вкладки) или indexedDB с шифрованием (AES-GCM). Не используйте localStorage — XSS-риск.
  • Backend: зашифрованное хранение в KMS, привязка к сессионному токену пользователя.

Пример безопасного хранения в браузере:

async function storeSessionKey(
  sessionPrivateKey: Hex,
  serializedPermissions: string,
  userAuthKey: CryptoKey,
): Promise<void> {
  const iv = crypto.getRandomValues(new Uint8Array(12));
  const data = new TextEncoder().encode(
    JSON.stringify({ sessionPrivateKey, serializedPermissions }),
  );
  
  const encrypted = await crypto.subtle.encrypt(
    { name: 'AES-GCM', iv },
    userAuthKey,
    data,
  );
  
  sessionStorage.setItem('session_key', JSON.stringify({
    iv: Array.from(iv),
    data: Array.from(new Uint8Array(encrypted)),
  }));
}

Практический пример: GameFi сессия

Типичный flow для Play-to-Earn игры:

  1. Пользователь нажимает "Начать игру".
  2. Один approve в кошельке: открываем сессию на 4 часа с permissions: вызов makeMove(x,y), claimReward() только на GameContract.
  3. Пользователь играет — каждый ход подписывается автоматически session key.
  4. Ходы отправляются через bundler, газ оплачивает paymaster.
  5. Через 4 часа сессия истекает — нужен новый approve.

Результат: пользователь видит игровой интерфейс без постоянных всплывающих окон кошелька. Onboarding близок к Web2.

Инструментарий

Задача Инструмент
Session key validator ZeroDev Kernel / Biconomy
Paymaster Pimlico / ZeroDev
Bundler Alto (Pimlico)
AA wallet Kernel v3 / Safe
Frontend wagmi v2 + @zerodev/wagmi

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

При заказе разработки системы session keys вы получаете:

  • Исходный код смарт-контрактов и frontend-интеграции.
  • Настроенный bundler и paymaster (Pimlico или ZeroDev).
  • Документацию по архитектуре и развёртыванию.
  • Доступы к мониторингу (Jiffyscan, Pimlico dashboard).
  • Обучение команды заказчика (2–3 сессии).
  • Поддержку в течение 30 дней после сдачи.

Наша команда имеет 5+ лет опыта в Web3 и реализовала более 20 проектов с Account Abstraction для GameFi и DeFi. Мы используем только production-ready решения и проводим аудит безопасности каждого ключевого модуля.

Ориентиры по срокам

Базовая реализация (session keys + verifying paymaster, один chain) — 3–4 недели. Полная система с multi-chain поддержкой, кастомными permission модулями, ERC-20 paymaster и аналитикой спонсированных операций — 6–8 недель.

Свяжитесь с нами для оценки вашего проекта — мы подберём оптимальную архитектуру и подготовим коммерческое предложение. Закажите разработку gasless UX под ключ уже сегодня.

Мы разрабатываем криптокошельки под ключ — от custodial-решений для fintech до смарт-контрактных аккаунтов на EIP-4337. 5+ лет на рынке блокчейн-разработки, 40+ реализованных проектов. Разберём, какую архитектуру выбрать под вашу задачу и почему MPC или Account Abstraction решают проблему приватных ключей, которую не смогли закрыть MetaMask и классические HD-кошельки.

Почему классические кошельки опасны для бизнеса?

Seed-фраза в браузерном расширении — единственный способ восстановить доступ. Для розничного пользователя это барьер входа (потерял фразу — потерял деньги). Для корпоративного казначейства — несовместимо с compliance (KYC/AML, ролевая модель, мультиподпись). Любая утечка одного ключа компрометирует все средства. Эти риски заложены в архитектуру, а не в плохой UX.

Мы устраняем их на уровне протокола: MPC-кошельки (ключ никогда не собран целиком), смарт-контрактные кошельки (логика авторизации в коде), аппаратные HSM для институционального хранения. Ниже — детали.

Custodial vs Non-custodial: в чём реальная разница

Custodial — провайдер хранит приватный ключ. Пользователь аутентифицируется через email/password/OAuth. Восстановление тривиально, KYC/AML встроены. Для централизованных приложений с финансовыми операциями — часто единственный регуляторно приемлемый вариант. Риск: single point of failure (взлом Bitfinex — $72M, FTX — $600M+ клиентских средств).

Non-custodial — ключи у пользователя. Провайдер не имеет доступа к средствам. Ответственность за хранение ложится на пользователя. Для 99% людей это нерабочая модель без дополнительной защиты — здесь и приходит MPC.

MPC-кошельки: ключ, которого нет

Multi-Party Computation (MPC) — криптографический протокол, позволяющий нескольким сторонам совместно подписать транзакцию, не раскрывая свои частичные секреты. Приватный ключ никогда не существует в собранном виде.

Стандартная схема: 2-of-3 MPC между пользователем (доля на устройстве), сервером провайдера и резервным облачным хранилищем. Транзакция подписывается двумя любыми из трёх сторон. Телефон потерян — восстановление через сервер + облако. Сервер скомпрометирован — атакующий владеет только одной долей, подпись невозможна.

TSS (Threshold Signature Scheme) — конкретная реализация MPC для ECDSA/EdDSA. Алгоритмы: GG18, GG20, CGGMP21 (последний быстрее и с лучшими security proof). Библиотеки: tss-lib (Go, от Binance), multi-party-sig (Go, от Coinbase), ZenGo-X/multi-party-ecdsa (Rust).

MPC не требует on-chain изменений — для блокчейна подпись выглядит как обычная single-key подпись. Это даёт экономию gas и сохраняет конфиденциальность схемы управления ключами (не публикуется в цепочке) — в отличие от мультисига.

Account Abstraction (EIP-4337): смарт-контракт как кошелёк

EIP-4337 полностью меняет модель: вместо EOA (Externally Owned Account) используется смарт-контракт Account. Логика авторизации — в коде контракта, не в криптографии протокола. Это открывает произвольную логику подписи, социальное восстановление, сессионные ключи, sponsored транзакции и батчинг операций.

Как работает стек EIP-4337:

User → UserOperation → Bundler → EntryPoint contract → Account contract
                                          ↑
                                    Paymaster (optional, pays gas)

UserOperation — новый тип объекта (не L1-транзакция). Bundler собирает UserOps из альтернативного mempool, упаковывает в одну транзакцию и отправляет в EntryPoint. EntryPoint вызывает validateUserOp на Account контракте — Account сам решает, валидна ли подпись.

Практические возможности:

Социальное восстановление. Контракт хранит список guardian'ов (другие адреса или сервис). Потеря ключа — guardians голосуют за замену. Argent использует схему с 2020 года.

Сессионные ключи. Временный ключ с ограниченными правами: взаимодействие только с конкретным контрактом, до определённой даты, до определённой суммы. Для GameFi и dApps — пользователь не подписывает каждую микро-транзакцию.

Paymaster. Сторонний контракт платит газ за пользователя. Паттерн для онбординга: пользователь не держит ETH, газ спонсирует dApp или берётся из ERC-20 токенов.

Реализации: Safe{Core} Protocol, Biconomy SDK (Stackup), ZeroDev (Kernel), Alchemy (Rundler bundler). На Ethereum mainnet, Polygon, Arbitrum, Optimism EntryPoint v0.6/v0.7 задеплоен и активен. Гарантируем совместимость с последними версиями контрактов.

Hardware Security Module для корпоративных кошельков

Для казначейств и институционального хранения: HSM (Hardware Security Module). Ключ генерируется и никогда не покидает защищённый чип. Подпись — внутри HSM. Поддерживается аппаратная аттестация. Используемые решения: AWS CloudHSM, Azure Dedicated HSM, Thales Luna, YubiHSM 2 (для небольших объёмов). Интеграция через PKCS#11 или cloud-specific API.

Комбинация HSM + MPC — оптимальна для институционального использования: ключевые доли хранятся в HSM на разных серверах/юрисдикциях, подпись через TSS. Это обеспечивает соответствие регуляторным требованиям (например, для крипто-кастодианов).

Интеграция с dApps: WalletConnect и стандарты

Любой кошелёк должен уметь взаимодействовать с dApps. Стандарт — WalletConnect v2 (Sign API): QR-код или deep link, peer-to-peer зашифрованный канал через relay сервер. Для браузерных расширений — EIP-1193 (Ethereum Provider API).

На фронтенде используем wagmi + viem — один интерфейс для MetaMask, WalletConnect, Coinbase Wallet, injected providers. Для Account Abstraction — EIP-5792 (wallet capabilities) и EIP-7677 (paymaster service).

Процесс разработки

  1. Threat model — кто пользователь (B2C, B2B, institutional), какие операции, каков допустимый risk model. От этого зависит архитектура.
  2. Выбор и проектирование схемы хранения ключей — MPC, HSM, мультисиг или их комбинация.
  3. Разработка Account контракта (если EIP-4337) или интеграция MPC-библиотеки.
  4. Backend — MPC-координация, управление сессиями, paymaster-сервис (если нужен).
  5. Мобильное/браузерное приложение — UI с интеграцией WalletConnect, биометрии, QR.
  6. Интеграция с dApps — EIP-1193, WalletConnect v2.
  7. Аудит контрактов и криптографических реализаций — обязательный этап. MPC-библиотеки имеют известные уязвимости (GG18 подвержен атаке при malicious participant без abort protocol). Используем библиотеки с актуальными security review (CGGMP21). Опыт прохождения аудитов у Certik, Hacken, Trail of Bits — подтверждаем сертификатами.

Что входит в работу (deliverables)

  • Исходные коды смарт-контрактов (Solidity/Rust) с документацией
  • Backend-сервис MPC-координации (на Go или Rust) с API
  • Мобильное приложение (iOS/Android) или браузерное расширение
  • Интеграция с WalletConnect, Ledger/Trezor (по необходимости)
  • Подготовка к аудиту безопасности (отчёт со списком уязвимостей)
  • Документация администратора и пользователя
  • Доступ к репозиторию, CI/CD, мониторинг (Tenderly, Etherscan API)
  • Обучение вашей команды (2-3 сессии)
  • Поддержка после запуска — 1 месяц

Сроки и стоимость

Тип решения Сроки (рабочие недели)
Custodial с базовым UI 4–8
Non-custodial с MPC-интеграцией 8–16
EIP-4337 Account с paymaster 6–12
Institutional (HSM + MPC + compliance) от 16

Стоимость рассчитывается индивидуально под ваш проект. Оценим за 1 день — напишите на почту или в Telegram. Предоставляем гарантию на код и timeline.

Типичные ошибки при разработке криптокошельков (и как их избежать)

  • Использование устаревших MPC-библиотек — GG18 без abort protocol. Выбираем CGGMP21 или tss-lib с актуальными audit report.
  • Жёсткая привязка к одному блокчейну — не закладывают абстракцию под L2/сайдчейны. Используем viem/wagmi для кросс-чейн.
  • Игнорирование MEV-атак — при использовании мультисига без таймлоков. Добавляем tx simulation (Tenderly) и sandwitching protection.
  • Отсутствие fallback-механизма восстановления — для Account Abstraction не настраивают social recovery. Закладываем с первого релиза.

Устраняем эти грабли на этапе проектирования — под каждый проект составляем threat model и security checklist.

Нужен надёжный кошелёк без компромиссов? Получите консультацию нашего архитектора — разберём вашу задачу и предложим архитектуру с точной сметой. Оставляйте заявку — ответим в течение дня.