Networks
Centrifuge, Altair, and Development — fixed in code, not configurable
| Network Key | SS58 Prefix | Native Token | HTTP Endpoint | Notes |
|---|---|---|---|---|
centrifuge |
36 | CFG (18 decimals) | https://fullnode.centrifuge.io |
Centrifuge mainnet — Polkadot parachain 2031. Halted since 2026-06-28, block 9799037. Reads still succeed but return data frozen at that head. |
altair |
136 | AIR (18 decimals) | https://fullnode.altair.centrifuge.io |
Altair — Kusama parachain 2088. IsTestNetwork is false: a canary network with a real, exchange-listed token, not a free testnet. |
development |
42 | UNIT (18 decimals) | http://127.0.0.1:9933 |
Local development node. SS58 prefix 42 is the generic Substrate prefix. The only network with IsTestNetwork = true. |
Centrifuge mainnet is halted. As of the last chain-status check, the network had produced no
block since 2026-06-28 (22+ days at time of writing).
account.getBalance and
utility.chainInfo against centrifuge still respond — they just reflect state as of the
halt. Use utility.chainInfo's headBlockAgeSeconds field to detect this rather than
trusting a successful response as proof of liveness. See Chain Info.
Altair is not a testnet. Despite running alongside Centrifuge's canary/testing process, Altair
carries a real, exchange-listed AIR token. Treat balances and any future write operations against
altair as real funds, not disposable test value.
How Network Resolution Works
- Each operation that needs one includes a
networkconfig key. - The node resolves it case-insensitively against the three keys above via
CentrifugeNetworks.TryResolve. - If the key doesn't match, the node returns
CFG_INVALID_NETWORK— there is no default network to silently fall back to. A silently-defaulted network is exactly how an operation ends up reading (or, eventually, writing to) the wrong chain.
network isn't always required. Only account.getBalance and
utility.chainInfo actually call the chain, so only those two require network.
utility.validateAddress, utility.convertUnits, and utility.convertRate run
entirely locally and ignore it. utility.convertAddress uses a separate field,
targetNetwork, described below. See Input & Output for the
full per-operation breakdown.
Conversion-Only Targets
utility.convertAddress accepts two additional targetNetwork values that are valid
re-encoding destinations but are not chains this node ever connects to over RPC:
| Target Key | SS58 Prefix | What it's for |
|---|---|---|
polkadot | 0 | Re-encode a Centrifuge/Altair address into its Polkadot relay-chain string form, e.g. for a cross-chain UI. |
substrate | 42 | The generic Substrate prefix — the same value development uses, but as a conversion target rather than an RPC endpoint. |
Adding a Network
There is currently no configuration-driven way to add a network — the three RPC networks and two conversion
targets are all defined in code, in CentrifugeNetworks.cs. Adding a network requires a code change to
this integration (unlike nodes whose endpoints come from an appsettings section). See
Roadmap.