Forks — activation heights
Each fork introduces new tx types and consensus rules. Activation is by block height, configurable per environment via env vars:
| Fork | Default mainnet height | Env override | Tx types activated | Section |
|---|---|---|---|---|
| V2 | 7500 (active) | OMBRA_FORK_HEIGHT | Fee split 70/25/5, PoTU burn, attestations | Tokenomics |
| V3 | 18554 (active) | OMBRA_FORK_HEIGHT_V3 | ART_MINT, ART_TRANSFER, ART_BURN | NFT Mint |
| V4 | 999_999_999 (inactive) | OMBRA_FORK_HEIGHT_V4 | IMAGE_MINT, IMAGE_TRANSFER, IMAGE_BURN | NFT Mint |
| V5 | 999_999_999 (inactive) | OMBRA_FORK_HEIGHT_V5 | AUDIO_MINT, AUDIO_TRANSFER, AUDIO_BURN | NFT Mint |
| V6 | 999_999_999 (inactive) | OMBRA_FORK_HEIGHT_V6 | CHAT_TURN, AGENT_REQUEST/CLAIM/STEP/FINISH | Chat + Agent |
Inactive forks have height
999_999_999so the chain rejects post-fork tx types on mainnet. Operators activate by setting an env override.
Check current activation
curl https://api.ombra-net.com/api/chain/stats
Response includes height. Compare against the table above.
Behavior at activation
When block height crosses a fork threshold:
- New tx types become valid in mempool
- Older nodes (unaware of the fork) reject these txs → they get partitioned off
- State storage adds new record types for the fork
- SDK clients should refuse to construct fork tx if
chainHeight < forkHeight(defensive)
Example check in TS:
const { height } = await client.chain.getStats();
const FORK_V6 = 65500; // current mainnet activation
if (height < FORK_V6) throw new Error("Fork V6 not yet active");
Why env overrides
Local testnet and CI deployments need to enable forks instantly. The OMBRA_FORK_HEIGHT_* env vars let operators set =1 for immediate activation at genesis. Mainnet operators coordinate a real height via social consensus, then publish the env value to all node runners.
Coordination
Activating a fork on mainnet requires:
- Software supports the fork (deployed node version)
- A majority of validators run that version
- All validators set the same
OMBRA_FORK_HEIGHT_X=Nvalue - Once block N is produced, fork is locked in
Operators that miss the coordination get partitioned and stop validating.