Abstract
Gas Waiver enables gasless end-user transactions on Stable by allowing a small set of governance-approved addresses (“waivers”) to submit transactions withgasPrice = 0. Stable currently operates a waiver service (the “Waiver Server”) that partners can integrate with to provide gasless UX without implementing protocol-specific wrapper logic.
This document specifies the Gas Waiver mechanism, transaction formats, governance controls, and the Waiver Server API for partners.
Scope
This specification covers:- Protocol-level rules for gas-waived transactions
- The wrapper transaction mechanism and marker address
- Governance-controlled authorization and allowed targets
- The Waiver Server interface for submitting signed user transactions
Definitions
- Waiver: An Ethereum address registered on-chain via validator governance that is authorized to submit gas-waived transactions.
- InnerTx: The end user’s signed transaction with
gasPrice = 0. - WrapperTx: A transaction signed by a waiver that transports the user’s
InnerTxto the chain and authorizes execution. - Marker address: A sentinel address used to identify waiver wrapper transactions:
0x000000000000000000000000000000000000f333. - AllowedTarget: A policy that limits a waiver to specific contract addresses and method selectors.
Overview
Gas Waiver uses a wrapper transaction pattern:- The user signs an
InnerTxwithgasPrice = 0. - A waiver wraps the
InnerTxinto aWrapperTxand broadcasts it. - Validators detect marker transactions, verify the waiver authorization and policy constraints, then execute the embedded
InnerTx.
InnerTx payloads.
Protocol specification
Marker address routing
A transaction is treated as a waiver wrapper transaction if and only if:to == 0x000000000000000000000000000000000000f333.
data field as an encoded inner transaction payload and processes it using the waiver verification rules below.
Authorization and policy checks
For each candidate wrapper transaction, validators must enforce:- Waiver authorization
WrapperTx.frommust be a waiver address registered on-chain via governance.
- Gas waiver
WrapperTx.gasPricemust equal0.InnerTx.gasPricemust equal0.
- Target allowlist
InnerTx.toand the method selector extracted fromInnerTx.datamust be permitted by the waiver’sAllowedTargetpolicy.
- Value restrictions
WrapperTx.valuemust equal0.
Execution semantics
If all checks pass:- The protocol executes
InnerTxas the user, preserving the user’sfrom,nonce, and call semantics. - Gas accounting is handled by the waiver mechanism: the user pays no gas, and the waiver transaction uses
gasPrice = 0by definition of the feature. - The wrapper transaction must supply sufficient
gasLimitto cover the execution ofInnerTx(including overhead for unwrap and verification).
Transaction formats
WrapperTx
The wrapper transaction is signed by the waiver and sent to the marker address.InnerTx
The inner transaction is signed by the end user.Governance-controlled access
Waiver authorization is governed on-chain by validator governance. Governance control provides:- Reviewable authorization of waiver addresses
- On-chain transparency of waiver registration and updates
- Revocation capability
- Per-waiver scoping via
AllowedTarget
Security model
End-user signature integrity
The user signs theInnerTx. The waiver is not permitted to modify the inner transaction payload without invalidating the signature. Partners must still ensure that the user signs only the intended transaction payload.
Trust boundary
Gas Waiver introduces a service dependency if partners route submissions through the Waiver Server:- Availability of the service affects the ability to submit gasless transactions.
- Authorization remains on-chain; only registered waiver addresses can produce valid wrapper submissions.
Partner integration
Partners integrate by:- Collecting a signed
InnerTxfrom the user (gasPrice = 0). - Submitting the signed inner transaction to the Waiver Server API.
- Handling streamed results and surfacing transaction hashes to end users.
Waiver Server
Overview
The Waiver Server wraps and broadcasts signed userInnerTx payloads as waiver-authorized wrapper transactions. Partners do not need to construct wrapper transactions or operate a waiver address.
Endpoints and base URLs
Base URLs:- Mainnet: TBD
- Testnet:
https://waiver.testnet.stable.xyz
Authentication
All endpoints except health require bearer token authentication:API
GET /v1/health
Health check endpoint.
Authentication: none.
POST /v1/submit
Submit a batch of signed inner transactions.
Authentication: required (Bearer).
Request body:
GET /v1/submit
WebSocket interface for streaming submissions.
Authentication: required (Bearer).
Integration example
Creating a user InnerTx
Partners are responsible for constructing anInnerTx with gasPrice = 0, then collecting the user signature.
Example:
Error codes
PARSE_ERROR: Failed to parse transactionINVALID_REQUEST: Malformed request bodyBATCH_SIZE_EXCEEDED: Batch size exceeds allowed maximumVALIDATION_FAILED: Transaction validation failedBROADCAST_FAILED: Failed to broadcast to chainRATE_LIMITED: Rate limit exceededQUEUE_FULL: Server queue at capacityTIMEOUT: Request timed out

