Monad
Monad is the primary EVM network exercised by the current sb-on-demand-examples repo. The packaged EVM examples now share a single network switch:
NETWORK=monad-testnetNETWORK=monad-mainnet
If NETWORK is unset, the examples default to monad-testnet.
Network Information
Monad Testnet
10143
https://testnet-rpc.monad.xyz
0x6724818814927e057a693f4e3A172b6cC1eA690C
Monad Mainnet
143
https://rpc.monad.xyz
0xB7F03eee7B9F56347e32cC71DaD65B303D5a0E67
RPC_URL remains available as an override, but it must still resolve to the chain implied by NETWORK.
Monad Mainnet Contract Details
Monad mainnet uses an ERC1967 proxy. The address apps integrate with is the proxy at 0xB7F03eee7B9F56347e32cC71DaD65B303D5a0E67, and the user-facing ABI is the Switchboard implementation ABI.
Proxy address
0xB7F03eee7B9F56347e32cC71DaD65B303D5a0E67
Proxy code page
Current implementation
0x140E3f2E66619FE1113D971291990caC0b5b72Fd
Implementation code page
Canonical ABI
@switchboard-xyz/on-demand-solidity/abis/Switchboard.json
ABI source
MonadScan code visibility for the live mainnet implementation is still being repaired from the exact deployment source. Until that is finished, use the package ABI above instead of guessing from an empty or stale explorer ABI.
Randomness API Note
The current EVM randomness interface is:
createRandomnesssettleRandomnessgetRandomness
revealRandomness and getRandomnessResult are not part of the current Switchboard EVM interface on Monad.
Shared Env Contract
The runnable EVM examples use the same env model:
Per-example contract addresses stay separate:
CONTRACT_ADDRESSforevm/price-feedsCOIN_FLIP_CONTRACT_ADDRESSforevm/randomness/coin-flipPANCAKE_STACKER_CONTRACT_ADDRESSforevm/randomness/pancake-stacker
Guardrails
Before broadcasting transactions, the packaged scripts verify:
NETWORKis supportedthe RPC chain ID matches
NETWORKthe resolved Switchboard contract has bytecode
Monad
SWITCHBOARD_ADDRESSoverrides match the canonical address for the selected networkany reused contract address already has deployed bytecode
Quick Start: Price Feeds
Fastest testnet path:
If CONTRACT_ADDRESS is unset, bun run example deploys a fresh consumer before submitting the v2 update. If you want to deploy separately first:
Flip to mainnet with one env var:
Quick Start: Coin Flip
Run on testnet:
Save the emitted contract address into COIN_FLIP_CONTRACT_ADDRESS, then fund the contract bankroll before the first flip. The contract accepts any positive wager, and the packaged CLI uses 0.01 MON by default:
Then run the CLI flow:
Run on mainnet:
Integration Example
Custom Feed Troubleshooting
Feed Builder custom feeds do not require a separate activation or permission toggle on Monad.
Use the same
bytes32feed hash/feed ID from Feed Builder or Explorer for the full v2 flow:GET /v2/fetch/{feedId}GET /v2/simulate/{feedId}?network=testnet|mainnetGET /v2/update/{feedId}?chain=evm&network=testnet|mainnet&use_timestamp=true
If
v2/fetchandv2/simulatesucceed butv2/updatereturnsORACLE_UNAVAILABLE, the issue is managed oracle or gateway availability for that feed, not a missing deployment step or permission.
Notes
Testnet MON is available from the Monad faucet.
The generic randomness helper at
evm/randomness/randomness.tsstill supportshyperliquid-mainnetin addition to Monad. Run it fromevm/randomnessafterbun install,cp .env.example .env, andbun run example.
Last updated