Розробка Account Abstraction Paymaster

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Розробка Account Abstraction Paymaster
Середній
~3-5 днів
Часті запитання

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

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

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

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

Розроблення Account Abstraction Paymaster

ERC-4337 Account Abstraction прибирає один з головних барʼєрів входу в Web3: користувач більш не зобов'язаний тримати нативний токен (ETH, MATIC, BNB) для оплати газу. Paymaster — контракт у ERC-4337 стеку, який бере на себе оплату газу від імені користувача. Це ключовий компонент для застосунків, де gasless UX — конкурентна вимога: onboarding нових користувачів, gaming, соціальні застосунки.

Як Paymaster вписується у ERC-4337

У стандартній транзакції: користувач → підписує транзакцію → платить газ у ETH. У ERC-4337 флоу: користувач підписує UserOperation (не транзакцію) → Bundler збирає UserOps у батч → EntryPoint контракт викликає validatePaymasterUserOp → якщо Paymaster затвердить — платить газ → postOp викликається після виконання.

UserOperation {
    sender,           // смарт-рахунок користувача
    callData,         // що виконати
    paymasterAndData, // адреса Paymaster + його дані
    signature,        // підпис користувача
    ...gasFields
}

paymasterAndData — це address(paymaster) + bytes(paymasterSpecificData). Paymaster декодує свої дані з цього поля.

Типи Paymaster та їх архітектура

Verifying Paymaster (спонсорована газ)

Найбільш поширений паттерн: off-chain сервіс вирішує, спонсирувати лі конкретну UserOperation, та підписує дозвіл. Paymaster контракт верифікує цю підпис.

contract VerifyingPaymaster is BasePaymaster {
    address public verifyingSigner;

    function _validatePaymasterUserOp(
        UserOperation calldata userOp,
        bytes32 userOpHash,
        uint256 maxCost
    ) internal override returns (bytes memory context, uint256 validationData) {
        // Декодуємо дані: підпис backend-у + період дійсності
        (uint48 validUntil, uint48 validAfter, bytes calldata signature) =
            abi.decode(userOp.paymasterAndData[20:], (uint48, uint48, bytes));

        // Хеш для верифікації = хеш UserOp + validUntil + validAfter
        bytes32 hash = ECDSA.toEthSignedMessageHash(
            keccak256(abi.encode(userOpHash, validUntil, validAfter))
        );

        // Якщо підпис від verifyingSigner — спонсируємо
        if (ECDSA.recover(hash, signature) != verifyingSigner) {
            return ("", _packValidationData(true, validUntil, validAfter));
        }

        return ("", _packValidationData(false, validUntil, validAfter));
    }
}

Backend отримує UserOp від frontend, перевіряє умови (користувач у whitelist? досяг лімиту безплатних транзакцій? тип операції дозволений?), підписує та повертає paymasterAndData. Frontend підставляє у UserOp та відправляє Bundler-у.

ERC-20 Paymaster (газ у токенах)

Користувач платить газ в USDC/USDT замість ETH. Paymaster приймає ERC-20 та поповнює свій ETH депозит в EntryPoint з власних коштів.

function _validatePaymasterUserOp(...)
    internal override returns (bytes memory context, uint256 validationData) {

    (address token, uint256 exchangeRate) =
        abi.decode(userOp.paymasterAndData[20:], (address, uint256));

    uint256 tokenCost = (maxCost * exchangeRate) / 1e18;

    // Перевіряємо allowance користувача
    require(
        IERC20(token).allowance(userOp.sender, address(this)) >= tokenCost,
        "Insufficient allowance"
    );

    // Передаємо context до postOp для реального списання
    return (abi.encode(userOp.sender, token, tokenCost), 0);
}

function _postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost)
    internal override {
    (address sender, address token, uint256 maxTokenCost) =
        abi.decode(context, (address, address, uint256));

    // Реальна вартість може бути менша за maxCost
    uint256 actualTokenCost = (actualGasCost * exchangeRate) / 1e18;
    IERC20(token).transferFrom(sender, address(this), actualTokenCost);
}

Ключова складність ERC-20 Paymaster — exchange rate. Потрібен актуальний курс ETH/token на момент транзакції. Варіанти: Chainlink oracle, TWAP з Uniswap V3, або централізований price feed від backend.

Депозит та управління балансом

Paymaster повинен тримати ETH депозит в EntryPoint контракті. EntryPoint списує газ з цього депозиту після кожної спонсорованої UserOperation.

// Поповнення депозиту
entryPoint.depositTo{value: 1 ether}(address(paymaster));

// Перегляд балансу
uint256 balance = entryPoint.balanceOf(address(paymaster));

// Вивід (unstake період для staked Paymaster)
entryPoint.withdrawTo(payable(owner), amount);

Для production потрібен моніторинг балансу та автоматичне поповнення. Якщо депозит іссякне — всі UserOp через цей Paymaster почнуть ревертитися. Рекомендуємо: alert при балансі нижче порогу + auto-topup з treasury через Chainlink Automation або кастомний keeper.

Rate limiting та захист від abuse

Без обмежень один користувач може дренувати весь бюджет Paymaster через spam транзакцій. Стратегії захисту:

Per-user spending лімітом. Off-chain у Verifying Paymaster backend: кожна адреса має місячний ліміт у USD. Backend відмовляє у підписі при перевищенні.

Cooldown період. Не більше N транзакцій на годину на адресу. Зберігається у Redis з TTL.

Transaction type whitelist. Backend перевіряє UserOp callData: спонсируються тільки вызови конкретних контрактів (вашого застосунку), не довільні транзакції.

Reputation система. Нові рахунки отримують мінімальний ліміт, який растет з часом або після верифікації (Worldcoin Proof of Humanity, Sign In With Ethereum + email).

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

Компонент Технології
Paymaster контракт Solidity + eth-infinitism/account-abstraction
Backend signer Node.js + viem + власний signer кошелек
Bundler Stackup / Alchemy Bundler / власний (go-bundler)
Rate limiting Redis + BullMQ
Мониторинг депозиту Chainlink Automation / кастомний keeper
Frontend SDK permissionless.js / ZeroDev SDK / Biconomy SDK
Тестування Foundry + hardhat-deploy для fork-тестів

Вибір Bundler провайдера

Bundler — сервіс, що приймає UserOperations та включає їх у блок. Варіанти:

  • Alchemy — найпростіший старт, хорошо документовано, платний при масштабі
  • Stackup — open-source bundler, можна self-host
  • Pimlico — спеціалізується на AA, зручний Paymaster API
  • Self-hosted (go-bundler) — повний контроль, потрібна інфраструктура

Процес розроблення

Аналітика (2-3 дні). Тип Paymaster (sponsored vs ERC-20), цільові мережи, лімити та політики спонсирування, вибір Bundler провайдера.

Розроблення контракту (1-2 тижні). Verifying або ERC-20 Paymaster, тести на EntryPoint v0.6/v0.7, управління депозитом.

Backend signer сервіс (1 тиждень). API для підписи UserOp, rate limiting, rate oracle (для ERC-20).

Інтеграція з frontend (3-5 днів). SDK підключення, UserOperation будування, моніторинг статусу.

Мониторинг та операції (3-5 днів). Алерти на баланс, auto-topup, dashboard витрат.

Базовий Verifying Paymaster з rate limiting — 3-4 тижні. ERC-20 Paymaster з oracle та повним мониторингом — 5-7 тижнів.