feat(xcm): Add Pezkuwi Teyrchain junction support for cross-chain transfers

- 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.
This commit is contained in:
2026-02-09 01:01:48 +03:00
parent 9babf454c9
commit 35ce943f65
9 changed files with 89 additions and 13 deletions
@@ -1,5 +1,6 @@
package io.novafoundation.nova.feature_wallet_impl.data.network.crosschain.common
import android.util.Log
import io.novafoundation.nova.common.di.scope.FeatureScope
import io.novafoundation.nova.common.utils.composeCall
import io.novafoundation.nova.common.utils.metadata
@@ -54,6 +55,19 @@ class TransferAssetUsingTypeTransactor @Inject constructor(
val transferTypeParam = configuration.transferTypeParam(multiAssetsVersion)
// Debug logging for XCM transfer
val destLocation = configuration.destinationChainLocationOnOrigin()
Log.d("XCM_TRANSFER", "=== XCM TRANSFER DEBUG ===")
Log.d("XCM_TRANSFER", "Origin chain: ${configuration.originChain.chain.name} (${configuration.originChain.chain.id})")
Log.d("XCM_TRANSFER", "Origin parachainId: ${configuration.originChain.parachainId}")
Log.d("XCM_TRANSFER", "Destination chain: ${configuration.destinationChain.chain.name} (${configuration.destinationChain.chain.id})")
Log.d("XCM_TRANSFER", "Destination parachainId: ${configuration.destinationChain.parachainId}")
Log.d("XCM_TRANSFER", "Destination location (relative): parents=${destLocation.parents}, interior=${destLocation.interior}")
Log.d("XCM_TRANSFER", "Destination junctions: ${destLocation.interior}")
Log.d("XCM_TRANSFER", "Transfer type: ${configuration.transferType}")
Log.d("XCM_TRANSFER", "XCM Version: $multiLocationVersion")
Log.d("XCM_TRANSFER", "==========================")
return chainRegistry.withRuntime(configuration.originChainId) {
composeCall(
moduleName = metadata.xcmPalletName(),
@@ -1,5 +1,6 @@
package io.novafoundation.nova.feature_wallet_impl.data.network.crosschain.dynamic
import android.util.Log
import io.novafoundation.nova.common.address.AccountIdKey
import io.novafoundation.nova.common.data.network.runtime.binding.WeightV2
import io.novafoundation.nova.common.di.scope.FeatureScope
@@ -130,6 +131,16 @@ class DynamicCrossChainTransactor @Inject constructor(
val totalTransferAmount = transfer.amountPlanks + crossChainFee
val assetAbsoluteMultiLocation = configuration.transferType.assetAbsoluteLocation
// Debug logging for Dynamic XCM transfer
Log.d("XCM_DYNAMIC", "=== DYNAMIC XCM TRANSFER DEBUG ===")
Log.d("XCM_DYNAMIC", "Origin chain: ${configuration.originChain.chain.name} (${configuration.originChain.chain.id})")
Log.d("XCM_DYNAMIC", "Origin parachainId: ${configuration.originChain.parachainId}")
Log.d("XCM_DYNAMIC", "Destination chain: ${configuration.destinationChain.chain.name} (${configuration.destinationChain.chain.id})")
Log.d("XCM_DYNAMIC", "Destination parachainId: ${configuration.destinationChain.parachainId}")
Log.d("XCM_DYNAMIC", "Destination location: ${configuration.destinationChainLocation}")
Log.d("XCM_DYNAMIC", "Transfer type: ${configuration.transferType}")
Log.d("XCM_DYNAMIC", "================================")
when (val transferType = configuration.transferType) {
is XcmTransferType.Teleport -> buildTeleportProgram(
assetLocation = assetAbsoluteMultiLocation,