Sentrix

HARD-FORK HISTORY

Fork timeline — Testnet (h=0)

What this is

Sentrix ships protocol changes through height-gated forks: every consensus-affecting change has an activation height, and nodes that reach that height switch to the new rules. This page lists every fork that has been defined for the chain — when it activates, what it changes, and whether it's currently dormant.

SENTRIX_LEGACY_VALIDATION_HEIGHT
Closes the txid_index backfill startup hang (#268).
Active

Below this height the node skips strict re-validation of historical blocks during MDBX warm-up, because the pre-cutover history was produced under looser invariants. From this height onward every block goes through the strict validator at boot.

Activation height (testnet): 0
ADD_SELF_STAKE_HEIGHT
Validators can top up `self_stake` from their wallet without a phantom mint.
Active

Recovery path for validators that fall under `MIN_SELF_STAKE`: bond real SRX into `self_stake` directly via `StakingOp::AddSelfStake`. Pre-fork the only path was the `force-unjail` CLI, which mutated the registry without a corresponding balance debit and left the supply invariant slightly off.

Activation height (testnet): 0
VOYAGER_FORK_HEIGHT
Activates DPoS proposer rotation + 3-phase BFT finality.
Scheduled @ h=10

Replaces the bootstrap Pioneer round-robin proposer with Voyager — Tendermint-style Propose → Prevote → Precommit → Finalize over a DPoS-elected validator set. From this height onward every block carries a `BlockJustification` with the precommits that finalised it, and finality at 2/3+1 stake weight is observable on-chain.

Activation height (testnet): 10
VOYAGER_REWARD_V2_HEIGHT
Coinbase routes to the protocol treasury; rewards are claimed.
Scheduled @ h=100

Pre-fork the block reward was credited directly to the proposer. Post-fork the coinbase deposits 1 SRX into the protocol treasury at `0x0000…0002`, and validators + delegators claim their accrued share via `StakingOp::ClaimRewards`. Keeps stake registry rewards and account balances in lock-step without per-block payouts.

Activation height (testnet): 100
VOYAGER_EVM_HEIGHT
Turns on the embedded revm runtime for `eth_sendRawTransaction`.
Scheduled @ h=752

Before this fork the chain ran native Sentrix transactions only. After activation the node embeds a revm interpreter and accepts standard EVM transactions, so Hardhat / Foundry / ethers.js / viem dApps work without any Sentrix-specific tooling.

Activation height (testnet): 752
STATE_ROOT_FORK_HEIGHT
Block hash starts committing to the post-block account state root.
Scheduled @ h=100,000

Before this fork the block hash was computed without including the trie state root, so two validators could disagree on state and still produce identical block hashes — any disagreement only surfaced via balance queries. After activation the trie root is part of the block hash, so any state divergence triggers an immediate `previous_hash` mismatch on the next block and prevents silent forks.

Activation height (testnet): 100,000
TOKENOMICS_V2_HEIGHT
Max supply moves to 315M; halving aligns with BTC-parity 4y schedule.
Scheduled @ h=381,651

Pre-fork the cap was 210M with 42M-block halvings. Post-fork: 315M cap, 126M-block halving (~4 years at 1s blocks). Tightens the issuance curve to BTC-parity for the long tail and restores the 20% premine ratio.

Activation height (testnet): 381,651
BFT_GATE_RELAX_HEIGHT
BFT can run with ⌈2/3 × N⌉ active validators instead of full mesh.
Scheduled @ h=551,500

Originally BFT activation required every active validator to be connected at startup. Post-fork the gate relaxes to ⌈2/3 × N⌉, so the chain can recover from a single-validator outage without a coordinated halt-and-restart.

Activation height (testnet): 551,500
JAIL_CONSENSUS_HEIGHT
Jail decisions become consensus state via `JailEvidenceBundle` system txs.
Scheduled @ h=1,030,500

Replaces the legacy local-only `check_liveness` jail trigger with an epoch-boundary system transaction (`StakingOp::JailEvidenceBundle`, sender `PROTOCOL_TREASURY`, dispatch recompute-and-compare for auth). Every node applies identical jail state post-fork — closes the divergence class observed when LivenessTracker was per-node in-memory.

Activation height (testnet): 1,030,500
NFT_TOKENOP_HEIGHT
SRC-721 + SRC-1155 dispatch (DO NOT activate yet).
Dormant — DO NOT activate

Wire format + Pass-1 gate shipped; the dispatch + storage layer that turns the parsed payload into state is not yet implemented, so activating this fork before the apply path lands would halt every validator on the first matching transaction. Stays dormant until the follow-up release ships the apply path.

Cross-network comparison
ForkMainnetTestnet
STATE_ROOT_FORK_HEIGHT100.0K100.0K
SENTRIX_LEGACY_VALIDATION_HEIGHT557.1K0
VOYAGER_FORK_HEIGHT579.0K10
VOYAGER_EVM_HEIGHT579.1K752
VOYAGER_REWARD_V2_HEIGHT590.1K100
TOKENOMICS_V2_HEIGHT640.8K381.7K
BFT_GATE_RELAX_HEIGHT692.7K551.5K
ADD_SELF_STAKE_HEIGHT731.2K0
JAIL_CONSENSUS_HEIGHT950.4K1.03M
NFT_TOKENOP_HEIGHTdormantdormant
Sentrix Scan — Block Explorer