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
+48 -111
View File
@@ -2680,69 +2680,6 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Calamari.svg",
"addressPrefix": 78
},
{
"chainId": "cd4d732201ebe5d6b014edda071c4203e16867305332301dc8d092044b28e554",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
"name": "QUARTZ",
"assets": [
{
"assetId": 0,
"symbol": "QTZ",
"priceId": "quartz",
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/white/Quartz.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"
},
{
"url": "wss://asia-ws-quartz.unique.network",
"name": "Unique Asia node"
}
],
"types": {
"url": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/chains/v2/types/quartz.json",
"overridesCommon": true
},
"explorers": [
{
"name": "Subscan",
"extrinsic": "https://quartz.subscan.io/extrinsic/{hash}",
"account": "https://quartz.subscan.io/account/{address}",
"event": null
},
{
"name": "Sub.ID",
"account": "https://sub.id/{address}"
},
{
"name": "Polkaholic",
"account": "https://polkaholic.io/account/{address}",
"extrinsic": "https://polkaholic.io/tx/{hash}"
}
],
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-quartz"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Quartz.svg",
"addressPrefix": 255
},
{
"chainId": "f22b7850cdd5a7657bbfd90ac86441275bbc57ace3d2698a740c7b0ec4de5ec3",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
@@ -3959,54 +3896,6 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Litmus.svg",
"addressPrefix": 131
},
{
"chainId": "4a12be580bb959937a1c7a61d5cf24428ed67fa571974b4007645d1886e7c89f",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
"name": "Subsocial",
"assets": [
{
"assetId": 0,
"symbol": "SUB",
"precision": 10,
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/white/Subsocial.svg"
}
],
"nodes": [
{
"url": "wss://para.f3joule.space",
"name": "Subsocial node"
},
{
"url": "wss://para.subsocial.network",
"name": "Dappforce node"
}
],
"explorers": [
{
"name": "Sub.ID",
"account": "https://sub.id/{address}"
},
{
"name": "Polkaholic",
"account": "https://polkaholic.io/account/{address}",
"extrinsic": "https://polkaholic.io/tx/{hash}"
}
],
"types": {
"url": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/chains/v2/types/subsocial.json",
"overridesCommon": true
},
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-subsocial"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Subsocial_Parachain.svg",
"addressPrefix": 28
},
{
"chainId": "d4c0c08ca49dc7c680c3dac71a7c0703e5b222f4b6c03fe4c5219bb8f22c18dc",
"parentId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe",
@@ -4761,6 +4650,54 @@
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/Turing.svg",
"addressPrefix": 51
},
{
"chainId": "70255b4d28de0fc4e1a193d7e175ad1ccef431598211c55538f1018651a0344e",
"name": "Aleph Zero",
"assets": [
{
"assetId": 0,
"symbol": "AZERO",
"priceId": "aleph-zero",
"staking": "aleph-zero",
"precision": 12,
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/white/Aleph_zero.svg"
}
],
"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}",
"event": null
}
],
"types": {
"url": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/chains/v2/types/aleph_zero.json",
"overridesCommon": true
},
"externalApi": {
"history": [
{
"type": "subquery",
"url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-aleph-zero"
}
],
"staking": [
{
"type": "subquery",
"url": "https://api.subquery.network/sq/nova-wallet/nova-wallet-aleph-zero"
}
]
},
"icon": "https://raw.githubusercontent.com/novasamatech/nova-utils/master/icons/chains/gradient/AlephZero.svg",
"addressPrefix": 42
},
{
"chainId": "daab8df776eb52ec604a5df5d388bb62a050a0aaec4556a64265b9d42755552d",
"parentId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3",