Commit Graph
18 Commits
Author SHA1 Message Date
SatoshiQaziMuhammed 5ca2661eb2 fix(chains): drop node URLs that embed Nova's provider keys (#72)
* fix(chains): drop node URLs that embed Nova's Infura keys

Nova's configs carry Nova's own Infura project keys inside node URLs, and
every sync copied them into ours: Ethereum had four keyed Infura nodes and
Base one, across 43 published files. Our Android build already fills
`{INFURA_API_KEY}` from our own secret; the keyed URLs used another
organisation's quota and would break for every user when Nova rotates them.

- sync_from_nova.py strips nodes whose URL embeds an Infura key, and drops a
  chain left with no node (only Ethereum - Goerli, a retired testnet, in the
  dev files); merge-chains.py applies the same filter
- the published chain files are rewritten with that filter; nothing else in
  them changes (each file round-trips byte for byte through json.dump)
- check_pezkuwi_integrity.py refuses a keyed Infura URL under chains/

* fix(chains): strip every keyed provider URL, and make the gate fail closed

The first pass matched only `infura.io/.../v3/<lowercase hex>`, so it missed
`https://...infura.io/v3/<key>`, upper-case keys and hosts, and Nova's
OnFinality `?apikey=` URLs (Moonriver, and the Hades testnet in v20/v21
preConfigured). preConfigured was copied from Nova without the filter, and the
integrity check passed if grep itself failed.

- one predicate, is_keyed(), in sync_from_nova.py: Infura /v3/ ids and
  apikey/api_key/key/token query values, case-insensitive; {PLACEHOLDER}
  values are allowed
- preConfigured details are filtered after the copy; a chain left with no
  node loses its details file and its index entry (Hades, v20/v21 only)
- rewritten files keep their own indent, so the diff is the data change only
- check 5 imports is_keyed() and checks every string in every JSON file
  under chains/; an unreadable file or an empty tree is an error
- check 3 reports a grep error instead of passing on it
2026-10-17 20:55:00 +04:00
SatoshiQaziMuhammed 80fb0544ed fix(pezkuwi): finish the Asset Hub cleanup and guard it against coming back (#69)
* fix(pezkuwi): finish the Asset Hub cleanup and guard it against coming back

Three things left half-done, and a check so they stay done.

## Assets that were never created on chain

chains.json and v22/android/chains_minimal.json still declared Pezkuwi Asset Hub
assetIds 1001, 1002 and 1003 as DOT, ETH and BTC. Queried against
wss://asset-hub-rpc.pezkuwichain.io on 2026-08-11, assets.asset() returns None for all
three; only 1 (PEZ) and 1000 (wUSDT) are Live. They were added from a template — the
icons pointed at Nova's own repo — and shown to users, where any transfer would fail.

This is the second removal. The first, on branch fix/remove-nonexistent-asset-hub-assets
(2026-07-09), cleaned 66 files across v10-v22 but never touched these two, and was never
opened as a PR. A third branch, feature/asset-level-balance-test-fixture, went the other
way and added all three to a regression fixture. Both branches sat for a month.

## Assets served from a working branch

252 references under chains/ fetched icons from pending/post-fix-release. Every file
they named is byte-identical on master, main and that branch, so the dependency bought
nothing — and would have broken silently the day the branch was tidied away, which
nearly happened during this cleanup. Repointed to master, the branch the apps read.

## A fixture nothing keeps in step

sync_from_nova.py publishes chains, xcm, icons and config from the overlay, but never
tests/. So tests/pezkuwi_assets_for_testBalance.json and its overlay source are kept
aligned by hand. They agree today; nothing would have said so if they stopped.

Rather than invent a publish step whose conventions I would be guessing at, the drift
is now asserted.

## The check

scripts/check_pezkuwi_integrity.py, wired into the Code Quality job. Four assertions,
one per regression above, each carrying why it exists. Two of the four have already
recurred once, and the Nova sync will keep proposing the first one back — the current
sync branch (f6c3ebb9) reverts the isSufficient declaration, which is why the second
assertion exists.

Mutation-tested: restoring a ghost asset, removing isSufficient, repointing one icon at
a working branch, and nudging the fixture each fail it; reverting each passes.

* fix(overlay): declare sufficiency at the source, not in the generated output

The isSufficient declaration was added to chains/ — which sync_from_nova.py regenerates
from nova-base plus pezkuwi-overlay on every run. So the fix had a shelf life of exactly
one sync, and the sync branch already waiting (sync/nova-base-f6c3ebb9, 2026-08-08)
reverts it: its output carries {"assetId": "1000"} with no sufficiency, because it was
generated from an overlay that does not declare any.

Editing generated files is how this repo keeps losing the same change. The phantom
Asset Hub assets were removed twice and came back twice for the same reason.

Verified rather than assumed: added the field to
pezkuwi-overlay/chains/pezkuwi-chains.json, ran scripts/sync_from_nova.py, and all three
generated files — chains.json, v22/android/chains.json, v22/android/chains_minimal.json
— came out carrying isSufficient: true. git reported no change to any of them, meaning
the sync now produces exactly what the manual edit produced, so the two agree instead of
fighting.

The phantom assets do not return either: the overlay lists only HEZ, PEZ and USDT, so
regeneration drops 1001/1002/1003 by construction rather than by anybody remembering.
2026-08-11 05:20:49 -07:00
Satoshi Qazi Muhammed e5339235ad revert: temporarily restore content to the last Play-Store-compatible state
The live Play Store release (wallet-android 85bde7e, published 2026-06-15)
was built against whatever was on this branch's HEAD at the time - which,
since master had received no commits between 2026-03-02 and this week, was
commit 7a087cf. This week's changes (nova-base sync, Tron config/icons,
balance test fixtures, etc.) are real and wanted, but they've made master
incompatible with that still-live app version, and live users installing
fresh right now get a completely empty tokens list because of it (the app's
chain sync silently fails whole-hog on any single malformed/incompatible
chain entry, leaving new installs with zero locally-cached chains).

This makes master's served content match 7a087cf exactly, stopping the
bleeding for current live users without needing an emergency app release.
None of this week's work is lost - it's all preserved on
pending/post-fix-release and will come back once wallet-android's Tron
send feature is complete and both repos can ship together in one
coordinated release.
2026-07-11 08:23:48 -07:00
SatoshiQaziMuhammed 1529de750f test: add per-asset balance fixture covering full Pezkuwi ecosystem (#44)
chains_for_testBalance.json only has one entry per chain (native balance
via a raw RPC query, bypassing the app's real sync pipeline entirely -
this is why it couldn't catch the 2026-07-09 HEZ-on-Asset-Hub silent
sync failure). This new fixture covers individual assets (HEZ/PEZ/USDT/
DOT/ETH/BTC across Pezkuwi's 3 chains) and is meant to drive a test that
goes through the real BalancesUpdateSystem -> AssetCache pipeline, which
is what actually caught that bug.
2026-07-09 12:12:12 -07:00
SatoshiQaziMuhammed 513145ce38 test: add Pezkuwi's own chains to the balance test fixture (#37)
* test: add Pezkuwi's own chains to the balance test fixture

Nova's upstream fixture only covers chains it knows about - Pezkuwi (relay),
Pezkuwi Asset Hub, and Pezkuwi People never had test coverage at all, since
they don't exist in Nova's world. This adds them as a pure addition on top
of the existing filter+override pipeline, so the published
chains_for_testBalance.json now covers exactly what our merged chains.json
actually contains: Nova-inherited chains + our own ecosystem.

Test account is the mainnet Founder key, verified live via @pezkuwi/api on
2026-07-09 against all three chains: substantial non-zero, non-frozen free
balance and a high nonce (actively used) on each - not a guessed or reaped
account. See pezkuwi-overlay/tests/pezkuwi_chains_for_testBalance.json for
the exact verified figures.

* chore: retrigger CI now that master triggers are fixed
2026-07-09 04:34:21 -07:00
Satoshi Qazi Muhammed 8f74172a1b Fix reaped Polkadot/Kusama test accounts via verified Treasury pallet account
Last remaining balances-test failures (2 of 112): both Polkadot and
Kusama's fixture account (inherited from upstream nova-utils) had
zero balance - reaped since the fixture was last updated, causing
"Balance was null" assertion failures. Not a CI/infra bug, not
related to Tron - genuinely stale test data.

Replaced with the Treasury pallet account (py/trsry) for both chains
- protocol-owned, continuously replenished from fees/inflation, never
reaped. This matches the fixture's own existing pattern (Moonbeam and
Moonriver both already use their crowdloan pallet account, not a
personal wallet).

The account (0x6d6f646c70792f74727372790000000000000000000000000000000000000000)
was independently verified two ways before use: derived by hand
(modl + py/trsry + zero padding) and cross-checked against
@polkadot/api's own derivation - both matched exactly - then its
balance was queried live against wss://rpc.polkadot.io (22,527,885,189,670
free) and wss://kusama-rpc.polkadot.io (25,368,610,181,623 free) to
confirm it's genuinely funded, not just plausible-looking.

Applied via a new pezkuwi-overlay/tests/account_overrides.json,
applied by sync_from_nova.py after the existing chain-filtering step,
rather than hand-editing the generated fixture output (which would be
overwritten on the next sync).
2026-07-08 07:20:51 -07:00
Satoshi Qazi Muhammed 534479d57b Filter test fixture to chains actually present in current merged output
Latest CI run confirmed all remaining balances-test failures (50 of
160) were java.util.NoSuchElementException for chain ids no longer in
the app's config - both newly-blacklisted chains and a handful of
retired testnets (Westmint, Moonbase Alpha/Relay, Aleph Zero Testnet,
an old Xode id, RegionX) that the raw Nova fixture still references.
None were real balance/fee assertion failures - the app itself is
working correctly for every chain it actually has configured.

sync_tests() now filters chains_for_testBalance.json down to entries
whose chainId exists in the latest merged chains.json (v22, 80 -> 56
entries) instead of publishing Nova's fixture verbatim, so the test
only ever exercises chains the app can actually resolve - and stays
correct automatically as chains.json changes, instead of needing
separate manual upkeep alongside blocked-chains.json.
2026-07-08 05:03:40 -07:00
Satoshi Qazi Muhammed 2efab72f83 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.
2026-07-08 02:04:47 -07:00
Satoshi Qazi Muhammed 95939ab8a2 Publish tests/chains_for_testBalance.json, sync it from nova-base
Android's BalancesIntegrationTest CI fetches this fixture directly
from raw.githubusercontent.com/.../master/tests/chains_for_testBalance.json,
but it never existed in this repo's output - only chains/, xcm/,
icons/, and staking/ were ever synced from nova-base by
sync_from_nova.py. This is why "Run balances tests" in
pezkuwi-wallet-android has been failing (FileNotFoundException) even
after fixing its CI infra and instrumentation-runner issues.

Only this one fixture is published from nova-base/tests/, not the
rest of that directory (upstream's own pytest suite for validating
its chains.json output, unused by anything in this repo or its
consumers).
2026-07-07 15:58:42 -07:00
Kurdistan Tech Ministry 4d7d55dc8c Apply blacklist filtering to chain merge
Sync script now reads blocked-chains.json and excludes
chains with broken/unreachable RPC endpoints from output.
102 → 98 chains (7 blocked removed)
2026-02-17 18:24:55 +03:00
Kurdistan Tech Ministry c098e4991d Add global config to A+B→C merge pipeline
- Created pezkuwi-overlay/config/global_config_overlay.json (source B)
  with stakingApiOverrides for Pezkuwi SubQuery + prod API URLs
- Updated sync_from_nova.py with sync_config() function
  Merges: nova-base/global + nova-base/staking (A) + overlay (B) → staking/ (C)
- Same merge pattern as chains, XCM, and icons
2026-02-17 17:22:21 +03:00
Kurdistan Tech Ministry bdda67a02c fix: add more broken chains to blacklist (Crab, DeepBrain, Exosama) 2026-02-11 08:49:45 +03:00
Kurdistan Tech Ministry b816294af9 fix: merge script now outputs to android directory 2026-02-11 08:03:17 +03:00
Kurdistan Tech Ministry 2bb9bad68c fix: implement blacklist filtering for broken RPC chains
- Add blocked-chains.json with DNS-failing endpoints (AlephZero, InvArch, Quartz, Passet Hub Testnet)
- Update merge-chains.py to filter PAUSED chains, testnets (except Pezkuwi), and broken RPCs
- Reduce chain count from 102 to 86 (4 Pezkuwi + 82 working Nova chains)
- This fixes staking page not loading due to DNS resolution failures
2026-02-11 07:56:54 +03:00
Kurdistan Tech Ministry 39ca67dab8 fix: complete Pezkuwi overlay + proper Nova merge
Pezkuwi overlay (B source):
- pezkuwi-chains.json: 4 chains (Relay, Zagros, Asset Hub, People)
- pezkuwi-xcm.json: full XCM config with networkDeliveryFee, networkBaseWeight
- pezkuwi-xcm-dynamic.json: dynamic XCM config

Merge script:
- Takes Nova as base (A source)
- Adds Pezkuwi entries to ALL XCM sections
- Pezkuwi chains appear first
- Nothing gets deleted

All chains have disabledCheckMetadataHash: true
2026-02-09 06:56:35 +03:00
Kurdistan Tech Ministry 5f6b6471f9 fix: proper Nova + Pezkuwi merge architecture
Architecture:
- pezkuwi-overlay/xcm/ : Standalone Pezkuwi XCM config (3 chains)
- nova-base/ : Git submodule with Nova's Polkadot ecosystem
- sync_from_nova.py : Merges both ecosystems, nothing gets deleted

Merge rules:
- Chains: Pezkuwi first, then Nova
- XCM: Pezkuwi assetsLocation + chains merged with Nova (Pezkuwi priority)
- Icons: Pezkuwi overrides Nova

This fixes the broken XCM sync that was overwriting Pezkuwi configs.
2026-02-09 05:44:35 +03:00
Kurdistan Tech Ministry 71d14b884a feat: add Nova-base sync mechanism
- Add sync_from_nova.py script to merge Nova chains with Pezkuwi overlay
- Add GitHub Action for daily auto-sync
- Sync all chains from nova-base (includes Polkadot Coretime and other missing chains)
- Pezkuwi chains appear first and take priority

This fixes DOT swap crash caused by missing Polkadot Coretime chain.
2026-02-09 04:39:23 +03:00
Kurdistan Tech Ministry 249a060e8e feat: implement Nova Base + Pezkuwi Overlay architecture
- Add Nova utils as git submodule (nova-base/)
- Create pezkuwi-overlay/ for Pezkuwi-specific configs
- Add merge-chains.py script to combine Nova + Pezkuwi
- Add update-all.sh for easy syncing
- Add ARCHITECTURE.md documentation

This architecture allows automatic sync with Nova's Polkadot
ecosystem updates while maintaining Pezkuwi customizations.

Pezkuwi chains: 3 (priority)
Nova chains: 98 (auto-synced)
2026-02-06 07:37:57 +03:00