Реалізація 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 — ніяких приватних ключів на мобільному пристрої.
Обмеження та захист від зловживань
Спонсирування газу — це гроші. Без обмежень botnet опустошить баланс Paymaster за години. Необхідні заходи:
Rate limiting. Максимум N gasless-транзакцій на день на користувача. На рівні Paymaster контракту — перевірка через маппинг lastTxTime[sender] з мінімальним інтервалом.
Whitelist дій. 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 з кастомними правилами спонсирування та моніторингом. Вартість розраховується індивідуально після аналізу вимог.







