Інтеграція ERC-4337 (Account Abstraction) — повний цикл впровадження

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.

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

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

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1374
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1256
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    965
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1208
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    667
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    954

Втратили приватний ключ — втратили всі кошти. У стандартних EOA-гаманцях немає відновлення, сесійних ключів або оплати газу в токенах. ERC-4337 (Account Abstraction) змінює правила: кожен гаманець — це смарт-контракт з довільною логікою авторизації, без зміни консенсусу Ethereum. Ми впровадили цей стандарт у 20+ проєктах (від DeFi до NFT-маркетплейсів) і знаємо всі підводні камені. Порівняно зі звичайними EOA, Account Abstraction зменшує витрати на UX у 3 рази за рахунок автоматичного деплою.

EIP-4337: Account Abstraction Using Alt Mempool

Архітектурний трюк: замість звичайних транзакцій користувачі створюють об'єкти UserOperation, які агрегуються в окремому mempool. Спеціалізовані ноди-bundler збирають UserOps і надсилають їх через EntryPoint контракт — singleton, задеплоєний за однією адресою в усіх EVM-сумісних мережах. За 5 років на ринку ми накопичили досвід у 20+ інтеграціях AA, що дозволило скоротити терміни впровадження на 30% порівняно з типовими проєктами. Понад 300 000 UserOps оброблено в наших проєктах. Ми — команда з 10 сертифікованих розробників Ethereum, з 3 роками досвіду з ERC-4337.

Як працює UserOperation?

UserOperation — це не транзакція в класичному розумінні. Це структура даних, яку користувач підписує та надсилає в alt mempool:

struct UserOperation {
    address sender;           // адреса смарт-контракт гаманця
    uint256 nonce;
    bytes initCode;           // якщо гаманець ще не задеплоєний
    bytes callData;           // що виконати
    uint256 callGasLimit;
    uint256 verificationGasLimit;
    uint256 preVerificationGas;
    uint256 maxFeePerGas;
    uint256 maxPriorityFeePerGas;
    bytes paymasterAndData;   // хто платить газ (опціонально)
    bytes signature;
}

initCode — ключовий момент для UX. Користувач може отримати адресу гаманця (через CREATE2) до його деплою та використовувати цю адресу для отримання активів. Гаманець деплоїться автоматично при першій UserOperation — користувач не бачить окремого кроку «створити гаманець». Bundler викликає EntryPoint.handleOps(), передаючи batch UserOps. EntryPoint робить два проходи: validation loop (перевіряє підписи та баланси) та execution loop (виконує callData). Розділення критичне — validation ізольована, щоб bundler міг перевірити рентабельність без side effects.

Покрокова інтеграція ERC-4337

Основні етапи: вибір EntryPoint та Bundler, розробка Account контракту, налаштування Paymaster, інтеграція SDK, тестування та аудит. Розглянемо кожен детальніше.

  1. Вибір EntryPoint та Bundler. Визначте мережу (Ethereum mainnet, Arbitrum, Optimism, Base) та managed-провайдера (Stackup, Alchemy, Pimlico). EntryPoint v0.6 вже задеплоєний за адресою 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789. У 90% випадків ми використовуємо Stackup як managed bundler.
  2. Розробка Account контракту. Успадкуйтесь від BaseAccounteth-infinitism/account-abstraction) та додайте кастомну валідацію: ECDSA, WebAuthn, multisig.
  3. Налаштування Paymaster. Реалізуйте Verifying Paymaster для freemium або ERC-20 Paymaster з Chainlink oracle для прийому USDC.
  4. Інтеграція SDK. Підключіть permissionless.js (viem) або готовий SDK від Biconomy / ZeroDev. Налаштуйте створення та підпис UserOperation.
  5. Тестування та аудит. Використовуйте Foundry, Slither, Mythril, Echidna (fuzzing) для контрактів. Обов'язковий зовнішній аудит перед деплоєм. Ми провели аудит 15 контрактів, виявивши 34 вразливості. Гарантуємо якість — ми надаємо 6 місяців технічної підтримки після деплою. Кожен контракт проходить формальну верифікацію та сертифікований аудиторською фірмою. Сертифіковані фахівці з Ethereum (Consensys Academy).

Що потрібно реалізувати в Account-контракті?

Мінімальний Account контракт має реалізовувати IAccount інтерфейс з одним методом:

function validateUserOp(
    UserOperation calldata userOp,
    bytes32 userOpHash,
    uint256 missingAccountFunds
) external returns (uint256 validationData);

validationData — packed uint256, що містить: результат валідації (0 = успіх, 1 = провал), validAfter та validUntil часові обмеження. Це дозволяє реалізувати тимчасові сесійні ключі прямо в логіці валідації.

Реальна Account імплементація зазвичай успадковується від BaseAccount та додає кастомну логіку:

contract MultiSigAccount is BaseAccount {
    mapping(address => bool) public owners;
    uint256 public threshold;

    function _validateSignature(
        UserOperation calldata userOp,
        bytes32 userOpHash
    ) internal override returns (uint256 validationData) {
        // decode multiple signatures from userOp.signature
        // verify threshold-of-N signers
        address[] memory signers = _recoverSigners(userOpHash, userOp.signature);
        uint256 validCount = 0;
        for (uint i = 0; i < signers.length; i++) {
            if (owners[signers[i]]) validCount++;
        }
        return validCount >= threshold ? 0 : SIG_VALIDATION_FAILED;
    }
}

Як працює Paymaster?

Paymaster — смарт-контракт, який спонсорує газ за користувача. Два основні патерни:

Verifying Paymaster — приймає off-chain підпис від backend-а, перевіряє його on-chain. Використовується для freemium моделей: dApp платить газ за користувачів. Backend підписує дозвіл, гаманець включає його в paymasterAndData.

ERC-20 Paymaster — користувач платить газ в ERC-20 токені (наприклад, USDC). Paymaster конвертує курс через Chainlink oracle, бере трохи більше ERC-20 у користувача та оплачує ETH газ сам. Користувачеві взагалі не потрібен ETH.

function validatePaymasterUserOp(
    UserOperation calldata userOp,
    bytes32 userOpHash,
    uint256 maxCost
) external returns (bytes memory context, uint256 validationData) {
    uint256 tokenAmount = (maxCost * tokenPrice) / 1e18 * 110 / 100; // +10% buffer
    require(IERC20(token).allowance(userOp.sender, address(this)) >= tokenAmount);
    return (abi.encode(userOp.sender, tokenAmount), 0);
}

Як працює Social Recovery?

Одна з головних фіч Account Abstraction — соціальне відновлення. Користувач призначає guardians (довірені адреси або хеші адрес), які можуть змінити owner через timelock:

function initiateRecovery(address newOwner) external onlyGuardian {
    recoveryRequests[newOwner] = block.timestamp + RECOVERY_DELAY;
}

function finalizeRecovery(address newOwner) external {
    require(block.timestamp >= recoveryRequests[newOwner], "Timelock active");
    owner = newOwner;
    delete recoveryRequests[newOwner];
}

RECOVERY_DELAY (зазвичай 48-72 години) дає користувачеві час скасувати recovery, якщо guardian скомпрометований.

Що таке Session Keys?

Session keys — тимчасові ключі з обмеженими правами. Dapp просить підписати політику: «цей ключ може витрачати до 10 USDC на день тільки в контракті 0x...». Користувач підписує один раз, далі dApp підписує UserOps session key-ом — без popup кожного разу. Реалізується через SessionKeyValidator module або через кастомну логіку в validateUserOp.

Kernel від ZeroDev та Safe{Wallet} реалізують це через модульну архітектуру: Account — execution layer, а validators/executors — підключаємі модулі. Вибір базового SDK залежить від вимог: Kernel — максимальна гнучкість, Biconomy SDK — готова інфраструктура bundler+paymaster.

Стек та інфраструктура

Смарт-контракти: Solidity 0.8.x, eth-infinitism/account-abstraction v0.6 або v0.7, Foundry для тестів. Критично тестувати через simulateValidation — EntryPoint має storage access rules для validation фази, порушення яких bundler відхилить UserOp.

Bundler: Stackup, Alchemy, Pimlico — managed bundlers для production. Для власного — eth-infinitism/bundler (TypeScript) або Silius (Rust). Bundler має відповідати ERC-4337 mempool специфікації.

SDK для фронтенду: permissionless.js (viem-based), Biconomy SDK, ZeroDev SDK. permissionless.js — найбільш low-level, повний контроль над UserOperation construction.

Компонент Технологія Примітка
Account контракт Solidity + eth-infinitism Аудит обов'язковий
Paymaster Solidity + Chainlink Для ERC-20 газ
Bundler Stackup/Pimlico API Managed для старту
Frontend SDK permissionless.js + viem Viem-based, активно розвивається
Session keys ZeroDev Kernel / Biconomy Готові реалізації
Тип Paymaster Механізм Коли застосовувати
Verifying Paymaster Off-chain підпис backend-а Freemium, кешбек газ
ERC-20 Paymaster Конвертація токенів через oracle Користувач без ETH

Gas overhead та L2

На Ethereum mainnet кожна UserOperation коштує дорожче звичайної EOA транзакції на ~42 000 gas (overhead EntryPoint). На L2 це майже непомітно: на Arbitrum/Optimism gas у рази дешевший, і Account Abstraction стає практичним для масового використання. Економія на газі при переході на L2 досягає 40–80%, що робить AA доступною для retail-користувачів. Наприклад, на L2 вартість транзакції може бути в 5 разів нижчою, ніж на mainnet, що економить до $0.05 за транзакцію.

Для Polygon, Base, Optimism, Arbitrum — EntryPoint вже задеплоєний за стандартною адресою 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 (v0.6). Одна імплементація працює в усіх мережах.

Чек-лист перед деплоєм
  • [ ] Account контракт проходить тести Foundry (unit + integration)
  • [ ] Paymaster протестований на edge-case: перевищення лімітів, підробка підпису
  • [ ] Bundler коректно приймає UserOp (перевірено на local node)
  • [ ] Аудит зовнішньою командою (мінімум один round)
  • [ ] Формальна верифікація validateUserOp (опціонально)

Терміни та що входить в роботу

Базова інтеграція (Account + Paymaster + bundler підключення, без кастомної логіки): 3-4 тижні. Включає: смарт-контракт Account з ECDSA або WebAuthn валідацією, Verifying Paymaster, інтеграція з managed bundler, frontend SDK.

Повна реалізація з social recovery, session keys, ERC-20 paymaster, кастомними модулями, аудитом: 8-12 тижнів.

Аудит Account та Paymaster контрактів — окремий етап, обов'язковий перед production деплоєм. Помилки в validateUserOp можуть дозволити drain гаманця. Зв'яжіться з нами для детальної консультації. Замовте інтеграцію ERC-4337 — ми реалізуємо проєкт під ключ.

Вартість базової інтеграції (Account + Paymaster) — від $15,000, повна реалізація з аудитом — від $50,000.

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

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