From 9babf454c9943d338222c8102687a1b47fc9166e Mon Sep 17 00:00:00 2001 From: Kurdistan Tech Ministry Date: Sun, 8 Feb 2026 05:23:23 +0300 Subject: [PATCH] Fix cross-chain XCM config parsing for destination field 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 --- .../data/mappers/crosschain/Dynamic.kt | 5 ++++- .../crosschain/dynamic/DynamicCrossChainConfigRemote.kt | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/mappers/crosschain/Dynamic.kt b/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/mappers/crosschain/Dynamic.kt index 6d1cde1..43913be 100644 --- a/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/mappers/crosschain/Dynamic.kt +++ b/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/mappers/crosschain/Dynamic.kt @@ -63,7 +63,10 @@ private fun constructTransfersForChain(configRemote: DynamicCrossChainOriginChai assetId = assetConfig.assetId, destinations = assetConfig.xcmTransfers.map { transfer -> TransferDestination( - fullChainAssetId = FullChainAssetId(transfer.chainId, transfer.assetId), + fullChainAssetId = FullChainAssetId( + transfer.destination.chainId, + transfer.destination.assetId + ), hasDeliveryFee = transfer.hasDeliveryFee ?: false, supportsXcmExecute = transfer.supportsXcmExecute ?: false, ) diff --git a/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/crosschain/dynamic/DynamicCrossChainConfigRemote.kt b/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/crosschain/dynamic/DynamicCrossChainConfigRemote.kt index 846ca98..c5042f6 100644 --- a/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/crosschain/dynamic/DynamicCrossChainConfigRemote.kt +++ b/feature-wallet-impl/src/main/java/io/novafoundation/nova/feature_wallet_impl/data/network/crosschain/dynamic/DynamicCrossChainConfigRemote.kt @@ -33,8 +33,13 @@ class DynamicCrossChainOriginAssetRemote( ) class DynamicXcmTransferRemote( - val chainId: ChainId, - val assetId: Int, + val destination: XcmTransferDestinationRemote, + val type: String?, val hasDeliveryFee: Boolean?, val supportsXcmExecute: Boolean?, ) + +class XcmTransferDestinationRemote( + val chainId: ChainId, + val assetId: Int, +)