Реалізація Account Abstraction (ERC-4337) у мобільному крипто-гаманці
ERC-4337 змінює користувацький досвід у крипто-гаманцях радикально: замість того щоб користувач зберігав seed-фразу та особисто оплачував газ в ETH, транзакції упаковуються в UserOperation, відправляються через Bundler, а gas може оплачувати Paymaster — третя сторона. Для мобільного додатку це означає можливість реалізувати web2-подібний UX: вхід через Face ID, gasless транзакції, відновлення через соціальний акаунт.
Компоненти ERC-4337 та їх роль у мобільному клієнті
Smart Account. Замість EOA (Externally Owned Account) користувач отримує смарт-контракт-гаманець (SimpleAccount, SafeAccount, LightAccount від Alchemy, Kernel від ZeroDev). Адреса контракту детермінована через CREATE2 — його можна обчислити до деплою. Мобільний клієнт зберігає ownerPrivateKey (ключ підписанта) в Secure Enclave (iOS) / Android Keystore, а не сам гаманець.
EntryPoint контракт (0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 — адреса однакова на всіх EVM-мережах) — глобальний синглтон, приймає UserOperation[] від Bundler'ів.
Bundler — ноди, що збирає UserOperation з мемпулу, симулює, упаковує в звичайну on-chain транзакцію. SDK для роботи з bundler'ами: @alchemy/aa-core, permissionless.js, viem/account-abstraction (viem 2.x). У мобільному додатку bundler — це HTTP endpoint, куди клієнт відправляє eth_sendUserOperation.
Paymaster — опціональний контракт, спонсирує газ. Verifying Paymaster підписує дозвіл на оплату на сервері, ERC-20 Paymaster дозволяє платити в USDC. У мобільному клієнті: перед відправкою UserOperation запитуємо pm_sponsorUserOperation у Paymaster API (Alchemy, Pimlico, Biconomy).
Реалізація у мобільному додатку
Підпис UserOperation. Смарт-аккаунт верифікує підпис через isValidSignature (ERC-1271). Підписує власник (owner EOA). На iOS — SecKeyCreateSignature з kSecKeyAlgorithmECDSASignatureMessageX962SHA256 через Secure Enclave (ключ не покидає чіп). На Android — KeyPairGenerator з AndroidKeyStore provider, підпис через Signature.getInstance("SHA256withECDSA").
Biometric authentication перед підписом — LocalAuthentication (iOS) / BiometricPrompt (Android). Приватний ключ доступний тільки після біометричної верифікації — ключ позначений kSecAccessControlBiometryCurrentSet (iOS) або setUserAuthenticationRequired(true) (Android Keystore).
UserOperation структура та Gas estimation. Поля callGasLimit, verificationGasLimit, preVerificationGas потрібно оцінити до відправки. Bundler надає eth_estimateUserOperationGas — викликаємо перед показом користувачу суми газу. Pimlico, Alchemy Gas Manager автоматизують це. Без коректної оцінки bundler відкине операцію з AA21 didn't pay prefund.
Session Keys. ERC-4337 дозволяє делегувати обмежені права підпису. Приклад: мобільна гра запитує session key з правом тратити до 5 USDC за транзакцію — користувач підписує один раз, подальші мікро-транзакції в грі проходять без підтвердження. Реалізація через ISessionKeyPlugin (ERC-6900) або аналог у Kernel (ZeroDev).
Social Recovery. Смарт-аккаунт може підтримувати відновлення через guardians — довірених адрес (наприклад, email-recovery через ZeroDev Email Recovery або телефон через соціальний вхід через Web3Auth). Користувач втрачає ключ → звертається до guardian'ів → через timelock (зазвичай 48h) отримує нового власника. Для мобільного UX: у додатку — розділ "Відновлення", де можна додати guardian'ів та налаштувати threshold.
Кейс. DeFi-мобільний гаманець: Smart Account на базі LightAccount v1.1, bundler — Alchemy, Paymaster спонсирує перші 10 транзакцій нових користувачів. Підпис через Secure Enclave (iOS) та Android Keystore. Onboarding без seed-фрази: користувач створює аккаунт через Apple Sign In → генерується ECDSA keypair в Secure Enclave → адреса смарт-аккаунту обчислюється через getCounterFactualAddress → при першому поповненні аккаунт деплоїтся через initCode в UserOperation. Користувач ніколи не бачить приватного ключа або seed-фрази. Підключення до DApp через WalletConnect v2 (Sign API) — гаманець підписує EIP-712 повідомлення.
Складності та неочевидні моменти
Frontrunning UserOperations. Мемпул ERC-4337 публічний — bundler'и бачать непакровані UserOperations. Для конфіденційних операцій використовуємо private bundler (Flashbots, MEV Blocker) або paymaster з зашифрованими даними.
Multi-chain. EntryPoint v0.6 та v0.7 — різні адреси на різних мережах. Гаманець повинен підтримувати обидва. SmartAccountClient з @alchemy/aa-core абстрагує це, але конфігурація на кожну мережу — своя.
Gas estimation на Optimism/Base. L2 газова модель відрізняється: L1 data fee додається до L2 газу. eth_estimateUserOperationGas від bundler'а враховує це, але варто верифікувати на різних мережах окремо.
Терміни
| Масштаб | Орієнтовні терміни |
|---|---|
| Базовий ERC-4337 гаманець, gasless, biometric | 10–16 тижнів |
| Гаманець з session keys та social recovery | 5–8 місяців |
| DeFi-платформа з мультичейн підтримкою | 8–14 місяців |
Вартість розраховується індивідуально після аналізу вимог до смарт-контрактів, підтримуваних мереж та UX-флоу онбордингу.







