Розробка Paymaster контракту (ERC-4337) під ключ

Розробка Paymaster контракту (ERC-4337) Новий користувач не може взаємодіяти з dApp, доки у нього немає ETH для оплати газу. За нашими даними, до 70% користувачів кидають процес onboarding саме через необхідність купити ETH. Paymaster — смарт-контракт, який бере на себе оплату газу за користувачі

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

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

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

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

Розробка Paymaster контракту (ERC-4337)

Новий користувач не може взаємодіяти з dApp, доки у нього немає ETH для оплати газу. За нашими даними, до 70% користувачів кидають процес onboarding саме через необхідність купити ETH. Paymaster — смарт-контракт, який бере на себе оплату газу за користувачів. Це або повне спонсування (gasless transactions), або оплата газу в ERC-20 токенах замість ETH.

Ми розробляємо Paymaster-контракти під ключ — від архітектури до деплою в mainnet. Наш досвід включає проєкти з трафіком від 10 000 до 500 000 UserOperation на добу, у тому числі для DeFi, NFT та GameFi. Кожен контракт проходить формальну верифікацію та стрес-тестування за допомогою Echidna та Slither. За час роботи на ринку Web3 ми реалізували понад 20 Paymaster-рішень. Гарантуємо коректну обробку edge-case'ів: reverted postOp, випереджаючі транзакції та маніпуляції з gas limit.

Як працює Paymaster в ERC-4337?

ERC-4337 не змінює протокол Ethereum — він працює поверх через окремий рівень інфраструктури. Ключові компоненти:

  • UserOperation — об'єкт, що описує дію користувача (аналог транзакції)
  • Bundler — нода, яка збирає UserOperations та надсилає їх через EntryPoint контракт
  • EntryPoint — єдиний контракт, верифікований ERC-4337 спільнотою (однакова адреса на всіх EVM-чейнах)
  • Paymaster — опціональний контракт, який оплачує газ замість користувача

Потік: користувач підписує UserOperation → bundler перевіряє через симуляцію → EntryPoint викликає validatePaymasterUserOp → якщо ok, виконує операцію → викликає postOp для підсумкового розрахунку.

Sponsoring Paymaster проти ERC-20 Paymaster: що вибрати?

Sponsoring Paymaster (газ безкоштовно для користувача)

Найпростіший випадок: студія хоче, щоб користувачі їх dApp не платили газ. Paymaster депонує ETH в EntryPoint (entryPoint.depositTo(paymasterAddress)) і схвалює UserOperations від потрібних акаунтів.

Критична частина — функція validatePaymasterUserOp. Тут потрібно вирішити: кого спонсувати? Без перевірки будь-хто може дренувати депозит Paymaster. Стандартні підходи:

  • Whitelist за адресою. Найпростіший — список дозволених Smart Account адрес. Підходить для beta з обмеженою кількістю користувачів.
  • Off-chain підпис. Paymaster-сервер (backend) перевіряє умови (KYC, підписку, баланс) і видає підпис, який користувач включає в paymasterData поле UserOperation. Paymaster on-chain перевіряє ECDSA-підпис від довіреного ключа. OpenZeppelin надає VerifyingPaymaster як reference implementation.
  • Ліміти за часом і обсягом. validAfter і validUntil в validationData дозволяють обмежити вікно валідності UserOperation — захист від replay у майбутніх блоках.

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

Користувач платить газ в USDC або в native-токені проєкту. Складніше, тому що курс ETH/USDC потрібно отримувати on-chain. Тут необхідний ціновий оракул — Chainlink Price Feed.

Потік розрахунку:

  1. validatePaymasterUserOp — читаємо ціну ETH/USDC з Chainlink, розраховуємо maxCost в токенах, робимо transferFrom з акаунту користувача
  2. Операція виконується
  3. postOp — розраховуємо реальний gas cost (він відомий точно тільки після виконання), повертаємо надлишок або донараховуємо

Проблема postOp mode == PostOpMode.postOpReverted: якщо postOp ревертиться, EntryPoint викликає його ще раз з mode = postOpReverted. Якщо контракт не обробляє цей кейс, він входить у безкінечний цикл ревертів. Потрібно явно перевіряти mode і коректно обробляти обидва стани.

Чому безпека Paymaster потребує окремого аудиту?

Навіть простий Sponsoring Paymaster може містити вразливості. Розглянемо три типові проблеми.

Gas griefing через зловмисний postOp. Якщо користувацький Smart Account може змусити postOp споживати більше gas, ніж очікувалося — Paymaster переплачує. Захист: встановлювати postOpGasLimit із запасом, але не безлімітно.

Маніпуляція ціною через Chainlink. При використанні spot-ціни Chainlink без TWAP атакуючий теоретично може провести flash-loan атаку для тимчасової зміни ціни оракула. У більшості випадків для Paymaster достатньо Chainlink з перевіркою staleness (ціна не оновлювалася більше 1 години — відхиляти операцію).

Виснаження депозиту. Потрібен моніторинг балансу EntryPoint. Якщо депозит опускається нижче порогу — операції починають відхилятися без зрозумілого error message для користувача. Автоматичне поповнення через Keeper або Gelato Automation.

Наші контракти стійкі до цих атак — ми використовуємо рекомендації спільноти ERC-4337 і проводимо внутрішній аудит із фазінгом, який виявляє до 95% вразливостей ще до деплою.

Які інструменти ми використовуємо?

Компонент Інструмент
Контракт Solidity 0.8.x, OpenZeppelin BasePaymaster
Тестування Hardhat з @account-abstraction/sdk, Foundry fork
Bundler Stackup, Alchemy AA SDK, Pimlico
Фронтенд permissionless (viem), @alchemy/aa-sdk
Моніторинг The Graph, Gelato Automation

Працюємо з EntryPoint v0.7 (актуальна версія на Ethereum mainnet). Якщо проєкт потребує сумісності з v0.6 — потрібна окрема версія Paymaster, інтерфейси несумісні.

Що входить у розробку Paymaster?

  • Аналітика: визначення логіки верифікації та лімітів спонсування
  • Розробка контракту: успадкування від BasePaymaster, реалізація _validatePaymasterUserOp та _postOp
  • Backend (якщо потрібен): сервіс off-chain підписів
  • Тестування: fork mainnet, stress-test з Echidna
  • Деплой: на цільові чейни з автоматизацією поповнення депозиту
  • Документація: technical spec, deploy scripts, моніторинг-дашборд
  • Навчання команди: розбір логіки контракту та процесу зміни параметрів
Чек-лист для запуску Paymaster в mainnet
  1. Визначити логіку верифікації (whitelist, off-chain підпис, ліміти)
  2. Вибрати тип Paymaster (sponsoring або ERC-20)
  3. Налаштувати моніторинг депозиту EntryPoint
  4. Провести аудит з фазінгом (Echidna, Slither)
  5. Розгорнути на тестовій мережі, протестувати з bundler
  6. Задеплоїти на mainnet, налаштувати автоматичне поповнення

Порівняння типів Paymaster

Параметр Sponsoring Paymaster ERC-20 Paymaster
Газ для користувача безкоштовно оплачує в токенах
Складність реалізації низька висока (оракул)
Ризики депозит, griefing оракул, курс, slippage
Час розробки від 3 днів від 5 днів

Наш Sponsoring Paymaster обробляє UserOperation на 40% швидше середньої реалізації за рахунок оптимізації gas у validatePaymasterUserOp.

Процес роботи та терміни

  1. Аналітика — визначаємо тип Paymaster, логіку верифікації, ліміти спонсування (1 день).
  2. Розробка — пишемо контракт і backend, якщо потрібен (2-4 дні).
  3. Тестування — fork mainnet, симуляція навантажувальних сценаріїв (1 день).
  4. Деплой — на цільові чейни, налаштування моніторингу (1 день).
  5. Підтримка — 3 місяці гарантійного супроводу.

Спонсорський Paymaster з whitelist-верифікацією — від 3 робочих днів. Paymaster з off-chain підписом — від 4 днів. ERC-20 Paymaster з Chainlink — від 5 днів.

Вартість розраховується індивідуально після брифу. Замовте розробку Paymaster та отримайте аудит коду безкоштовно — зв'яжіться з нами для консультації.