fakereum sandbox

Forked EVM sandbox

A signed transaction sent here executes locally; this server's sandbox state is layered atop https://arbitrum-one-rpc.publicnode.com and never reaches the real chain.

Network name
Fake Arbitrum One
Chain ID
42161 (0xa4b1)
RPC endpoint
Etherscan API
Currency
FETH
upstream chain
Network
Arbitrum One (42161 / 0xa4b1)
RPC
https://arbitrum-one-rpc.publicnode.com
replay guard

Anti-replay protection is on. A transaction whose signer already holds a native balance on Arbitrum One is refused — this sandbox shares that chain's ID, so such a signed tx could be replayed onto the real chain. Sign from a wallet funded only with FETH (zero upstream balance).

explore
etherscan api

The /api and /v2/api endpoints are an Etherscan v2-compatible proxy. Pass your own Etherscan API key (apikey=…) — it is required and forwarded upstream as-is. Requests go to Arbitrum One's explorer with chainid forced. Currently only the logs&action=getLogs module is supported; its response is merged with this sandbox's logs so your tooling sees local state alongside the real chain. Both paths are also returned by discovery below (etherscanApi / etherscanApiV2).

discovery

Detect this sandbox from a dapp without any custom RPC method. Wallets refuse to forward fakereum_* calls but always relay eth_call, so a call to the sentinel below (calldata ignored — no real chain has code there) returns the sandbox config, ABI-encoded as a single string of JSON:

eth_call({ to: "0x000000000000000000000000000000000000fa4e" })
↳ abi-decode the result to a string, then JSON.parse:

{
  "chainId":          "0x…",      // this sandbox
  "upstreamChainId":  "0x…",      // forked chain
  "networkName":      "…",
  "symbol":           "…",
  "rpc":              "…/rpc",     // JSON-RPC
  "etherscanApi":     "…/api",     // Etherscan v2 proxy
  "etherscanApiV2":   "…/v2/api",  // same proxy, /v2/api path
  "explorer":         "…",         // this explorer
  "upstreamExplorer": { "name": "…", "url": "…" }   // optional
}