- Ethereum Sepolia
- Arbitrum Sepolia
chainId:
11155111 · Block explorer: sepolia.etherscan.ioStart block:
10391511 — used as the startBlock in the subgraph and event scanning.Bytecode is identical on both chains. Only the addresses, the Pyth contract that
OracleModule
wraps, and the per-chain startBlock differ.External Dependencies
The protocol integrates with external infrastructure that is not operated by the Nile Markets team. Pyth Network is deployed on every chain at a chain-specific address; price feed IDs are global.The Pyth price feed IDs are
bytes32 identifiers, not Ethereum addresses. They are used by the
publisher service to fetch prices from the Pyth Hermes API and by the OracleModule to verify
onchain price updates. The same feed IDs are used on every supported chain.Block Explorer
Contracts are verified on each chain’s block explorer.Contract Architecture
The contracts are organized into shared infrastructure (singletons) and per-pool instances:Loading Addresses in Code
TypeScript (Frontend / SDK)
The frontend loads addresses from the deployment JSON file via thegetAddress helper, which
resolves the correct address based on the connected chain ID:
- Chain ID
11155111(Ethereum Sepolia) loads fromdeployments/sepolia/addresses.json - Chain ID
421614(Arbitrum Sepolia) loads fromdeployments/arbitrumSepolia/addresses.json - Chain ID
31337(Anvil) loads fromdeployments/anvil/addresses.json
TypeScript (Standalone / Node.js)
For scripts or services that do not use wagmi, reference addresses directly:Rust (Keeper / Publisher)
Rust services receive contract addresses via environment variables or CLI arguments:keccak256("EUR/USD")):
Subgraph
The subgraph references contract addresses insubgraph.yaml data sources: