- Sync chains.json from pezkuwi-wallet-utils (staking on Asset Hub)
- Replace Nova star with Nevruz fire icon on Assets bottom nav tab
- Update onboarding welcome background image (all DPI variants)
- Fix build URLs to point to pezkuwi-wallet-utils GitHub raw
- Update staking reward calculator and era computation
- Bump version code to 159
- ChainExt.kt: Handle nomination-pools without local backing type (Polkadot 2.0)
- Add hasLocalNominationPoolsBacking() helper function
- Default to RELAYCHAIN when no local backing type exists
- StakingDashboardUpdateSystem: Improved error logging
- StakingDashboardViewModel: Show toast when item is syncing
- Update chains.json: relay chain only has relaychain staking
- Add independent chain warm-up with error handling
- Add fallback fee estimation when dry run fails
- Handle empty forwarded XCMs in dry run gracefully
- Support both legacy and new XCM config destination formats
- Use xcmPalletNameOrNull for safer pallet detection
- Add Teyrchain junction support for legacy cross-chain config
- Recover from dry run failures in cross-chain transfers
- Add Pezkuwi Asset Hub to swap warm-up chains
- Add TEYRCHAIN_INFO constant and TeyrchainInfo pallet lookup
- Add PezkuwiXcm pallet support in xcmPalletName functions
- Update ParachainInfoRepository to query TeyrchainId storage
- Add junctionTypeName to ParachainId for Teyrchain encoding
- Update MultiLocationEncoding to handle both Parachain and Teyrchain
- Detect Pezkuwi chains by genesis hash for correct junction type
Fixes cross-chain transfers between Pezkuwi, Asset Hub, and People chains.
The XCM config JSON has a nested structure where chainId and assetId
are inside a "destination" object, but the Kotlin class expected them
at the root level. This was causing NullPointerException when parsing
cross-chain transfer configurations.
Changes:
- Add XcmTransferDestinationRemote class to represent nested destination
- Update DynamicXcmTransferRemote to use destination object instead of
flat chainId/assetId fields
- Update Dynamic.kt mapping to access transfer.destination.chainId/assetId
This fixes cross-chain transfers between Pezkuwi, Pezkuwi Asset Hub,
and Pezkuwi People chains.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The keypair.privateKey from SecretStoreV2 is NOT the original 32-byte seed.
This was causing public key mismatch when expanding the keypair.
Changes:
- SecretsSigner now gets seed via getAccountSecrets().seed()
- PezkuwiKeyPairSigner.fromSeed() expands seed to proper keypair
- Fixes "bad signature" error on HEZ transfers
Pezkuwi chains use "bizinikiwi" signing context instead of standard
"substrate" context used by Polkadot ecosystem. This was causing
"bad signature" errors on HEZ transfers.
Changes:
- Add sr25519-bizinikiwi native Rust binding with bizinikiwi context
- Add isPezkuwiChain extension to detect Pezkuwi ecosystem chains
- Add PezkuwiKeyPairSigner for signing with bizinikiwi context
- Modify SecretsSigner to use correct context based on chain:
- Pezkuwi chains (3) -> BizinikiwSr25519 (bizinikiwi)
- Other chains (98+) -> KeyPairSigner (substrate)
- Add live transfer test for Pezkuwi mainnet
Tested with successful HEZ transfer on Pezkuwi mainnet:
TX: 0xe25a4eaaeaa04122cca130582dba3cacb2280dea5d908924b45757ea67c27996
- Add PezkuwiAddressConstructor for custom address type handling
- Add custom signed extensions (CheckNonZeroSender, CheckWeight, WeightReclaim, PezkuwiCheckMortality)
- Add pezkuwi.json type definitions
- Update RuntimeSnapshotExt for multiple address type lookups
- Update CHAINS_URL to use GitHub-hosted chains.json with types config
- Add feeViaRuntimeCall support for Pezkuwi chains
- Add debug diagnostics for runtime type issues (to be cleaned before production)
- Add CHANGELOG_PEZKUWI.md documenting all changes
PezkuwiChain requires AuthorizeCall as the first signed extension in
the TxExtension tuple. This commit adds:
- AuthorizeCall.kt: FixedValueTransactionExtension with empty payload
(PhantomData equivalent)
- CustomTransactionExtensions: Detects PezkuwiChain via metadata and
adds AuthorizeCall extension
- ExtrinsicBuilderFactory/ExtrinsicSplitter: Uses CustomTransactionExtensions
Without this fix, transactions fail with "bad signature" errors and
fee calculation (payment_queryInfo) fails with WASM trap errors.
- Added fullSyncByDefault option to all Pezkuwi chains (mainnet, Asset Hub,
People, Zagros) to enable automatic balance sync
- Fixed chain sorting to include Polkadot and Kusama relay chains
- Pezkuwi ecosystem now correctly appears first in network lists
Updated chainId from old testnet genesis to correct mainnet genesis:
- Pezkuwi: bb4a61ab0c4b8c12f5eab71d0c86c482e03a275ecdafee678dea712474d33d75
- Asset Hub parentId: updated to match mainnet
- People Chain parentId: updated to match mainnet
This fixes the issue where wallet was showing 0 balance for accounts
because it was looking for the wrong chain genesis hash.
- Update Pezkuwi launcher icon design for all density buckets
- Resize icons to correct Android dimensions (mdpi to xxxhdpi)
- Add error handling to BalanceDetailViewModel flows to prevent crashes
- Handle RPC failures gracefully with logging instead of crashing
- StatemineAssetBalance: Handle connection errors in queryAccountBalance,
existentialDeposit, subscribeAccountBalanceUpdatePoint, and startSyncingBalance
- NativeAssetBalance: Handle connection errors in all balance query and sync methods
- Return safe defaults (zero balance, empty flows) instead of crashing
- Log errors for debugging without interrupting user experience
- Changed build type from develop (.dev) to debug (.debug)
- Updated Firebase App ID secret reference
- Updated APK paths for debug build
- This aligns with pezkuwi-wallet-debug Firebase project setup
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add new debug keystore with unique SHA-1 fingerprint
- Update google-services.json with proper OAuth clients
- Configure debug build to use new keystore
- Both Android OAuth client (type 1) and Web client (type 3) now present
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Delete 19 unused ic_nova_*.png files from drawable folders
- Delete 4 Nova reference files from docs folder
- These files were not referenced anywhere in code
- Update ic_pezkuwi_logo with correct logo from docs
- Update ic_pezkuwi_card_logo with correct card logo
- Update app launcher icons (ic_launcher, ic_launcher_round, ic_launcher_foreground)
- ChainExt.kt and TokenSorting.kt changes for Pezkuwi chain priority
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove 0x prefix from Pezkuwi chainIds to match ChainGeneses constants
- Update chain icons to use pezkuwi-wallet-utils URLs
- Pezkuwi, Asset Hub, People now sorted correctly (0, 1, 2)