Fix stale blacklist chain_ids, add stale-blacklist warning to sync script

Root cause of the balances-test hang in pezkuwi-wallet-android (silent
for over an hour, cancelled multiple times before finding this):
every single chain_id in blocked-chains.json was stale - none matched
anything in Nova's current chains.json (last_updated 2026-02-11, ~5
months of upstream chain-id drift since). The blacklist mechanism
silently no-opped for all 6 entries, so none of the chains it was
meant to exclude were actually excluded.

With the blacklist ineffective, several chains with genuinely dead RPC
endpoints (confirmed live 2026-07-08: 3DPass, Curio, Quartz, Subsocial
- 502s, timeouts, SSL failures) stayed in the merged output. The
Android app's ChainConnection/NodeAutobalancer has no backoff/circuit
breaker for dead endpoints, so it retried them in an extremely tight
loop (~1 attempt/second, 1500-1800+ attempts observed in a 25 minute
window per chain) - burning resources indefinitely and starving the
app's actual chain-sync/test work, which is what made the Android CI
job hang for over an hour with zero progress.

Fix: re-verified and corrected all chain_ids (matching by current
name against live chains.json), added 3DPass/Curio/Subsocial which
weren't blacklisted before, dropped entries for chains no longer
present upstream at all (Passet Hub Testnet, Darwinia Crab, DeepBrain,
Exosama - nothing to block, kept them as historical noise otherwise).

Also added a stale-blacklist warning to sync_from_nova.py: it now
tracks which blocked chain_ids actually matched something in Nova's
current chains across all versions, and prints a warning listing any
that didn't - so this exact silent drift is caught at sync time going
forward instead of rotting unnoticed for another five months.
This commit is contained in:
2026-07-08 02:04:47 -07:00
parent 95939ab8a2
commit 2efab72f83
65 changed files with 7284 additions and 9091 deletions
+192 -226
View File
@@ -2829,39 +2829,6 @@
"supportsGenericLedgerApp": true
}
},
{
"chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
"name": "QUARTZ",
"assets": [
{
"assetId": 0,
"symbol": "QTZ",
"priceId": "quartz",
"icon": "QTZ.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://quartz.unique.network",
"name": "Unique node"
},
{
"url": "wss://eu-ws-quartz.unique.network",
"name": "Unique Europe node"
},
{
"url": "wss://us-ws-quartz.unique.network",
"name": "Unique US node"
}
],
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Quartz.svg",
"addressPrefix": 255,
"additional": {
"feeViaRuntimeCall": true
}
},
{
"chainId": "fc41b9bd8ef8fe53d58c7ea67c794c7ec9a73daf05e6d54b14ff6342c99ba64c",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
@@ -4194,40 +4161,6 @@
"disabledCheckMetadataHash": true
}
},
{
"chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
"name": "Subsocial (PAUSED)",
"assets": [
{
"assetId": 0,
"symbol": "SUB",
"precision": 10,
"priceId": "subsocial",
"icon": "SUB.svg"
}
],
"nodes": [
{
"url": "wss://para.f3joule.space",
"name": "Subsocial node"
},
{
"url": "wss://para.subsocial.network",
"name": "Dappforce node"
}
],
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://subquery-history-subsocial-prod.novasama-tech.org"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Subsocial_Parachain.svg",
"addressPrefix": 28
},
{
"chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
@@ -5743,6 +5676,75 @@
"supportsGenericLedgerApp": true
}
},
{
"chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e",
"name": "Aleph Zero",
"assets": [
{
"assetId": 0,
"symbol": "AZERO",
"priceId": "aleph-zero",
"staking": [
"aleph-zero",
"nomination-pools"
],
"precision": 12,
"icon": "AZERO.svg",
"buyProviders": {
"banxa": {
"coinType": "AZERO",
"blockchain": "AZERO"
}
}
}
],
"nodes": [
{
"url": "wss://ws.azero.dev",
"name": "Aleph Zero node"
}
],
"explorers": [
{
"name": "Subscan",
"extrinsic": "https://alephzero.subscan.io/extrinsic/{hash}",
"account": "https://alephzero.subscan.io/account/{address}"
}
],
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://subquery-history-aleph-zero-prod.novasama-tech.org"
}
],
"staking": [
{
"type": "subquery",
"url": "https://subquery-history-aleph-zero-prod.novasama-tech.org"
}
],
"staking-rewards": [
{
"type": "subquery",
"url": "https://subquery-history-aleph-zero-prod.novasama-tech.org"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/AlephZero.svg",
"addressPrefix": 42,
"additional": {
"themeColor": "#10B6B1",
"stakingWiki": "https://docs.novawallet.io/nova-wallet-wiki/staking/aleph-zero-azero-staking",
"defaultBlockTime": 1000,
"feeViaRuntimeCall": true
},
"options": [
"fullSyncByDefault",
"pushSupport",
"multisig"
]
},
{
"chainId": "3920bcb4960a1eef5580cd5367ff3f430eef052774f78468852f7b9cb39f8a3c",
"name": "Polkadex",
@@ -7194,6 +7196,50 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Hashed.svg",
"addressPrefix": 42
},
{
"chainId": "eip155:2109",
"name": "Exosama",
"assets": [
{
"assetId": 0,
"symbol": "SAMA",
"priceId": "exosama-network",
"type": "evmNative",
"icon": "SAMA.svg",
"precision": 18
}
],
"nodes": [
{
"url": "wss://rpc.exosama.com",
"name": "Exosama node"
}
],
"explorers": [
{
"name": "Exosama explorer",
"extrinsic": "https://explorer.exosama.com/tx/{hash}",
"account": "https://explorer.exosama.com/address/{address}"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://explorer.exosama.com/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Exosama.svg",
"addressPrefix": 2109,
"options": [
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "2f0555cc76fc2840a25a6ea3b9637146806f1f44b090c175ffde2a7e5ab36c03",
"name": "Bittensor",
@@ -7286,46 +7332,6 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Ajuna.svg",
"addressPrefix": 1328
},
{
"chainId": "6c5894837ad89b6d92b114a2fb3eafa8fe3d26a54848e3447015442cd6ef4e66",
"name": "3DPass",
"assets": [
{
"assetId": 0,
"symbol": "P3D",
"precision": 12,
"priceId": "3dpass",
"icon": "P3D.svg"
}
],
"nodes": [
{
"url": "wss://rpc.3dpass.org",
"name": "3DPass node"
},
{
"url": "wss://rpc.p3d.top",
"name": "Lzmz node"
}
],
"explorers": [
{
"name": "3DPass explorer",
"extrinsic": "https://explorer.3dpass.org/extrinsic/{hash}",
"account": "https://explorer.3dpass.org/account/{address}"
}
],
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://subquery-history-3dpass-prod.novasama-tech.org"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/3DPass.svg",
"addressPrefix": 71
},
{
"chainId": "f0b8924b12e8108550d28870bc03f7b45a947e1b2b9abf81bfb0b89ecb60570e",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
@@ -7369,6 +7375,57 @@
"ethereumBased"
]
},
{
"chainId": "86e49c195aeae7c5c4a86ced251f1a28c67b3c35d8289c387ede1776cdd88b24",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
"name": "Crab",
"assets": [
{
"assetId": 0,
"symbol": "CRAB",
"precision": 18,
"priceId": "darwinia-network-native-token",
"icon": "CRAB.svg"
},
{
"assetId": 1,
"symbol": "CKTON",
"precision": 18,
"type": "statemine",
"icon": "CKTON.svg",
"typeExtras": {
"assetId": "1026",
"isSufficient": true
}
}
],
"nodes": [
{
"url": "wss://crab-rpc.darwinia.network/",
"name": "Darwinia node"
}
],
"explorers": [
{
"name": "Subscan",
"extrinsic": "https://crab.subscan.io/extrinsic/{hash}",
"account": "https://crab.subscan.io/account/{address}"
}
],
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://subquery-history-crab-prod.novasama-tech.org"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Crab.svg",
"addressPrefix": 42,
"options": [
"ethereumBased"
]
},
{
"chainId": "4a587bf17a404e3572747add7aab7bbe56e805a5479c6c436f07f36fcc8d3ae1",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
@@ -7901,42 +7958,6 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Energy_Web_X.svg",
"addressPrefix": 42
},
{
"chainId": "31a7d8914fb31c249b972f18c115f1e22b4b039abbcb03c73b6774c5642f9efe",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
"name": "InvArch (PAUSED)",
"assets": [
{
"assetId": 0,
"symbol": "VARCH",
"precision": 12,
"icon": "VARCH.svg"
}
],
"nodes": [
{
"url": "wss://invarch.ibp.network",
"name": "IBP1 node"
},
{
"url": "wss://invarch.dotters.network",
"name": "IBP2 node"
}
],
"explorers": [
{
"name": "Statescan",
"account": "https://invarch.statescan.io/#/accounts/{address}",
"event": "https://invarch.statescan.io/#/events/{event}",
"extrinsic": "https://invarch.statescan.io/#/extrinsics/{hash}"
}
],
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/InvArch.svg",
"addressPrefix": 117,
"additional": {
"supportsGenericLedgerApp": true
}
},
{
"chainId": "f3c7ad88f6a80f366c4be216691411ef0622e8b809b1046ea297ef106058d4eb",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
@@ -8104,40 +8125,6 @@
"disabledCheckMetadataHash": true
}
},
{
"chainId": "1d73b9f5dc392744e0dee00a6d6254fcfa2305386cceba60315894fa4807053a",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
"name": "Curio",
"assets": [
{
"assetId": 0,
"symbol": "CGT",
"precision": 18,
"priceId": "curio-governance",
"icon": "CGT.svg"
}
],
"nodes": [
{
"url": "wss://archive.parachain.curioinvest.com",
"name": "Curio 1 node"
},
{
"url": "wss://parachain.curioinvest.com/",
"name": "Curio 2 node"
}
],
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://subquery-history-curio-prod.novasama-tech.org"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Curio.svg",
"addressPrefix": 777
},
{
"chainId": "f6ee56e9c5277df5b4ce6ae9983ee88f3cbed27d31beeb98f9f84f997a1ab0b9",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
@@ -8644,6 +8631,34 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Humanode.svg",
"addressPrefix": 5234
},
{
"chainId": "03aa6b475a03f8baf7f83e448513b00eaab03aefa4ed64bd1d31160dce028add",
"name": "DeepBrain",
"assets": [
{
"assetId": 0,
"symbol": "DBC",
"precision": 15,
"priceId": "deepbrain-chain",
"icon": "DBC.svg"
}
],
"nodes": [
{
"url": "wss://info.dbcwallet.io",
"name": "DBC node"
}
],
"explorers": [
{
"name": "Subscan",
"extrinsic": "https://dbc.subscan.io/extrinsic/{hash}",
"account": "https://dbc.subscan.io/account/{address}"
}
],
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/DeepBrain.svg",
"addressPrefix": 42
},
{
"chainId": "d2a5d385932d1f650dae03ef8e2748983779ee342c614f80854d32b8cd8fa48c",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",
@@ -8846,55 +8861,6 @@
"overridesCommon": true
}
},
{
"chainId": "eip155:41455",
"name": "Aleph Zero EVM (PAUSED)",
"assets": [
{
"assetId": 0,
"symbol": "AZERO",
"priceId": "aleph-zero",
"type": "evmNative",
"icon": "AZERO.svg",
"precision": 18
}
],
"nodeSelectionStrategy": "uniform",
"nodes": [
{
"url": "https://rpc.alephzero.raas.gelato.cloud",
"name": "Aleph Zero EVM rpc node"
},
{
"url": "wss://ws.alephzero.raas.gelato.cloud",
"name": "Aleph Zero EVM wss node"
}
],
"externalApi": {
"history": [
{
"type": "etherscan",
"url": "https://evm-explorer.alephzero.org/api",
"parameters": {
"assetType": "evm"
}
}
]
},
"explorers": [
{
"name": "Aleph Zero EVM Explorer",
"extrinsic": "https://evm-explorer.alephzero.org/tx/{hash}",
"account": "https://evm-explorer.alephzero.org/address/{address}"
}
],
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/AlephZero.svg",
"addressPrefix": 41455,
"options": [
"ethereumBased",
"noSubstrateRuntime"
]
},
{
"chainId": "44f68476df71ebf765b630bf08dc1e0fedb2bf614a1aa0563b3f74f20e47b3e0",
"name": "Tangle",