Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Core concepts

Four concepts are enough to start building. Each section defines the concept, shows it, and links to the full reference.

USDT0 as gas

You pay transaction fees in USDT0, the same asset you're already holding and transacting in. There's no second token to fund or manage.

USDT0 is both the native gas asset (18 decimals, read via address(x).balance) and an ERC-20 token (6 decimals, read via USDT0.balanceOf(x)). Both interfaces operate on the same underlying balance, and the protocol reconciles the 12-digit precision gap automatically.

// Both read the same balance:
uint256 native = address(user).balance;        // 18 decimals
uint256 erc20  = IERC20(USDT0).balanceOf(user); // 6 decimals

Read more: USDT0 as gas · USDT0 behavior on Stable.

Guaranteed blockspace

Stable v1.4.0 can reserve a gas quota within each block for eligible priority workloads. Normal traffic cannot consume this VIP-lane capacity during congestion.

Standard EVM transactions keep using the default nonce channel, NonceKey = 0. Eligible priority flows use CustomTx type 0x3F and a protocol-reserved NonceKey that identifies the VIP lane.

Governance configures the lanes and quotas. With no configuration, every transaction uses one normal lane. The feature is currently in the v1.4.0 Testnet release candidate, with its Mainnet schedule pending.

Read more: Guaranteed blockspace.

USDT transfer aggregator

High-volume USDT0 transfers are batched and verified in parallel using a MapReduce-inspired pipeline. Per-account failures are isolated, so one bad transfer doesn't abort the batch.

The caller-side transfer API is unchanged. You submit transfers the normal way and gain throughput without code changes.

Read more: USDT transfer aggregator.

EVM compatibility

Standard EVM tooling works unchanged. At the EVM level, three behaviors differ from Ethereum (USDT0 as gas, covered above, is the fourth).

Single-slot finality. A transaction is final once included in a block. Blocks are produced roughly every 0.7 seconds.

No priority tips. maxPriorityFeePerGas is always ignored. The effective gas price is the base fee set by the protocol.

import { ethers } from "ethers";
 
const block = await provider.getBlock("latest");
const baseFee = block.baseFeePerGas;
 
const tx = await wallet.sendTransaction({
  to: "0xRecipientAddress",
  value: ethers.parseEther("0.1"),
  maxFeePerGas: baseFee * 2n,        // 2x base fee as safety margin
  maxPriorityFeePerGas: 0n,          // always 0 on Stable
});
 
await tx.wait();
console.log("Included at gas price:", tx.gasPrice?.toString());
Included at gas price: 1000000000

Dual-role USDT0, porting risks. Contracts ported from Ethereum should not mirror native balance, should reject address(0) transfers, and should not rely on EXTCODEHASH for address-reuse detection.

Read more: Differences from Ethereum · Contracts on Stable · USDT0 migration checklist.

Confidential transfer (planned)

Stable has a planned feature for zero-knowledge transfers that hide amounts while staying auditable for authorized parties. It is not yet live.

Read more: Confidential transfer.

Next recommended

  • Quick start: Connect to testnet and send a first transaction.
  • USDT0 behavior: Port a contract to Stable without hitting dual-role gotchas.
  • Gas pricing: Construct transactions correctly on Stable's fee model.
  • Production readiness: Validate an integration before shipping to mainnet.