Skip to main content
On Stable, USDT0 is both the chain’s native asset and an ERC-20 token. The gas token is USDT0, not a separate native asset. Standard Ethereum gas estimation works once you adjust three things: maxPriorityFeePerGas is always 0, baseFee is denominated in USDT0, and the value field in a native transfer carries USDT0 (not ETH). This guide shows how to construct transactions correctly on Stable and what to change when porting Ethereum code.

What changes vs. Ethereum

Because the transaction format is unchanged, existing ethers.js, viem, Hardhat, and Foundry code runs on Stable without changes. The differences are in how you compute gas fields, not how you encode them.

Construct a transaction

Fetch the base fee, set maxPriorityFeePerGas to 0, and double the base fee as a safety margin.
The effective gas price is a USDT0-denominated value. At 1 gwei, a 21,000-gas native transfer costs approximately 0.000021 USDT0.

Estimate gas cost in USDT0

eth_estimateGas and eth_gasPrice behave identically to Ethereum. The result is already in USDT0 because that is the gas token.
eth_maxPriorityFeePerGas always returns 0 on Stable. If your wallet or SDK adds the RPC-returned priority fee on top of the base fee, it still works, but fee UIs that display a separate tip will show 0 and should be hidden.

Tooling configuration

  • Hardhat / Foundry: no special configuration needed. Standard EVM settings work. If your config explicitly sets a priority fee, set it to 0.
  • Wallets: hide or disable the priority tip input field. Displaying it is misleading because the value has no effect on ordering or inclusion.
  • Monitoring: fee analytics dashboards should not chart priority fees. They are always zero on Stable.

Common mistakes when porting from Ethereum

  • Applying an ETH-denominated tip: copying a priority-fee constant from Ethereum doesn’t produce faster inclusion. Stable orders transactions by base fee only.
  • Treating value as ETH: a native transfer’s value is USDT0. Don’t convert it through ETH/USD prices.
  • Hard-coding a fee cap: set maxFeePerGas from the live baseFeePerGas (e.g., baseFee * 2) rather than a fixed value, so transactions don’t stall when the base fee rises.

Gas pricing reference

Full base-fee model, EIP-1559 format, and eth_* method behavior.

Zero gas transactions

Let an application cover gas via the Gas Waiver.

USDT0 behavior on Stable

Balance reconciliation and contract design with USDT0’s dual role.
Last modified on April 23, 2026