SIP: Standard for Gasless Transactions (Fee Delegation)

SIP: Standard for Gasless Transactions (Fee Delegation)

Simple Summary

Enable gasless transactions on Solana via a standardized meta-transaction protocol. This proposal introduces a common method for users to pay transaction fees with SPL tokens (or have them sponsored) instead of SOL, by leveraging Solana’s existing fee payer field and atomic transaction capabilities. It defines a unified architecture – including transaction format, a relayer network API, and wallet/dApp integration guidelines – to eliminate the “must have SOL” onboarding hurdle while preserving Solana’s security and low-fee advantages.

Abstract

We propose a Standards Track (SRC) Solana Improvement Proposal to standardize fee delegation (a.k.a. gasless transactions) across the ecosystem. The core idea is that a user can sign a transaction that performs their intended action plus an additional fee payment in a token they already hold (e.g. USDC), and a third-party relayer will co-sign as the fee payer (paying the SOL fee) in exchange for that token fee, all in one atomic transaction. We outline a standard transaction format (with a fee-paying SPL token instruction), a common Relayer API for discovering and using relayer services, and modifications for wallets and dApps to seamlessly support this flow. This standard builds on existing practices (Octane, Kora, Gas Station API, etc.) but seeks to unify them, providing a consistent “meta-transaction” mechanism so that new users can use Solana dApps without first acquiring SOL. Validators still receive fees in SOL (paid by relayers), but users and developers gain flexibility in how fees are provided, improving UX without requiring any consensus changes.

Motivation

Despite Solana’s very low base fees, requiring SOL in a wallet to cover fees is a significant UX hurdle for newcomers. New users face a “chicken or egg” problem: they receive tokens (e.g. USDC airdrop or NFT) but cannot do anything without first obtaining SOL for fees. As one user lamented: “I transferred all I had into USDC and now trying to swap… it is asking for a SOL fee :frowning: … Why do I need SOL in my wallet to swap USDC to SOL?!”

Solana’s protocol supports fee delegation: every transaction has a feePayer field. Some projects have implemented “gasless” services: Octane, Kora, Phantom’s mobile app gasless swaps, Circle’s Gas Station API. However, these solutions remain fragmented and non-standard. Each dApp wanting a SOL-free experience often integrates a proprietary relayer or builds their own. Octane was pioneering but not maintained and required custom integration.

This SIP aims to solve that by codifying a unified meta-transaction standard, so any Solana dApp or wallet can support gasless transactions out-of-the-box, using a common set of protocols and interfaces.

Use Cases

  • Basic Token Transfers Without SOL: Alice wants to send Bob USDC but has zero SOL. With a relayer, Alice signs a transaction to pay Bob in USDC and include a tiny USDC fee to a relayer.
  • Swaps and DeFi Operations: Users hitting “no SOL, no swap” issues could swap from USDC→SOL including a USDC fee to a relayer, enabling the trade even with empty SOL balance.
  • NFT Mints and Airdrops: Users receiving NFTs with no SOL cannot list or transfer them. Fee sponsorship allows NFT platforms to enable listings by accepting SPL token fees.
  • Smart Contract Wallets & PDAs: Programmatic wallets or PDAs that cannot hold SOL or sign transactions require external fee payers. Standard relayer services can facilitate these transactions.
  • Embedded and Mobile Wallets: In-game or embedded app wallets want completely abstracted gas. A standardized relayer API allows easy integration.
  • Onboarding New Users: User installs a wallet or opens a web app and is granted starter tokens. Using gasless transactions, the app gives them a feeless first action, removing the confusing step of acquiring SOL.

Specification

The proposed standard has three main components: (1) Transaction Format, (2) Relayer Service & API, and (3) Wallet/dApp Integration.

1. Transaction Format (Meta-Transaction Structure)

A gasless meta-transaction on Solana includes:

Fee-Payer Field: The transaction’s feePayer is set to the relayer’s public key (not the user’s). This signals the relayer will cover the fee.

Fee Payment Instruction: The transaction includes an instruction transferring SPL token from user to relayer as payment. Typically the last instruction so it only executes if all prior instructions succeed. For example, swapping 100 USDC for SOL might include an extra instruction transferring 0.05 USDC to the relayer.

Partial Signing: The user signs first, but because the feePayer is someone else, the transaction isn’t valid for submission yet. The partially signed transaction is serialized (e.g. to base64) and sent to the relayer service off-chain.

Relayer Co-signing: The relayer receives the transaction, validates it, and if it meets criteria, signs with its fee payer key and submits the fully signed transaction to the network.

Below is a conceptual diagram of this transaction flow, as pioneered by Octane and similar services:

User constructs transaction with desired action and token fee payment to relayer → User signs → Sends to relayer → Relayer verifies and signs as fee payer → Broadcasts → Token fee atomically transferred to relayer upon success.

Fee Calculation approaches:

  • Fixed Fee: Flat rate in token (e.g. 0.01 USDC per transaction)
  • Dynamic Conversion: Use oracle price feed to convert SOL fee into equivalent token amount
  • Percentage of Transaction: Charge percentage of output (e.g. Phantom’s 0.65% premium)

The standard requires fee be explicitly included as on-chain instruction for atomicity. If fee transfer fails, transaction fails and relayer doesn’t pay SOL.

FeePool Program (Optional): A canonical on-chain Gas Fee Pool program could standardize the fee payment instruction. Instead of direct transfers, transaction calls an instruction on this program, e.g. PayWithToken {fee_token_mint, fee_amount, relayer_address}. The program would transfer from user to relayer with on-chain checks (price oracle verification, minimum fee requirements). This is optional; relayers may accept direct token transfers.

2. Relayer Service and API

Relayer Network: Independent relayer services compete to sponsor transactions in exchange for fees. Each relayer differentiates by supported tokens, pricing, features, security policies, and performance.

Common Relayer RPC API (HTTP/JSON):

  • getSupportedTokens – Returns list of SPL token mints the relayer accepts for fee payment
  • feeEstimate – Takes proposed transaction and chosen fee token, returns required token amount
  • transactionPrepare – Takes unsigned/partially signed transaction, returns it with fee payment instruction added
  • transactionSign – Takes fully prepared transaction and signs with relayer’s fee payer key without broadcasting
  • transactionSignAndSend – Main endpoint: takes partially signed transaction, validates, signs as fee payer, and broadcasts to network
  • transactionSend – Broadcasts fully signed transaction to network

Relayer Validation & Policies:

  • Correct Fee Payment: Ensure transaction contains fee payment instruction to relayer’s account with sufficient amount
  • No Malicious Instructions: Inspect all instructions to ensure relayer’s fee payer account isn’t misused. Reject transactions where fee payer is included as normal account in an instruction
  • Simulation/Validity: Simulate transaction before signing to ensure it will succeed
  • Price Check: Validate via oracle that token amount meets required SOL value
  • Expiration: Enforce transactions only accepted within certain time or block height window
  • Rate Limiting & Spam Control: Impose limits per user to prevent spamming
  • Logging and Monitoring: Maintain logs and metrics for reliability

Discovery of Relayers: List of known conformant relayers published (on website, GitHub, or on-chain registry). Future marketplace where relayers compete on fees.

3. Wallet and dApp Integration

Wallet Support: Wallets should recognize gasless transactions with alternate fee payer and handle gracefully. Display “Fee paid by third party” in UI. Implement features like “auto-gasless for low SOL balances” by automatically invoking relayers.

dApp Developer Usage:

  • Rely on user’s wallet to handle fee delegation, or
  • Directly integrate with relayer API

Common integration pattern:

  1. Backend creates transaction, sets relayer as fee payer, adds fee payment instruction, partial signs
  2. Sends to user’s wallet for signing
  3. Wallet signs with user’s key
  4. Fully signed transaction broadcast to network

Standards for User Prompting: Wallets should display transparently: “Network Fee: 0 SOL (Paid by relayer, costing you 0.05 USDC)”. Consistency reduces confusion.

Security & Permissions: If wallet automatically uses relayers, user should trust their wallet. Possible setting: “Allow third-party relayers to pay fees when I have insufficient SOL”.

Fallbacks: Handle relayer failures gracefully. If relayer returns error, inform user to try different token or acquire small SOL amount.

Rationale

Do Nothing / Status Quo: Low fees aren’t enough. Real-world user feedback shows small hurdles have outsized negative impact on growth. Multiple one-off solutions (Octane, Gas Station) evidence the problem is significant.

Protocol Change: Not necessary. Solana’s flexible runtime and atomic transactions with alternate fee payer already provide needed flexibility. Standardizing at ecosystem level (off-chain and program layer) avoids complexity and risks of core changes. Validators continue receiving SOL fees.

Single Relay Network vs Multiple Relayers: Single network would be centralized chokepoint. Permissionless marketplace of relayers fosters competition and avoids centralization. Standard API ensures switching is easy.

Choosing Best Existing Approach:

  • Octane demonstrated viability but wasn’t production-hardened
  • Kora is robust, uses Rust, provides JSON-RPC API, TypeScript SDK, strong validation (price oracles, allowlists), enterprise-grade (HSM support, monitoring, configurable policies)
  • Gas Station provides fee-sponsoring but not open standard
  • Phantom’s gasless swap is closed implementation

Our approach takes best elements: Octane’s simplicity, Kora’s rigor and polish, wallet integration usability focus. Off-chain relayer + on-chain token payment model requires no protocol change, proven in wild, maximizes flexibility.

Oracle vs Fixed Fee: Allow but not require on-chain oracles (optional FeePool program). Mandating on-chain price check adds overhead and failure point. Many relayers handle pricing off-chain with buffer. Competition keeps fees reasonable.

Backward Compatibility

No changes to core protocol or runtime required. All features use existing transaction format and programs (SPL Token) or new programs at application level.

Existing wallets/dApps that don’t implement this standard continue functioning with no impact. Transactions following this standard remain valid Solana transactions.

FeePool program (if introduced) is new on-chain program deployment, doesn’t affect existing programs or accounts.

Partial sign transactions are already standard practice (QR codes, multisig workflows). Non-upgraded wallets might not auto-assist, but developers can handle via SDKs.

Client SDKs (Web3.js, Anchor) can already construct transactions with custom fee payers. Documentation will be provided.

Test Cases

1. Basic Token Transfer (User with 0 SOL):

  • Without SIP: Alice’s transfer fails due to no SOL for fee
  • With SIP: Wallet constructs transaction with feePayer = relayer, instructions: [Transfer 5 USDC Alice→Bob, Transfer 0.02 USDC Alice→Relayer]. Alice signs, wallet sends to relayer API, relayer signs and broadcasts. Bob gets 5 USDC, relayer gets 0.02 USDC.

2. Token Swap via dApp:

  • dApp calls relayer feeEstimate, quotes 0.03 USDC fee
  • Constructs transaction: feePayer = relayer, instructions: [USDC→SOL swap, Transfer 0.03 USDC Carol→Relayer]
  • Carol signs, dApp sends to relayer, relayer verifies, signs, broadcasts
  • Carol receives SOL, relayer gets 0.03 USDC

3. Smart Contract Wallet: App sets up relayer as fee payer for PDA transaction. PDA transfers token to relayer via FeePool instruction, relayer covers SOL fee.

4. Insufficient Token Fee: Eve’s token fee is below minimum value. Relayer simulation catches insufficient fee, responds with error or new quote. Eve’s wallet informs of updated requirement.

Implementation

Reference implementation: Kora (Solana Foundation open-source) aligns with many aspects of proposal. Provides RPC API, core engine with validation, SDKs for integration.

Steps needed:

  1. Finalize SIP and Community Consensus
  2. Publish Standard Specification v1.0 (formal document with API schema)
  3. Implement FeePool On-Chain Program (optional)
  4. Encourage Relayer Implementations (multiple implementations of standard API)
  5. Wallet Integration (work with Phantom, Solflare, Glow, etc.)
  6. dApp Developer Tools (examples, wrappers, documentation)
  7. Deployment and Testing on Testnet/Devnet
  8. Mainnet Rollout (Foundation-run relayer to bootstrap, wallets push updates)
  9. Monitoring and Iteration (collect metrics, feedback channels)
  10. Ecosystem Growth (specialized relayers, MEV integration, etc.)

Kora expected to be released around late 2025, boasting secure validation, rate limiting, monitoring built-in.

Security Considerations

Relayer SOL Theft: Standard requires relayers validate transaction and reject any attempting to misuse fee payer’s signature. Strictly disallow fee payer key being signer for any instruction other than paying fee.

Fee Token Valuation Risks: Relayers restrict supported tokens to those with sufficient liquidity and reliable value. Price conservatively, use real-time oracles, offload accumulated fee tokens periodically.

DoS and Spam: Authentication (API keys), rate limiting, transaction fees for frequent users, robust infrastructure, fallback to multiple relayers.

Double Signing/Replay: User submitting same transaction to multiple relayers is mitigated by each requiring their own fee account. Relayers use unique identifiers, quickly broadcast. Blockhash expiration limits replay window.

User Scams/Phishing: Wallet UI should highlight “You will pay X tokens as fee to Y (relayer)”. Users should be wary of unusually high token fees.

Relayer Trust: Users trust relayer to broadcast transaction honestly and not front-run. Use reputable relayers, open-sourced and audited code. Dishonest relayers lose business quickly.

FeePool Program Security: If used, must verify token transfer is authorized, handle edge cases, use trusted oracle feed with fallback, ensure atomicity. Open source and audited.

Compliance: Operators should be mindful of local laws regarding running relayer services.

Security model: User trusts relayer only to perform service honestly, not with assets. Relayer trusts that following standard checks prevents money loss. Blockchain security unchanged.

Conclusion

This proposal addresses a key UX pain point by establishing unified framework for gasless transactions. Allows users to pay fees in tokens they hold (or have fees sponsored entirely), removing significant barrier to entry while leveraging Solana’s strengths.

Benefits:

  • Improved User Acquisition and Retention: New users start using dApps immediately
  • Developer Ease and Interoperability: Well-defined standard instead of hacking together relayers
  • Ecosystem Collaboration: Standardized relayer network encourages businesses to provide services
  • Flexibility for Future Innovation: Base for sophisticated fee models (decentralized marketplaces, MEV integration)

Next steps: formalize API and integration details, implement supporting program, coordinate adoption. Given enthusiasm around Kora and sRFC-34 discussions, timing is ideal.

Let’s make “Please ensure you have at least 0.005 SOL in your wallet to cover fees” a thing of the past, and welcome truly user-friendly blockchain applications on Solana :slight_smile:

1 Like

Hey, this looks very promising. Is this conceptually similar to Ethereum’s Gas Station Network, but for Solana?

Hello, @emmanuil !

Yes, this proposal is conceptually similar to Ethereum’s Gas Station Network (GSN) — but adapted specifically for Solana’s architecture.

Both approaches aim to let users perform transactions without needing the native token (SOL or ETH) by allowing a third-party relayer to pay the network fee on their behalf. The user signs a transaction, and the relayer co-signs and pays the SOL fee, receiving compensation in an SPL token (like USDC). So in principle, the concept is very much the same as GSN.

However, the implementation on Solana differs significantly. Solana natively supports fee delegation via the feePayer field and atomic transactions with multiple instructions. This allows a single transaction to both perform the desired action (e.g., a token swap) and pay the relayer in SPL tokens — all atomically. In Ethereum, this usually requires special proxy contracts, GSN hooks, and modifications to the smart contract logic itself.

Additionally, this standard does not require changes to existing on-chain programs — only to how transactions are constructed and signed. That means dApps can support gasless UX without needing to rewrite contract logic.

So yes — it is conceptually equivalent to GSN, but it leverages Solana’s unique capabilities to offer a simpler, more flexible, and user-friendly implementation.

Agree with @emmanuil. Though with the same approach, if wallets auto-select relayers, they essentially control who gets the traffic and fee revenue. Should there be an open marketplace of relayers, or another way of consent when choosing?

Hey, @Nikita_Keyn !

Yes — wallets auto-selecting relayers could create centralization pressure and introduce trust bottlenecks. You are absolutely right.

One option is to introduce a relayer registry or marketplace — either off-chain (GitHub list, website API) or on-chain (via a simple program listing relayer endpoints and metadata). Wallets could then query this registry and either:

  • Present the user with options, showing available relayers, token pricing, success rates, etc., or
  • Select based on transparent criteria, like best price, token support, or reliability — but with the ability for users to override or set preferences.

Another layer could be user consent prompts, especially when using a relayer for the first time or switching to a new one — similar to how wallets prompt for network or RPC provider changes.

The balance is between UX simplicity and user agency. If this standard succeeds, healthy competition between relayers should emerge — but only if wallet behavior allows for openness and avoids vendor lock-in. Btw, this is a great discussion point for the ecosystem :slight_smile:

Strong +1 for standardization here. The problem in Web3 is often not the lack of solutions, but fragmentation: we already have working approaches, yet every dApp ends up integrating a proprietary flow.

I really like the direction of a common transaction format + a shared relayer API + wallet/dApp UX guidelines. It reduces integration tax, encourages reusable tooling, and makes security reviews/audits easier across the ecosystem.

Looking forward to a tight v1 spec.

1 Like

Great proposal. One of the biggest friction points for new users of needing SOL to buy tokens but needing tokens to get SOL. This standard solves that perfectly. My question is: how will this interact with existing wallets like Phantom or Solflare? Will they need to implement a new signing flow to handle transactions where the ‘Fee Payer’ field is pre-filled by a third-party service, or is the current VersionedTransaction structure already sufficient to handle this seamlessly?

Nice proposal — making Solana usable without needing SOL up-front would be a huge UX improvement for new users. Quick question: has there been any thought about how wallets should show this to users? E.g. will it clearly say “fee paid in USDC via relayer” so beginners aren’t confused why they paid something on a “free” chain?

This standard relies on relayers — which makes sense — but are there thoughts on how users can trust relayers? Would there be a registry or reputation system so wallets don’t accidentally send users to sketchy relayers?

Solana really lacks a unified standard for gas-less use cases. Although it’s much easier to implement project-sponsored gas-less transactions (because everything is native, no abstraction needed like in Ethereum) so I would not consider that case.

Also, speaking about implementation, it’s 100% requires durable nonces because standard transactions’ life/validity is about ~1–2 min. Also VersionedTransaction, etc. This is something that must be covered by the standard to simplify things

Regarding the relayer network, I love this idea when I imagine adoption by wallets like Phantom. (Keep in mind, it’s separate from the gas-less transactions idea, because most of the time protocols cover fees with their tools and only for specific txs.)

But one possible way to implement this using what Solana allows is that you can
FIRSTLY, send an unsigned tx to the relayer. And then:

A) Either the relayer reviews the tx and answers what payment it accepts, so you send the final signed tx batch with 1 tx appended for proper payment at the beginning. And the relayer signs + executes it.

B) OR you just receive a signed tx batch that includes your txs + 1 payment at the beginning/end. Signed by the fee payer, and ready to be signed and sent by you. This one I see as the best way.

It’s all possible thanks to native atomic batches, native separated fee payer, durable nonces, etc.

1 Like

Regarding the implementation: how do we ensure the atomicity of the ‘fee reimbursement’ if the sponsor wants to be paid back in SPL tokens (like USDC) within the same transaction? Does this SIP recommend a specific instruction ordering to ensure the sponsor doesn’t get griefed by a failing main instruction?

Standardizing fee delegation is a massive step forward. Right now, every project (like Octane or various relayers) uses their own custom implementation. Having a single SIP-compliant way to handle gasless transactions will make the entire ecosystem much more interoperable and easier for new devs to jump in

1 Like

Hi, @os_creator !

Thanks for raising this — it’s a crucial question when it comes to adoption.

The good news is that Solana’s current transaction model already supports fee delegation technically. The feePayer field in a VersionedTransaction can be any valid public key, and wallets don’t need to be the fee payer to sign and submit a transaction. In fact, partial signing flows (used in multisig or cold wallets) already involve similar patterns — a wallet signs a subset of required signatures and passes the transaction along.

That said, practical integration in existing wallets like Phantom or Solflare will still require UX and logic updates. Most current wallet UIs assume the user is paying the fee in SOL and don’t natively support flows like:

  1. Recognizing a fee payer that isn’t the user
  2. Displaying token-based fee payments
  3. Automatically sending a partially signed transaction to a relayer

So while no protocol change is needed, wallets will need to adopt new handling logic to:

  • Show the user that a third party will be covering SOL fees
  • Optionally display token fees (e.g. “You’re paying 0.03 USDC to Relayer X”)
  • Facilitate signing transactions with external fee payers
  • Interface with relayer APIs (optionally) to handle submission

The standard is designed to fit within existing Solana constructs — no exotic encoding or new syscalls — so implementation is a matter of wallet-side support rather than new protocol features. Early prototypes (like Phantom’s mobile swap relayer and Kora) have shown this is quite feasible.

In short: VersionedTransaction is sufficient, but wallet UX and flow updates will be key to making this feel “native” and intuitive to end users. Collaboration with wallet teams will be a major next step once the spec stabilizes.

Hi, @armyhaylenko !

Absolutely — that’s a very important consideration, and we’re glad you brought it up.

The goal is not to hide that a fee exists — but rather to shift it into a more accessible and flexible form, while keeping the user in control and informed. Wallets will play a key role here. The proposal encourages wallet interfaces to clearly surface relayer involvement and show the fee breakdown in plain terms — for example:

“Network Fee: Paid by Relayer X
Relayer Service Fee: 0.025 USDC”

This kind of display ensures that users understand what’s happening: someone else is covering the SOL cost, but they are paying a small token fee in return. Ideally, wallets would even provide more context for beginners, such as:

“You don’t need SOL for this transaction. A relayer is paying your network fee and charging you a small fee in USDC instead.”

That said, the standard doesn’t enforce one specific UI — it lays out guidelines and best practices, and leaves room for wallets to experiment with different levels of abstraction depending on their user base.

The key is finding a balance between simplicity and transparency. For crypto-native users, explicit relayer and fee info builds trust. For newcomers, minimizing friction might mean fewer prompts — but still with clear post-action confirmation of what happened. Some wallets might offer both, with a toggle for “advanced fee info” or similar.

Hi, @Oleksandr_Mihalatii !

Great question! The proposal tries to balance the need for usability and permissionless participation with enough guardrails to avoid misuse or user confusion.

At a technical level, users remain in control of their assets throughout the process. The relayer never holds custody or gets access to user funds — it only co-signs a transaction that the user has already partially signed. If the relayer tries to modify the transaction, such as injecting a malicious instruction or altering destinations, the user’s signature becomes invalid. This means relayers are cryptographically constrained from acting dishonestly within the protocol’s boundaries.

Still, trust at the UX layer matters. The SIP recommends that wallets and dApps do not hardcode relayers, but instead allow for some form of open relayer discovery. That might mean maintaining a registry of known relayers with metadata such as accepted tokens, fee rates, uptime, or audit status — either off-chain (like a GitHub list or public JSON) or possibly on-chain via a simple program. This way, wallets can display who the relayer is, what they charge, and possibly let users select or approve them during the flow.

There’s also the potential for a lightweight reputation system to emerge over time. Wallets could track metrics like successful transaction rates, failed relays, or unusual pricing behavior, and either expose that to users or use it to filter out low-quality relayers. Think of it as a “soft trust layer” on top of a permissionless base — similar to how RPC providers or validator reputations are surfaced today.

The wallet experience is critical here. A well-designed wallet should clearly show when a relayer is being used, what token is being paid, and to whom — something like “Fee paid via RelayerX: 0.03 USDC” — so that even if users don’t fully understand what a relayer is, they see who is involved in the transaction. Some wallets might auto-select relayers for convenience, but giving users the option to override or inspect those choices would add transparency without friction.

Hey, @Nazar_Havryliuk !

Thanks for the constructive feedback! From my perspective, the need for durable nonces is a really great point. This definitely should be specified in the proposal.

On the two relayer interaction models you mentioned — both are valid, and the standard should probably accommodate both. Would love your thoughts on whether the standard should explicitly define both flows — A and B — as acceptable patterns, or recommend one over the other for consistency. Also, is there a reason you lean toward appending the payment instruction at the beginning rather than the end? Most existing flows prefer the fee to be the final instruction for atomicity — if any prior instruction fails, the payment is skipped. Curious if you’ve seen architectural or security edge cases in the reverse.

Let’s keep pushing on this — feels like Solana has all the pieces, but a standard like this could finally tie them together in a way that benefits the entire ecosystem.

Hi, @DenD !

Great question — and yes, the SIP addresses this directly. Solana’s atomic transaction model ensures that all instructions succeed together or fail together, so to protect relayers, the standard recommends placing the SPL token reimbursement instruction at the end of the transaction.

That way, if any earlier instruction (like a token swap) fails, the entire transaction, including the fee payment, is rolled back. The relayer only pays the SOL fee if everything goes through and they receive the token fee in return. No special protocol changes are needed — just clear instruction ordering and simulation before signing.