Розробка смарт-контрактного гаманця (Account Abstraction)

Уявіть: ваш користувач хоче відправити токени, але в нього немає ETH для газу. Або потрібно відновити доступ до гаманця без seed phrase, а seed phrase втрачена. Класичний EOA-гаманець не справляється з цими сценаріями. Рішення — смарт-контрактний гаманець з Account Abstraction (AA). Смарт-контрактни

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

Часті запитання

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

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

Уявіть: ваш користувач хоче відправити токени, але в нього немає ETH для газу. Або потрібно відновити доступ до гаманця без seed phrase, а seed phrase втрачена. Класичний EOA-гаманець не справляється з цими сценаріями. Рішення — смарт-контрактний гаманець з Account Abstraction (AA). Смарт-контрактний гаманець з Account Abstraction — це не просто зберігання, а програмований агент. Наші інженери з 10+ річним досвідом у блокчейні розробляють такі гаманці з моменту стандартизації EIP-4337. За 5 років на ринку ми реалізували понад 20 проєктів на Ethereum, Polygon, Arbitrum. Середня економія на газі при використанні Paymaster становить $0.5–2 на транзакцію. Account Abstraction дозволяє зменшити витрати на газ у 3–5 разів порівняно з традиційними EOA-транзакціями через використання Paymaster. Вартість зовнішнього аудиту — від $5 000 до $15 000 залежно від складності. Ми гарантуємо безпеку — кожен смарт-контракт проходить сертифікований аудит. Замовте розробку смарт-контрактного гаманця — отримайте консультацію інженера протягом 2 днів.

Як Account Abstraction змінює архітектуру смарт-контрактного гаманця?

Компоненти системи — розробка смарт-контрактного

Класична EOA-транзакція йде напряму в mempool і виконується нодою. В AA-системі ланцюжок інший:

  1. UserOperation — псевдотранзакція, підписана користувачем. Містить callData, sender (адреса смарт-гаманця), signature, ліміти gas та параметри Paymaster.
  2. Bundler — offchain агент, який збирає UserOperations з альтернативного mempool, упаковує їх в одну on-chain транзакцію і викликає EntryPoint. Існуючі реалізації: Stackup, Pimlico, Alchemy Rundler (написаний на Rust, на порядок швидший референсної реалізації).
  3. EntryPoint — singleton контракт (0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 на більшості EVM мереж), розгорнутий командою ERC-4337. Саме він верифікує та виконує пачку операцій. Не можна деплоїти свій EntryPoint — екосистема зав'язана на цю адресу.
  4. Account Contract — сам смарт-гаманець користувача. Повинен реалізовувати інтерфейс IAccount з методом validateUserOp. Сюди йде вся кастомна логіка.
  5. Paymaster — опціональний контракт, який платить gas за користувача або приймає оплату в ERC-20 токенах замість ETH.

Детальніше в специфікації EIP-4337.

Життєвий цикл UserOperation

User → sign UserOp → send to Bundler RPC Bundler → simulate via eth_estimateUserOperationGas → validate signature + paymaster Bundler → batch multiple UserOps → call EntryPoint.handleOps() EntryPoint → validateUserOp() на кожному Account Contract EntryPoint → Paymaster.validatePaymasterUserOp() EntryPoint → execute callData EntryPoint → postOp() на Paymaster (для обліку gas) 

Важливий момент: simulation і execution розділені. Bundler симулює через eth_callStateOverride і реджектить операції, які можуть зафейлитись on-chain. Це захищає Bundler від втрати ETH на failed transactions.

Що таке Factory і counterfactual деплой?

Одна з ключових властивостей AA — гаманець існує як адреса ще до деплою. CREATE2 з детермінованим salt (зазвичай хеш від owner address) дає передбачувану адресу. Користувач отримує адресу гаманця до першої транзакції, може прийняти кошти — гаманець деплоїться автоматично при першому використанні.

contract WalletFactory { function getAddress(address owner, uint256 salt) public view returns (address) { return Create2.computeAddress( bytes32(salt), keccak256(abi.encodePacked( type(ERC1967Proxy).creationCode, abi.encode(address(implementation), initData(owner)) )) ); } function createAccount(address owner, uint256 salt) external returns (SmartWallet) { address addr = getAddress(owner, salt); if (addr.code.length > 0) return SmartWallet(payable(addr)); // вже задеплоєно return SmartWallet(payable(new ERC1967Proxy{salt: bytes32(salt)}( address(implementation), initData(owner) ))); } } 

Реалізація газлес‑транзакцій через Paymaster

Sponsoring Paymaster

contract SponsoringPaymaster is IPaymaster { mapping(address => bool) public whitelistedContracts; function validatePaymasterUserOp( UserOperation calldata userOp, bytes32, uint256 maxCost ) external returns (bytes memory context, uint256 validationData) { // Спонсоруємо тільки виклики whitelisted контрактів address target = address(bytes20(userOp.callData[16:36])); require(whitelistedContracts[target], "Not whitelisted"); require(deposit() >= maxCost, "Insufficient deposit"); return (abi.encode(userOp.sender), 0); } } 

Paymaster повинен тримати депозит в EntryPoint. Механізм staking запобігає DoS: Paymaster без stake може спонсорувати максимум одну операцію за бандл.

ERC-20 Paymaster

Приймає будь-який ERC-20 як оплату gas. Оракул потрібен для конвертації: Chainlink price feed або пул Uniswap V3 TWAP. Схема роботи: до виконання блокуємо maxCost * exchangeRate токенів, після — списуємо фактичний cost через postOp.

Готові рішення: Pimlico ERC-20 Paymaster (open source), Stackup Paymaster SDK.

Реалізація Account Contract

Базова структура

За основу беремо SimpleAccount від eth-infinitism або SafeAccount від Safe (колишній Gnosis Safe). Для production — Safe v1.4.1 з 4337 модулем, тому що він battle-tested з $100B+ TVL.

Замість наведення повного коду, опишемо ключовий метод validateUserOp. Він перевіряє підпис, nonce та при необхідності оплачує газ. validationData кодує три параметри: результат валідації (0 — успіх, 1 — провал), validAfter і validUntil timestamps (time-bounded операції).

Патерни розширеної логіки

Session keys. Обмежений ключ (наприклад, згенерований браузером без seed phrase exposure), якому дозволені операції тільки в рамках конкретного контракту, ліміту суми та часового вікна. Структура зберігання:

struct SessionKey { address key; address allowedContract; uint256 spendingLimit; uint48 validUntil; bool enabled; } mapping(address => SessionKey) public sessionKeys; 

Це фундамент для "gasless gaming" — користувач один раз підписує сесію на ігровий контракт, далі гра робить транзакції від його імені.

Social recovery. Guardians — довірені адреси, які можуть змінити owner через timelock (зазвичай 72 години). Реалізація Argent — хороший референс: threshold з M-of-N guardians, cancellation протягом timelock window якщо owner онлайн.

Фронтенд інтеграція

Viem + permissionless.js — найбільш актуальний стек (постійно оновлюється). permissionless побудований на Viem і надає абстракції для роботи з Bundler та Paymaster RPC:

import { createSmartAccountClient } from "permissionless"; import { signerToSimpleSmartAccount } from "permissionless/accounts"; import { createPimlicoBundlerClient } from "permissionless/clients/pimlico"; const smartAccount = await signerToSimpleSmartAccount(publicClient, { signer: walletClient, factoryAddress: FACTORY_ADDRESS, entryPoint: ENTRY_POINT_ADDRESS, }); const smartAccountClient = createSmartAccountClient({ account: smartAccount, chain: optimism, bundlerTransport: http(BUNDLER_RPC_URL), middleware: { sponsorUserOperation: paymasterClient.sponsorUserOperation, }, }); // Відправка транзакції — ідентично звичайному гаманцю для користувача const txHash = await smartAccountClient.sendTransaction({ to: contractAddress, data: encodeFunctionData({ abi, functionName: "doSomething" }), }); 

ZeroDev SDK — альтернатива з вищим рівнем абстракції, вбудованими session keys та Kernel account (популярний Account Contract з plugin системою).

Альтернативи EIP-4337

Рішення Вимагає EntryPoint Сумісність з EVM Особливість
EIP-4337 Так Всі EVM мережі Стандарт де‑факто
zkSync Native AA Ні zkSync Era Вбудовано в L2, дешевше
EIP-7702 Ні (тимчасова делегація) Майбутній Ethereum Простіше для EOA

zkSync Native AA — на zkSync Era AA вбудована в протокол, не потрібен окремий EntryPoint. Кожен акаунт може бути смарт-контрактом з коробки. Більш ефективно по gas, але прив'язка до zkSync.

EIP-7702 (Prague/Electra) — майбутній хардфорк Ethereum. Дозволяє EOA тимчасово делегувати виконання смарт-контракту через спеціальний тип транзакції. Не замінює 4337 повністю, але закриває частину use cases простіше.

Етапи розробки та оцінки

Компонент Складність Термін
Базовий Account Contract (single owner) Середня 1–2 тиж
Factory + counterfactual deploy Низька 3–5 днів
Sponsoring Paymaster Середня 1 тиж
ERC-20 Paymaster + оракул Висока 1–2 тиж
Session keys Висока 1–2 тиж
Social recovery Висока 1–2 тиж
Frontend SDK інтеграція Середня 1 тиж
Аудит + виправлення 3–6 тиж
Детальніше про процес аудиту

Аудит включає ручну перевірку коду статичними аналізаторами (Slither, Mythril) та fuzzing (Echidna). Особливу увагу приділяємо validateUserOp та Paymaster‑логіці. Результат — звіт з критичністю багів та часом на виправлення.

Мінімальний production-ready гаманець (single owner + sponsoring paymaster + фронтенд) — 4–6 тижнів розробки. Повнофункціональний продукт з social recovery, session keys та мультимережею — 3–5 місяців. Оцінимо ваш проєкт за 2 дні — просто надішліть опис задачі.

Що входить в роботу

  • Аналіз вимог та проектування архітектури
  • Розробка смарт-контрактів (Account Contract, Factory, Paymaster)
  • Інтеграція з Bundler та Paymaster (Pimlico, Stackup, Alchemy)
  • Фронтенд SDK на Viem + permissionless.js
  • Тестування (unit, integration, fuzzing via Echidna)
  • Аудит коду (внутрішній + зовнішній)
  • Деплой в mainnet/testnet
  • Документація та навчання команди
  • Технічна підтримка 3 місяці

Ключовий момент при виборі підрядника: реалізація validateUserOp повинна бути аудійована. Помилка в цій функції — пряма втрата коштів користувачів. Економія на аудиті тут — свідомий ризик. Зв'яжіться з нами для попередньої оцінки — розповімо, як уникнути типових помилок. Отримайте консультацію інженера вже сьогодні!