A meta transaction is a transaction someone signs but doesn’t send. They hand that signed message to a relayer, who packages it into a real Ethereum transaction and pays the gas. ERC-2771 is the rulebook that keeps this handoff honest — it defines how a smart contract can trust an appended sender address instead of blindly trusting whoever happened to submit the call.
That’s the whole idea in one line: separate authorizing an action from paying for it. This guide walks through why that split matters, who actually uses it, the mechanics of a relayed call, and how ERC-2771 compares to newer options like ERC-4337 and EIP-7702.
What Does a Gasless Call Actually Involve?

“Gasless” is shorthand, not literal truth — gas still gets paid, just by someone other than the signer. In a normal transaction, one account signs, broadcasts, and pays in a single step. Meta transactions break that into two roles: a signer who authorizes, and a relayer who executes and covers the fee.
Meta transaction: a transaction whose signer is different from the account that broadcasts it and pays for it. The user signs a message off-chain describing what they want done; a relayer turns that message into an on-chain transaction. See EIP-2771 for the formal spec.
Nothing about the underlying contract call changes. What changes is who’s holding the wallet that ends up submitting the transaction and covering the fee.
| Standard transaction | Meta transaction | |
|---|---|---|
| Signs the request | User | User |
| Broadcasts it to the network | User’s wallet | Relayer |
| Pays gas | User | Relayer (often backed by a paymaster) |
| Native token needed to start | Yes | No |
Why Can’t a New Wallet Just Pay Its Own Way?
The friction isn’t really about cost. Ethereum’s mainnet gas price currently sits at roughly 0.177 gwei, according to Etherscan’s live tracker — a fraction of a cent for most transfers. The actual problem is that sending any transaction, including one that would buy you ETH, requires already holding ETH. A fresh wallet with a zero balance can’t take its first step.
Sachin Tomar, one of the eleven engineers who co-authored EIP-2771 and later built gas-sponsorship tooling at Biconomy, put it bluntly: “Having to hold ETH to interact with Dapps is a completely alien concept,” he wrote in a Biconomy engineering post. That’s the gap meta transactions close — not the price of gas, but the requirement to own a specific asset before doing anything at all.
That gap shows up in the numbers. One analysis of crypto onboarding funnels found that only 32% of new wallet users complete a transaction within their first week, against 76% for typical fintech apps, per a product case study on Web3 activation. Removing the “go buy ETH first” step is one of the few fixes a single dApp can make entirely on its own, without waiting on wallet providers or exchanges.
Who Actually Relies on This Pattern?
Meta transactions show up wherever a project wants a first-time user’s experience to feel like a normal app instead of a crypto wallet setup screen. A handful of use cases account for most of it:
- Consumer and gaming dApps that drop the “buy ETH before you can play” step from their sign-up flow.
- NFT platforms, where sponsoring the mint transaction removes gas as a reason someone abandons a claim — a close relative of lazy minting, which defers cost the same way for a single mint function.
- DAO and governance tools, where members sign a vote off-chain and the platform submits it on their behalf — Snapshot’s off-chain voting, used across dozens of DAOs, is the best-known example at the governance layer.
- Wallet and embedded-wallet SDKs, which cover a user’s first several transactions before asking them to fund a wallet directly.
How Does a Relayed Call Actually Reach the Chain?
Underneath different products, the sequence stays close to identical. Here’s what a typical ERC-2771 flow looks like end to end:
- The user signs an off-chain EIP-712 message describing the call they want made, along with a nonce so it can’t be replayed.
- That signed message goes to a relayer, usually over a plain API call rather than anything broadcast to the network.
- The relayer wraps the message in a real transaction and submits it on-chain, paying gas out of its own balance.
- A forwarder contract receives the transaction, checks the signature and nonce, and calls the target contract with the real signer’s address tacked onto the calldata.
- The target contract reads that appended address through an overridden function instead of the raw caller, so its logic behaves exactly as if the user had sent the transaction themselves.
Before any of this hits the chain, most relayers run a check that the call would actually succeed — the same kind of pre-broadcast simulation a wallet performs before you sign anything, just triggered by the relayer instead of you. There’s no reason to spend gas on a signed request that’s only going to revert.
What Makes the Forwarder Contract Trustworthy?
Forwarder contract: in ERC-2771 terms, a “trusted forwarder” — a contract a recipient explicitly agrees to trust. It verifies a signed request’s signature and nonce, then calls the recipient with the real signer’s address appended to the calldata, the mechanism EIP-2771 defines.
This piece is what makes the pattern safe instead of just convenient. The spec itself is direct about the failure mode: “a malicious forwarder may forge the value of _msgSender() and effectively send transactions from any address,” and it warns that “recipient contracts must be very careful in trusting forwarders.” That’s why a contract has to explicitly opt in to a specific forwarder rather than accepting whichever one happens to call it.
OpenZeppelin ships a production-ready version of this so teams don’t write forwarder logic from scratch. Its ERC2771Context and ERC2771Forwarder contracts handle the signature check and calldata rewriting, and a target contract opts in by implementing isTrustedForwarder() — the forwarder calls that function before it will relay anything to the contract.
What Problem Did the Standard Actually Fix?
ERC-2771, “Secure Protocol for Native Meta Transactions,” was proposed on July 1, 2020 by eleven authors, including Sachin Tomar, Alex Forshtat, and Ronan Sandford, and now carries Final status on Ethereum’s standards track. Final means the specification is considered stable and unlikely to change.
Before it existed, every project built its own version of sender-verification logic, so a forwarder built for one provider rarely worked with a contract built for another. The standard narrows the problem to one specific question — how a contract recognizes the real sender when a relayer sits in between — and answers it the same way for every implementation, which is what let OpenGSN, OpenZeppelin, and Biconomy’s tooling all interoperate instead of each shipping an incompatible variant.
Who Pays the Relayer, and Why?

A relayer needs a reason to keep fronting gas for other people’s transactions. That reason is usually a paymaster: logic — sometimes a server, sometimes a contract — that decides whether a given request is worth sponsoring.
| Role | What it does |
|---|---|
| User | Signs an off-chain request; never touches gas |
| Relayer | Wraps the request in a real transaction and pays gas |
| Forwarder contract | Checks the signature and nonce on-chain |
| Paymaster | Decides whether to sponsor — by whitelist, ERC-20 payment, or app-specific rules |
| Recipient contract | The dApp’s own contract, reading the real sender through _msgSender() |
OpenGSN, the most widely used open implementation of this pattern, has contract deployments across Ethereum, Polygon, Optimism, Arbitrum, Avalanche, BNB Smart Chain, and Gnosis Chain. A paymaster can reject spam, ask for extra verification, or charge a stablecoin instead of ETH — “gasless” for the end user doesn’t always mean free, just paid in a different token.
Running that relayer infrastructure is itself a node-access problem: reading the current nonce and gas price, broadcasting the signed transaction, watching for confirmation. That’s the same RPC layer any dApp backend depends on, and providers such as NOWNodes give access to it across 120-plus networks so a relayer service doesn’t have to run and sync its own node just to keep sponsoring calls.
How Does This Compare to Account Abstraction?
ERC-2771 isn’t the only way to take gas out of a user’s hands, and it’s worth knowing when it stops being the right tool. ERC-4337, Ethereum’s account abstraction standard, solves an overlapping problem differently — instead of a forwarder relaying calls to an unmodified contract, it replaces the user’s wallet itself with a smart contract account.
| Factor | ERC-2771 (meta transactions) | ERC-4337 / EIP-7702 |
|---|---|---|
| Target contract changes | Must inherit a forwarder-aware base like ERC2771Context | None — the contract stays untouched |
| Wallet type | Any regular wallet (EOA) | A smart contract account, or an EOA with attached code |
| Who checks the request | The forwarder contract | The wallet’s own validation logic, checked by a bundler |
| Sponsorship logic | Off-chain, inside relayer/paymaster code | On-chain, inside a paymaster contract |
| Best fit | One dApp sponsoring its own contracts | Broader wallet features — batching, session keys, flexible sponsorship |
Neither replaces the other cleanly. ERC-2771 is quicker to bolt onto a single existing contract: inherit a base contract, point it at a forwarder, done. ERC-4337 asks for more setup — a smart contract wallet plus bundler infrastructure — but never touches the target contract at all, since its sponsorship logic lives at the wallet layer instead.
A newer piece of the roadmap blurs that line further. EIP-7702, live since Ethereum’s Pectra upgrade on May 7, 2025, lets a regular wallet temporarily attach smart-contract code and pick up features like sponsored transactions and batching without switching wallets. It typically still needs a bundler to relay anything, so the who-pays-who-verifies question doesn’t go away — it just moves to a different standard.
What Can Go Wrong When You Rely on a Relayer?
The whole pattern rests on one assumption: the forwarder contract is actually trustworthy. A forwarder with a bug — or one a project doesn’t fully control — lets an attacker forge the appended sender address and act as anyone, which is exactly why it’s worth a proper security audit before real funds depend on it.
Liveness is a separate concern. A signed meta transaction still needs a relayer willing to submit it; if that relayer or its paymaster runs dry or goes offline, the message sits unprocessed until another one picks it up. A plain, self-broadcast transaction doesn’t carry that dependency.
Nothing here shortens what happens on-chain, either. The call still has to succeed once it lands, gas still gets paid by someone, and a paymaster needs rules solid enough that it doesn’t get drained by spam dressed up as legitimate requests.
Conclusion
A meta transaction is a signature without a broadcast: the user authorizes an action, and a relayer turns that authorization into a real, paid-for transaction. ERC-2771 is what makes the handoff safe, giving contracts a standard way to trust an appended sender address instead of every provider inventing its own version of that check.
Which tool fits depends on the project. A single dApp sponsoring gas for its own contracts can add ERC-2771 support with a few lines of inherited code; a team building broader wallet infrastructure is more likely to land on ERC-4337 or EIP-7702 instead. Either way, the goal is the one Sachin Tomar described before the space collected this many acronyms: nobody should have to solve a token-acquisition puzzle before they can use an application.
FAQ
Does “Gasless” Mean the Transaction Is Free?
Not necessarily. It usually means the user isn’t paying in the network’s native token, but a paymaster still has to cover the cost somehow — sometimes by charging a stablecoin or an app-specific token instead.
Do I Have to Trust the Relayer With My Private Key?
No. A relayer only ever receives a signed message authorizing one specific action; it never gets your private key and can’t sign anything else on your behalf. The trust decision that matters sits with the forwarder contract’s logic, not with the relayer’s custody.
Does This Standard Work on Chains Other Than Ethereum?
Yes. It’s an application-level standard rather than a change to Ethereum’s core protocol, so any EVM-compatible chain — Polygon, BNB Smart Chain, Arbitrum, and others — can run the same forwarder pattern.
Is This Still the Right Standard to Use in 2026?
For a single dApp sponsoring gas on its own contracts, yes — it’s simple to add and has years of production use behind it. Teams building broader smart-account infrastructure increasingly reach for ERC-4337 or EIP-7702 instead, since neither one requires modifying every contract a user might touch.
What’s the Difference Between a Meta Transaction and a Sponsored Transaction?
They usually describe the same outcome from different angles. “Meta transaction” refers to the ERC-2771 mechanism itself, while “sponsored” or “gasless transaction” describes the user-facing result — and that result can also come from ERC-4337 paymasters, which don’t use meta transactions at all.



