# EIP-2124: Fork Identifier

Source: https://www.eipsfordesigners.com/standards/EIP-2124
Agent brief: https://www.eipsfordesigners.com/standards/EIP-2124/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/EIP-2124
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | Comprehension & Display |
| Journey stages | Status & Confirmation |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-2124 |
| Discussion search | https://ethereum-magicians.org/search?q=EIP-2124 |

## UX Impact

Nodes quickly identify compatible peers — faster sync, no wasted connections to wrong networks (ETH vs ETC). Design implications: mostly invisible to end users but affects sync progress UIs, show network compatibility status in node dashboards, display fork identifier in developer tools. Design decisions: how to surface peer compatibility issues to users running nodes, whether to show 'searching for peers' vs specific incompatibility reasons, handling stale nodes gracefully.

## Summary

EIP-2124 introduced fork identifiers - a way for nodes to quickly check if they're compatible with each other. The fork ID combines the chain's genesis hash with activated fork block numbers. This lets nodes immediately know "we're on the same chain and have the same upgrades" without exchanging lots of data.

## For Designers

- You can design UI that delivers fork ID comparison in initial handshake.
- You can design UI that delivers nodes disconnect immediately if fork IDs don't match.
- You can design UI that delivers mismatch detected at connection time.

## Applicability

### When to Use

- Your product addresses: nodes couldn't quickly verify compatibility.
- Your product addresses: network partitions after hard forks.
- The flow should deliver: fork ID comparison in initial handshake.
- You are designing a network upgrade status experience with visible states and recovery paths.

### When to Avoid

- Warn when connected to incompatible RPC.
- Show upgrade countdown with feature summary.
- Show fork name (Shanghai) with ID as technical detail.
- Users never see addresses, amounts, or signing payloads in your UI.

## Problems It Solves

### Nodes couldn't quickly verify compatibility

Impact: high

Old way: Exchange full chain history to detect incompatibility

New way: Fork ID comparison in initial handshake

### Network partitions after hard forks

Impact: high

Old way: Incompatible nodes stayed connected, causing issues

New way: Nodes disconnect immediately if fork IDs don't match

### Difficult to detect wrong network connections

Impact: medium

Old way: Errors occurred deep in sync process

New way: Mismatch detected at connection time

### Post-fork network confusion

Impact: medium

Old way: Old nodes confused new nodes and vice versa

New way: Clean separation of incompatible networks

## Anti-Patterns

### Ignoring fork ID mismatches

Severity: high

User may see incorrect data or failed transactions

Instead: Warn when connected to incompatible RPC

### Not informing users about upcoming upgrades

Severity: medium

Users surprised when things change

Instead: Show upgrade countdown with feature summary

### Showing raw fork ID without context

Severity: low

0xdce96c2d means nothing to users

Instead: Show fork name (Shanghai) with ID as technical detail

## UI Components

### ForkIdDisplay

Shows current fork identifier
States: synced, syncing, outdated
Props: forkId, forkName, blockNumber

### UpgradeTimeline

Visual timeline of network upgrades
States: loading, loaded
Props: upgrades[], currentBlock, onSelect

### CompatibilityCheck

Shows node/RPC compatibility status
States: compatible, incompatible, checking
Props: localForkId, remoteForkId, onSwitch

## On Monad

### Monad Fork Schedule

Ethereum: Upgrades happen roughly yearly

Monad: Monad may have its own upgrade schedule

Design implication: Track Monad-specific fork IDs and upgrade timeline

### Fork ID Format

Ethereum: Based on genesis + fork blocks

Monad: Same format, Monad-specific values

Design implication: Use Monad genesis and fork data for ID calculation

### Node Compatibility

Ethereum: Many public RPCs with varying update speeds

Monad: Ensure RPC providers stay updated with Monad forks

Design implication: Verify RPC fork ID matches expected Monad fork

## UX Patterns

### Network Upgrade Status

Show users current network fork status

User flow:

- User checks network status
- Current fork name and ID displayed
- Historical upgrades shown
- Upcoming upgrades if scheduled
- User understands network state

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

### Node Compatibility Warning

Alert when connecting to incompatible node

User flow:

- dApp connects to RPC
- Fork ID mismatch detected
- Warning shown to user
- Explanation of the issue
- Option to switch RPC

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

### Upgrade Countdown

Show upcoming network upgrades

User flow:

- Upcoming upgrade detected
- Countdown displayed to users
- New features explained
- Users informed before changes

Mockup registry key: `concept/verify-safety` (React UI on the live standard page).

## Related Standards

- EIP-155: Chain ID identifies the chain, fork ID identifies the fork state

- EIP-695: eth_chainId returns chain ID, separate from fork ID
