Prerequisites
- A contract already deployed on Stable testnet or mainnet. If you haven’t deployed yet, see Deploy a smart contract.
- Foundry installed (
forgeavailable in your PATH). - The deployed contract address from your
forge createoutput.
1. Confirm the deployed address
Make sure you have theDeployed to address from your earlier deployment. From the Deploy a smart contract flow, this was the value printed after forge create.
2. Run forge verify-contract
Foundry’s verification flow submits your source to the Stablescan verifier.--watch blocks until verification finishes so you don’t have to poll. On mainnet, swap the chain ID to 988 and the verifier URL to https://stablescan.xyz/api.
Constructor arguments: If your contract takes constructor arguments, add
--constructor-args $(cast abi-encode "constructor(uint256,address)" 42 0xSomeAddress) to the command. Without this flag, verification fails for any contract with a non-empty constructor.3. Confirm verification on Stablescan
Open the contract page on the explorer.Troubleshooting
- “Bytecode does not match”: your source compiles to different bytecode than what’s deployed. Most often caused by mismatched Solidity version or optimizer settings. Pass
--compiler-versionand--optimizer-runsexplicitly to match yourfoundry.toml. - “GUID not found”: the verifier hasn’t registered your submission yet. Re-run with
--watchor manually check the URL printed in the response. - Contract uses libraries: add
--libraries src/Lib.sol:Lib:0xDeployedLibAddressfor each linked library.
Next recommended
Index contract events
Subscribe to on-chain events with ethers.js and build a live event stream.
Deploy a smart contract
Scaffold a fresh Foundry project and deploy to Stable testnet.
JSON-RPC reference
See which
eth_* methods Stable supports for on-chain interactions.
