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-testnet

  • NETWORK=monad-mainnet

If NETWORK is unset, the examples default to monad-testnet.

Network Information

Network
Chain ID
Default RPC
Switchboard Proxy

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.

Item
Value

Proxy address

0xB7F03eee7B9F56347e32cC71DaD65B303D5a0E67

Proxy code page

Current implementation

0x140E3f2E66619FE1113D971291990caC0b5b72Fd

Implementation code page

Canonical ABI

@switchboard-xyz/on-demand-solidity/abis/Switchboard.json

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:

  • createRandomness

  • settleRandomness

  • getRandomness

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_ADDRESS for evm/price-feeds

  • COIN_FLIP_CONTRACT_ADDRESS for evm/randomness/coin-flip

  • PANCAKE_STACKER_CONTRACT_ADDRESS for evm/randomness/pancake-stacker

Guardrails

Before broadcasting transactions, the packaged scripts verify:

  • NETWORK is supported

  • the RPC chain ID matches NETWORK

  • the resolved Switchboard contract has bytecode

  • Monad SWITCHBOARD_ADDRESS overrides match the canonical address for the selected network

  • any 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 bytes32 feed hash/feed ID from Feed Builder or Explorer for the full v2 flow:

    • GET /v2/fetch/{feedId}

    • GET /v2/simulate/{feedId}?network=testnet|mainnet

    • GET /v2/update/{feedId}?chain=evm&network=testnet|mainnet&use_timestamp=true

  • If v2/fetch and v2/simulate succeed but v2/update returns ORACLE_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.ts still supports hyperliquid-mainnet in addition to Monad. Run it from evm/randomness after bun install, cp .env.example .env, and bun run example.

Last updated