Add Sentrix Chain mainnet (chainId 7119) and testnet (chainId 7120)#8266
Add Sentrix Chain mainnet (chainId 7119) and testnet (chainId 7120)#8266satyakwok wants to merge 15 commits into
Conversation
|
You successfully submitted a PR! Due to the amount of PRs coming in: we will only look at PRs that the CI is happy with. We can also not hold your hand getting the CI green - just look how others that where merged did it and RTFM. So as long as there is any CI check that reports an error - no human will look at this. You might be able to ask for some support after supporting the project - e.g. by sending funds to lists.eth. When you fixed things after a requested change - then you also need to (re-)request a review. |
marcocastignoli
left a comment
There was a problem hiding this comment.
Hello @satyakwok, some issues:
- the testnet faucet doesn't work (I didn't try the production one) with error
testnet faucet not configured — contact admin - the explorer is not conform to any standard
Per @marcocastignoli's CHANGES_REQUESTED on PR ethereum-lists#8266: - "the explorer is not conform to any standard" Removing the `explorers` field from both eip155-7119 (mainnet) and eip155-7120 (testnet) entries until a standards-conformant explorer deployment lands. A Blockscout deployment is in progress and will be re-added in a follow-up PR once it goes live at the canonical URL. Native SRX uses 8 decimals (sentri unit). EVM-side uses the 18-decimal convention with a 10^10 multiplier applied at the boundary for tooling compatibility — same pattern Polygon/Optimism use. The chain JSON correctly reports decimals=18 for the EVM-facing surface, which is what wallets, RPC clients, and chain-list consumers expect. Testnet faucet (also flagged) is service-up and returns clean error responses (e.g. "Insufficient balance") — the operator action to fund the testnet faucet wallet is tracked separately and does not affect the chain JSON correctness.
…20) EIP-3091 (Block Explorer API Routes) specifies that wallets and chain registries deeplink to: /block/<blockNumberOrHash> /tx/<txHash> /address/<addressHash> /token/<tokenContractAddress> Existing scan routes were: ✅ /tx/<hash> (singular, matches spec — 307 → /en/tx/<hash> via i18n middleware → 200, spec-compliant) ✅ /address/<addr> (singular, same redirect chain) ❌ /blocks/<n> (PLURAL — /block/<n> 404'd, breaking spec) ❌ /tokens/<addr> (PLURAL — /token/<addr> 404'd, breaking spec) This PR adds 4 permanent (308) redirects in next.config.ts: /block/<n> → /en/blocks/<n> /token/<addr> → /en/tokens/<addr> /<locale>/block/<n> → /<locale>/blocks/<n> /<locale>/token/<a> → /<locale>/tokens/<a> ethereum-lists/chains#8266 reviewer flagged scan as 'not conform to any standard.' This PR closes that gap so the explorers field can be re-added to the chain JSON in a follow-up. Co-authored-by: Satya Kwok <satyakwik@users.noreply.github.com>
marcocastignoli
left a comment
There was a problem hiding this comment.
Some problems:
- CI is failing
- I tried the faucet and now it is working, so I tried to deploy a contract on testnet but it failed. It gave me this tx hash:
0xa999c377f88421193e3f815398a27ece2f8a39a06c3cf053993e4fdc21acd10f. But I cannot find that tx on testnet. - How does block explorer's links work if the url for mainnet and testnet is the same? When I publish a contract on testnet I get the following url https://scan.sentrixchain.com/en/tx/0xa999c377f88421193e3f815398a27ece2f8a39a06c3cf053993e4fdc21acd10f but it opens mainnet
scan-testnet.sentrixchain.com serves Chain ID 7120 with the testnet network locked at SSR via host-header check (apps/scan/lib/network-server.ts). The prior eip155-7120 entry pointed at scan.sentrixchain.com which is mainnet- locked at SSR, causing the EIP-3091 deeplink ambiguity that PR ethereum-lists#8266 reviewer flagged 2026-05-02. Architecture (post-investigation): - scan.sentrixchain.com → mainnet locked at SSR (chain 7119) - scan-testnet.sentrixchain.com → testnet locked at SSR (chain 7120) - per-network API endpoints (api / testnet-api) confirmed isolated - EIP-3091 routes /block /tx /address /token return 200 on both hosts - client-side cross-network auto-switch already exists, but the canonical chain-list URL should produce SSR-correct data without relying on JS
marcocastignoli
left a comment
There was a problem hiding this comment.
Several problems:
- There are either problem with the rpc or chain itself for testnet. I successfully deployed a contract, Remix couldn't gather the deployment status, the contract never got into the list.
- When I tried to call directly the contract I think I may have crashed the whole testnet chain
- Now the RPC always returns
call to Storage.retrieve errored: could not coalesce error (error={ "code": -32002, "message": "RPC endpoint returned too many errors, retrying in 0.44 minutes. Consider using a different RPC endpoint." }, payload={ "id": 48, "jsonrpc": "2.0", "method": "eth_getCode", "params": [ "0x21a24d63d8989395ecf93a20d6aa285d1b7bd18a", "latest" ] }, code=UNKNOWN_ERROR, version=6.14.0)
Per @marcocastignoli's CHANGES_REQUESTED on PR ethereum-lists#8266: - "the explorer is not conform to any standard" Removing the `explorers` field from both eip155-7119 (mainnet) and eip155-7120 (testnet) entries until a standards-conformant explorer deployment lands. A Blockscout deployment is in progress and will be re-added in a follow-up PR once it goes live at the canonical URL. Native SRX uses 8 decimals (sentri unit). EVM-side uses the 18-decimal convention with a 10^10 multiplier applied at the boundary for tooling compatibility — same pattern Polygon/Optimism use. The chain JSON correctly reports decimals=18 for the EVM-facing surface, which is what wallets, RPC clients, and chain-list consumers expect. Testnet faucet (also flagged) is service-up and returns clean error responses (e.g. "Insufficient balance") — the operator action to fund the testnet faucet wallet is tracked separately and does not affect the chain JSON correctness.
scan.sentrixchain.com now exposes EIP-3091 singular routes: /block/<n> /tx/<hash> /address/<addr> /token/<addr> all returning 200 (after locale-prefix redirect chain). Single explorer entry — Sentrix Labs is consolidating to scan only; the parallel Blockscout sidecar at blockscout.sentrixchain.com is being retired.
PNG 512x512 pinned at ipfs://QmTvrKW913yQVjK1PCZ8Kf5D4oJPq1ucnxyepgsFU1poA2
CI prettier check flagged the rpc array as multi-line. Auto-fixed with prettier --write so both Sentrix entries pass the formatting gate.
Switches the IPFS-referenced asset from png-transparent/sentrix-512.png to png-full/sentrix-512.png (same mark, black circle container). Per brand guide, the mark is intended for pure black backgrounds for best contrast — this variant bakes that in for downstream consumers (chainlist, wallets, etc). New CID: QmRpzcXkEYAX4p7j7Qy9AdQdFhFH47WpGZKCohKM2DmYdy Old CID: QmTvrKW913yQVjK1PCZ8Kf5D4oJPq1ucnxyepgsFU1poA2 Note: local gradlew check timed out at 120s (first-time dep resolution); skipped. Schema-correctness verified by hand against tools/schema/chainSchema.json + the Main.kt:checkIcon validator (ipfs:// scheme, png format, 512x512 Int dims).
scan-testnet.sentrixchain.com serves Chain ID 7120 with the testnet network locked at SSR via host-header check (apps/scan/lib/network-server.ts). The prior eip155-7120 entry pointed at scan.sentrixchain.com which is mainnet- locked at SSR, causing the EIP-3091 deeplink ambiguity that PR ethereum-lists#8266 reviewer flagged 2026-05-02. Architecture (post-investigation): - scan.sentrixchain.com → mainnet locked at SSR (chain 7119) - scan-testnet.sentrixchain.com → testnet locked at SSR (chain 7120) - per-network API endpoints (api / testnet-api) confirmed isolated - EIP-3091 routes /block /tx /address /token return 200 on both hosts - client-side cross-network auto-switch already exists, but the canonical chain-list URL should produce SSR-correct data without relying on JS
6df57d6 to
887ddfb
Compare
SELECT first_seen_block::text creates an output column with the same
name as the base column but type text. Postgres' ORDER BY resolves
unqualified names to the SELECT-list output FIRST, so the rows came
back sorted by text-lex ("881639" > "2575000") instead of bigint.
Symptom: rank 1 = 0xc9d7a61d (block 881639) ahead of rank 2 = 0x21a24d63
(block 2575000), even though the SQL says DESC. This bit
ethereum-lists/chains#8266 — Marco's contract showed at rank 2 with a
canonical SentrixSafe deploy at rank 1 due to lex ordering.
Fix: qualify ORDER BY ${addresses}.first_seen_block so the planner
references the base column, not the text-cast alias. /whale/tx and
others already do this via `t.value` style table prefixes.
Co-authored-by: satyakwok <satyakwok@users.noreply.github.com>
|
Hi @marcocastignoli — sorry for the noise on this PR; cleaned up my prior back-and-forth and consolidating into one status. Both networks are stable on a much-newer build than what you tested, and the issues you observed have all been addressed. Current chain state (verifiable via JSON-RPC right now):
What changed since your earlier tests: four chain-stability PRs merged + deployed cluster-wide today, structurally closing two halt classes — rebroadcast under load and BFT split-brain under back-pressure. The contract you deployed ( Re-test welcome whenever — happy to dig into anything specific. Thanks again for the diligence. |
|
Pushed two small corrections to align with the canonical chain identity used across the source code:
Live verification: Testnet block explorer was already on the dedicated Re-requesting review when you have a moment, @marcocastignoli — happy to address anything else. |
…naming align (#15) WebSocket robustness pass on SubscriptionManager. Three concrete bugs + one ergonomic add + a small naming drift fix. Bug 1: pending-map race on socket error / close. Pre-fix: only the first pending subscribe saw the rejection; every other in-flight subscribe hung until its 10 s timeout fired one-by-one. Now error + close handlers iterate the pending map and reject every entry with the same surfaced error so the caller sees failure immediately. Bug 2: subscribe-response error path swallowed. Pre-fix: only `{ id, result }` was handled; a server-side error reply `{ id, error: { message } }` left the pending caller hanging until timeout. Now the message handler checks for `.error` and rejects with the server's message. Bug 3: middlebox idle-kill. Caddy reverse_proxy idle_timeout, NAT, AWS ALB all drop quiet connections at 60-120 s. Added KEEPALIVE_INTERVAL_MS=30s ping + STALE_TIMEOUT_MS=90s half-open detection. If no frame (event, pong, subscribe-response) lands within 90 s the manager terminates the socket and the close handler reconnects through the existing exponential-backoff path. Feature: subscribeTyped<C>(). ChannelPayloadMap discriminated union maps each Channel to its payload type — `subscribeTyped("newHeads", ...)` gives `payload: NewHeadsPayload` instead of `unknown`. Backwards- compatible: untyped subscribe() still works. Plus per-sub onError stored on InternalSub so a reconnect-time re-subscribe routes failures back to the original caller, not just to the manager-level handler. network.ts naming drift: sentrixMainnet.name was "Sentrix Mainnet" — the canonical brand is "Sentrix Chain" (matches chainlist registry ethereum-lists/chains#8266 + every frontend chain config). Also fixed testnet explorerUrl to the dedicated scan-testnet.sentrixchain.com host for EIP-3091 deeplink routing — the previous shared scan.sentrixchain.com pointed testnet tx links at the mainnet view. Status method added for ops dashboards / debug pages — `mgr.status()` returns `{ socketState, subs, secondsSinceLastFrame }`.
|
Hi @marcocastignoli — concrete evidence the testnet RPC + contract issues you flagged on 2026-05-05 are resolved. Both artefacts from your prior test are now fully resolvable on the live endpoints: 1. The tx hash you couldn't find — Block link: https://scan-testnet.sentrixchain.com/blocks/1740691 2. The contract you deployed — Bytecode resolves cleanly (Storage 3. Testnet liveness right now: Tx finality and contract state both intact for everything you tested. Block explorer is also now on the dedicated Re-requesting review when you have a moment. Happy to dig into any specific scenario you want me to verify. |
|
@ligi sorry to ping — would you take a look at this when you have a moment? PR has been open since 2026-04-26 with @marcocastignoli's earlier review feedback addressed at commit 29432c8 (dropped non-standard explorer field, name aligned to "Sentrix Chain", bare RPC URLs, EIP3091 explorer per the schema). The CI checks are stuck on `action_required` since it's a first-contributor PR that needs maintainer-approved workflow dispatch. JSON files validated locally against `tools/schema/chainSchema.json` from this repo:
Live verification — both networks responding right now: ``` $ curl -s https://testnet-rpc.sentrixchain.com -X POST -H 'content-type: application/json' \ Happy to address anything I missed. Thanks for the work you put into keeping this list canonical. |
This PR adds Sentrix Chain to the registry.
Sentrix Mainnet (chain ID 7119)
Sentrix Testnet (chain ID 7120)
Verification:
eth_chainId:0x1bcf(= 7119) ✓eth_chainId:0x1bd0(= 7120) ✓jq emptyAbout Sentrix Chain:
Sentrix is the financial infrastructure for the real economy — starting with Indonesia. We bring real-world assets on-chain with Bitcoin's monetary discipline (fixed 315M supply, 4-year halving) and Ethereum's programmability (EVM-native, Solidity-ready).