Розробка 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 на місяць. Вартість базової реалізації починається від $5000.

Як 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 спонсорованих операцій на день
  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

Якщо ваш застосунок вимагає від користувача більше 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 рішення та проводимо аудит безпеки кожного ключового модуля. Сертифікація безпеки за стандартом OWASP — обов'язковий етап.

Орієнтири за строками

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

Зв'яжіться з нами для оцінки вашого проекту — ми підберемо оптимальну архітектуру та підготуємо комерційну пропозицію. Замовте розробку gasless UX під ключ вже сьогодні. Наша експертиза в dApp розробці та блокчейн-інженерії гарантує успіх проекту.

Ми розробляємо криптогаманці під ключ — від 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 — значні втрати, FTX — понад значну суму клієнтських коштів).

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 транзакції та батчинг операцій.

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 день — зв'яжіться з нами. Надаємо гарантію на код та 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.

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