⚡ Tóm tắt — Đọc trong 60 giây
Paymaster: Contract trả gas thay cho user
Paymaster là smart contract trong ERC-4337 ecosystem, cho phép một bên thứ ba (dApp, protocol, hoặc service) trả gas fee thay cho user, hoặc nhận token ERC-20 từ user và convert sang gas. User có thể giao dịch không cần giữ ETH trong ví.
Hai loại chính: Verifying Paymaster (dApp ký off-chain approval, Paymaster verify signature và sponsor gas — miễn phí cho user) và ERC-20 Paymaster (user trả USDC/DAI thay vì ETH). Paymaster phải stake ETH vào EntryPoint trước để đảm bảo không DoS.
Sponsor
dApp trả gas
Miễn phí cho user
ERC-20
Gas = USDC
Không cần ETH
Staking
EntryPoint stake
Chống DoS
Providers
Biconomy, Pimlico
Alchemy, Stackup
Để gửi bất kỳ transaction nào trên Ethereum, user cần ETH để trả gas — kể cả khi chỉ muốn transfer USDC. Đây là vấn đề lớn cho onboarding: new user vừa nhận USDC không thể làm gì nếu không có ETH để trả gas. dApp phải yêu cầu user mua ETH trước — friction cực cao.
Các blockchain khác (Solana, NEAR) xử lý tốt hơn: user thường không phải nghĩ về gas. Ethereum cần mechanism tương tự để cạnh tranh về UX. Paymaster trong ERC-4337 là giải pháp: tách biệt người dùng transaction và người trả gas fee.
Trong ERC-4337, mỗi UserOperation có field paymasterAndData. Nếu field này không rỗng, EntryPoint sẽ gọi Paymaster contract để kiểm tra liệu Paymaster có chịu trả gas cho UserOp này không. Nếu Paymaster approve, gas sẽ được lấy từ Paymaster's deposit trong EntryPoint thay vì từ user's account.
Paymaster Flow trong ERC-4337
UserOp {paymasterAndData: 0xPaymaster...}
│
EntryPoint ──▶ Paymaster.validatePaymasterUserOp()
│ Paymaster kiểm tra điều kiện
│ return (context, validationData)
▼
EntryPoint executes UserOp
│ gas được lấy từ Paymaster.deposit trong EntryPoint
▼
Paymaster.postOp() ──▶ handle ERC-20 charge nếu cần
Verifying Paymaster là loại phổ biến nhất cho gas sponsorship: dApp backend ký một approval message off-chain (chứa UserOp hash + expiry + conditions), user đính kèm signature vào paymasterAndData. Khi Paymaster contract được gọi, nó verify signature — nếu hợp lệ, approve gas sponsorship.
Use Cases
- Onboarding free: Sponsor gas cho user mới đăng ký (first 5 transactions miễn phí)
- Loyalty/reward: Users có NFT membership được sponsor gas
- Specific actions: Chỉ sponsor khi user interact với protocol của bạn
- Campaign: Sponsor gas trong khoảng thời gian promotion
// Verifying Paymaster — Backend ký approval
const paymasterApproval = {
userOpHash: await bundler.getUserOpHash(userOp),
validUntil: Math.floor(Date.now() / 1000) + 300, // 5 min
validAfter: 0
}
// Backend signs với Paymaster signer key
const signature = await paymasterSigner.signTypedData(paymasterApproval)
// User đính kèm vào UserOp
userOp.paymasterAndData = concat([
PAYMASTER_ADDRESS,
encodeAbiParameters([validUntil, validAfter]),
signature
])
ERC-20 Paymaster cho phép user trả gas bằng bất kỳ token nào (USDC, DAI, WBTC, ...). Flow: Paymaster quote giá gas bằng token, user approve Paymaster chi token đó, Paymaster trả ETH gas cho EntryPoint, sau transaction Paymaster charge token từ user account.
Hai Bước Quan Trọng
validatePaymasterUserOp(): Paymaster check user có đủ token không, tính conversion rate (ETH/token), verify approval. Nếu OK, return context chứa amount sẽ charge.
postOp(): Sau khi UserOp execute xong, Paymaster call token.transferFrom(user, paymaster, chargedAmount). Amount thực tế có thể khác estimate vì gas used khác gas limit — Paymaster xử lý chênh lệch này.
⚠️
Slippage và Oracle Risk
ERC-20 Paymaster cần price oracle để convert ETH gas cost sang token amount. Nếu oracle stale hoặc bị manipulate, Paymaster có thể charge sai. Tốt nhất dùng Chainlink oracle với staleness check, và add buffer (ví dụ charge 110% estimate để buffer slippage).
Deposit Paymaster là cách quản lý ETH deposit trong EntryPoint. Paymaster phải deposit() ETH vào EntryPoint trước — đây là tiền sẽ dùng để trả gas. Khi deposit hết, Paymaster stop working cho đến khi deposit thêm.
| Model | Mô tả | Phù hợp |
| Pre-funded | dApp deposit sẵn ETH, sponsor tất cả users | Protocol muốn zero-friction onboarding |
| Per-user deposit | Mỗi user deposit ETH riêng, Paymaster manage | Custodial service quản lý gas |
| ERC-20 backed | User trả token, Paymaster convert sang ETH | User có USDC, không có ETH |
| Subscription | User trả subscription fee, get X gas/month | Gaming, high-frequency apps |
- Chọn Paymaster provider: Biconomy, Pimlico, Alchemy (gas manager), Stackup, ZeroDev
- Setup policy: Định nghĩa ai được sponsor (điều kiện), tối đa bao nhiêu, thời gian nào
- Get Paymaster signature: Call provider API với UserOp hash, nhận back paymasterAndData
- Attach vào UserOp: Set
userOp.paymasterAndData trước khi sign
- Submit: Bundler verify Paymaster có đủ deposit không, rồi bundle vào transaction
🚀
Alchemy Gas Manager API
Alchemy có Gas Manager — dashboard để set spending policies (per-user limit, function whitelist, time-based rules). API rất đơn giản: gọi alchemy_requestGasAndPaymasterAndData với UserOp, nhận về paymasterAndData ready để attach. Free tier có $10/month sponsored gas.
| Provider | Tính năng nổi bật | Chains | Giá |
| Biconomy | Verifying + ERC-20, Dashboard policies, SDK | 20+ chains | Free tier + usage |
| Pimlico | ERC-20 Paymaster mạnh, Alto bundler | 30+ chains | Pay per UserOp |
| Alchemy Gas Mgr | Policy rules, analytics, tight SDK integration | EVM major | $10/mo free tier |
| ZeroDev | Kernel AA + Paymaster, passkey support | 15+ chains | Subscription |
| Stackup | Open-source, self-hostable | EVM | Free OSS |
Paymaster phải stake ít nhất 0.1 ETH vào EntryPoint (unstake delay 24h) — đây là security deposit để chống DoS. EntryPoint theo dõi reputation: nếu Paymaster validate UserOp nhưng sau đó revert execution quá nhiều lần, reputation bị giảm và bundlers có thể không nhận UserOp từ Paymaster đó nữa.
Spending policy là điều kiện Paymaster contract check trước khi approve: per-user limit (không sponsor quá $1/user/ngày), whitelist functions (chỉ sponsor swap, không sponsor approve), time-based (chỉ sponsor trong giờ marketing campaign), NFT-gated (chỉ sponsor holder của NFT cụ thể).
Đọc thêm cơ chế bundler và alt mempool tại Bundler Là Gì.
Paymaster hoạt động thế nào về mặt bảo mật?+
Paymaster phải stake ETH vào EntryPoint (ít nhất 0.1 ETH). Khi validatePaymasterUserOp() approve một UserOp, stake đó có thể bị slash nếu Paymaster behave maliciously. EntryPoint có thể ban Paymaster nếu reputation score xuống thấp. Cơ chế này ngăn chặn DoS attacks từ malicious Paymasters.
Trả gas bằng USDC có cần approve trước không?+
Có — user cần approve Paymaster contract chi tiêu token. Tuy nhiên nhiều implementation dùng permit (EIP-2612) để combine approve và UserOp trong cùng một action — user ký permit signature off-chain, Paymaster call permit() trước khi charge. Biconomy và Pimlico hỗ trợ permit-based ERC-20 gas payment.
Làm sao dApp biết sponsor bao nhiêu gas?+
dApp estimate gas qua simulateHandleOp() trước khi ký. Bundler cũng estimate và verify. Paymaster set maxCost limit trong validatePaymasterUserOp(). Thực tế, gas sponsorship có budget cap: Paymaster set limit per-user (sponsor tối đa $1/user/ngày) hoặc per-action (chỉ sponsor specific function selectors). Biconomy và Alchemy đều có dashboard để set spending policies.
Paymaster có trên L2 không?+
Có — thực tế Paymaster phổ biến hơn trên L2 vì gas rẻ hơn nhiều. Trên Polygon, Optimism, Arbitrum, Base, zkSync — gas sponsorship chỉ tốn fraction of cent. Nhiều L2 còn có native AA: zkSync Era có built-in Paymaster support không cần ERC-4337. Base đang push mạnh gas sponsorship cho consumer apps.
Tài Liệu Tham Khảo
- EIP-4337 — Account Abstraction (Paymaster spec)
- Biconomy Paymaster Documentation
- Pimlico Paymaster Documentation
- BasePaymaster.sol — eth-infinitism
- TWT.VN — ERC-4337 Là Gì?
- TWT.VN — Bundler Là Gì?