fix(chain): refresh DEFAULT_RPC_POOL, drop stale rpc.sentinel.co as primary#11
Open
Sentinel-Bluebuilder wants to merge 1 commit intosentinel-official:mainfrom
Conversation
…rimary rpc.sentinel.co has been stuck behind tip while still reporting catching_up=false, so it serves stale ABCI bank balances. Apps that pick it as primary (which the latency-first pool does on cold start, since sentinel.co usually answers /status quickly) end up reading wallet balances and subscription state that are weeks old — see the e2e report in findings/2026-04-30-cli-e2e-real-money-report.md where every broadcast attempt failed against the old 3-entry pool. Replace with an 8-endpoint audited pool (verified 2026-05-02 against a known funded sent1 address — every entry reported catching_up=false AND served a correct ABCI bank balance): busurnode, suchnode, publicnode, trinitystake (sub-500ms) polkachu, autostake, freshSTAKING (community validators) rpc.sentinel.co (kept last as stale-fallback only) Consumers (deploy.ts, settings.ts) already pull DEFAULT_RPC_POOL through the latency-aware failover, so no other code change is needed. Existing unit test in tests/unit/chain.test.ts continues to pass — it only asserts length >= 3 and https:// prefix, both still true. README updated to match.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
rpc.sentinel.cohas been stuck behind tip while still reportingcatching_up=false, so it serves stale ABCI bank balances. Apps that pick it as primary (which the latency-first failover does on cold start, since sentinel.co usually answers/statusquickly even when its ABCI state is stale) end up reading wallet balances and subscription state that are weeks old.This is exactly the failure mode captured in
findings/2026-04-30-cli-e2e-real-money-report.md(local-only finding, not in this PR), where every broadcast attempt failed against the old 3-entry pool with:/statuslying about sync state is stronger than a connectivity problem — a node can answer/statusinstantly while serving ABCI state that is hours/days behind, and there's no way to distinguish from the client without an out-of-band check.Audit method
For each candidate endpoint:
/statusreportscatching_up: falsesent1...address returns the expected amountStep 3 is the load-bearing one — it catches stale-ABCI nodes that pass
/statuschecks. The full audit script is part ofSentinel-Bluebuilder/blue-js-sdkPR #28 andSentinel-Bluebuilder/sentinel-node-tester@d34b05a(scripts/audit-rpc-endpoints.mjs).Refreshed pool (verified 2026-05-02)
https://rpc-sentinel.busurnode.comhttps://rpc.sentinel.suchnode.nethttps://sentinel-rpc.publicnode.comhttps://rpc.trinitystake.iohttps://sentinel-rpc.polkachu.com:443https://sentinel-mainnet-rpc.autostake.com:443https://sentinel-rpc.freshstaking.comhttps://rpc.sentinel.co:443Scope
src/main/services/chain.ts— replaceDEFAULT_RPC_POOLliteral, expand JSDoc.README.md— update the RPC pool row in the architecture table.Consumers (
src/main/services/deploy.ts,src/main/services/settings.ts) already pullDEFAULT_RPC_POOLthrough the latency-aware failover, so no other code change is needed.Test plan
tests/unit/chain.test.ts— assertions are loose (length >= 3,https://prefix); both still pass.withFailover(existing) handles ordering at runtime — pool order here is just the seed.curl https://rpc-sentinel.busurnode.com/statuswithcatching_up=falseand a recentlatest_block_time.Related
Sentinel-Bluebuilder/blue-js-sdk#28— same refresh applied to the SDK'sRPC_ENDPOINTSdefaults.Sentinel-Bluebuilder/sentinel-node-tester@d34b05a— same refresh applied to the node tester'score/constants.js.