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 confirmsgasPrice = 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
toaddress and method selector are on the waiver’sAllowedTargetpolicy. - The wrapper is sent to the marker address
0x000000000000000000000000000000000000f333withvalue = 0andgasPrice = 0.
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
AllowedTargetpolicy. - A user wallet on testnet with no USDT0 required for gas.
Step 1: sign a qualifying InnerTx
The user signs a standard transaction withgasPrice = 0. In this example the call is a USDT0 transfer, which is a common AllowedTarget for application-covered gas flows.
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 confirmeffectiveGasPrice is 0. That is the cryptographic proof that the user paid no gas.
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
gasPriceon either the inner or wrapper transaction.
Next recommended
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.

