The 0G mainnet hosts production storage workloads. Files uploaded to mainnet are anchored on the production Flow contract and propagated across the production storage node network.
Mainnet storage submissions consume real 0G tokens. Test on Galileo testnet first.

Network parameters

ParameterValue
Network name0G Mainnet
Chain ID16661
Token symbol0G
Block explorerchainscan.0g.ai
Storage explorerstoragescan.0g.ai
Ecosystem explorerexplorer.0g.ai
Blockchain RPChttps://evmrpc.0g.ai
Indexer RPChttps://indexer-storage-turbo.0g.ai
Use a paid RPC provider for production storage workloads — the public endpoint is rate-limited.

Storage contract addresses

ContractAddress
Flow0x62D4144dB0F0a6fBBaeb6296c785C71B3D57C526
Mine0xCd01c5Cd953971CE4C2c9bFb95610236a7F414fe
Reward0x457aC76B58ffcDc118AABD6DbC63ff9072880870

Connect from Python

from core.indexer import Indexer
from web3 import Web3

INDEXER_RPC    = "https://indexer-storage-turbo.0g.ai"
BLOCKCHAIN_RPC = "https://evmrpc.0g.ai"

indexer = Indexer(INDEXER_RPC)
web3    = Web3(Web3.HTTPProvider(BLOCKCHAIN_RPC))

print(f"Chain ID: {web3.eth.chain_id}")             # 16661

Add to MetaMask

FieldValue
Network name0G Mainnet
New RPC URLhttps://evmrpc.0g.ai
Chain ID16661
Currency symbol0G
Block explorer URLhttps://chainscan.0g.ai

Production checklist

Before pushing real data to mainnet:
  • ✅ Verify the upload path on testnet end-to-end
  • ✅ Switch to a paid RPC provider for the blockchain RPC
  • ✅ Confirm the storage fee with indexer.upload(..., opts={"fee": ...}) on a small file first
  • ✅ For files over 4 GB, use splitable_upload and store the returned rootHashes durably — losing one means losing access to that fragment
  • ✅ Cache rootHash values with timestamps so you can wait the ~3–5 minute propagation window before downloads
  • ✅ Use retry options on uploads to handle transient node failures

Next steps

Testnet

Develop and test against Galileo first.

Storage SDK

Upload and download files on the production network.