Send USDT0 on Stable as both a native transfer and an ERC-20 transfer, and verify that both operate on the same balance.
On Stable, USDT0 is both the chain’s native asset and an ERC-20 token. This means approve, transferFrom, and permit remain fully available alongside standard value transfers, and both paths move funds from the same underlying balance.This page walks you through sending USDT0 through both paths and confirming they draw from one balance.
18 vs 6 decimals: Native USDT0 uses 18 decimals (standard EVM precision), while the ERC-20 interface reports 6 decimals (standard USDT precision). Both reflect the same balance, so address(x).balance and USDT0.balanceOf(x) may differ by up to 0.000001 USDT0 due to fractional reconciliation. See USDT0 behavior on Stable.
Native transfers work the same as sending ETH on Ethereum. The value field carries the USDT0 amount. A native transfer costs only 21,000 gas, the cheapest way to send USDT0.
// sendNative.tsimport { ethers } from "ethers";import { provider, wallet } from "./config";const recipient = "0xRecipientAddress";const amount = ethers.parseUnits("0.001", 18); // 18 decimals for nativeconst block = await provider.getBlock("latest");const baseFee = block!.baseFeePerGas!;const tx = await wallet.sendTransaction({ to: recipient, value: amount, maxFeePerGas: baseFee * 2n, maxPriorityFeePerGas: 0n, // always 0 on Stable});const receipt = await tx.wait(1);console.log("Native transfer tx:", receipt!.hash);