Skip to content

Mainnet Railway env-var sets — Day 0 wire-up (copy-paste ready)

Generated 2026-06-22 after scripts/mainnet/genesis-deploy.sh completed. Every block is a Raw Editor paste-target — no placeholders, all 15 mainnet addresses filled in. Cross-reference: genesis-addresses.json + CLAUDE.md "MAINNET LIVE" section.

Service order to wire (least → most dependent)

  1. status-app (verifies chain externally, no other deps)
  2. explorer/backend (your custom explorer's indexer)
  3. explorer/frontend (depends on backend)
  4. staking-app
  5. dex-app
  6. domain-app
  7. snapshot publisher / archive RPC (Day 1)
  8. airdrop-indexer (Day 1+)

1. status-app (status.sanect.com)

bash
NEXT_PUBLIC_RPC_URL=https://rpc.sanect.com
NEXT_PUBLIC_COMETBFT_RPC_URL=https://rpc.sanect.com/rpc
NEXT_PUBLIC_REST_URL=https://rpc.sanect.com/rest
NEXT_PUBLIC_SHIELDED_POOL_ADDRESS=0x5532Dc2B743D45Fd0121E382696521ED62DD3ecf
REDIS_URL=${{Redis.REDIS_PRIVATE_URL}}

(Make sure your Redis database is named Redis. If it's named differently in your project — e.g. redis-mainnet — change the reference to ${{redis-mainnet.REDIS_PRIVATE_URL}}.)


2. explorer/backend (your custom explorer backend)

bash
DATABASE_URL=${{Postgres.DATABASE_URL}}
NODE_URL=https://rpc.sanect.com
COMETBFT_RPC_URL=https://rpc.sanect.com/rpc
DENOM=asnct
SHIELDED_POOL_ADDRESS=0x5532Dc2B743D45Fd0121E382696521ED62DD3ecf
NAME_REGISTRY_ADDRESS=0xdC7bB6f4d1c217bd5729a719AFf55de4Cf3EaE23
NAME_RESOLVER_ADDRESS=0xA0c101e04581f287836746ec2844831DAc946dff
NAME_REVERSE_REGISTRAR_ADDRESS=0x6A5e80493281237f678F5f5c64Db42572c20458c
SUBDOMAIN_BASE=sanect.org
INDEXER_BATCH_SIZE=200
INDEXER_BATCH_SLEEP_MS=100
HTTP_POOL=20
PORT=8080

SUBDOMAIN_BASE=sanect.org — adjust if you're using a different subdomain claim base for mainnet validator self-registration.


3. explorer/frontend (scan.sanect.com)

bash
BACKEND_URL=http://explorer-backend.railway.internal:8080

That's actually it. Mainnet defaults are baked into the code per the env-driven config landed earlier — empty config = mainnet branding, mainnet URLs. Adjust BACKEND_URL to reference your specific backend service name.

If you want to explicitly pin everything:

bash
BACKEND_URL=http://explorer-backend.railway.internal:8080
NEXT_PUBLIC_NETWORK_NAME=Sanect
NEXT_PUBLIC_EVM_CHAIN_ID=7628
NEXT_PUBLIC_RPC_URL=https://rpc.sanect.com
NEXT_PUBLIC_COMETBFT_RPC_URL=https://rpc.sanect.com/rpc
NEXT_PUBLIC_REST_URL=https://rpc.sanect.com/rest
NEXT_PUBLIC_APP_URL=https://app.sanect.com
NEXT_PUBLIC_SWAP_URL=https://swap.sanect.com
NEXT_PUBLIC_DOMAIN_URL=https://domain.sanect.com
NEXT_PUBLIC_EXPLORER_URL=https://scan.sanect.com
NEXT_PUBLIC_STATUS_URL=https://status.sanect.com
NEXT_PUBLIC_DOCS_URL=https://docs.sanect.com
NEXT_PUBLIC_AIRDROP_URL=https://airdrop.sanect.com

Do NOT set NEXT_PUBLIC_NETWORK_LABEL — its presence flips the build into testnet mode.


4. staking-app (app.sanect.com)

bash
NEXT_PUBLIC_CHAIN_ID=sanect_7628-1
NEXT_PUBLIC_EVM_CHAIN_ID=7628
NEXT_PUBLIC_NODE_URL=https://rpc.sanect.com
NEXT_PUBLIC_SCAN_RPC_URL=https://archive.sanect.com
NEXT_PUBLIC_SHIELDED_POOL_ADDRESS=0x5532Dc2B743D45Fd0121E382696521ED62DD3ecf
NEXT_PUBLIC_POOL_DEPLOY_BLOCK=<lookup>

For NEXT_PUBLIC_POOL_DEPLOY_BLOCK: from your laptop run

bash
cast receipt <ShieldedPool-deploy-tx-hash> --rpc-url https://rpc.sanect.com | grep blockNumber

The tx hash is in privacy/broadcast/DeployShieldedPoolV14.s.sol/7628/run-latest.json — paste the block number into that env var. Setting it skips empty pre-deploy block scans, makes shielded panel ~5x faster.

Archive RPC is live at https://archive.sanect.com (confirmed 2026-07-07, full state from Block #1).

Do NOT set FAUCET_PRIVATE_KEY — mainnet has no faucet, the UI degrades gracefully.


5. dex-app (swap.sanect.com)

bash
NEXT_PUBLIC_EVM_CHAIN_ID=7628
NEXT_PUBLIC_NODE_URL=https://rpc.sanect.com
NEXT_PUBLIC_EXPLORER_URL=https://scan.sanect.com
NEXT_PUBLIC_DEX_FACTORY=0xDF03522CEc5bd2a609863De38da2eEf1267EE0c8
NEXT_PUBLIC_DEX_ROUTER=0xBf08497825CFcF04037efD852C9bBd0C9C64d175
NEXT_PUBLIC_WSNCT=0x4f35BD61FEd919aA9933C6333e388b3B7E1108Dc
NEXT_PUBLIC_DEX_INIT_CODE_HASH=0xb6fb172d34989863152db2329e17e24676ae05dd3fd8895e3025029eea9973ec
NEXT_PUBLIC_MASTERCHEF=0xa8264E2c8EC09b0251A789860388f70e0Ef563A7
NEXT_PUBLIC_TREASURY_EMITTER=0x833E69Fd81f8678C2cFc800277Fe5271fbf680bb

Bridge env vars left intentionally unset — Hyperlane ISM upgrade is Day 7+ work, leaving these blank disables the Bridge tab in the UI rather than misrouting to testnet contracts.


6. domain-app (domain.sanect.com)

bash
NEXT_PUBLIC_EVM_CHAIN_ID=7628
NEXT_PUBLIC_CHAIN_NAME=Sanect
NEXT_PUBLIC_NODE_URL=https://rpc.sanect.com
NEXT_PUBLIC_EXPLORER_URL=https://scan.sanect.com
NEXT_PUBLIC_REGISTRY_ADDRESS=0xdC7bB6f4d1c217bd5729a719AFf55de4Cf3EaE23
NEXT_PUBLIC_RESOLVER_ADDRESS=0xA0c101e04581f287836746ec2844831DAc946dff
NEXT_PUBLIC_REVERSE_ADDRESS=0x6A5e80493281237f678F5f5c64Db42572c20458c
NEXT_PUBLIC_PRICE_ORACLE_ADDRESS=0x19bA43C7dd508162221A1324F35c572aB8cBd02C
NEXT_PUBLIC_BASE_REGISTRAR_ADDRESS=0xd45357B67C82311eD3e36DE279599CD84CE15AcA
NEXT_PUBLIC_SEALED_BID_AUCTION_ADDRESS=0xdAD7EEF74725F0ee71Ef8851A37329D33764Bac0
NEXT_PUBLIC_MARKETPLACE_ADDRESS=0x0b6E3C4bF83097636294c076443feF7b6AC7a34D
NEXT_PUBLIC_RESERVED_ADDRESS=0x26e829e6c7d9e78b2dbB88df9Edbe0044776CE6D

7. Snapshot publisher / archive RPC (Day 1, archive.sanect.com + snapshots.sanect.com)

bash
NETWORK=mainnet
CHAIN_ID=sanect_7628-1
EVM_CHAIN_ID=7628
TARGET_EVM_CHAIN_ID=7628
HOMEDIR=/data/.sanectd
PRUNING=nothing
MONIKER=sanect-mainnet-archive
JOIN_NETWORK=true
SEED_NODE_URL=https://rpc.sanect.com
SEED_NODE_ID=<see below>
SEED_PEER_HOST=p2p.sanect.com:35998
SNAPSHOT_UPLOAD_INTERVAL_HOURS=6
R2_ACCOUNT_ID=<cloudflare account id>
R2_ACCESS_KEY_ID=<r2 token>
R2_SECRET_ACCESS_KEY=<r2 token>
R2_BUCKET=sanect-snapshots-mainnet
R2_PUBLIC_URL=https://snapshots.sanect.com
SNAPSHOT_KEEP=3

Get SEED_NODE_ID from primary validator shell:

bash
sanectd cometbft show-node-id --home /data/.sanectd

TARGET_EVM_CHAIN_ID=7628 must be set as build arg (Variables panel — Railway treats it as both).


8. airdrop-indexer (Day 1+, airdrop-api.sanect.com)

bash
DATABASE_URL=${{Postgres.DATABASE_URL}}
ETH_RPC_URL=https://eth-mainnet.g.alchemy.com/v2/<alchemy-key>
SANECT_RPC_URL=http://snapshot-publisher.railway.internal:8080
SANECT_CHAIN_ID=7628
SANECT_START_BLOCK=1
DEX_FACTORY_ADDRESS=0xDF03522CEc5bd2a609863De38da2eEf1267EE0c8
DEX_ROUTER_ADDRESS=0xBf08497825CFcF04037efD852C9bBd0C9C64d175
WSNCT_ADDRESS=0x4f35BD61FEd919aA9933C6333e388b3B7E1108Dc
MASTERCHEF_ADDRESS=0xa8264E2c8EC09b0251A789860388f70e0Ef563A7
SHIELDED_POOL_ADDRESS=0x5532Dc2B743D45Fd0121E382696521ED62DD3ecf
SANECT_REGISTRY_ADDRESS=0xdC7bB6f4d1c217bd5729a719AFf55de4Cf3EaE23
SEALED_BID_AUCTION_ADDRESS=0xdAD7EEF74725F0ee71Ef8851A37329D33764Bac0
MARKETPLACE_ADDRESS=0x0b6E3C4bF83097636294c076443feF7b6AC7a34D
SNAPSHOT_CUTOFF_TS=2026-06-21T23:59:59Z
UNI_V2_SUBGRAPH=https://gateway.thegraph.com/api/<thegraph-key>/subgraphs/id/A3Np3RQbaBA6oKJgiwDJeo5T3zrYfGHPWFYayMwtNDum
UNI_V3_SUBGRAPH=https://gateway.thegraph.com/api/<thegraph-key>/subgraphs/id/5zvR82QoaXYFyDEKLZ9t6v9adgnptxYpKpSbxtgVENFV

BRIDGE_ADAPTER_ADDRESS left unset — bridge product detection is skipped until Hyperlane lands.


Verification checklist

After wiring each service and redeploying:

URLTestExpected
https://rpc.sanect.com/curl -X POST -d '{"jsonrpc":"2.0","id":1,"method":"eth_chainId"}'0x1dcc
https://app.sanect.comHeader"Sanect" (no testnet badge)
https://swap.sanect.comConnect walletAsks to switch to chain 7628
https://domain.sanect.comOpen LookupRegistry address shown matches 0x455d74…
https://scan.sanect.comHero title"Sanect explorer" (no testnet banner)
https://status.sanect.comEndpoints cardAll reachable; uptime bars populating

All six green = ready for the launch post.