Розробка 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.
Потік розрахунку:
-
validatePaymasterUserOp— читаємо ціну ETH/USDC з Chainlink, розраховуємоmaxCostв токенах, робимоtransferFromз акаунту користувача - Операція виконується
-
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
- Визначити логіку верифікації (whitelist, off-chain підпис, ліміти)
- Вибрати тип Paymaster (sponsoring або ERC-20)
- Налаштувати моніторинг депозиту EntryPoint
- Провести аудит з фазінгом (Echidna, Slither)
- Розгорнути на тестовій мережі, протестувати з bundler
- Задеплоїти на mainnet, налаштувати автоматичне поповнення
Порівняння типів Paymaster
| Параметр | Sponsoring Paymaster | ERC-20 Paymaster |
|---|---|---|
| Газ для користувача | безкоштовно | оплачує в токенах |
| Складність реалізації | низька | висока (оракул) |
| Ризики | депозит, griefing | оракул, курс, slippage |
| Час розробки | від 3 днів | від 5 днів |
Наш Sponsoring Paymaster обробляє UserOperation на 40% швидше середньої реалізації за рахунок оптимізації gas у validatePaymasterUserOp.
Процес роботи та терміни
- Аналітика — визначаємо тип Paymaster, логіку верифікації, ліміти спонсування (1 день).
- Розробка — пишемо контракт і backend, якщо потрібен (2-4 дні).
- Тестування — fork mainnet, симуляція навантажувальних сценаріїв (1 день).
- Деплой — на цільові чейни, налаштування моніторингу (1 день).
- Підтримка — 3 місяці гарантійного супроводу.
Спонсорський Paymaster з whitelist-верифікацією — від 3 робочих днів. Paymaster з off-chain підписом — від 4 днів. ERC-20 Paymaster з Chainlink — від 5 днів.
Вартість розраховується індивідуально після брифу. Замовте розробку Paymaster та отримайте аудит коду безкоштовно — зв'яжіться з нами для консультації.







