Skip to main content
Gas Waiver lets an application cover gas on behalf of a user. The user signs a transaction with gasPrice = 0, a governance-registered waiver wraps it, and validators execute the call at zero cost to the user. This guide walks through a qualifying transfer, shows how to verify gas was waived, and explains what the waiver does and doesn’t cover.
Concept: For the wrapper transaction mechanism, authorization model, and security guarantees, see Gas waiver and the Gas waiver protocol reference.

What you’ll build

A two-script flow that submits a USDT0 transfer through the hosted Waiver Server, fetches the receipt, and confirms gasPrice = 0.

Demo

When the waiver applies

A transaction qualifies when all of these hold:
  • The user signs the inner transaction with gasPrice = 0.
  • The submitter is a governance-registered waiver address.
  • The target to address and method selector are on the waiver’s AllowedTarget policy.
  • The wrapper is sent to the marker address 0x000000000000000000000000000000000000f333 with value = 0 and gasPrice = 0.
If any of these fails, validators reject the wrapper without executing the inner call. Contract calls not listed in AllowedTarget are not covered. Arbitrary self-serve waivers are not possible; every waiver must be registered through validator governance.

Prerequisites

  • An API key for the Waiver Server, issued by the Stable team.
  • The target contract address and method selector registered on the waiver’s AllowedTarget policy.
  • A user wallet on testnet with no USDT0 required for gas.

Step 1: sign a qualifying InnerTx

The user signs a standard transaction with gasPrice = 0. In this example the call is a USDT0 transfer, which is a common AllowedTarget for application-covered gas flows.
gasPrice must be 0. A non-zero value causes the waiver server to reject the submission and validators to reject the wrapper.

Step 2: submit through the Waiver Server

The Waiver Server wraps the signed inner transaction and broadcasts it. You need a server-issued API key.

Step 3: verify the receipt shows zero gas

Fetch the receipt and confirm effectiveGasPrice is 0. That is the cryptographic proof that the user paid no gas.
An effectiveGasPrice of 0 confirms the transaction executed under a registered waiver and the user was not charged.

What Gas Waiver doesn’t cover

  • Contracts outside AllowedTarget: arbitrary contract calls aren’t covered. Every target is scoped per waiver through governance.
  • User-submitted wrappers: if the user submits directly to 0x...f333, it fails. Only registered waiver addresses can wrap.
  • Fee extraction: validators don’t accept a non-zero gasPrice on either the inner or wrapper transaction.
For the full policy model and per-waiver scope rules, see Gas waiver protocol.

Integrate the Waiver Server

Full API reference, batch submissions, error codes, and NDJSON streaming.

Self-hosted Gas Waiver

Register your own waiver address and broadcast wrappers without the hosted API.

Gas waiver protocol

Read the full spec: marker routing, wrapper format, governance controls.
Last modified on April 23, 2026