Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.novacula.io/llms.txt

Use this file to discover all available pages before exploring further.

Igra is an EVM-compatible L2 anchored on the Kaspa DAG. Every Igra node is two processes: a kaspad sidecar that follows the underlying Kaspa network and an igra-reth execution layer (a Reth fork tailored to the Igra L2). They share a JWT secret over the Engine API the same way an Ethereum EL ↔ CL pair does; the Engine API is pod-internal and not user-overridable. Igra is unusual: the L2 itself has no native peer-to-peer fan-out for chain-tip discovery, so the executor learns the tip from a kaspad sidecar plus a cross-reference against the public Igra explorer (postScrape).

Networks and resources

NetworkUpstream KaspaNotes
mainnetkaspad mainnetProduction. kaspad ports 16110 / 16111 / 17110 / 18110.
galleon-testnetkaspad testnet-10kaspad ports shifted by +100 (16210 / 16211 / 17210 / 18210) to match upstream peer-discovery defaults.
Per-network resource defaults are pre-filled by the deploy wizard.

Clients

RoleClientVersions
kaspadkaspad (DAG node)2.3
eligra-reth (Reth fork)2.3
Versions move in lock-step between the two roles.

Ports

NamePortOwnerNotes
EL RPC (HTTP)8545igra-rethConstant across networks
EL RPC (WebSocket)8546igra-reth
EL metrics9001igra-reth
Engine APIinternaligra-reth ↔ kaspadJWT-secured, pod-internal
kaspad gRPC16110 (mainnet) / 16210 (galleon)kaspad
kaspad P2P16111 / 16211kaspad
kaspad Borsh wRPC17110 / 17210kaspad
kaspad JSON wRPC18110 / 18210kaspad
kaspa-rest-proxy15110sidecarREST proxy over kaspad’s wRPC; scraped by the executor for sync state
The kaspa-rest-proxy sidecar is what feeds the per-node kaspad_* extras into telemetry.

Init steps

  1. JWT secret — shared between igra-reth and kaspad over the Engine API. The adapter uses a fixed pod-internal value (same pattern as Ethereum / Ink — pod-internal trust, not externally rotated).

Config overrides

Igra uses CLI argument overrides per role; there are no config-file overrides.
  • igra-reth — managed-flag allow-list for the EL role; user args validated per-flag.
  • kaspad — managed-flag allow-list for the kaspad sidecar; user args validated per-flag.
For the full managed + known flag lists, see packages/adapter/src/igra/index.ts configOverrideSchema() in the codebase. Anything off the managed list and off the known list is passed through verbatim.

Sync

  • EL — syncs via the Engine API from the kaspad sidecar’s view of the L2 tip.
  • Sync progress — derived against the public Igra explorer’s eth_blockNumber via a per-cycle postScrape rather than from kaspad alone. This means syncProgress requires outbound HTTPS to the public explorer; if your executor’s network blocks that, the field will report stale.

Metrics

Both processes are scraped on each reporter tick. Common per-node fields (status, height, peers, syncProgress, disk) come from igra-reth. Chain-specific extras include:
  • kaspad_is_synced (boolean)
  • kaspad_server_version
  • kaspad_virtual_daa_score
  • kaspad_block_count
  • kaspad_header_count
Plus the EL-side extras from the igra-reth Prometheus exporter. See Node monitoring for how extras flow.

Common patterns

  • RPC provider — accept defaults; expose :8545 (HTTP) and :8546 (WS) through your own reverse proxy.
  • Galleon testnet sandbox — useful for dApp integration testing; remember the +100 port shift if you’re networking specific kaspad ports out.