Skip to main content

Networks

Mainnet

Chain ID7119 (0x1bcf)
RPChttps://rpc.sentrixchain.com
Explorerhttps://scan.sentrixchain.com
P2P port30303
API port8545
Block time1s
Validators4 (DPoS proposer rotation under BFT finality: Foundation, Treasury, Core, Beacon)
Native coinSRX
ConsensusVoyager (DPoS + BFT, voyager_activated=true since h=579047 / 2026-04-25)
EVMActive — evm_activated=true since the same height; MetaMask compatible
Reward distributionV4 reward v2 active since h=590100 / 2026-04-25 — coinbase routes to PROTOCOL_TREASURY (0x0000…0002), validators + delegators claim via ClaimRewards staking op
Binaryv2.1.47

Testnet

Chain ID7120 (0x1bd0)
RPChttps://testnet-rpc.sentrixchain.com/rpc
Explorerhttps://scan.sentrixchain.com (unified UI, toggle Testnet)
APIhttps://testnet-api.sentrixchain.com
P2P port31303–31306
API port9545
Block time1s
Validators4 (DPoS + BFT, 3/4 fault tolerance)
EVMActive — Solidity contracts, MetaMask compatible
Voyager fork height10
EVM fork height752

Testnet tokens have no real value. Use the faucet to get test SRX.

Testnet runs in Docker on build host (/opt/sentrix-testnet-docker/) since the 2026-04-23 migration; fresh genesis at chain_id 7120, current post tokenomics-v2 fork at h=381651, binary v2.1.47.

Mainnet operational note (2026-04-25, post-Voyager): mainnet successfully transitioned from Pioneer PoA to Voyager DPoS+BFT at h=579047. EVM was activated in the same window. The first activation attempt at h=557244 livelocked on a peer-mesh partition; root cause was fixed in v2.1.26 (L1 multiaddr advertisements + L2 cold-start gate per PRs #297–#306) and v2.1.27 (cold-start race PR #307). The SENTRIX_FORCE_PIONEER_MODE emergency override is no longer set on any mainnet validator.

Connecting

MetaMask

Add network manually:

FieldMainnetTestnet
Network NameSentrixSentrix Testnet
RPC URLhttps://rpc.sentrixchain.comhttps://testnet-rpc.sentrixchain.com/rpc
Chain ID71197120
SymbolSRXSRX
Explorerhttps://scan.sentrixchain.comhttps://scan.sentrixchain.com (toggle Testnet)

ethers.js

import { JsonRpcProvider } from "ethers";

// Testnet (for development)
const provider = new JsonRpcProvider("https://testnet-rpc.sentrixchain.com");

// Mainnet (for production)
// const provider = new JsonRpcProvider("https://rpc.sentrixchain.com");

const height = await provider.getBlockNumber();
const balance = await provider.getBalance("0x...");

curl

# Testnet (default for development)
curl -s https://testnet-rpc.sentrixchain.com/chain/info | jq

# Mainnet (production)
curl -s https://rpc.sentrixchain.com/chain/info | jq

# JSON-RPC
curl -X POST https://testnet-rpc.sentrixchain.com/rpc \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}'

Running your own node

# Join mainnet
sentrix init --admin 0x<genesis_admin>
sentrix start --peers [BOOTSTRAP_NODE]:30303

# Join testnet
SENTRIX_CHAIN_ID=7120 SENTRIX_API_PORT=9545 \
sentrix init --admin 0x<your_address>
SENTRIX_CHAIN_ID=7120 SENTRIX_API_PORT=9545 \
sentrix start --port 31303 --peers [TESTNET_BOOTSTRAP]:31303

How chain_id works

The binary reads SENTRIX_CHAIN_ID env var at startup. Default is 7119 (mainnet). Peers with different chain_id are rejected on handshake — mainnet and testnet can't talk to each other even if they share an IP.

Transactions include chain_id in the signing payload. A tx signed for mainnet (7119) is invalid on testnet (7120) and vice versa.