XGR Chain — Chain Specification
Document ID: XGRCHAIN-SPEC
Status: Draft
Last updated: 2026-02-07
Audience: Protocol integrators, node operators, auditors
1. Scope
This document defines the chain-level specification for XGR Chain (xgrchain), including:
- Network identity
- Consensus configuration (IBFT PoA with BLS validators)
- Execution and fork configuration (EVM hardforks enabled from genesis)
- Genesis-defined parameters (bootnodes, allocations)
- Fee model references
This spec is intended to be public and can include small code excerpts where it improves precision.
2. Network identity
| Field | Value |
|---|---|
name |
xgrchain |
chainID |
1643 |
Normative behavior
- Transactions MUST be signed with EIP-155 using chainID = 1643 to prevent replay across networks.
- Client implementations MUST reject transactions whose signature chain ID does not match.
3. Client basis and compatibility
XGR Chain is built on Polygon Edge and provides:
- EVM compatibility (smart contracts, logs, receipts)
- Standard Ethereum transaction types (legacy and EIP-1559 / type-2)
- JSON-RPC compatibility for common endpoints (e.g.,
eth_sendRawTransaction,eth_call,eth_getLogs, etc.)
4. Execution hardfork configuration
XGR Chain enables the following EVM forks from block 0 (genesis):
homesteadbyzantiumconstantinoplepetersburgistanbullondonlondonfixEIP150,EIP155,EIP158quorumcalcalignmenttxHashWithType
Implication: the network behaves as a “modern” EVM chain from genesis, including EIP-1559-style transaction fields.
5. Consensus: IBFT (PoA, BLS validators)
5.1 Consensus engine selection
From genesis.json:
params.engine.ibft.type = "PoA"params.engine.ibft.validator_type = "bls"
Meaning:
- PoA: validator identities are permissioned and form a fixed or governance-managed set.
- BLS validator type: each validator has:
- an ECDSA address (20 bytes) used as identity, and
- a BLS public key (48 bytes) used for aggregated commit signatures.
5.2 Timing and epochs
| Parameter | Value |
|---|---|
blockTime |
2000000000 ns (~2.0 seconds) |
epochSize |
500 blocks |
Operationally, an epoch is ~500 * 2.0s ≈ 16.7 minutes.
5.3 Initial validator set
The initial validator set is encoded in the genesis block extraData using the Istanbul extra-data structure.
| # | Validator address (ECDSA) | BLS public key (48 bytes) |
|---|---|---|
| 1 | 0x7913fdae82c678f42b98ca8076fe7d13b3edff15 | 0xb56b72d028aa6d063d36917f9f18a3ee4b216e22694a701814af4fd55e6cbbe99209fc1359012e4733987ebdd0123e88 |
| 2 | 0x7e8f8fd2a198f77df298041b48d79b0df4c8b1fa | 0xa32a09397128b801da5b88319bcca6cc33d4400e12ef7e1a94141b2360abd70306aaeb5599dd0d0984bb02f88fe20b71 |
| 3 | 0x82f0b6f1efbb3fc9bcde0ee5a08e01e76cc29e13 | 0x8b94120a8ae2a89a0f7deb09f266d90bf5d5152a6ee559977d7f3361a0ce1cc65b012f3a820c7f1c18a01cef9ba8ae90 |
| 4 | 0xc5cc7b4ee5b0f6524ecac177ed37b2b567180707 | 0x91bf571d3f5563976e560c5f7d9898f75a0829804ce5e212370834303c23953388f01e06d0a9da2615c5e7f1aaf10da7 |
| 5 | 0x98f8bc086454b8386788244eee9a43d5d0b4e63e | 0xa65579c3b300f0d8e94e77b3915ac09f309c0a109a3aa3bb66d8beb538d733026624bf9d096e2a3d52deff78a36513d1 |
Note: the validator list above was decoded from the genesis
extraDataRLP payload (vanity + IstanbulExtra).
6. Genesis block parameters
| Field | Value |
|---|---|
genesis.gasLimit |
0x3938700 (60,000,000) |
genesis.difficulty |
0x1 |
genesis.mixHash |
0x0000000000000000000000000000000000000000000000000000000000000000 |
genesis.parentHash |
0x0000000000000000000000000000000000000000000000000000000000000000 |
genesis.timestamp |
0x0 |
7. Bootnodes
The network bootnodes are defined in genesis as libp2p multiaddrs:
| # | Multiaddr |
|---|---|
| 1 | /ip4/217.154.225.157/tcp/1478/p2p/16Uiu2HAmGYfGAKCNzuzZPPauKk7FpqMk192hEmiQsqYTXvrga4Ck |
8. Genesis allocations
Genesis alloc defines pre-funded accounts (balances in wei, i.e., 10^-18 of the native token).
| Address | Balance (wei) | Balance (native units, 18 decimals) |
|---|---|---|
| 0x0000000000000000000000000000000000000000 | 0 | 0 |
| 0x00000000000000000000000000000000000000e1 | 1 | 1.00000000000000007e-18 |
| 0x2A021a1B25DA25e14C4046e5BAc9375Ec3bebf8c | 2103833846420000000000000000 | 2,103,833,846.42000008 |
| 0x4675EdCa3c4637E68Ed1C1776a11EB5c9828F056 | 3141592653580000000000000000 | 3,141,592,653.57999992 |
| 0x7818A59b2D279Fe3444B75dcE1A443C1b124c161 | 1380649000000000000000000000 | 1,380,649,000 |
9. Fee model overview
XGR Chain uses a modified EIP-1559 fee policy optimized for stable, predictable base fees under normal load:
- A governance-controlled minimum base fee (
minBaseFee) is stored in an on-chain registry contract (EngineRegistry). - Below a utilization threshold (80% of the block gas limit), the base fee is clamped to
minBaseFee. - Above the threshold, “emergency pricing” ramps base fee up (max ~+25% / block).
The full behavior is specified in:
XRC-GAS_Gas_Price_Behavior.md
10. On-chain configuration registry (EngineRegistry)
The genesis includes:
params.engineRegistryAddress = 0x72cbbb5c95662510da052b98add933ff99ec820fparams.bootstrapEngineEOA = 0x0000000000000000000000000000000000000000
The chain client reads governance parameters from engineRegistryAddress when deployed; otherwise it falls back to safe defaults.
11. Non-goals
This spec does not define application-layer protocols (XDaLa, orchestration, etc.) and does not document closed-source Engine internals.