Stable is fully EVM-compatible. Solidity, Vyper, Hardhat, Foundry, ethers.js, and viem work unchanged. Existing contracts deploy as-is once you point tooling at Stable’s RPC. On top of the standard EVM, Stable exposes protocol-level modules (Bank, Distribution, Staking) as precompiled contracts at fixed addresses, so your Solidity can call into staking and reward distribution without re-implementing them.Documentation Index
Fetch the complete documentation index at: https://docs.stable.xyz/llms.txt
Use this file to discover all available pages before exploring further.
What you can build
- Standard application contracts (ERC-20, ERC-721, escrows, AMMs) with any EVM toolchain.
- Verified, indexed contracts on Stablescan with live event streams through ethers.js.
- Protocol-integrated contracts that call Bank / Distribution / Staking precompiles from Solidity.
- System-transaction listeners that watch for protocol-emitted events (for example, unbonding completions) through standard
eth_getLogs.
How Stable differs
- USDT0 is the gas token.
maxPriorityFeePerGasmust be0. Thevaluefield in native transfers carries USDT0, not ETH. See Work with USDT0 as gas. - USDT0 has a dual role. Contracts that hold native USDT0 can have their balance changed by ERC-20
transferFromorpermit— never mirror native balance in auint256. See USDT0 behavior on Stable. - Precompile addresses are fixed across testnet and mainnet. Burn them into your contract as constants.
Start here
Deploy
Scaffold Foundry, configure Stable, and deploy Counter.
Verify
Upload source to Stablescan with forge verify-contract.
Index
Subscribe to events with ethers.js and backfill historical logs.
Next recommended
Contracts guide index
Full list of contract guides, precompile references, and system module ABIs.
Use system modules
Call Bank / Distribution / Staking from Solidity and ethers.js.
JSON-RPC reference
Which
eth_* and debug_* methods Stable supports.
