Разработка 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 и получите аудит кода бесплатно — свяжитесь с нами для консультации.







