From 8f74172a1bb013816236dc46e14e2d6922a86800 Mon Sep 17 00:00:00 2001 From: Satoshi Qazi Muhammed Date: Wed, 8 Jul 2026 07:20:51 -0700 Subject: [PATCH] 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). --- pezkuwi-overlay/tests/account_overrides.json | 18 ++++++++++++++++++ scripts/sync_from_nova.py | 17 +++++++++++++++++ tests/chains_for_testBalance.json | 4 ++-- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 pezkuwi-overlay/tests/account_overrides.json diff --git a/pezkuwi-overlay/tests/account_overrides.json b/pezkuwi-overlay/tests/account_overrides.json new file mode 100644 index 0000000..a84c646 --- /dev/null +++ b/pezkuwi-overlay/tests/account_overrides.json @@ -0,0 +1,18 @@ +{ + "description": "Per-chain overrides for tests/chains_for_testBalance.json test accounts. Used when the upstream Nova fixture's account has zero/reaped balance on that chain - verified live against the chain before being added here, not guessed.", + "last_updated": "2026-07-08", + "overrides": [ + { + "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", + "name": "Polkadot", + "account": "0x6d6f646c70792f74727372790000000000000000000000000000000000000000", + "reason": "Original account had zero balance (reaped). Replaced with the Treasury pallet account (py/trsry) - protocol-owned, permanently funded by fees/inflation, not a personal account. Verified live via @polkadot/api against wss://rpc.polkadot.io on 2026-07-08: free balance 22527885189670." + }, + { + "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", + "name": "Kusama", + "account": "0x6d6f646c70792f74727372790000000000000000000000000000000000000000", + "reason": "Original account had zero balance (reaped). Replaced with the Treasury pallet account (py/trsry) - protocol-owned, permanently funded by fees/inflation, not a personal account. Verified live via @polkadot/api against wss://kusama-rpc.polkadot.io on 2026-07-08: free balance 25368610181623." + } + ] +} diff --git a/scripts/sync_from_nova.py b/scripts/sync_from_nova.py index 77c6271..37540bc 100644 --- a/scripts/sync_from_nova.py +++ b/scripts/sync_from_nova.py @@ -292,6 +292,12 @@ def sync_tests(): that are blacklisted, testnets that were retired, or otherwise no longer configured, which would just make every test for that chain fail with "chain not found" instead of actually testing anything. + + Account overrides (pezkuwi-overlay/tests/account_overrides.json) swap in a + replacement account for a chain whose upstream-fixture account has since + been reaped/emptied - each override must be verified live before being + added, not guessed. See that file for details on the accounts currently + in use. """ print("\nSyncing tests...") @@ -310,6 +316,17 @@ def sync_tests(): filtered = [entry for entry in fixture if entry['chainId'] in current_chain_ids] dropped = len(fixture) - len(filtered) + overrides_file = PEZKUWI_OVERLAY / "tests" / "account_overrides.json" + if overrides_file.exists(): + overrides = {o['chainId']: o['account'] for o in load_json(overrides_file)['overrides']} + overridden = 0 + for entry in filtered: + if entry['chainId'] in overrides: + entry['account'] = overrides[entry['chainId']] + overridden += 1 + if overridden: + print(f" Applied {overridden} account override(s)") + save_json(OUTPUT_TESTS / "chains_for_testBalance.json", filtered) print(f" chains_for_testBalance.json: {len(fixture)} - {dropped} not in {latest_version.name} = {len(filtered)}") diff --git a/tests/chains_for_testBalance.json b/tests/chains_for_testBalance.json index 40c535d..82866a5 100644 --- a/tests/chains_for_testBalance.json +++ b/tests/chains_for_testBalance.json @@ -7,12 +7,12 @@ { "chainId": "91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3", "name": "Polkadot", - "account": "0x7a28037947ecebe0dd86dc0e910911cb33185fd0714b37b75943f67dcf9b6e7c" + "account": "0x6d6f646c70792f74727372790000000000000000000000000000000000000000" }, { "chainId": "b0a8d493285c2df73290dfb7e61f870f17b41801197a149ca93654499ea3dafe", "name": "Kusama", - "account": "0x7a28037947ecebe0dd86dc0e910911cb33185fd0714b37b75943f67dcf9b6e7c" + "account": "0x6d6f646c70792f74727372790000000000000000000000000000000000000000" }, { "chainId": "e143f23803ac50e8f6f8e62695d1ce9e4e1d68aa36c1cd2cfd15340213f3423e",