Реализация Gasless-транзакций (Paymaster) в мобильном криптоприложении
Главный барьер для массового принятия крипто-приложений — газ. Новый пользователь установил приложение, создал кошелёк, получил USDC от друга. Хочет отправить — а ему говорят: «У вас 0 ETH для оплаты комиссии». Это конец воронки. Gasless-транзакции через Paymaster решают эту проблему: газ спонсируется приложением или оплачивается ERC-20 токеном вместо нативного.
Как работает ERC-4337 и Paymaster
Account Abstraction (ERC-4337) вводит UserOperation — структуру, которая заменяет обычную транзакцию. Bundler собирает UserOperations из mempool и отправляет их в EntryPoint контракт пакетом. Paymaster — отдельный смарт-контракт, который берёт на себя оплату газа при условии выполнения своей логики.
Два основных типа Paymaster:
- Sponsoring Paymaster: приложение платит газ за пользователей бесплатно
- Token Paymaster: пользователь платит в ERC-20 (USDC, USDT) вместо ETH
// UserOperation с Paymaster через Biconomy SDK
import { createSmartAccountClient } from "@biconomy/account";
import { createPaymaster } from "@biconomy/paymaster";
const paymaster = await createPaymaster({
paymasterUrl: "https://paymaster.biconomy.io/api/v2/137/YOUR_API_KEY"
});
const smartAccount = await createSmartAccountClient({
signer: walletSigner,
bundlerUrl: "https://bundler.biconomy.io/api/v2/137/YOUR_API_KEY",
paymaster: paymaster
});
// Отправка транзакции — пользователь не платит ETH
const tx = await smartAccount.sendTransaction({
to: recipientAddress,
data: encodeFunctionData({ ... }),
value: 0n
});
На мобильном клиенте пользователь просто нажимает «Подтвердить» — биометрия (Face ID / Fingerprint), транзакция уходит. Никакого ETH-баланса, никакого вопроса «сколько поставить газа».
Интеграция в iOS/Android приложение
Для нативных приложений без React Native логика Account Abstraction переносится на серверную сторону — мобильный клиент отправляет запрос на бэкенд, бэкенд формирует UserOperation, подписывает через smart account пользователя и отправляет в Bundler. Мобильный клиент только передаёт данные транзакции и получает результат.
// iOS: запрос gasless-транзакции через свой бэкенд
struct GaslessTransactionRequest: Encodable {
let action: String // "transfer", "mint", "swap"
let params: [String: Any]
let userSmartAccount: String
}
class TransactionService {
func sendGasless(request: GaslessTransactionRequest) async throws -> TransactionResult {
let response = try await apiClient.post(
"/transactions/gasless",
body: request
)
// Polling или WebSocket для получения txHash
return try await pollTransactionStatus(response.operationId)
}
}
Бэкенд хранит ключи smart account в HSM или через Privy Server Wallets / Fireblocks API — никаких приватных ключей на мобильном устройстве.
Ограничения и защита от злоупотреблений
Спонсирование газа — это деньги. Без ограничений ботнет опустошит баланс Paymaster за часы. Необходимые меры:
Rate limiting. Максимум N gasless-транзакций в сутки на пользователя. На уровне Paymaster контракта — проверка через маппинг lastTxTime[sender] с минимальным интервалом.
Whitelist actions. Paymaster спонсирует только определённые вызовы — например, только transfer() конкретного токена, но не произвольные контракты.
App Check верификация. Проверяем что запрос идёт из легитимного приложения через Firebase App Check (использует DeviceCheck на iOS, Play Integrity на Android). Без валидного App Check токена бэкенд не формирует UserOperation.
// Paymaster контракт: whitelist функций
function _validatePaymasterUserOp(
UserOperation calldata userOp,
bytes32,
uint256
) internal view override returns (bytes memory, uint256) {
bytes4 selector = bytes4(userOp.callData[:4]);
require(allowedSelectors[selector], "Function not sponsored");
require(dailyUsage[userOp.sender] < MAX_DAILY_OPS, "Daily limit exceeded");
return ("", 0);
}
Баланс Paymaster и мониторинг
Paymaster держит депозит на EntryPoint контракте. Когда депозит заканчивается — транзакции начинают падать с AA31 paymaster deposit too low. Нужен мониторинг баланса через EntryPoint.getDepositInfo(paymasterAddress) и автоматический топап через Chainlink Automation или простой cron-воркер.
Стоит завести дашборд: сколько транзакций в день, средний газ, общие расходы. Biconomy Dashboard, Alchemy Gas Manager Dashboard — готовые решения если используете их инфраструктуру.
Выбор провайдера
| Провайдер | Поддерживаемые сети | Особенности |
|---|---|---|
| Biconomy | 50+ сетей | SDK для React Native, JS |
| ZeroDev | Ethereum, Polygon, Arbitrum | Kernel account, простой API |
| Alchemy Gas Manager | 10+ сетей | Интегрирован с Alchemy RPC |
| Pimlico | Большинство EVM | Хороший bundler, Token Paymaster |
| Собственный | Любая EVM | Полный контроль, выше сложность |
Для продакшн-приложения с > 10K DAU — рекомендуем собственный Paymaster на Ethereum L2 (Base, Arbitrum, Optimism): газ дешевле на 90% по сравнению с mainnet, но контроль над логикой спонсирования полный.
Сроки
5–7 дней для интеграции через готового провайдера (Biconomy/ZeroDev) с серверной логикой UserOperation. 2–3 недели для собственного Paymaster с кастомными правилами спонсирования и мониторингом. Стоимость рассчитывается индивидуально после анализа требований.







