@moonbeam-network/xcm-builder 4.3.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/extrinsic/ExtrinsicBuilder.utils.ts","../src/extrinsic/ExtrinsicBuilder.interfaces.ts","../src/types/BaseConfig.ts","../src/types/substrate/SubstrateQueryConfig.ts","../src/asset-min/AssetMinBuilder.ts","../src/balance/BalanceBuilder.ts","../src/types/evm/ContractConfig.ts","../src/contract/contracts/XcmPrecompile/XcmPrecompile.ts","../src/types/evm/EvmQueryConfig.ts","../src/types/substrate/ExtrinsicConfig.ts","../src/types/substrate/SubstrateCallConfig.ts","../src/contract/ContractBuilder.interfaces.ts","../src/contract/ContractBuilder.utils.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.util.ts","../src/contract/contracts/XcmPrecompile/XcmPrecompileAbi.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.ts","../src/contract/ContractBuilder.ts","../src/balance/Erc20Abi.ts","../src/extrinsic/pallets/eqBalances/eqBalances.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.ts","../src/extrinsic/pallets/xcmPallet/xcmPallet.ts","../src/extrinsic/pallets/xTokens/xTokens.utils.ts","../src/extrinsic/pallets/xTokens/xTokens.ts","../src/extrinsic/pallets/xTransfer/xTransfer.ts","../src/extrinsic/ExtrinsicBuilder.ts","../src/fee/FeeBuilder.utils.ts","../src/fee/VersionedAssetBuilder.ts","../src/fee/xcmPaymentApi/xcmPaymentApi.utils.ts","../src/fee/xcmPaymentApi/xcmPaymentApi.ts","../src/fee/FeeBuilder.ts","../src/monitoring/eventMonitoring/eventMonitoring.ts","../src/monitoring/eventMonitoring/eventMonitoring.utils.ts","../src/monitoring/MonitoringBuilder.ts","../src/mrl/providers/wormhole/contract/Batch/Batch.ts","../src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts","../src/mrl/providers/wormhole/contract/Batch/abi/peaq/PeaqBatchContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/peaq/PeaqXcmUtilsContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/peaq/PeaqXtokensContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/abi.helpers.ts","../src/mrl/providers/wormhole/contract/Gmp/Gmp.ts","../src/mrl/providers/wormhole/contract/Gmp/GmpAbi.ts","../src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts","../src/mrl/providers/wormhole/wormhole/WormholeConfig.ts","../src/mrl/providers/wormhole/wormhole/wormhole.ts","../src/mrl/providers/wormhole/wormhole/wormholeFactory.ts","../src/mrl/providers/wormhole/contract/TokenBridge/TokenBridgeAbi.ts","../src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts","../src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayerAbi.ts","../src/mrl/providers/wormhole/contract/index.ts","../src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts","../src/mrl/MrlBuilder.constants.ts","../src/mrl/providers/wormhole/extrinsic/ethereumXcm/BatchContractAbi.ts","../src/mrl/providers/wormhole/extrinsic/index.ts","../src/mrl/providers/wormhole/index.ts","../src/mrl/MrlBuilder.ts"],"sourcesContent":["import '@polkadot/api-augment';\n\nexport * from './asset-min';\nexport * from './balance';\nexport * from './builder.interfaces';\nexport * from './contract';\nexport * from './extrinsic';\nexport * from './fee';\nexport * from './monitoring';\nexport * from './mrl';\nexport * from './types';\n","import { isEthAddress } from '@moonbeam-network/xcm-utils';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { getTypeDef } from '@polkadot/types';\nimport type { AnyJson } from '@polkadot/types/types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { XcmVersion } from './ExtrinsicBuilder.interfaces';\n\nexport function getExtrinsicArgumentVersion(\n func?: SubmittableExtrinsicFunction<'promise'>,\n index = 0,\n): XcmVersion {\n if (!func) return XcmVersion.v1;\n\n const { type } = func.meta.args[index];\n const instance = func.meta.registry.createType(type.toString());\n const raw = getTypeDef(instance?.toRawType());\n\n if (!raw.sub) {\n return XcmVersion.v1;\n }\n\n const versions = Array.isArray(raw.sub)\n ? raw.sub.map((x) => x.name)\n : [raw.sub.name];\n\n if (versions.includes(XcmVersion.v5)) {\n return XcmVersion.v5;\n }\n\n if (versions.includes(XcmVersion.v4)) {\n return XcmVersion.v4;\n }\n\n if (versions.includes(XcmVersion.v3)) {\n return XcmVersion.v3;\n }\n\n if (versions.includes(XcmVersion.v2)) {\n return XcmVersion.v2;\n }\n\n if (versions.includes(XcmVersion.v1)) {\n return XcmVersion.v1;\n }\n\n throw new Error(\"Can't find XCM version\");\n}\n\nexport function getExtrinsicAccount(address: string) {\n return isEthAddress(address)\n ? {\n AccountKey20: {\n key: address,\n },\n }\n : {\n AccountId32: {\n id: u8aToHex(decodeAddress(address)),\n network: null,\n },\n };\n}\n\nexport function isXcmV4(xcmVersion: XcmVersion): boolean {\n return xcmVersion >= XcmVersion.v4;\n}\n\nexport function normalizeX1(\n xcmVersion: XcmVersion,\n versionedObject: Record<string, AnyJson | object>,\n) {\n if (!isXcmV4(xcmVersion)) return versionedObject;\n\n const normalizedObject = { ...versionedObject };\n const interior = normalizedObject.interior as object;\n\n if ('X1' in interior && interior?.X1 && !Array.isArray(interior.X1)) {\n interior.X1 = [interior.X1];\n } else if ('x1' in interior && interior?.x1 && !Array.isArray(interior.x1)) {\n interior.x1 = [interior.x1];\n }\n\n return normalizedObject;\n}\n\nexport function normalizeConcrete(\n xcmVersion: XcmVersion,\n versionedObject: object,\n) {\n return isXcmV4(xcmVersion)\n ? versionedObject\n : applyConcreteWrapper(versionedObject);\n}\n\nexport function applyConcreteWrapper(versionedObject: object) {\n return {\n Concrete: { ...versionedObject },\n };\n}\n","import type { ConfigBuilder } from '../builder.interfaces';\nimport type { ExtrinsicConfig } from '../types/substrate/ExtrinsicConfig';\n\nexport type ExtrinsicConfigBuilder = ConfigBuilder<ExtrinsicConfig>;\n\nexport enum XcmVersion {\n v1 = 'V1',\n v2 = 'V2',\n v3 = 'V3',\n v4 = 'V4',\n v5 = 'V5',\n}\n\nexport type Parents = 0 | 1;\n","export interface BaseConfigConstructorParams {\n module: string;\n func: string;\n}\n\nexport class BaseConfig {\n readonly module: string;\n\n readonly func: string;\n\n constructor({ module, func }: BaseConfigConstructorParams) {\n this.module = module;\n this.func = func;\n }\n}\n","import { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface QueryConfigConstructorParams\n extends BaseConfigConstructorParams {\n args?: unknown[];\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: (data: any) => Promise<bigint>;\n}\n\nexport class SubstrateQueryConfig extends BaseConfig {\n readonly args: unknown[];\n\n readonly transform: (data: unknown) => Promise<bigint>;\n\n static is(obj: unknown): obj is SubstrateQueryConfig {\n return obj instanceof SubstrateQueryConfig;\n }\n\n constructor({\n args = [],\n transform,\n ...other\n }: QueryConfigConstructorParams) {\n super({ ...other });\n\n this.args = args;\n this.transform = transform;\n }\n}\n","import type { Option } from '@polkadot/types';\nimport type { PalletAssetsAssetDetails } from '@polkadot/types/lookup';\nimport { getExtrinsicAccount } from '../extrinsic/ExtrinsicBuilder.utils';\nimport { SubstrateQueryConfig } from '../types/substrate/SubstrateQueryConfig';\nimport type { AssetMinConfigBuilder } from './AssetMinBuilder.interfaces';\n\nexport function AssetMinBuilder() {\n return {\n assetRegistry,\n assets,\n foreignAssets,\n };\n}\n\nfunction assetRegistry() {\n const pallet = 'assetRegistry';\n return {\n assetMetadatas: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: pallet,\n func: 'assetMetadatas',\n args: [asset],\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: async (response: Option<any>): Promise<bigint> =>\n response.unwrapOrDefault().minimalBalance.toBigInt(),\n }),\n }),\n currencyMetadatas: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: pallet,\n func: 'currencyMetadatas',\n args: [asset],\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: async (response: Option<any>): Promise<bigint> =>\n response.unwrapOrDefault().minimalBalance.toBigInt(),\n }),\n }),\n metadata: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: pallet,\n func: 'metadata',\n args: [asset],\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: async (response: Option<any>): Promise<bigint> =>\n response.unwrapOrDefault().existentialDeposit.toBigInt(),\n }),\n }),\n };\n}\n\nfunction assets() {\n return {\n asset: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: 'assets',\n func: 'asset',\n args: [asset],\n transform: async (\n response: Option<PalletAssetsAssetDetails>,\n ): Promise<bigint> =>\n response.unwrapOrDefault().minBalance.toBigInt(),\n }),\n }),\n };\n}\n\nfunction foreignAssets() {\n return {\n asset: (): AssetMinConfigBuilder => ({\n build: ({ address }) => {\n if (!address) {\n throw new Error(\n 'Asset address is missing for foreignAssets.asset min calculation',\n );\n }\n const multilocation = {\n parents: 2,\n interior: {\n X2: [\n {\n globalconsensus: {\n ethereum: {\n chainId: 1,\n },\n },\n },\n getExtrinsicAccount(address),\n ],\n },\n };\n return new SubstrateQueryConfig({\n module: 'foreignAssets',\n func: 'asset',\n args: [multilocation],\n transform: async (\n response: Option<PalletAssetsAssetDetails>,\n ): Promise<bigint> =>\n response.unwrapOrDefault().minBalance.toBigInt(),\n });\n },\n }),\n };\n}\n","import type { Option } from '@polkadot/types';\nimport type {\n FrameSystemAccountInfo,\n PalletAssetsAssetAccount,\n PalletBalancesAccountData,\n} from '@polkadot/types/lookup';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../contract';\nimport { getExtrinsicAccount } from '../extrinsic/ExtrinsicBuilder.utils';\nimport { EvmQueryConfig } from '../types/evm/EvmQueryConfig';\nimport { SubstrateQueryConfig } from '../types/substrate/SubstrateQueryConfig';\nimport type {\n BalanceConfigBuilder,\n EquilibriumSystemBalanceData,\n PalletBalancesAccountDataOld,\n TokensPalletAccountData,\n} from './BalanceBuilder.interfaces';\nimport { ERC20_ABI } from './Erc20Abi';\n\nexport function BalanceBuilder() {\n return {\n evm,\n substrate,\n };\n}\n\nexport function evm() {\n return {\n erc20,\n native,\n };\n}\n\nfunction erc20(): BalanceConfigBuilder {\n return {\n build: ({ asset, address }) => {\n if (!asset.address) {\n throw new Error(`Asset ${asset.key} has no address`);\n }\n\n return new ContractConfig({\n address: asset.address,\n abi: ERC20_ABI,\n args: [address],\n func: 'balanceOf',\n module: 'Erc20',\n });\n },\n };\n}\n\nfunction native(): BalanceConfigBuilder {\n return {\n build: ({ address }) => {\n return new EvmQueryConfig({\n func: 'getBalance',\n args: [{ address: address as Address }],\n });\n },\n };\n}\nexport function substrate() {\n return {\n assets,\n foreignAssets,\n system,\n tokens,\n };\n}\n\nfunction assets() {\n return {\n account: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) =>\n new SubstrateQueryConfig({\n module: 'assets',\n func: 'account',\n args: [asset.getBalanceAssetId(), address],\n transform: async (\n response: Option<PalletAssetsAssetAccount>,\n ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n }),\n }),\n };\n}\n\nfunction foreignAssets() {\n return {\n account: () => ({\n globalConsensus: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) => {\n if (!asset.address) {\n throw new Error(\n 'Asset address is needed to calculate balance with foreignAssets.account function',\n );\n }\n\n const multilocation = {\n parents: 2,\n interior: {\n X2: [\n { GlobalConsensus: { ethereum: { chainId: 1 } } },\n getExtrinsicAccount(asset.address),\n ],\n },\n };\n\n return new SubstrateQueryConfig({\n module: 'foreignAssets',\n func: 'account',\n args: [multilocation, address],\n transform: async (\n response: Option<PalletAssetsAssetAccount>,\n ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n });\n },\n }),\n id: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) => {\n return new SubstrateQueryConfig({\n module: 'foreignAssets',\n func: 'account',\n args: [asset.getBalanceAssetId(), address],\n transform: async (\n response: Option<PalletAssetsAssetAccount>,\n ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n });\n },\n }),\n }),\n };\n}\n\nfunction system() {\n return {\n account: (): BalanceConfigBuilder => ({\n build: ({ address }) =>\n new SubstrateQueryConfig({\n module: 'system',\n func: 'account',\n args: [address],\n transform: async (\n response: FrameSystemAccountInfo,\n ): Promise<bigint> => calculateSystemAccountBalance(response),\n }),\n }),\n accountEquilibrium: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) =>\n new SubstrateQueryConfig({\n module: 'system',\n func: 'account',\n args: [address],\n transform: async (response): Promise<bigint> => {\n if (response.data.isEmpty) {\n return 0n;\n }\n\n const res = response.data.toJSON() as unknown;\n let balances: EquilibriumSystemBalanceData | undefined;\n\n if (Array.isArray(res)) {\n balances = res;\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n if (Array.isArray((res as any)?.v0?.balance)) {\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n balances = (res as any).v0.balance;\n }\n\n if (!balances) {\n throw new Error(\"Can't get balance from Equilibrium chain\");\n }\n\n const balance = balances.find(\n ([assetId]) => assetId === asset.getBalanceAssetId(),\n );\n\n if (!balance) {\n return 0n;\n }\n\n return BigInt(balance[1].positive);\n },\n }),\n }),\n accountEvmTo32: (): BalanceConfigBuilder => ({\n build: ({ address }) => {\n const substrateAddress = evmToAddress(address);\n\n return new SubstrateQueryConfig({\n module: 'system',\n func: 'account',\n args: [substrateAddress],\n transform: async (\n response: FrameSystemAccountInfo,\n ): Promise<bigint> => calculateSystemAccountBalance(response),\n });\n },\n }),\n };\n}\n\nfunction tokens() {\n return {\n accounts: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) =>\n new SubstrateQueryConfig({\n module: 'tokens',\n func: 'accounts',\n args: [address, asset.getBalanceAssetId()],\n transform: async ({\n free,\n frozen,\n }: TokensPalletAccountData): Promise<bigint> =>\n BigInt(free.sub(frozen).toString()),\n }),\n }),\n };\n}\n\nexport async function calculateSystemAccountBalance(\n response: FrameSystemAccountInfo,\n): Promise<bigint> {\n const balance = response.data as PalletBalancesAccountData &\n PalletBalancesAccountDataOld;\n\n const free = BigInt(balance.free.toString());\n const frozen = balance.miscFrozen ?? balance.frozen;\n const frozenMinusReserved = BigInt(frozen.sub(balance.reserved).toString());\n const locked = frozenMinusReserved < 0n ? 0n : frozenMinusReserved;\n\n return free - locked;\n}\n","import { type Abi, encodeFunctionData } from 'viem';\nimport { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface ContractConfigConstructorParams\n extends BaseConfigConstructorParams {\n address: string;\n abi: Abi;\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n args: any[];\n}\n\nexport class ContractConfig extends BaseConfig {\n readonly address: string;\n\n readonly abi: Abi;\n\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n readonly args: any[];\n\n static is(obj: unknown): obj is ContractConfig {\n return obj instanceof ContractConfig;\n }\n\n constructor({\n address,\n abi,\n args,\n ...other\n }: ContractConfigConstructorParams) {\n super({ ...other });\n\n this.address = address;\n this.abi = abi;\n this.args = args;\n }\n\n encodeFunctionData() {\n return encodeFunctionData({\n abi: this.abi,\n functionName: this.func,\n args: this.args,\n });\n }\n}\n","import type { AssetAmount } from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { BuilderParams } from '../../../builder.interfaces';\nimport { getExtrinsicArgumentVersion } from '../../../extrinsic/ExtrinsicBuilder.utils';\nimport { ContractConfig } from '../../../types';\nimport {\n type AssetAddressFormat,\n type AssetMultilocation,\n type ContractConfigBuilder,\n TransferType,\n} from '../../ContractBuilder.interfaces';\nimport {\n encodeXcmMessageToBytes,\n getAddressGlobalConsensusAssetMultilocation,\n getAssetAddressMultilocation,\n getBeneficiaryMultilocation,\n getDestinationParachainMultilocation,\n getGlobalConsensusAssetMultilocation,\n getGlobalConsensusDestination,\n getPalletInstanceMultilocation,\n} from '../../ContractBuilder.utils';\nimport { XCM_ABI } from './XcmPrecompileAbi';\n\nconst XCM_PRECOMPILE_ADDRESS = '0x000000000000000000000000000000000000081A';\n\nexport function XcmPrecompile() {\n return {\n transferAssetsToPara20: (\n shouldTransferAssetPrecedeFeeAsset = true,\n ): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination, fee }) => {\n const assets = getAssets(\n asset,\n fee,\n shouldTransferAssetPrecedeFeeAsset,\n );\n\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [destination.parachainId, destinationAddress, assets, 0],\n func: 'transferAssetsToPara20',\n module: 'Xcm',\n });\n },\n }),\n transferAssetsToPara32: (\n shouldTransferAssetPrecedeFeeAsset = false,\n ): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination, fee }) => {\n const assets = getAssets(\n asset,\n fee,\n shouldTransferAssetPrecedeFeeAsset,\n );\n\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n destination.parachainId,\n u8aToHex(decodeAddress(destinationAddress)),\n assets,\n 0,\n ],\n func: 'transferAssetsToPara32',\n module: 'Xcm',\n });\n },\n }),\n transferAssetsToRelay: (): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset }) => {\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n u8aToHex(decodeAddress(destinationAddress)),\n [[asset.address, asset.amount]],\n 0,\n ],\n func: 'transferAssetsToRelay',\n module: 'Xcm',\n });\n },\n }),\n transferAssetsLocation: () => ({\n nativeAsset: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n getPalletInstanceMultilocation(params.sourceApi, params.asset),\n ],\n });\n },\n }),\n localErc20: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n getAssetAddressMultilocation(\n params.sourceApi,\n params.asset,\n params.destination,\n ),\n ],\n });\n },\n }),\n foreignAsset: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n getGlobalConsensusAssetMultilocation(\n params.sourceApi,\n params.asset,\n params.destination,\n ),\n ],\n });\n },\n }),\n foreignErc20: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n // fee asset\n getGlobalConsensusAssetMultilocation(\n params.sourceApi,\n params.fee,\n params.destination,\n ),\n // transfer asset\n getAddressGlobalConsensusAssetMultilocation(\n params.sourceApi,\n params.asset,\n params.destination,\n ),\n ],\n });\n },\n }),\n }),\n transferAssetsUsingTypeAndThenAddress: (\n shouldTransferAssetPrecedeFeeAsset = false,\n ): ContractConfigBuilder => ({\n build: ({\n destinationAddress,\n asset,\n fee,\n destination,\n destinationApi,\n sourceApi,\n }) => {\n const assets = getAssets(\n asset,\n fee,\n shouldTransferAssetPrecedeFeeAsset,\n );\n\n const xcmMessage = buildXcmMessage(\n assets,\n destinationAddress,\n sourceApi,\n );\n\n const customXcmOnDest = encodeXcmMessageToBytes(\n xcmMessage,\n destinationApi,\n );\n\n const feeIndex = shouldTransferAssetPrecedeFeeAsset ? 1 : 0;\n\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n getDestinationParachainMultilocation(destination),\n assets,\n TransferType.DestinationReserve,\n feeIndex,\n TransferType.DestinationReserve,\n customXcmOnDest,\n ],\n func: 'transferAssetsUsingTypeAndThenAddress',\n module: 'Xcm',\n });\n },\n }),\n };\n}\n\nfunction getAssets(\n asset: AssetAmount,\n feeAsset: AssetAmount,\n shouldTransferAssetPrecedeFeeAsset: boolean,\n): AssetAddressFormat[] {\n if (feeAsset.isSame(asset)) {\n return [[asset.address, asset.amount]];\n }\n\n return shouldTransferAssetPrecedeFeeAsset\n ? [\n [asset.address, asset.amount],\n [feeAsset.address, feeAsset.amount],\n ]\n : [\n [feeAsset.address, feeAsset.amount],\n [asset.address, asset.amount],\n ];\n}\n\nfunction buildXcmMessage(\n assets: AssetAddressFormat[],\n destinationAddress: string,\n sourceApi: ApiPromise | undefined,\n) {\n const xcmVersion = getExtrinsicArgumentVersion(\n sourceApi?.tx.polkadotXcm?.send || sourceApi?.tx.xcmPallet?.send,\n );\n\n const instruction = {\n DepositAsset: {\n assets: { Wild: { AllCounted: assets.length } },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n {\n AccountId32: {\n id: u8aToHex(decodeAddress(destinationAddress)),\n network: null,\n },\n },\n ],\n },\n },\n },\n };\n return {\n [xcmVersion]: [instruction],\n };\n}\n\ninterface BuildTransferAssetsLocationParams extends BuilderParams {\n assetsMultilocations: AssetMultilocation[];\n feeAssetItem?: number;\n}\n\nfunction buildTransferAssetsLocation({\n assetsMultilocations,\n feeAssetItem = 0,\n destinationAddress,\n destination,\n sourceApi,\n}: BuildTransferAssetsLocationParams) {\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n getGlobalConsensusDestination(sourceApi, destination),\n getBeneficiaryMultilocation(destinationAddress, destination),\n assetsMultilocations,\n feeAssetItem,\n ],\n func: 'transferAssetsLocation',\n module: 'Xcm',\n });\n}\n","import type { HttpTransport, PublicClient } from 'viem';\n\nexport type EvmQueryFunctions = 'getBalance';\nexport type EvmFunctionArgs = Parameters<\n PublicClient<HttpTransport>[EvmQueryFunctions]\n>;\n\nexport interface EvmQueryConfigParams {\n readonly args: EvmFunctionArgs;\n readonly func: EvmQueryFunctions;\n}\n\nexport class EvmQueryConfig {\n readonly args: EvmFunctionArgs;\n readonly func: EvmQueryFunctions;\n\n static is(obj: unknown): obj is EvmQueryConfig {\n return obj instanceof EvmQueryConfig;\n }\n\n constructor({ args, func }: EvmQueryConfigParams) {\n this.args = args;\n this.func = func;\n }\n}\n","import type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface ExtrinsicConfigConstructorParams\n extends Omit<BaseConfigConstructorParams, 'type'> {\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];\n}\n\nexport class ExtrinsicConfig extends BaseConfig {\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];\n\n static is(obj: unknown): obj is ExtrinsicConfig {\n return obj instanceof ExtrinsicConfig;\n }\n\n constructor({ getArgs, ...other }: ExtrinsicConfigConstructorParams) {\n super({ ...other });\n\n this.getArgs = getArgs;\n }\n}\n","import type { ApiPromise } from '@polkadot/api';\n\nexport interface SubstrateCallConfigConstructorParams {\n api: ApiPromise;\n call: () => Promise<bigint>;\n}\n\nexport class SubstrateCallConfig {\n readonly api: ApiPromise;\n\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n readonly call: () => Promise<any>;\n\n static is(obj: unknown): obj is SubstrateCallConfig {\n return obj instanceof SubstrateCallConfig;\n }\n\n constructor({ api, call }: SubstrateCallConfigConstructorParams) {\n this.api = api;\n this.call = call;\n }\n}\n","import type { ConfigBuilder } from '../builder.interfaces';\nimport type { ContractConfig } from '../types/evm/ContractConfig';\n\nexport type ContractConfigBuilder = ConfigBuilder<ContractConfig>;\n\nexport type DestinationMultilocation = [\n /**\n * 0 - if destination is referring to a location in the same chain\n * 1 - if transaction is going through or to a relay chain\n * 2 - if transaction is going to a parachain in another ecosystem\n */\n 0 | 1 | 2,\n (\n | [\n /**\n * example '0x00000007DC'\n * 7DC - parachain id in hex\n * can be found here:\n * - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fkusama-rpc.polkadot.io#/parachains\n * - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/parachains\n */\n string,\n /**\n * example '0x01%account%00',\n * enum = 01 (AccountId32)\n * networkId = 00 (any)\n */\n string,\n ]\n | [\n /**\n * example '0x01%account%00',\n * enum = 01 (AccountId32)\n * networkId = 00 (any)\n */\n string,\n ]\n /**\n * example 'Here',\n */\n | []\n ),\n];\n\nexport type AssetAddressFormat = (string | bigint | undefined)[];\n\nexport enum TransferType {\n Teleport,\n LocalReserve,\n DestinationReserve,\n}\n\nexport type AssetMultilocation = [[number, string[]], bigint];\n","import {\n type AnyParachain,\n type AssetAmount,\n EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\nimport { getGlobalConsensus } from '../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\nimport type {\n AssetMultilocation,\n DestinationMultilocation,\n} from './ContractBuilder.interfaces';\n\nexport function getPrecompileDestinationInterior(\n destination: AnyParachain,\n address?: string,\n): [Address, Address] | [Address] {\n if (!address) {\n return [encodeParachain(destination.parachainId)];\n }\n const acc = encodeAddress(destination, address);\n\n return destination.parachainId\n ? [encodeParachain(destination.parachainId), acc]\n : [acc];\n}\n\nexport function getBeneficiaryMultilocation(\n address: string,\n destination: AnyParachain,\n): DestinationMultilocation {\n return [0, [encodeAddress(destination, address)]];\n}\n\nexport function getDestinationMultilocation(\n address: string,\n destination: AnyParachain,\n): DestinationMultilocation {\n const interior = getPrecompileDestinationInterior(destination, address);\n return [1, interior];\n}\n\nexport function getDestinationParachainMultilocation(\n destination: AnyParachain,\n): DestinationMultilocation {\n if (destination.isRelay) {\n return [1, []];\n }\n\n return [1, [encodeParachain(destination.parachainId)]];\n}\n\nexport function getGlobalConsensusDestination(\n sourceApi: ApiPromise | undefined,\n destination: AnyParachain,\n) {\n return [\n 2,\n [\n encodeGlobalConsensus(sourceApi, destination),\n encodeParachain(destination.parachainId),\n ],\n ];\n}\n\nexport function getPalletInstanceMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n): AssetMultilocation {\n return [\n [0, [encodePalletInstance(sourceApi, asset.getAssetPalletInstance())]],\n asset.amount,\n ];\n}\n\nexport function getAssetAddressMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n destination: AnyParachain,\n): AssetMultilocation {\n if (!asset.address) {\n throw new Error(`Asset address is required for ${asset.key}`);\n }\n\n return [\n [\n 0,\n [\n encodePalletInstance(sourceApi, asset.getAssetPalletInstance()),\n encodeAddress(destination, asset.address),\n ],\n ],\n asset.amount,\n ];\n}\n\nexport function getGlobalConsensusAssetMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n destination: AnyParachain,\n): AssetMultilocation {\n const assetInDestination = destination.getChainAsset(asset);\n return [\n [\n 2,\n [\n encodeGlobalConsensus(sourceApi, destination),\n encodeParachain(destination.parachainId),\n encodePalletInstance(\n sourceApi,\n assetInDestination.getAssetPalletInstance(),\n ),\n ],\n ],\n asset.amount,\n ];\n}\n\nexport function getAddressGlobalConsensusAssetMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n destination: AnyParachain,\n): AssetMultilocation {\n const assetInDestination = destination.getChainAsset(asset);\n\n if (!assetInDestination.address) {\n throw new Error(`Asset address is required for ${assetInDestination.key}`);\n }\n\n return [\n [\n 2,\n [\n encodeGlobalConsensus(sourceApi, destination),\n encodeParachain(destination.parachainId),\n encodePalletInstance(\n sourceApi,\n assetInDestination.getAssetPalletInstance(),\n ),\n encodeAddress(destination, assetInDestination.address),\n ],\n ],\n asset.amount,\n ];\n}\n\n/**\n * Encodes an XCM message to bytes for use in Solidity precompiles\n */\nexport function encodeXcmMessageToBytes(\n xcmMessage: Record<string, unknown>,\n api: ApiPromise | undefined,\n): Address {\n if (!api) {\n throw new Error('API is required to encode XCM message');\n }\n\n try {\n const versionedXcm = api.createType('XcmVersionedXcm', xcmMessage);\n return versionedXcm.toHex();\n } catch (error) {\n console.error('Failed to encode XCM message:', error);\n throw error;\n }\n}\n\nfunction encodeParachain(paraId: number): Address {\n return `0x00${paraId.toString(16).padStart(8, '0')}`;\n}\n\nfunction encodeGlobalConsensus(\n api: ApiPromise | undefined,\n destination: AnyParachain,\n): Address {\n const globalConsensus = getGlobalConsensus(destination);\n\n return encodeXcmJunction(api, {\n GlobalConsensus: globalConsensus,\n });\n}\n\nfunction encodePalletInstance(\n api: ApiPromise | undefined,\n palletInstance: number,\n): Address {\n return encodeXcmJunction(api, {\n PalletInstance: palletInstance,\n });\n}\n\nfunction encodeXcmJunction(\n api: ApiPromise | undefined,\n junction: object,\n): Address {\n if (!api) {\n throw new Error('API is required to encode XCM junction');\n }\n\n const junctionType = api.createType('XcmV3Junction', junction);\n\n return junctionType.toHex();\n}\n\nfunction encodeAddress(destination: AnyParachain, address: string): Address {\n const accountType = EvmParachain.is(destination) ? '03' : '01';\n return `0x${accountType}${u8aToHex(\n decodeAddress(address),\n -1,\n false,\n )}00` as Address;\n}\n","import { type AnyParachain, Ecosystem } from '@moonbeam-network/xcm-types';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport type { BuilderParams } from '../../../builder.interfaces';\nimport type { Parents } from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\n\nexport interface GetExtrinsicParams extends Omit<BuilderParams, 'asset'> {\n assets: object[];\n func?: SubmittableExtrinsicFunction<'promise'>;\n parents?: Parents;\n feeIndex?: number;\n globalConsensus?: Ecosystem;\n}\n\nexport function getPolkadotXcmExtrinsicArgs({\n assets,\n destinationAddress,\n destination,\n func,\n parents = 1,\n feeIndex = 0,\n}: GetExtrinsicParams) {\n const version = getExtrinsicArgumentVersion(func);\n\n return [\n // dest\n {\n [version]: normalizeX1(version, {\n parents,\n interior: {\n X1: {\n Parachain: destination.parachainId,\n },\n },\n }),\n },\n // beneficiary\n {\n [version]: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: getExtrinsicAccount(destinationAddress),\n },\n }),\n },\n // assets\n {\n [version]: assets,\n },\n // feeAssetItem\n feeIndex,\n // weightLimit\n 'Unlimited',\n ];\n}\n\nfunction isKusamaDestination(destination: AnyParachain) {\n return (\n destination.ecosystem === Ecosystem.Kusama ||\n destination.ecosystem === Ecosystem.MoonsamaRelay\n );\n}\n\nfunction isPolkadotDestination(destination: AnyParachain) {\n return (\n destination.ecosystem === Ecosystem.Polkadot ||\n destination.ecosystem === Ecosystem.MoonlamaRelay\n );\n}\n\nexport function getGlobalConsensus(destination: AnyParachain) {\n if (isKusamaDestination(destination)) {\n return 'Kusama';\n }\n\n if (isPolkadotDestination(destination)) {\n return 'Polkadot';\n }\n\n return {\n ByGenesis: destination.relayGenesisHash,\n };\n}\n\nexport function getEcosystemTransferExtrinsicArgs({\n assets,\n destinationAddress,\n destination,\n func,\n feeIndex = 0,\n}: GetExtrinsicParams) {\n const version = getExtrinsicArgumentVersion(func);\n\n const globalConsensus = getGlobalConsensus(destination);\n\n return [\n // dest\n {\n [version]: normalizeX1(version, {\n parents: 2,\n interior: {\n X2: [\n { GlobalConsensus: globalConsensus },\n {\n Parachain: destination.parachainId,\n },\n ],\n },\n }),\n },\n // beneficiary\n {\n [version]: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: getExtrinsicAccount(destinationAddress),\n },\n }),\n },\n // assets\n {\n [version]: assets,\n },\n // feeAssetItem\n feeIndex,\n // weightLimit\n 'Unlimited',\n ];\n}\n\nexport function shouldFeeAssetPrecedeAsset({\n asset,\n fee,\n}: BuilderParams): boolean {\n const assetIdNumber = Number(asset.getAssetId());\n const feeAssetIdNumber = Number(fee.getAssetId());\n\n if (Number.isNaN(assetIdNumber) || Number.isNaN(feeAssetIdNumber)) {\n return false;\n }\n\n return assetIdNumber > feeAssetIdNumber;\n}\n","export const XCM_ABI = [\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'beneficiary',\n type: 'tuple',\n },\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetLocationInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsLocation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'paraId',\n type: 'uint32',\n },\n {\n internalType: 'address',\n name: 'beneficiary',\n type: 'address',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsToPara20',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'paraId',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'beneficiary',\n type: 'bytes32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsToPara32',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'beneficiary',\n type: 'bytes32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsToRelay',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'assetsTransferType',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'feesTransferType',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenAddress',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'remoteReserve',\n type: 'tuple',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenAddress',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetLocationInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'assetsTransferType',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'feesTransferType',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenLocation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetLocationInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'remoteReserve',\n type: 'tuple',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenLocation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import type { AnyParachain } from '@moonbeam-network/xcm-types';\nimport { formatAssetIdToERC20 } from '@moonbeam-network/xcm-utils';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress, evmToAddress } from '@polkadot/util-crypto';\nimport { ContractConfig } from '../../../types/evm/ContractConfig';\nimport type {\n ContractConfigBuilder,\n DestinationMultilocation,\n} from '../../ContractBuilder.interfaces';\nimport { getDestinationMultilocation } from '../../ContractBuilder.utils';\nimport { XTOKENS_ABI } from './XtokensABI';\n\nconst U_64_MAX = 18446744073709551615n;\nconst XTOKENS_CONTRACT_ADDRESS = '0x0000000000000000000000000000000000000804';\n\nexport function Xtokens() {\n return {\n transfer: (weight = U_64_MAX): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ContractConfig({\n address: XTOKENS_CONTRACT_ADDRESS,\n abi: XTOKENS_ABI,\n args: [\n asset.address\n ? formatAssetIdToERC20(asset.address)\n : asset.getAssetId(),\n asset.amount,\n getDestinationMultilocation(destinationAddress, destination),\n weight,\n ],\n func: 'transfer',\n module: 'Xtokens',\n }),\n }),\n transferMultiCurrencies: (\n shouldTransferAssetPrecedeFeeAsset = true,\n weight = U_64_MAX,\n ): ContractConfigBuilder => ({\n build: ({ asset, destination, destinationAddress, fee }) => {\n const transferAsset = [\n asset.address\n ? formatAssetIdToERC20(asset.address)\n : asset.getAssetId(),\n asset.amount,\n ];\n\n const feeAsset = [\n fee.address ? formatAssetIdToERC20(fee.address) : fee.getAssetId(),\n fee.amount,\n ];\n\n const assets = shouldTransferAssetPrecedeFeeAsset\n ? [transferAsset, feeAsset]\n : [feeAsset, transferAsset];\n const feeAssetIndex = shouldTransferAssetPrecedeFeeAsset ? 1 : 0;\n return new ContractConfig({\n address: XTOKENS_CONTRACT_ADDRESS,\n abi: XTOKENS_ABI,\n args: [\n assets,\n feeAssetIndex,\n getDestinationMultilocation(destinationAddress, destination),\n weight,\n ],\n func: 'transferMultiCurrencies',\n module: 'Xtokens',\n });\n },\n }),\n transferWithEvmTo32: (weight = U_64_MAX): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) => {\n const multilocation =\n getDestinationMultilocationForPrecompileDestination(\n destinationAddress,\n destination,\n );\n\n return new ContractConfig({\n address: XTOKENS_CONTRACT_ADDRESS,\n abi: XTOKENS_ABI,\n args: [\n asset.address\n ? formatAssetIdToERC20(asset.address)\n : asset.getAssetId(),\n asset.amount,\n multilocation,\n weight,\n ],\n func: 'transfer',\n module: 'Xtokens',\n });\n },\n }),\n };\n}\n\nfunction getDestinationMultilocationForPrecompileDestination(\n address: string,\n destination: AnyParachain,\n): DestinationMultilocation {\n /* \n 01: AccountId32\n 03: AccountKey20\n https://docs.moonbeam.network/builders/interoperability/xcm/xc20/xtokens/#building-the-precompile-multilocation\n */\n const accountType = '01';\n const substrateAddress = evmToAddress(address);\n const acc = `0x${accountType}${u8aToHex(\n decodeAddress(substrateAddress),\n -1,\n false,\n )}00`;\n\n return [\n 1,\n destination.parachainId\n ? [`0x0000000${destination.parachainId.toString(16)}`, acc]\n : [acc],\n ];\n}\n","export const XTOKENS_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transfer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Xtokens.Currency[]',\n name: 'currencies',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeItem',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiCurrencies',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { XcmPrecompile } from './contracts/XcmPrecompile';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function ContractBuilder() {\n return {\n Xtokens,\n XcmPrecompile,\n };\n}\n","export const ERC20_ABI = [\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_spender',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address',\n },\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n] as const;\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\n\nexport enum EqBalancesFee {\n SovereignAccWillPay = 'SovereignAccWillPay',\n TargetChainAccWillPay = 'TargetChainAccWillPay',\n ThisAccWillPay = 'ThisAccWillPay',\n}\n\nconst pallet = 'eqBalances';\n\nexport function eqBalances() {\n return {\n xcmTransfer: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'xcmTransfer',\n getArgs: () => [\n asset.getAssetId(),\n asset.amount,\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(destinationAddress),\n ],\n },\n },\n EqBalancesFee.ThisAccWillPay,\n ],\n }),\n }),\n transferXcm: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination, fee }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'transferXcm',\n getArgs: () => {\n const amountWithoutFee =\n asset.amount - fee.amount > 0n ? asset.amount - fee.amount : 0n;\n\n return [\n [\n asset.getAssetId(),\n asset.isSame(fee) ? amountWithoutFee : asset.amount,\n ],\n [fee.getAssetId(), fee.amount],\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(address),\n ],\n },\n },\n ];\n },\n }),\n }),\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\nimport {\n getEcosystemTransferExtrinsicArgs,\n getGlobalConsensus,\n getPolkadotXcmExtrinsicArgs,\n shouldFeeAssetPrecedeAsset,\n} from './polkadotXcm.util';\n\nconst pallet = 'polkadotXcm';\n\nexport function polkadotXcm() {\n return {\n limitedReserveTransferAssets: () => {\n const func = 'limitedReserveTransferAssets';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X1: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const isAssetDifferent = !params.asset.isSame(params.fee);\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n const shouldFeeAssetPrecede =\n shouldFeeAssetPrecedeAsset(params);\n\n if (isAssetDifferent) {\n const feeAsset = {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance: params.fee.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.fee.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n };\n\n if (shouldFeeAssetPrecede) {\n assets.unshift(feeAsset);\n } else {\n assets.push(feeAsset);\n }\n }\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n feeIndex: isAssetDifferent && !shouldFeeAssetPrecede ? 1 : 0,\n });\n },\n }),\n }),\n X2PalletInstance: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n };\n },\n limitedReserveWithdrawAssets: () => {\n const func = 'limitedReserveWithdrawAssets';\n\n return {\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n };\n },\n transferAssets: () => {\n const func = 'transferAssets';\n\n return {\n here: (parents = 0): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X1: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X1: [\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X1GeneralKey: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const isAssetDifferent = !params.asset.isSame(params.fee);\n\n const assets = [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n GeneralKey: params.asset.getGeneralKey(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n if (isAssetDifferent) {\n const feeAsset = {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n GeneralKey: params.fee.getGeneralKey(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.fee.amount,\n },\n };\n\n assets.unshift(feeAsset);\n }\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n // TODO find a better way to identify when the asset info is in the destination\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X3: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n const feeAssetInDestination = params.destination.getChainAsset(\n params.fee,\n );\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n feeAssetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n },\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X3: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: assetInDestination.address,\n },\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X2AndFeeHere: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n // Fee Asset\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n },\n ],\n feeIndex: 1,\n });\n },\n }),\n }),\n };\n },\n transferAssetsUsingTypeAndThen: () => {\n const func = 'transferAssetsUsingTypeAndThen';\n return {\n here: (parents = 0): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return [\n {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n {\n [version]: [\n {\n id: {\n parents,\n interior: 'Here',\n },\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n },\n 'LocalReserve',\n {\n [version]: {\n parents,\n interior: 'Here',\n },\n },\n 'LocalReserve',\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: 1 },\n },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n getExtrinsicAccount(params.destinationAddress),\n ],\n },\n },\n },\n },\n ],\n },\n 'Unlimited',\n ];\n },\n }),\n }),\n X2: (parents = 0): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const isSameAsset = params.asset.isSame(params.fee);\n\n const shouldFeeAssetPrecede =\n shouldFeeAssetPrecedeAsset(params);\n\n const asset = {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance: params.asset.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n };\n\n const assetWithAmount = {\n id: asset,\n fun: { Fungible: params.asset.amount },\n };\n\n const feeAsset = {\n parents,\n interior: 'Here',\n };\n\n const feeAssetWithAmount = {\n id: feeAsset,\n fun: { Fungible: params.fee.amount },\n };\n\n const assets = isSameAsset\n ? [assetWithAmount]\n : shouldFeeAssetPrecede\n ? [feeAssetWithAmount, assetWithAmount]\n : [assetWithAmount, feeAssetWithAmount];\n\n return [\n // dest\n {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n // assets\n {\n [version]: assets,\n },\n // assetsTransferType\n 'LocalReserve',\n // remoteFeesId\n {\n [version]: isSameAsset ? asset : feeAsset,\n },\n // feesTransferType\n 'LocalReserve',\n // customXcmOnDest\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: isSameAsset ? 1 : 2 },\n },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n getExtrinsicAccount(params.destinationAddress),\n ],\n },\n },\n },\n },\n ],\n },\n // weightLimit\n 'Unlimited',\n ];\n },\n }),\n }),\n // TODO we could pass a parameter globalConsensus in the chain asset if we need a different one\n globalConsensusEthereum: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n\n getArgs: (extrinsicFunction) => {\n if (!params.asset.address) {\n throw new Error(\n 'Asset address is needed for transferAssetsUsingTypeAndThen.globalConsensus function',\n );\n }\n\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n return [\n {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n {\n [version]: [\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X2: [\n { globalConsensus: { Ethereum: { ChainId: 1 } } },\n getExtrinsicAccount(params.asset.address),\n ],\n },\n }),\n fun: { fungible: params.asset.amount },\n },\n ],\n },\n 'LocalReserve',\n {\n [version]: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X2: [\n { globalConsensus: { Ethereum: { ChainId: 1 } } },\n getExtrinsicAccount(params.asset.address),\n ],\n },\n }),\n },\n 'LocalReserve',\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: 1 },\n },\n beneficiary: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: getExtrinsicAccount(\n params.destinationAddress,\n ),\n },\n }),\n },\n },\n ],\n },\n 'Unlimited',\n ];\n },\n }),\n }),\n };\n },\n transferAssetsToEcosystem: () => {\n const func = 'transferAssets';\n\n return {\n X1: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: params.asset.address,\n },\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n X3: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X3: [\n {\n GlobalConsensus: getGlobalConsensus(\n params.destination,\n ),\n },\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n X4: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const feeAssetInDestination = params.destination.getChainAsset(\n params.fee,\n );\n\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n const globalConsensus = getGlobalConsensus(params.destination);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X3: [\n {\n GlobalConsensus: globalConsensus,\n },\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n feeAssetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n },\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X4: [\n {\n GlobalConsensus: globalConsensus,\n },\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: assetInDestination.address,\n },\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n };\n },\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport {\n type ExtrinsicConfigBuilder,\n type Parents,\n XcmVersion,\n} from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n} from '../../ExtrinsicBuilder.utils';\nimport { getPolkadotXcmExtrinsicArgs } from '../polkadotXcm/polkadotXcm.util';\n\nconst pallet = 'xcmPallet';\n\nexport function xcmPallet() {\n return {\n limitedReserveTransferAssets: (parents: Parents = 1) => {\n const func = 'limitedReserveTransferAssets';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n parents,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n };\n },\n transferAssetsUsingTypeAndThen: () => {\n const func = 'transferAssetsUsingTypeAndThen';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: () => {\n const version = XcmVersion.v4;\n return [\n {\n [version]: {\n parents: 0,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n {\n [version]: [\n {\n id: {\n parents: 0,\n interior: 'Here',\n },\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n },\n 'LocalReserve',\n {\n [version]: {\n parents: 0,\n interior: 'Here',\n },\n },\n 'LocalReserve',\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: 1 },\n },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n getExtrinsicAccount(params.destinationAddress),\n ],\n },\n },\n },\n },\n ],\n },\n 'Unlimited',\n ];\n },\n }),\n }),\n };\n },\n };\n}\n","import type { AnyParachain } from '@moonbeam-network/xcm-types';\nimport type { XcmVersion } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\nimport type { XTokensWeightLimit } from './xTokens.interfaces';\n\n/**\n * It is safer to always use unlimited\n */\nexport function getWeight(): XTokensWeightLimit {\n return 'Unlimited';\n}\n\nexport function getDestination(\n version: XcmVersion,\n address: string,\n destination: AnyParachain,\n) {\n return {\n [version]: {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(address),\n ],\n },\n },\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport {\n type ExtrinsicConfigBuilder,\n XcmVersion,\n} from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\nimport { getDestination, getWeight } from './xTokens.utils';\n\nconst pallet = 'xTokens';\n\nexport function xTokens() {\n return {\n transfer: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'transfer',\n getArgs: (func) => {\n const destIndex = 2;\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n asset.getAssetId(),\n asset.amount,\n getDestination(version, destinationAddress, destination),\n getWeight(),\n ];\n },\n }),\n }),\n transferMultiAsset: (originParachainId: number) => {\n const funcName = 'transferMultiasset';\n const destIndex = 1;\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: funcName,\n getArgs: (func) => {\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n {\n [version]: {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: 'Here',\n }),\n fun: {\n Fungible: asset.amount,\n },\n },\n },\n getDestination(version, address, destination),\n getWeight(),\n ];\n },\n }),\n }),\n X1: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: funcName,\n getArgs: (func) => {\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n {\n [version]: {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 1,\n interior: {\n X1: {\n Parachain: originParachainId,\n },\n },\n }),\n ),\n fun: {\n Fungible: asset.amount,\n },\n },\n },\n getDestination(version, address, destination),\n getWeight(),\n ];\n },\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: funcName,\n getArgs: (func) => {\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n {\n [version]: {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: originParachainId,\n },\n {\n GeneralKey: asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: asset.amount,\n },\n },\n },\n getDestination(version, address, destination),\n getWeight(),\n ];\n },\n }),\n }),\n };\n },\n transferMultiCurrencies: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination, fee }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'transferMulticurrencies',\n getArgs: () => [\n [\n [asset.getAssetId(), asset.amount],\n [fee.getAssetId(), fee.amount],\n ],\n 1,\n getDestination(XcmVersion.v3, address, destination),\n getWeight(),\n ],\n }),\n }),\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\n\nconst pallet = 'xTransfer';\n\nexport function xTransfer() {\n return {\n transfer: () => {\n const method = 'transfer';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: method,\n getArgs: () => [\n {\n id: {\n Concrete: {\n parents: 0,\n interior: 'Here',\n },\n },\n fun: {\n Fungible: asset.amount,\n },\n },\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(address),\n ],\n },\n },\n {\n refTime: 5_000_000_000,\n proofSize: 0,\n },\n ],\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: method,\n getArgs: () => [\n {\n id: {\n Concrete: {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n ],\n },\n },\n },\n fun: {\n Fungible: asset.amount || 1n,\n },\n },\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(destinationAddress),\n ],\n },\n },\n {\n refTime: 5_000_000_000,\n proofSize: 0,\n },\n ],\n }),\n }),\n };\n },\n };\n}\n","import { eqBalances } from './pallets/eqBalances';\nimport { polkadotXcm } from './pallets/polkadotXcm';\nimport { xcmPallet } from './pallets/xcmPallet';\nimport { xTokens } from './pallets/xTokens';\nimport { xTransfer } from './pallets/xTransfer';\n\nexport function ExtrinsicBuilder() {\n return {\n eqBalances,\n xTokens,\n xTransfer,\n polkadotXcm,\n xcmPallet,\n };\n}\n","import { type AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { isEthAddress } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { Result, u128 } from '@polkadot/types';\nimport type {\n Error as PolkadotError,\n Weight,\n} from '@polkadot/types/interfaces';\nimport type { AnyJson } from '@polkadot/types/types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { XcmVersion } from '../extrinsic';\nimport { getGlobalConsensus } from '../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\n\nconst DEFAULT_AMOUNT = 10 ** 6;\nconst DEFAULT_HEX_STRING =\n '0xabcdef1234567890fedcba0987654321abcdef1234567890fedcba0987654321';\n\nexport const STABLE_XCM_VERSION: XcmVersion = XcmVersion.v4; // TODO: make this dynamic\n\nfunction isXcmV4() {\n return STABLE_XCM_VERSION === XcmVersion.v4;\n}\n\nexport function getWithdrawAssetInstruction(assetTypes: object[]) {\n return {\n WithdrawAsset: assetTypes.map((assetType) => ({\n id: { ...assetType },\n fun: {\n Fungible: DEFAULT_AMOUNT,\n },\n })),\n };\n}\n\nexport function getUniversalOriginInstruction(source?: AnyChain) {\n if (!EvmParachain.isAnyParachain(source)) {\n throw new Error('Source is not a parachain');\n }\n\n return {\n UniversalOrigin: {\n GlobalConsensus: getGlobalConsensus(source),\n },\n };\n}\n\nexport function getDescendOriginInstruction(source?: AnyChain) {\n if (!EvmParachain.isAnyParachain(source)) {\n throw new Error('Source is not a parachain');\n }\n\n return {\n DescendOrigin: {\n X1: [\n {\n Parachain: source.parachainId,\n },\n ],\n },\n };\n}\n\nexport function getReserveAssetDepositedInstruction(assetTypes: object[]) {\n return {\n ReserveAssetDeposited: assetTypes.map((assetType) => ({\n id: { ...assetType },\n fun: {\n Fungible: DEFAULT_AMOUNT,\n },\n })),\n };\n}\n\nexport function getClearOriginInstruction() {\n return {\n ClearOrigin: 'NULL',\n };\n}\n\nexport function getBuyExecutionInstruction(assetType: object) {\n // TODO should verify that asset is in acceptable payment assets\n // api.call.xcmPaymentApi.queryAcceptablePaymentAssets(xcmVersion)\n return {\n BuyExecution: {\n fees: {\n id: {\n ...assetType,\n },\n fun: {\n Fungible: DEFAULT_AMOUNT,\n },\n },\n weight_limit: {\n Unlimited: 'NULL',\n },\n },\n };\n}\n\nexport function getDepositAssetInstruction(address: string, assets: object[]) {\n const accountKey = {\n [isEthAddress(address) ? 'AccountKey20' : 'AccountId32']: {\n key: isEthAddress(address) ? address : u8aToHex(decodeAddress(address)),\n network: null,\n },\n };\n\n return {\n DepositAsset: {\n assets: {\n Wild: {\n AllCounted: assets.length,\n },\n },\n beneficiary: {\n interior: {\n X1: isXcmV4() ? [accountKey] : accountKey,\n },\n parents: 0,\n },\n max_assets: 0,\n },\n };\n}\n\nexport function getSetTopicInstruction() {\n return {\n SetTopic: DEFAULT_HEX_STRING,\n };\n}\n\nexport async function getFeeForXcmInstructionsAndAsset(\n api: ApiPromise,\n instructions: AnyJson,\n versionedAssetId: object,\n) {\n const xcmToWeightResult = await api.call.xcmPaymentApi.queryXcmWeight<\n Result<Weight, PolkadotError>\n >({\n [STABLE_XCM_VERSION]: instructions,\n });\n if (!xcmToWeightResult.isOk) {\n throw new Error(\n 'There was an error trying to get the weight for the xcm instructions (queryXcmWeight)',\n );\n }\n\n const xcmToWeight = xcmToWeightResult.asOk;\n\n const weightToForeignAssets =\n await api.call.xcmPaymentApi.queryWeightToAssetFee<\n Result<u128, PolkadotError>\n >(xcmToWeight, {\n [STABLE_XCM_VERSION]: {\n ...versionedAssetId,\n },\n });\n\n // If the asset is not supported by V4, retry with V5\n // TODO this is a temporary solution, we should find a better way to handle this, with xcmPallet.supportedVersion or polkadotXcm.supportedVersion\n if (!weightToForeignAssets.isOk) {\n console.error(\n 'Error trying to get the fee with the weight and asset (weightToForeignAssets) with V4, retrying with V5',\n );\n\n const weightToForeignAssetsV5 =\n await api.call.xcmPaymentApi.queryWeightToAssetFee<\n Result<u128, PolkadotError>\n >(xcmToWeight, {\n [XcmVersion.v5]: {\n ...versionedAssetId,\n },\n });\n\n if (!weightToForeignAssetsV5.isOk) {\n throw new Error(\n 'There was an error trying to get the fee with the weight and asset (weightToForeignAssets). Make sure the asset is supported by XcmPaymentApi.',\n );\n }\n return weightToForeignAssetsV5.asOk.toBigInt();\n }\n return weightToForeignAssets.asOk.toBigInt();\n}\n","import type { AnyChain, ChainAsset } from '@moonbeam-network/xcm-types';\nimport { Parachain } from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { Option } from '@polkadot/types';\nimport type { StagingXcmV4Location } from '@polkadot/types/lookup';\nimport { normalizeX1 } from '../extrinsic/ExtrinsicBuilder.utils';\nimport type { MoonbeamRuntimeXcmConfigAssetType } from './FeeBuilder.interfaces';\nimport { STABLE_XCM_VERSION } from './FeeBuilder.utils';\n\nexport function BuildVersionedAsset() {\n return {\n fromHere: (parents = 1) => ({\n parents,\n interior: 'Here',\n }),\n\n fromAccountKey20: (asset: ChainAsset): object => ({\n interior: {\n X2: [\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: asset.address,\n network: null,\n },\n },\n ],\n },\n parents: '0',\n }),\n\n fromGeneralIndex: (asset: ChainAsset): object => ({\n interior: {\n X1: [{ GeneralIndex: asset.getAssetId() }],\n },\n parents: '0',\n }),\n\n fromGlobalConsensus: (asset: ChainAsset): object => ({\n interior: {\n X2: [\n { GlobalConsensus: { Ethereum: { chainId: 1 } } },\n { AccountKey20: { key: asset.address, network: null } },\n ],\n },\n parents: 2,\n }),\n\n fromPalletInstance: (asset: ChainAsset): object => {\n return {\n interior: {\n X1: [\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n ],\n },\n parents: '0',\n };\n },\n\n fromPalletInstanceAndGeneralIndex: (asset: ChainAsset): object => {\n return {\n interior: {\n X2: [\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n { GeneralIndex: asset.getAssetId() },\n ],\n },\n parents: '0',\n };\n },\n\n fromSource: () => ({\n accountKey20: (source: AnyChain, asset: ChainAsset) => {\n if (!(source instanceof Parachain)) {\n throw new Error(\n `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n );\n }\n\n const sourceAsset = source.getChainAsset(asset);\n\n return {\n interior: {\n X3: [\n { Parachain: source.parachainId },\n { PalletInstance: sourceAsset.getAssetPalletInstance() },\n { AccountKey20: { key: sourceAsset.address, network: null } },\n ],\n },\n parents: 1,\n };\n },\n\n palletInstance: (source: AnyChain, asset: ChainAsset): object => {\n if (!(source instanceof Parachain)) {\n throw new Error(\n `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n );\n }\n\n const sourceAsset = source.getChainAsset(asset);\n\n return {\n interior: {\n X2: [\n { Parachain: source.parachainId },\n {\n PalletInstance: sourceAsset.getAssetPalletInstance(),\n },\n ],\n },\n parents: 1,\n };\n },\n\n palletInstanceAndGeneralIndex: (\n source: AnyChain,\n asset: ChainAsset,\n ): object => {\n if (!(source instanceof Parachain)) {\n throw new Error(\n `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n );\n }\n\n const sourceAsset = source.getChainAsset(asset);\n\n return {\n interior: {\n X3: [\n { Parachain: source.parachainId },\n { PalletInstance: sourceAsset.getAssetPalletInstance() },\n { GeneralIndex: sourceAsset.getAssetId() },\n ],\n },\n parents: 1,\n };\n },\n }),\n };\n}\n\nexport function QueryVersionedAsset() {\n // TODO instantiate api here\n // const api = new ApiPromise({\n // provider: new WsProvider(ws),\n // });\n\n return {\n fromCurrencyIdToLocations: async (asset: ChainAsset, api: ApiPromise) => {\n const result = await api.query.assetRegistry.currencyIdToLocations(\n asset.getAssetRegisteredId(),\n );\n\n if (!result || result.isEmpty) {\n throw new Error(`No location found for asset ${asset.getSymbol()}`);\n }\n\n return result.toJSON() as object;\n },\n fromAssetId: async (asset: ChainAsset, api: ApiPromise) => {\n if (!asset.getAssetRegisteredId()) {\n throw new Error(\n `No asset registered id found for asset ${asset.getSymbol()}`,\n );\n }\n\n const assetManagerResult = await api.query.assetManager?.assetIdType<\n Option<MoonbeamRuntimeXcmConfigAssetType>\n >(asset.getAssetRegisteredId());\n\n if (\n !assetManagerResult ||\n assetManagerResult.isNone ||\n assetManagerResult.isEmpty ||\n !assetManagerResult.unwrap().isXcm\n ) {\n const evmForeignAssetsResult =\n await api.query.evmForeignAssets?.assetsById<\n Option<StagingXcmV4Location>\n >(asset.getAssetRegisteredId());\n\n if (\n !evmForeignAssetsResult ||\n evmForeignAssetsResult.isEmpty ||\n evmForeignAssetsResult.isNone\n ) {\n throw new Error(`No asset type found for asset ${asset.getSymbol()}`);\n }\n\n return evmForeignAssetsResult.unwrapOrDefault().toJSON() as object;\n }\n\n return normalizeX1(\n STABLE_XCM_VERSION,\n assetManagerResult.unwrapOrDefault().asXcm.toJSON(),\n ) as object;\n },\n };\n}\n","import type { AnyChain } from '@moonbeam-network/xcm-types';\nimport type { FeeConfigBuilderParams } from '../FeeBuilder.interfaces';\nimport {\n getBuyExecutionInstruction,\n getClearOriginInstruction,\n getDepositAssetInstruction,\n getDescendOriginInstruction,\n getReserveAssetDepositedInstruction,\n getSetTopicInstruction,\n getUniversalOriginInstruction,\n getWithdrawAssetInstruction,\n} from '../FeeBuilder.utils';\nimport type { CreateXcmFeeBuilderProps } from './xcmPaymentApi';\n\nexport interface GetVersionedAssetsProps extends CreateXcmFeeBuilderProps {\n params: FeeConfigBuilderParams;\n}\n\nexport async function getVersionedAssets({\n getVersionedFeeAsset,\n getVersionedTransferAsset,\n options,\n params,\n}: GetVersionedAssetsProps): Promise<[object[], object]> {\n const { asset: transferAsset, feeAsset } = params;\n const versionedFeeAssetId = await getVersionedFeeAsset(params);\n\n const assets = [versionedFeeAssetId];\n\n if (feeAsset !== transferAsset && getVersionedTransferAsset) {\n const versionedTransferAssetId = await getVersionedTransferAsset(params);\n\n if (options.shouldTransferAssetPrecedeFeeAsset) {\n assets.unshift(versionedTransferAssetId);\n } else {\n assets.push(versionedTransferAssetId);\n }\n }\n\n return [assets, versionedFeeAssetId];\n}\n\ninterface GetInstructionsProps {\n isAssetReserveChain: boolean;\n assets: object[];\n versionedFeeAssetId: object;\n address: string;\n source?: AnyChain;\n isEcosystemBridge?: boolean;\n}\n\nexport function getInstructions({\n isAssetReserveChain,\n assets,\n versionedFeeAssetId,\n address,\n source,\n isEcosystemBridge,\n}: GetInstructionsProps) {\n const instructions = [\n isAssetReserveChain\n ? getWithdrawAssetInstruction(assets)\n : getReserveAssetDepositedInstruction(assets),\n getClearOriginInstruction(),\n getBuyExecutionInstruction(versionedFeeAssetId),\n getDepositAssetInstruction(address, assets),\n getSetTopicInstruction(),\n ];\n\n if (isEcosystemBridge) {\n return [\n getUniversalOriginInstruction(source),\n getDescendOriginInstruction(source),\n ...instructions,\n ];\n }\n\n return instructions;\n}\n","import { SubstrateCallConfig } from '../../types/substrate/SubstrateCallConfig';\nimport type {\n FeeConfigBuilder,\n FeeConfigBuilderParams,\n GetVersionedAssetId,\n XcmPaymentFeeProps,\n} from '../FeeBuilder.interfaces';\nimport { getFeeForXcmInstructionsAndAsset } from '../FeeBuilder.utils';\nimport {\n BuildVersionedAsset,\n QueryVersionedAsset,\n} from '../VersionedAssetBuilder';\nimport { getInstructions, getVersionedAssets } from './xcmPaymentApi.utils';\n\nexport function xcmPaymentApi() {\n const localMethods = {\n fromHere: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: () =>\n BuildVersionedAsset().fromHere(options.parents),\n options,\n }),\n\n fromHereAndGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: () => BuildVersionedAsset().fromHere(),\n getVersionedTransferAsset: ({ asset }) =>\n BuildVersionedAsset().fromPalletInstanceAndGeneralIndex(asset),\n options,\n }),\n\n fromPalletInstanceAndGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromPalletInstanceAndGeneralIndex(feeAsset),\n options,\n }),\n\n fromHereAndSourceGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: () => BuildVersionedAsset().fromHere(),\n getVersionedTransferAsset: ({ source, asset }) =>\n BuildVersionedAsset()\n .fromSource()\n .palletInstanceAndGeneralIndex(source, asset),\n options,\n }),\n\n fromGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromGeneralIndex(feeAsset),\n options,\n }),\n\n fromPalletInstance: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromPalletInstance(feeAsset),\n options,\n }),\n\n fromPalletInstanceAndAccountKey20: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromPalletInstance(feeAsset),\n getVersionedTransferAsset: ({ asset }) =>\n BuildVersionedAsset().fromAccountKey20(asset),\n options,\n }),\n\n fromGlobalConsensus: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromGlobalConsensus(feeAsset),\n options,\n }),\n };\n\n const sourceMethods = {\n fromSourceAccountKey20: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ source, asset }) =>\n BuildVersionedAsset().fromSource().accountKey20(source, asset),\n options,\n }),\n\n fromSourcePalletInstance: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ source, feeAsset }) =>\n BuildVersionedAsset().fromSource().palletInstance(source, feeAsset),\n options,\n }),\n };\n\n const queryMethods = {\n fromCurrencyIdToLocations: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: async ({ feeAsset, api }) => {\n return await QueryVersionedAsset().fromCurrencyIdToLocations(\n feeAsset,\n api,\n );\n },\n options,\n }),\n fromAssetIdQuery: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: async ({ feeAsset, api }) => {\n return await QueryVersionedAsset().fromAssetId(feeAsset, api);\n },\n getVersionedTransferAsset: async ({ asset, api }) => {\n return await QueryVersionedAsset().fromAssetId(asset, api);\n },\n options,\n }),\n };\n\n return {\n ...localMethods,\n ...sourceMethods,\n ...queryMethods,\n };\n}\n\nexport interface CreateXcmFeeBuilderProps {\n getVersionedFeeAsset: GetVersionedAssetId;\n getVersionedTransferAsset?: GetVersionedAssetId;\n options: XcmPaymentFeeProps;\n}\n\nconst createXcmFeeBuilder = ({\n getVersionedFeeAsset,\n getVersionedTransferAsset,\n options,\n}: CreateXcmFeeBuilderProps): FeeConfigBuilder => ({\n build: (params: FeeConfigBuilderParams) =>\n new SubstrateCallConfig({\n api: params.api,\n call: async (): Promise<bigint> => {\n const [assets, versionedFeeAssetId] = await getVersionedAssets({\n getVersionedFeeAsset,\n getVersionedTransferAsset,\n options,\n params,\n });\n\n const instructions = getInstructions({\n isAssetReserveChain: options.isAssetReserveChain,\n assets,\n versionedFeeAssetId,\n address: params.address,\n source: params.source,\n isEcosystemBridge: options.isEcosystemBridge,\n });\n\n return getFeeForXcmInstructionsAndAsset(\n params.api,\n instructions,\n versionedFeeAssetId,\n );\n },\n }),\n});\n","import { xcmPaymentApi } from './xcmPaymentApi';\n\nexport function FeeBuilder() {\n return {\n xcmPaymentApi,\n };\n}\n","import type { Bool, U8aFixed } from '@polkadot/types';\nimport type {\n AccountId32,\n EventRecord,\n H256,\n} from '@polkadot/types/interfaces';\nimport type {\n CumulusPrimitivesCoreAggregateMessageOrigin,\n StagingXcmV5Location,\n} from '@polkadot/types/lookup';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type {\n DestinationChecker,\n MonitorEventReturn,\n SourceChecker,\n} from './eventMonitoring.interfaces';\nimport {\n createDestinationChecker,\n createSourceChecker,\n} from './eventMonitoring.utils';\n\ninterface MessageQueueProcessedData {\n id: H256;\n origin: CumulusPrimitivesCoreAggregateMessageOrigin;\n weightUsed: unknown;\n success: Bool;\n}\n\nexport interface XcmEventData {\n origin: StagingXcmV5Location;\n messageId: U8aFixed;\n}\n\ninterface XTokensEventData {\n sender: AccountId32;\n}\n\ninterface XcmQueueEventData {\n messageHash: U8aFixed;\n}\n\ninterface EthereumXcmEventData {\n xcmMsgHash: H256;\n ethTxHash: H256;\n}\n\nexport function GetAddress() {\n return {\n fromXcmEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as XcmEventData;\n const interior = eventData.origin.interior.asX1[0];\n\n if (interior.isAccountId32) {\n return interior.asAccountId32.id.toHex();\n } else if (interior.isAccountKey20) {\n return interior.asAccountKey20.key.toString();\n } else {\n throw new Error('Unsupported address type');\n }\n },\n\n fromXTokensEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as XTokensEventData;\n return u8aToHex(decodeAddress(eventData.sender.toString()));\n },\n };\n}\n\nexport function GetMessageId() {\n return {\n fromXcmEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as XcmEventData;\n return eventData.messageId.toHex();\n },\n\n fromXcmpQueue:\n () =>\n (_event: EventRecord, events?: EventRecord[]): string => {\n const xcmpEvent = events?.find(\n (event) =>\n event.event.section === 'xcmpQueue' &&\n event.event.method === 'XcmpMessageSent',\n );\n\n if (!xcmpEvent) {\n throw new Error('XcmpMessageSent event not found');\n }\n\n const eventData = xcmpEvent.event.data as unknown as XcmQueueEventData;\n return eventData.messageHash.toHex();\n },\n };\n}\n\nexport function MatchMessageId() {\n return {\n fromMessageQueueId:\n () =>\n (event: EventRecord, messageId?: string): boolean => {\n if (!messageId) return true;\n\n try {\n const eventData = event.event\n .data as unknown as MessageQueueProcessedData;\n return eventData.id.toString() === messageId;\n } catch {\n return false;\n }\n },\n\n fromXcmpQueueHash:\n () =>\n (event: EventRecord, messageId?: string): boolean => {\n if (!messageId) return true;\n\n try {\n const eventData = event.event.data as unknown as XcmQueueEventData;\n return eventData.messageHash.toString() === messageId;\n } catch {\n return false;\n }\n },\n\n fromEthereumXcmEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as EthereumXcmEventData;\n return eventData.xcmMsgHash.toHex();\n },\n\n never: () => (): boolean => true, // Always match for cases where messageId is not used\n };\n}\n\nexport function GetIsSuccess() {\n return {\n fromMessageQueueProcessed:\n () =>\n (event: EventRecord): boolean => {\n try {\n const eventData = event.event\n .data as unknown as MessageQueueProcessedData;\n return eventData.success.isTrue;\n } catch {\n return false;\n }\n },\n\n fromXcmpQueueEvent:\n () =>\n (event: EventRecord): boolean => {\n return event.event.method === 'Success';\n },\n\n alwaysTrue: () => (): boolean => true, // Always successful for simple cases\n };\n}\n\nfunction CheckSource() {\n return {\n xcmPallet: (): SourceChecker =>\n createSourceChecker(\n 'xcmPallet',\n 'Sent',\n GetAddress().fromXcmEvent(),\n GetMessageId().fromXcmEvent(),\n ),\n\n polkadotXcm: (): SourceChecker =>\n createSourceChecker(\n 'polkadotXcm',\n 'Sent',\n GetAddress().fromXcmEvent(),\n GetMessageId().fromXcmEvent(),\n ),\n\n polkadotXcmAndXcmpQueue: (): SourceChecker =>\n createSourceChecker(\n 'polkadotXcm',\n 'Sent',\n GetAddress().fromXcmEvent(),\n GetMessageId().fromXcmpQueue(),\n ),\n\n xTokens: (): SourceChecker =>\n createSourceChecker(\n 'xTokens',\n ['TransferredMultiAssets', 'TransferredAssets'],\n GetAddress().fromXTokensEvent(),\n GetMessageId().fromXcmpQueue(),\n ),\n\n bridgeMessages: (): SourceChecker => (events) => {\n const event = events.find(\n (event) =>\n event.event.section === 'bridgeMessages' &&\n event.event.method === 'MessageAccepted',\n );\n\n return event ? { matched: true, event } : { matched: false };\n },\n };\n}\n\nfunction CheckDestination() {\n return {\n messageQueue: (): DestinationChecker =>\n createDestinationChecker(\n 'messageQueue',\n 'Processed',\n MatchMessageId().fromMessageQueueId(),\n GetIsSuccess().fromMessageQueueProcessed(),\n ),\n\n xcmpQueue: (): DestinationChecker => (events, messageId) => {\n // Special handling for xcmpQueue as it needs to check both Success and Fail events\n const messageIdMatcher = MatchMessageId().fromXcmpQueueHash();\n\n const successEvent = events.find((event) => {\n if (\n event.event.section !== 'xcmpQueue' ||\n event.event.method !== 'Success'\n ) {\n return false;\n }\n\n return messageIdMatcher(event, messageId);\n });\n\n const failEvent = events.find((event) => {\n if (\n event.event.section !== 'xcmpQueue' ||\n event.event.method !== 'Fail'\n ) {\n return false;\n }\n\n return messageIdMatcher(event, messageId);\n });\n\n if (!successEvent && !failEvent) {\n return { matched: false, success: false };\n }\n\n return {\n matched: true,\n success: !!successEvent,\n event: successEvent || failEvent,\n };\n },\n\n bridgeMessages: (): DestinationChecker =>\n createDestinationChecker(\n 'bridgeMessages',\n 'MessagesReceived',\n // TODO implement message matching\n MatchMessageId().never(),\n GetIsSuccess().alwaysTrue(),\n ),\n\n ethereumXcm: (): DestinationChecker =>\n createDestinationChecker(\n 'ethereumXcm',\n 'ExecutedFromXcm',\n MatchMessageId().never(),\n GetIsSuccess().alwaysTrue(),\n ),\n };\n}\n\nexport function monitorEvent(): MonitorEventReturn {\n return {\n xcmPallet: () => ({\n messageQueue: () => ({\n checkSource: CheckSource().xcmPallet(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n }),\n\n polkadotXcm: () => ({\n messageQueue: () => ({\n checkSource: CheckSource().polkadotXcm(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n mixedQueue: () => ({\n checkSource: CheckSource().polkadotXcmAndXcmpQueue(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n xcmpQueue: () => ({\n checkSource: CheckSource().polkadotXcmAndXcmpQueue(),\n checkDestination: CheckDestination().xcmpQueue(),\n }),\n }),\n\n xTokens: () => ({\n messageQueue: () => ({\n checkSource: CheckSource().xTokens(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n ethereumXcm: () => ({\n checkSource: CheckSource().xTokens(),\n checkDestination: CheckDestination().ethereumXcm(),\n }),\n }),\n\n bridgeMessages: () => ({\n bridgeMessages: () => ({\n checkSource: CheckSource().bridgeMessages(),\n checkDestination: CheckDestination().bridgeMessages(),\n }),\n }),\n };\n}\n","import type { EventRecord } from '@polkadot/types/interfaces';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type {\n DestinationChecker,\n SourceChecker,\n} from './eventMonitoring.interfaces';\n\nexport const createSourceChecker =\n (\n section: string,\n method: string | string[],\n addressExtractor: (event: EventRecord) => string,\n messageIdExtractor: (event: EventRecord, events?: EventRecord[]) => string,\n ): SourceChecker =>\n (events, sourceAddress) => {\n const decodedSourceAddress = u8aToHex(decodeAddress(sourceAddress));\n const methods = Array.isArray(method) ? method : [method];\n\n const event = events.find((event) => {\n if (\n event.event.section !== section ||\n !methods.includes(event.event.method)\n ) {\n return false;\n }\n\n try {\n const address = addressExtractor(event);\n return address === decodedSourceAddress;\n } catch {\n return false;\n }\n });\n\n if (!event) {\n return { matched: false };\n }\n\n try {\n const messageId = messageIdExtractor(event, events);\n return { matched: true, messageId, event };\n } catch {\n return { matched: true, event }; // Return without messageId if extraction fails\n }\n };\n\nexport const createDestinationChecker =\n (\n section: string,\n method: string | string[],\n matchMessageId: (event: EventRecord, messageId?: string) => boolean,\n getIsSuccess: (event: EventRecord) => boolean,\n ): DestinationChecker =>\n (events, messageId) => {\n const methods = Array.isArray(method) ? method : [method];\n\n const event = events.find((event) => {\n if (\n event.event.section !== section ||\n !methods.includes(event.event.method)\n ) {\n return false;\n }\n\n return matchMessageId(event, messageId);\n });\n\n if (!event) {\n return { matched: false, success: false };\n }\n\n const success = getIsSuccess(event);\n return { matched: true, success, event };\n };\n","import { monitorEvent } from './eventMonitoring/eventMonitoring';\n\nexport function MonitoringBuilder() {\n return {\n monitorEvent,\n };\n}\n","import {\n type AssetAmount,\n type ChainAsset,\n EvmParachain,\n type Parachain,\n} from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport { type Address, encodeFunctionData, maxUint64 } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport { getPrecompileDestinationInterior } from '../../../../../contract/ContractBuilder.utils';\nimport type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport {\n buildSendExtrinsic,\n CROSS_CHAIN_FEE,\n} from '../../extrinsic/polkadotXcm/polkadotXcm';\nimport { getAbisForChain } from './abi/abi.helpers';\n\nconst module = 'Batch';\n\nexport function Batch() {\n return {\n transferAssetsAndMessage: (): MrlConfigBuilder => ({\n build: ({\n asset,\n destination,\n destinationAddress,\n fee,\n isAutomatic,\n moonAsset,\n moonChain,\n moonApi,\n source,\n sourceAddress,\n sourceApi,\n transact,\n }) => {\n if (!EvmParachain.is(source)) {\n throw new Error('Source chain needs to be an EVMParachain');\n }\n\n if (!sourceApi) {\n throw new Error('Source API needs to be defined');\n }\n\n if (\n !source.contracts?.Xtokens ||\n !source.contracts?.XcmUtils ||\n !source.contracts?.Batch\n ) {\n throw new Error(\n 'Source chain needs to have the Xtokens, XcmUtils and Batch contract addresses configured',\n );\n }\n\n const subMappedAddress = evmToAddress(sourceAddress);\n\n const { BatchAbi, XcmUtilsAbi, XtokensAbi } = getAbisForChain(source);\n\n const { address20: computedOriginAccount } =\n getMultilocationDerivedAddresses({\n address: subMappedAddress,\n paraId: source.parachainId,\n isParents: true,\n });\n\n const send = buildSendExtrinsic({\n asset,\n destination,\n destinationAddress,\n computedOriginAccount,\n fee,\n isAutomatic,\n moonAsset,\n moonChain,\n moonApi,\n source,\n sourceAddress,\n sourceApi,\n transact,\n });\n // we keep only the message\n const encodedXcmMessage = send.args[1].toHex();\n\n const { destinationParachain, destinationParachainAndAddress } =\n getDestinationInHex(moonChain, computedOriginAccount);\n\n const { currencies, feeItem } = getCurrencies({\n source,\n moonAsset,\n asset,\n });\n const weight = maxUint64;\n\n const multiTransferTxData = encodeFunctionData({\n abi: XtokensAbi,\n functionName: 'transferMultiCurrencies',\n args: [currencies, feeItem, destinationParachainAndAddress, weight],\n });\n\n const xcmSendTxData = encodeFunctionData({\n abi: XcmUtilsAbi,\n functionName: 'xcmSend',\n args: [destinationParachain, encodedXcmMessage],\n });\n\n return new ContractConfig({\n address: source.contracts.Batch,\n abi: BatchAbi,\n args: [\n [source.contracts.Xtokens, source.contracts.XcmUtils],\n [],\n [multiTransferTxData, xcmSendTxData],\n [],\n ],\n func: 'batchAll',\n module,\n });\n },\n }),\n };\n}\n\nfunction getDestinationInHex(\n moonChain: EvmParachain,\n computedOriginAccount: string,\n) {\n const destinationParachain = {\n parents: 1,\n interior: getPrecompileDestinationInterior(moonChain),\n } as const;\n\n const destinationParachainAndAddress = {\n parents: 1,\n interior: getPrecompileDestinationInterior(\n moonChain,\n computedOriginAccount,\n ),\n } as const;\n\n return {\n destinationParachain,\n destinationParachainAndAddress,\n };\n}\n\ninterface GetCurrenciesParams {\n source: Parachain | EvmParachain;\n moonAsset: ChainAsset;\n asset: AssetAmount;\n}\n\nfunction getCurrencies({ source, moonAsset, asset }: GetCurrenciesParams) {\n const currencies = [\n {\n currencyAddress: source.getChainAsset(moonAsset).address as Address,\n amount: CROSS_CHAIN_FEE,\n },\n {\n currencyAddress: asset.address as Address,\n amount: asset.amount,\n },\n ];\n const feeItem = 0; // moonAsset\n return { currencies, feeItem };\n}\n","import {\n type AnyParachain,\n AssetAmount,\n Parachain,\n} from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { SubmittableExtrinsic } from '@polkadot/api/types';\nimport type { ISubmittableResult } from '@polkadot/types/types';\nimport { ExtrinsicBuilder } from '../../../../../extrinsic/ExtrinsicBuilder';\nimport {\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n normalizeX1,\n} from '../../../../../extrinsic/ExtrinsicBuilder.utils';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport type {\n MrlBuilderParams,\n MrlConfigBuilder,\n} from '../../../../MrlBuilder.interfaces';\n\n// TODO: these have to come from the configs\nconst BUY_EXECUTION_FEE = 100_000_000_000_000_000n; // moonChainFee\nexport const CROSS_CHAIN_FEE = 100_000_000_000_000_000n; // fee for processing the xcm message in moon chain\n\nexport function polkadotXcm() {\n return {\n send: (): MrlConfigBuilder => ({\n build: ({\n asset,\n destination,\n destinationAddress,\n fee,\n isAutomatic,\n moonAsset,\n moonChain,\n moonApi,\n sendOnlyRemoteExecution,\n source,\n sourceAddress,\n sourceApi,\n transact,\n }) => {\n if (!destination.wh?.name) {\n throw new Error('Destination chain does not have a wormhole name');\n }\n\n if (!sourceApi) {\n throw new Error('Source API needs to be defined');\n }\n\n if (!Parachain.is(source)) {\n throw new Error('Source chain needs to be a parachain');\n }\n\n const { address20: computedOriginAccount } =\n getMultilocationDerivedAddresses({\n address: sourceAddress,\n paraId: source.parachainId,\n isParents: true,\n });\n\n const assetTransferTxs = getAssetTransferTxs({\n asset,\n computedOriginAccount,\n destination,\n destinationAddress,\n fee,\n isAutomatic,\n moonApi,\n moonAsset,\n moonChain,\n source,\n sourceAddress,\n sourceApi,\n });\n\n const send = buildSendExtrinsic({\n asset,\n destination,\n destinationAddress,\n computedOriginAccount,\n fee,\n isAutomatic,\n moonAsset,\n moonChain,\n moonApi,\n source,\n sourceAddress,\n sourceApi,\n transact,\n });\n\n const transactionsToSend = sendOnlyRemoteExecution\n ? [send]\n : [...assetTransferTxs, send];\n\n return new ExtrinsicConfig({\n module: 'utility',\n func: 'batchAll',\n getArgs: () => [transactionsToSend],\n });\n },\n }),\n };\n}\n\ninterface HelperFunctionParams extends MrlBuilderParams {\n computedOriginAccount: string;\n source: AnyParachain;\n sourceApi: ApiPromise;\n}\n\nexport function buildSendExtrinsic({\n computedOriginAccount,\n moonAsset,\n moonChain,\n sourceApi,\n transact,\n}: HelperFunctionParams) {\n if (!transact) {\n throw new Error('Transact params are required');\n }\n\n const version = getExtrinsicArgumentVersion(sourceApi.tx.polkadotXcm.send);\n\n return sourceApi.tx.polkadotXcm.send(\n {\n [version]: normalizeX1(version, {\n parents: 1,\n interior: {\n X1: { Parachain: moonChain.parachainId },\n },\n }),\n },\n {\n [version]: [\n {\n WithdrawAsset: [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance: moonAsset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: { Fungible: BUY_EXECUTION_FEE },\n },\n ],\n },\n {\n BuyExecution: {\n fees: {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance: moonAsset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: { Fungible: BUY_EXECUTION_FEE },\n },\n weightLimit: 'Unlimited',\n },\n },\n {\n Transact: {\n originKind: 'SovereignAccount',\n requireWeightAtMost: {\n refTime: transact.txWeight.refTime,\n proofSize: transact.txWeight.proofSize,\n },\n call: {\n encoded: transact.call,\n },\n },\n },\n {\n SetAppendix: [\n { RefundSurplus: {} },\n {\n DepositAsset: {\n assets: { Wild: { AllCounted: 1 } },\n beneficiary: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n AccountKey20: { key: computedOriginAccount },\n },\n },\n }),\n },\n },\n ],\n },\n ],\n },\n );\n}\n\nfunction getAssetTransferTxs({\n asset,\n computedOriginAccount,\n fee,\n moonApi,\n moonAsset,\n moonChain,\n source,\n sourceAddress,\n sourceApi,\n}: HelperFunctionParams): SubmittableExtrinsic<\n 'promise',\n ISubmittableResult\n>[] {\n const { transfer, transferMulticurrencies } = sourceApi.tx.xTokens;\n const transferBuilder = ExtrinsicBuilder().xTokens().transfer();\n const transferMulticurrenciesBuilder = ExtrinsicBuilder()\n .xTokens()\n .transferMultiCurrencies();\n /**\n * TODO here we should compare the asset with the cross chain fee asset.\n * For example, FTM cannot pay for fees in Moonbase while AGNG can, so for FTM we have to send a transferMulticurrencies\n * This \"if\" is a workaround, change when we implement properly the concept of cross-chain fee (different from moonChainFee)\n */\n if (asset.isSame(fee)) {\n const assetTransferTx = transfer(\n ...transferBuilder\n .build({\n asset: asset.copyWith({\n // TODO for the moment this is only applicable to peaq, AGNG pays for fees and we have to include the cross chain fee\n // for this we have to add a new concept in the config (Cross Chain Fee), and get the value from there\n amount: asset.amount + 10n * CROSS_CHAIN_FEE,\n }),\n destination: moonChain,\n destinationAddress: computedOriginAccount,\n destinationApi: moonApi,\n fee,\n source: source,\n sourceAddress,\n sourceApi,\n })\n .getArgs(transfer),\n );\n const feeAssetTransferTx = transfer(\n ...transferBuilder\n .build({\n asset: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n }),\n destination: moonChain,\n destinationAddress: computedOriginAccount,\n destinationApi: moonApi,\n fee,\n source: source,\n sourceAddress,\n sourceApi,\n })\n .getArgs(transfer),\n );\n return [assetTransferTx, feeAssetTransferTx];\n }\n const multiCurrenciesTransferTx = transferMulticurrencies(\n ...transferMulticurrenciesBuilder\n .build({\n asset,\n destination: moonChain,\n destinationAddress: computedOriginAccount,\n destinationApi: moonApi,\n fee: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n }),\n source: source as AnyParachain,\n sourceAddress,\n sourceApi,\n })\n .getArgs(transferMulticurrencies),\n );\n return [multiCurrenciesTransferTx];\n}\n","export const PEAQ_BATCH_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallFailed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallSucceeded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSome',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSomeUntilFailure',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const PEAQ_XCM_UTILS_ABI = [\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XcmUtils.Multilocation',\n name: 'multilocation',\n type: 'tuple',\n },\n ],\n name: 'getUnitsPerSecond',\n outputs: [\n {\n internalType: 'uint256',\n name: 'unitsPerSecond',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'message',\n type: 'bytes',\n },\n ],\n name: 'weightMessage',\n outputs: [\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'message',\n type: 'bytes',\n },\n {\n internalType: 'uint64',\n name: 'maxWeight',\n type: 'uint64',\n },\n ],\n name: 'xcmExecute',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XcmUtils.Multilocation',\n name: 'dest',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'message',\n type: 'bytes',\n },\n ],\n name: 'xcmSend',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const PEAQ_XTOKENS_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transfer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Xtokens.MultiAsset[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeItem',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiAssets',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Xtokens.Currency[]',\n name: 'currencies',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeItem',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiCurrencies',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'asset',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiasset',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'asset',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiassetWithFee',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferWithFee',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import type { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { PEAQ_BATCH_ABI } from './peaq/PeaqBatchContractAbi';\nimport { PEAQ_XCM_UTILS_ABI } from './peaq/PeaqXcmUtilsContractAbi';\nimport { PEAQ_XTOKENS_ABI } from './peaq/PeaqXtokensContractAbi';\n\nexport function getAbisForChain(_: EvmParachain) {\n // TODO when we add more chains, find a way to handle Abis for the different chains, if the Abis differ\n return {\n BatchAbi: PEAQ_BATCH_ABI,\n XcmUtilsAbi: PEAQ_XCM_UTILS_ABI,\n XtokensAbi: PEAQ_XTOKENS_ABI,\n };\n}\n","import { u8aToHex } from '@polkadot/util';\nimport { ContractConfig } from '../../../../../contract';\nimport type { MrlExecuteConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport { GMP_ABI } from './GmpAbi';\n\nconst module = 'GMP';\n\nexport const GMP_CONTRACT_ADDRESS =\n '0x0000000000000000000000000000000000000816';\n\nexport function Gmp() {\n return {\n wormholeTransferERC20: (): MrlExecuteConfigBuilder => ({\n build: ({ bytes }) => {\n const hex = u8aToHex(bytes);\n\n return new ContractConfig({\n address: GMP_CONTRACT_ADDRESS,\n abi: GMP_ABI,\n args: [hex],\n func: 'wormholeTransferERC20',\n module,\n });\n },\n }),\n };\n}\n","export const GMP_ABI = [\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'vaa',\n type: 'bytes',\n },\n ],\n name: 'wormholeTransferERC20',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport { wormholeFactory } from '../../wormhole';\nimport { TOKEN_BRIDGE_ABI } from './TokenBridgeAbi';\n\nconst module = 'TokenBridge';\n\nexport function TokenBridge() {\n return {\n transferTokens: (): MrlConfigBuilder => ({\n build: ({ asset, destination, destinationAddress, moonChain }) => {\n const wh = wormholeFactory(moonChain);\n const whDestination = wh.getChain(destination.getWormholeName()).config\n .chainId;\n\n const tokenAddressOnMoonChain = moonChain.getChainAsset(asset)\n .address as Address | undefined;\n\n if (!tokenAddressOnMoonChain) {\n throw new Error(\n `Asset ${asset.symbol} does not have a token address on chain ${moonChain.name}`,\n );\n }\n\n const destinationAddress32bytes = convertAddressTo32Bytes(\n destinationAddress,\n ) as Address;\n const tokenAmountOnMoonChain = asset.convertDecimals(\n moonChain.getChainAsset(asset).decimals,\n ).amount;\n\n const contractAddress =\n wh.getChain('Moonbeam').config.contracts.tokenBridge;\n\n if (!contractAddress) {\n throw new Error(`Wormhole address not found for ${moonChain.name}`);\n }\n\n return new ContractConfig({\n address: contractAddress,\n abi: TOKEN_BRIDGE_ABI,\n args: [\n tokenAddressOnMoonChain,\n tokenAmountOnMoonChain,\n whDestination,\n destinationAddress32bytes,\n 0n,\n 0,\n ],\n func: 'transferTokens',\n module,\n });\n },\n }),\n };\n}\n","import type {\n ChainAddress,\n TokenId,\n TokenTransfer,\n} from '@wormhole-foundation/sdk-connect';\n\nexport enum Protocols {\n TokenBridge = 'TokenBridge',\n AutomaticTokenBridge = 'AutomaticTokenBridge',\n ExecutorTokenBridge = 'ExecutorTokenBridge',\n}\n\nexport type WormholeTransferFunctions = 'tokenTransfer';\n\nexport interface WormholeFunctionArgs {\n token: TokenId;\n amount: bigint;\n from: ChainAddress;\n to: ChainAddress;\n protocol: TokenTransfer.Protocol;\n payload?: Uint8Array;\n}\n\nexport interface WormholeConfigConstructorParams {\n args: WormholeFunctionArgs;\n func: WormholeTransferFunctions;\n}\n\nexport class WormholeConfig {\n readonly args: WormholeFunctionArgs;\n\n readonly func: WormholeTransferFunctions;\n\n static is(obj: unknown): obj is WormholeConfig {\n return obj instanceof WormholeConfig;\n }\n\n constructor({ args, func }: WormholeConfigConstructorParams) {\n this.args = args;\n this.func = func;\n }\n}\n","import { EvmChain, EvmParachain, Parachain } from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport { evmToAddress } from '@polkadot/util-crypto/address';\nimport { Wormhole } from '@wormhole-foundation/sdk-connect';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n} from '../../../../extrinsic/ExtrinsicBuilder.utils';\nimport type {\n MrlBuilderParams,\n MrlConfigBuilder,\n} from '../../../MrlBuilder.interfaces';\nimport { GMP_CONTRACT_ADDRESS } from '../contract/Gmp';\nimport { Protocols, WormholeConfig } from './WormholeConfig';\nimport { wormholeFactory } from './wormholeFactory';\n\nexport function wormhole() {\n return {\n tokenTransfer: (): MrlConfigBuilder => ({\n build: ({\n asset,\n destination,\n destinationAddress,\n isAutomatic,\n moonApi,\n moonChain,\n source,\n sourceAddress,\n }): WormholeConfig => {\n const isSourceParachain = Parachain.is(source);\n const isDestinationMoonChain = destination.isEqual(moonChain);\n const isDestinationEvmChain = EvmChain.is(destination);\n const isNativeAsset = asset.isSame(\n isDestinationEvmChain ? moonChain.nativeAsset : source.nativeAsset,\n );\n const tokenAddress = isNativeAsset\n ? 'native'\n : isDestinationEvmChain\n ? moonChain.getChainAsset(asset).address\n : asset.address;\n\n const { address20: computedOriginAccount } =\n getMultilocationDerivedAddresses({\n address: sourceAddress,\n paraId: isSourceParachain ? source.parachainId : undefined,\n isParents: true,\n });\n\n if (!tokenAddress) {\n throw new Error(`Asset ${asset.key} has no address`);\n }\n\n const wh = wormholeFactory(source);\n const whSource = isDestinationEvmChain\n ? wh.getChain(moonChain.getWormholeName())\n : wh.getChain(source.getWormholeName());\n const whDestination = isDestinationEvmChain\n ? wh.getChain(destination.getWormholeName())\n : wh.getChain(moonChain.getWormholeName());\n const whAsset = Wormhole.tokenId(whSource.chain, tokenAddress);\n const whSourceAddress = Wormhole.chainAddress(\n whSource.chain,\n isDestinationEvmChain ? computedOriginAccount : sourceAddress,\n );\n const whDestinationAddress = Wormhole.chainAddress(\n whDestination.chain,\n isDestinationMoonChain || isDestinationEvmChain\n ? destinationAddress\n : GMP_CONTRACT_ADDRESS,\n );\n\n return new WormholeConfig({\n args: {\n token: whAsset,\n amount: asset.amount,\n from: whSourceAddress,\n to: whDestinationAddress,\n protocol: isAutomatic\n ? Protocols.AutomaticTokenBridge\n : Protocols.TokenBridge,\n payload:\n isDestinationMoonChain || isDestinationEvmChain\n ? undefined\n : getPayload({ destination, destinationAddress, moonApi }),\n },\n func: 'tokenTransfer',\n });\n },\n }),\n };\n}\n\n/*\n * Extrinsic to GMP precompile\n * https://docs.moonbeam.network/builders/ethereum/precompiles/interoperability/gmp/\n */\nexport function getPayload({\n moonApi,\n destination,\n destinationAddress,\n}: Pick<MrlBuilderParams, 'destination' | 'destinationAddress' | 'moonApi'>):\n | Uint8Array\n | undefined {\n if (!EvmParachain.isAnyParachain(destination)) {\n throw new Error(\n `Destination ${destination.name} is not a Parachain or EvmParachain`,\n );\n }\n\n const isEvmDestination = EvmParachain.is(destination);\n\n const version = getExtrinsicArgumentVersion(moonApi.tx.polkadotXcm.send);\n\n const multilocation = moonApi.createType('XcmVersionedLocation', {\n [version]: {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(\n isEvmDestination\n ? evmToAddress(destinationAddress)\n : destinationAddress,\n ),\n ],\n },\n },\n });\n const action = moonApi.createType('XcmRoutingUserAction', {\n destination: multilocation,\n });\n const versioned = moonApi.createType('VersionedUserAction', {\n V1: action,\n });\n\n return versioned.toU8a();\n}\n","import { type AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { Wormhole } from '@wormhole-foundation/sdk-connect';\nimport { EvmPlatform } from '@wormhole-foundation/sdk-evm';\n\nexport function wormholeFactory(chain: AnyChain) {\n return new Wormhole(\n chain.isTestChain ? 'Testnet' : 'Mainnet',\n [EvmPlatform],\n EvmParachain.isAnyEvmChain(chain) && chain.wh\n ? {\n chains: {\n [chain.wh.name as string]: {\n rpc: chain.rpc,\n },\n },\n }\n : undefined,\n );\n}\n","export const TOKEN_BRIDGE_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'oldContract',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newContract',\n type: 'address',\n },\n ],\n name: 'ContractUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [],\n name: 'WETH',\n outputs: [\n {\n internalType: 'contract IWETH',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'chainId_',\n type: 'uint16',\n },\n ],\n name: 'bridgeContracts',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'chainId',\n outputs: [\n {\n internalType: 'uint16',\n name: '',\n type: 'uint16',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'evmChainId',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'finality',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'hash',\n type: 'bytes32',\n },\n ],\n name: 'governanceActionIsConsumed',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'governanceChainId',\n outputs: [\n {\n internalType: 'uint16',\n name: '',\n type: 'uint16',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'governanceContract',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'isFork',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'impl',\n type: 'address',\n },\n ],\n name: 'isInitialized',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'hash',\n type: 'bytes32',\n },\n ],\n name: 'isTransferCompleted',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'isWrappedAsset',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'outstandingBridged',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedRecoverChainId',\n type: 'bytes',\n },\n ],\n name: 'parseRecoverChainId',\n outputs: [\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'module',\n type: 'bytes32',\n },\n {\n internalType: 'uint8',\n name: 'action',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'evmChainId',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'newChainId',\n type: 'uint16',\n },\n ],\n internalType: 'struct BridgeStructs.RecoverChainId',\n name: 'rci',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseRegisterChain',\n outputs: [\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'module',\n type: 'bytes32',\n },\n {\n internalType: 'uint8',\n name: 'action',\n type: 'uint8',\n },\n {\n internalType: 'uint16',\n name: 'chainId',\n type: 'uint16',\n },\n {\n internalType: 'uint16',\n name: 'emitterChainID',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'emitterAddress',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.RegisterChain',\n name: 'chain',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseUpgrade',\n outputs: [\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'module',\n type: 'bytes32',\n },\n {\n internalType: 'uint8',\n name: 'action',\n type: 'uint8',\n },\n {\n internalType: 'uint16',\n name: 'chainId',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'newContract',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.UpgradeContract',\n name: 'chain',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVM',\n type: 'bytes',\n },\n ],\n name: 'registerChain',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVM',\n type: 'bytes',\n },\n ],\n name: 'submitRecoverChainId',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tokenImplementation',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVM',\n type: 'bytes',\n },\n ],\n name: 'upgrade',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'wormhole',\n outputs: [\n {\n internalType: 'contract IWormhole',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'tokenChainId',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n ],\n name: 'wrappedAsset',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n ],\n name: 'attestToken',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'arbiterFee',\n type: 'uint256',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n ],\n name: 'wrapAndTransferETH',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n name: 'wrapAndTransferETHWithPayload',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'arbiterFee',\n type: 'uint256',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n ],\n name: 'transferTokens',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n name: 'transferTokensWithPayload',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'updateWrapped',\n outputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'createWrapped',\n outputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransferWithPayload',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransferAndUnwrapETHWithPayload',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransfer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransferAndUnwrapETH',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'symbol',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 'name',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.AssetMeta',\n name: 'meta',\n type: 'tuple',\n },\n ],\n name: 'encodeAssetMeta',\n outputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n internalType: 'struct BridgeStructs.Transfer',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n name: 'encodeTransfer',\n outputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'fromAddress',\n type: 'bytes32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n internalType: 'struct BridgeStructs.TransferWithPayload',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n name: 'encodeTransferWithPayload',\n outputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parsePayloadID',\n outputs: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseAssetMeta',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'symbol',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 'name',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.AssetMeta',\n name: 'meta',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseTransfer',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n internalType: 'struct BridgeStructs.Transfer',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseTransferWithPayload',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'fromAddress',\n type: 'bytes32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n internalType: 'struct BridgeStructs.TransferWithPayload',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: '_parseTransferCommon',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n internalType: 'struct BridgeStructs.Transfer',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n] as const;\n","import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport { wormholeFactory } from '../../wormhole';\nimport { TOKEN_BRIDGE_RELAYER_ABI } from './TokenBridgeRelayerAbi';\n\nconst module = 'TokenBridgeRelayer';\n\nexport function TokenBridgeRelayer() {\n return {\n transferTokensWithRelay: (): MrlConfigBuilder => ({\n build: ({ asset, destination, destinationAddress, moonChain }) => {\n const wh = wormholeFactory(moonChain);\n const whDestination = wh.getChain(destination.getWormholeName()).config\n .chainId;\n\n const tokenAddressOnMoonChain = moonChain.getChainAsset(asset)\n .address as Address | undefined;\n\n if (!tokenAddressOnMoonChain) {\n throw new Error(\n `Asset ${asset.symbol} does not have a token address on chain ${moonChain.name}`,\n );\n }\n\n const destinationAddress32bytes = convertAddressTo32Bytes(\n destinationAddress,\n ) as Address;\n const tokenAmountOnMoonChain = asset.convertDecimals(\n moonChain.getChainAsset(asset).decimals,\n ).amount;\n\n const contractAddress =\n wh.getChain('Moonbeam').config.contracts.tokenBridgeRelayer;\n\n if (!contractAddress) {\n throw new Error(`Wormhole address not found for ${moonChain.name}`);\n }\n\n return new ContractConfig({\n address: contractAddress,\n abi: TOKEN_BRIDGE_RELAYER_ABI,\n args: [\n tokenAddressOnMoonChain,\n tokenAmountOnMoonChain,\n 0,\n whDestination,\n destinationAddress32bytes,\n 0,\n ],\n func: 'transferTokensWithRelay',\n module,\n });\n },\n }),\n };\n}\n","export const TOKEN_BRIDGE_RELAYER_ABI = [\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'targetChainId',\n type: 'uint16',\n },\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n ],\n name: 'calculateRelayerFee',\n outputs: [\n {\n internalType: 'uint256',\n name: 'feeInTokenDenomination',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'toNativeTokenAmount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'targetChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'targetRecipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'batchId',\n type: 'uint32',\n },\n ],\n name: 'transferTokensWithRelay',\n outputs: [\n {\n internalType: 'uint64',\n name: 'messageSequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'toNativeTokenAmount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'targetChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'targetRecipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'batchId',\n type: 'uint32',\n },\n ],\n name: 'wrapAndTransferEthWithRelay',\n outputs: [\n {\n internalType: 'uint64',\n name: 'messageSequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n] as const;\n","import { Batch } from './Batch';\nimport { Gmp } from './Gmp';\nimport { TokenBridge } from './TokenBridge';\nimport { TokenBridgeRelayer } from './TokenBridgeRelayer';\n\nexport function contract() {\n return { Batch, Gmp, TokenBridge, TokenBridgeRelayer };\n}\n","import { type Address, encodeFunctionData } from 'viem';\nimport { ERC20_ABI } from '../../../../../balance/Erc20Abi';\nimport type { ContractConfig } from '../../../../../types/evm/ContractConfig';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport { BATCH_CONTRACT_ADDRESS } from '../../../../MrlBuilder.constants';\nimport type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport { contract as ContractBuilder } from '../../contract';\nimport { BATCH_CONTRACT_ABI } from './BatchContractAbi';\n\nexport function ethereumXcm() {\n return {\n transact: (): MrlConfigBuilder => ({\n build: (params) => {\n const { asset, isAutomatic, moonChain, moonGasLimit } = params;\n\n if (!moonGasLimit) {\n throw new Error('moonGasLimit must be defined');\n }\n\n const tokenAddressOnMoonChain = moonChain.getChainAsset(asset)\n .address as Address | undefined;\n\n if (!tokenAddressOnMoonChain) {\n throw new Error(\n `Asset ${asset.symbol} does not have a token address on chain ${moonChain.name}`,\n );\n }\n\n const tokenAmountOnMoonChain = asset.convertDecimals(\n moonChain.getChainAsset(asset).decimals,\n ).amount;\n\n const contract = (\n isAutomatic\n ? ContractBuilder()\n .TokenBridgeRelayer()\n .transferTokensWithRelay()\n .build(params)\n : ContractBuilder().TokenBridge().transferTokens().build(params)\n ) as ContractConfig;\n\n const approveTx = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [contract.address as Address, tokenAmountOnMoonChain],\n });\n\n const batchAll = encodeFunctionData({\n abi: BATCH_CONTRACT_ABI,\n functionName: 'batchAll',\n args: [\n [tokenAddressOnMoonChain, contract.address as Address],\n [0n, 0n], // Value to send for each call\n [approveTx, contract.encodeFunctionData()], // Call data for each call\n [], // Gas limit for each call\n ],\n });\n\n return new ExtrinsicConfig({\n module: 'ethereumXcm',\n func: 'transact',\n getArgs: () => [\n {\n V2: {\n gasLimit: moonGasLimit,\n action: {\n Call: BATCH_CONTRACT_ADDRESS,\n },\n value: 0,\n input: batchAll,\n },\n },\n ],\n });\n },\n }),\n };\n}\n","export const BATCH_CONTRACT_ADDRESS =\n '0x0000000000000000000000000000000000000808';\n","export const BATCH_CONTRACT_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallFailed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallSucceeded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSome',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSomeUntilFailure',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { ethereumXcm } from './ethereumXcm/ethereumXcm';\nimport { polkadotXcm } from './polkadotXcm/polkadotXcm';\n\nexport function extrinsic() {\n return { ethereumXcm, polkadotXcm };\n}\n","import { contract } from './contract';\nimport { extrinsic } from './extrinsic';\nimport { wormhole as whBuilder } from './wormhole';\n\nexport * from './extrinsic/ethereumXcm/BatchContractAbi';\nexport * from './wormhole/WormholeConfig';\nexport * from './wormhole/wormholeFactory';\n\nexport function wormhole() {\n return {\n contract,\n extrinsic,\n wormhole: whBuilder,\n };\n}\n","import { wormhole } from './providers/wormhole';\n\nexport function MrlBuilder() {\n return {\n wormhole,\n };\n}\n"],"mappings":"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","names":["XcmVersion","module","pallet","evmToAddress","u8aToHex","decodeAddress","TransferType","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","foreignAssets","evmToAddress","pallet","assets","pallet","pallet","pallet","EvmParachain","isEthAddress","u8aToHex","decodeAddress","isXcmV4","EvmParachain","assets","isEthAddress","u8aToHex","decodeAddress","assets","assets","u8aToHex","decodeAddress","u8aToHex","decodeAddress","event","u8aToHex","decodeAddress","event","EvmParachain","getMultilocationDerivedAddresses","evmToAddress","encodeFunctionData","Parachain","polkadotXcm","Parachain","EvmParachain","evmToAddress","getMultilocationDerivedAddresses","encodeFunctionData","u8aToHex","module","u8aToHex","Protocols","EvmParachain","Parachain","getMultilocationDerivedAddresses","evmToAddress","Wormhole","EvmParachain","Parachain","getMultilocationDerivedAddresses","Wormhole","EvmParachain","evmToAddress","module","convertAddressTo32Bytes","module","convertAddressTo32Bytes","encodeFunctionData","contract","encodeFunctionData","polkadotXcm","wormhole","wormhole"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/extrinsic/ExtrinsicBuilder.utils.ts","../src/extrinsic/ExtrinsicBuilder.interfaces.ts","../src/types/BaseConfig.ts","../src/types/substrate/SubstrateQueryConfig.ts","../src/asset-min/AssetMinBuilder.ts","../src/balance/BalanceBuilder.ts","../src/types/evm/ContractConfig.ts","../src/contract/contracts/XcmPrecompile/XcmPrecompile.ts","../src/types/evm/EvmQueryConfig.ts","../src/types/substrate/ExtrinsicConfig.ts","../src/types/substrate/SubstrateCallConfig.ts","../src/contract/ContractBuilder.interfaces.ts","../src/contract/ContractBuilder.utils.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.util.ts","../src/contract/contracts/XcmPrecompile/XcmPrecompileAbi.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.ts","../src/contract/ContractBuilder.ts","../src/balance/Erc20Abi.ts","../src/extrinsic/pallets/eqBalances/eqBalances.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.ts","../src/extrinsic/pallets/xcmPallet/xcmPallet.ts","../src/extrinsic/pallets/xTokens/xTokens.utils.ts","../src/extrinsic/pallets/xTokens/xTokens.ts","../src/extrinsic/pallets/xTransfer/xTransfer.ts","../src/extrinsic/ExtrinsicBuilder.ts","../src/fee/gateway/gateway.ts","../src/mrl/providers/snowbridge/contract/Gateway/GatewayAbi.ts","../src/fee/outboundQueueApi/outboundQueueApi.ts","../src/fee/FeeBuilder.utils.ts","../src/fee/VersionedAssetBuilder.ts","../src/fee/xcmPaymentApi/xcmPaymentApi.utils.ts","../src/fee/xcmPaymentApi/xcmPaymentApi.ts","../src/fee/FeeBuilder.ts","../src/monitoring/eventMonitoring/eventMonitoring.ts","../src/monitoring/eventMonitoring/eventMonitoring.utils.ts","../src/monitoring/MonitoringBuilder.ts","../src/mrl/providers/snowbridge/contract/Gateway/Gateway.ts","../src/mrl/MrlBuilder.interfaces.ts","../src/mrl/providers/snowbridge/snowbridge/SnowbridgeConfig.ts","../src/mrl/providers/snowbridge/contract/index.ts","../src/mrl/providers/snowbridge/extrinsic/ethereumTokenTransfer/ethereumTokenTransfers.ts","../src/mrl/providers/snowbridge/extrinsic/xcmPallet/xcmPallet.ts","../src/mrl/providers/snowbridge/extrinsic/xcmPallet/xcmPallet.utils.ts","../src/mrl/providers/snowbridge/extrinsic/index.ts","../src/mrl/providers/snowbridge/index.ts","../src/mrl/providers/wormhole/contract/Batch/Batch.ts","../src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts","../src/mrl/providers/wormhole/contract/Batch/abi/peaq/PeaqBatchContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/peaq/PeaqXcmUtilsContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/peaq/PeaqXtokensContractAbi.ts","../src/mrl/providers/wormhole/contract/Batch/abi/abi.helpers.ts","../src/mrl/providers/wormhole/contract/Gmp/Gmp.ts","../src/mrl/providers/wormhole/contract/Gmp/GmpAbi.ts","../src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts","../src/mrl/providers/wormhole/wormhole/WormholeConfig.ts","../src/mrl/providers/wormhole/wormhole/wormhole.ts","../src/mrl/providers/wormhole/wormhole/wormholeFactory.ts","../src/mrl/providers/wormhole/contract/TokenBridge/TokenBridgeAbi.ts","../src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts","../src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayerAbi.ts","../src/mrl/providers/wormhole/contract/index.ts","../src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts","../src/mrl/MrlBuilder.constants.ts","../src/mrl/providers/wormhole/extrinsic/ethereumXcm/BatchContractAbi.ts","../src/mrl/providers/wormhole/extrinsic/index.ts","../src/mrl/providers/wormhole/index.ts","../src/mrl/MrlBuilder.ts"],"sourcesContent":["import '@polkadot/api-augment';\n\nexport * from './asset-min';\nexport * from './balance';\nexport * from './builder.interfaces';\nexport * from './contract';\nexport * from './extrinsic';\nexport * from './fee';\nexport * from './monitoring';\nexport * from './mrl';\nexport * from './types';\n","import { isEthAddress } from '@moonbeam-network/xcm-utils';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { getTypeDef } from '@polkadot/types';\nimport type { AnyJson } from '@polkadot/types/types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { XcmVersion } from './ExtrinsicBuilder.interfaces';\n\nexport function getExtrinsicArgumentVersion(\n func?: SubmittableExtrinsicFunction<'promise'>,\n index = 0,\n): XcmVersion {\n if (!func) return XcmVersion.v1;\n\n const { type } = func.meta.args[index];\n const instance = func.meta.registry.createType(type.toString());\n const raw = getTypeDef(instance?.toRawType());\n\n if (!raw.sub) {\n return XcmVersion.v1;\n }\n\n const versions = Array.isArray(raw.sub)\n ? raw.sub.map((x) => x.name)\n : [raw.sub.name];\n\n if (versions.includes(XcmVersion.v5)) {\n return XcmVersion.v5;\n }\n\n if (versions.includes(XcmVersion.v4)) {\n return XcmVersion.v4;\n }\n\n if (versions.includes(XcmVersion.v3)) {\n return XcmVersion.v3;\n }\n\n if (versions.includes(XcmVersion.v2)) {\n return XcmVersion.v2;\n }\n\n if (versions.includes(XcmVersion.v1)) {\n return XcmVersion.v1;\n }\n\n throw new Error(\"Can't find XCM version\");\n}\n\nexport function getExtrinsicAccount(address: string) {\n return isEthAddress(address)\n ? {\n AccountKey20: {\n key: address,\n },\n }\n : {\n AccountId32: {\n id: u8aToHex(decodeAddress(address)),\n network: null,\n },\n };\n}\n\nexport function isXcmV4(xcmVersion: XcmVersion): boolean {\n return xcmVersion >= XcmVersion.v4;\n}\n\nexport function normalizeX1(\n xcmVersion: XcmVersion,\n versionedObject: Record<string, AnyJson | object>,\n) {\n if (!isXcmV4(xcmVersion)) return versionedObject;\n\n const normalizedObject = { ...versionedObject };\n const interior = normalizedObject.interior as object;\n\n if ('X1' in interior && interior?.X1 && !Array.isArray(interior.X1)) {\n interior.X1 = [interior.X1];\n } else if ('x1' in interior && interior?.x1 && !Array.isArray(interior.x1)) {\n interior.x1 = [interior.x1];\n }\n\n return normalizedObject;\n}\n\nexport function normalizeConcrete(\n xcmVersion: XcmVersion,\n versionedObject: object,\n) {\n return isXcmV4(xcmVersion)\n ? versionedObject\n : applyConcreteWrapper(versionedObject);\n}\n\nexport function applyConcreteWrapper(versionedObject: object) {\n return {\n Concrete: { ...versionedObject },\n };\n}\n","import type { ConfigBuilder } from '../builder.interfaces';\nimport type { ExtrinsicConfig } from '../types/substrate/ExtrinsicConfig';\n\nexport type ExtrinsicConfigBuilder = ConfigBuilder<ExtrinsicConfig>;\n\nexport enum XcmVersion {\n v1 = 'V1',\n v2 = 'V2',\n v3 = 'V3',\n v4 = 'V4',\n v5 = 'V5',\n}\n\nexport type Parents = 0 | 1;\n","export interface BaseConfigConstructorParams {\n module: string;\n func: string;\n}\n\nexport class BaseConfig {\n readonly module: string;\n\n readonly func: string;\n\n constructor({ module, func }: BaseConfigConstructorParams) {\n this.module = module;\n this.func = func;\n }\n}\n","import { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\ntype QueryType = 'query' | 'call';\n\nexport interface QueryConfigConstructorParams\n extends BaseConfigConstructorParams {\n queryType?: QueryType;\n args?: unknown[];\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: (data: any) => Promise<bigint>;\n}\n\nexport class SubstrateQueryConfig extends BaseConfig {\n readonly args: unknown[];\n\n readonly queryType: QueryType;\n\n readonly transform: (data: unknown) => Promise<bigint>;\n\n static is(obj: unknown): obj is SubstrateQueryConfig {\n return obj instanceof SubstrateQueryConfig;\n }\n\n constructor({\n args = [],\n transform,\n queryType = 'query',\n ...other\n }: QueryConfigConstructorParams) {\n super({ ...other });\n\n this.args = args;\n this.queryType = queryType;\n this.transform = transform;\n }\n}\n","import type { Option } from '@polkadot/types';\nimport type { PalletAssetsAssetDetails } from '@polkadot/types/lookup';\nimport { getExtrinsicAccount } from '../extrinsic/ExtrinsicBuilder.utils';\nimport { SubstrateQueryConfig } from '../types/substrate/SubstrateQueryConfig';\nimport type { AssetMinConfigBuilder } from './AssetMinBuilder.interfaces';\n\nexport function AssetMinBuilder() {\n return {\n assetRegistry,\n assets,\n foreignAssets,\n };\n}\n\nfunction assetRegistry() {\n const pallet = 'assetRegistry';\n return {\n assetMetadatas: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: pallet,\n func: 'assetMetadatas',\n args: [asset],\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: async (response: Option<any>): Promise<bigint> =>\n response.unwrapOrDefault().minimalBalance.toBigInt(),\n }),\n }),\n currencyMetadatas: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: pallet,\n func: 'currencyMetadatas',\n args: [asset],\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: async (response: Option<any>): Promise<bigint> =>\n response.unwrapOrDefault().minimalBalance.toBigInt(),\n }),\n }),\n metadata: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: pallet,\n func: 'metadata',\n args: [asset],\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n transform: async (response: Option<any>): Promise<bigint> =>\n response.unwrapOrDefault().existentialDeposit.toBigInt(),\n }),\n }),\n };\n}\n\nfunction assets() {\n return {\n asset: (): AssetMinConfigBuilder => ({\n build: ({ asset }) =>\n new SubstrateQueryConfig({\n module: 'assets',\n func: 'asset',\n args: [asset],\n transform: async (\n response: Option<PalletAssetsAssetDetails>,\n ): Promise<bigint> =>\n response.unwrapOrDefault().minBalance.toBigInt(),\n }),\n }),\n };\n}\n\nfunction foreignAssets() {\n return {\n asset: (): AssetMinConfigBuilder => ({\n build: ({ address }) => {\n if (!address) {\n throw new Error(\n 'Asset address is missing for foreignAssets.asset min calculation',\n );\n }\n const multilocation = {\n parents: 2,\n interior: {\n X2: [\n {\n globalconsensus: {\n ethereum: {\n chainId: 1,\n },\n },\n },\n getExtrinsicAccount(address),\n ],\n },\n };\n return new SubstrateQueryConfig({\n module: 'foreignAssets',\n func: 'asset',\n args: [multilocation],\n transform: async (\n response: Option<PalletAssetsAssetDetails>,\n ): Promise<bigint> =>\n response.unwrapOrDefault().minBalance.toBigInt(),\n });\n },\n }),\n };\n}\n","import type { Option } from '@polkadot/types';\nimport type {\n FrameSystemAccountInfo,\n PalletAssetsAssetAccount,\n PalletBalancesAccountData,\n} from '@polkadot/types/lookup';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../contract';\nimport { getExtrinsicAccount } from '../extrinsic/ExtrinsicBuilder.utils';\nimport { EvmQueryConfig } from '../types/evm/EvmQueryConfig';\nimport { SubstrateQueryConfig } from '../types/substrate/SubstrateQueryConfig';\nimport type {\n BalanceConfigBuilder,\n EquilibriumSystemBalanceData,\n PalletBalancesAccountDataOld,\n TokensPalletAccountData,\n} from './BalanceBuilder.interfaces';\nimport { ERC20_ABI } from './Erc20Abi';\n\nexport function BalanceBuilder() {\n return {\n evm,\n substrate,\n };\n}\n\nexport function evm() {\n return {\n erc20,\n native,\n };\n}\n\nfunction erc20(): BalanceConfigBuilder {\n return {\n build: ({ asset, address }) => {\n if (!asset.address) {\n throw new Error(`Asset ${asset.key} has no address`);\n }\n\n return new ContractConfig({\n address: asset.address,\n abi: ERC20_ABI,\n args: [address],\n func: 'balanceOf',\n module: 'Erc20',\n });\n },\n };\n}\n\nfunction native(): BalanceConfigBuilder {\n return {\n build: ({ address }) => {\n return new EvmQueryConfig({\n func: 'getBalance',\n args: [{ address: address as Address }],\n });\n },\n };\n}\nexport function substrate() {\n return {\n assets,\n foreignAssets,\n system,\n tokens,\n };\n}\n\nfunction assets() {\n return {\n account: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) =>\n new SubstrateQueryConfig({\n module: 'assets',\n func: 'account',\n args: [asset.getBalanceAssetId(), address],\n transform: async (\n response: Option<PalletAssetsAssetAccount>,\n ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n }),\n }),\n };\n}\n\nfunction foreignAssets() {\n return {\n account: () => ({\n globalConsensus: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) => {\n if (!asset.address) {\n throw new Error(\n 'Asset address is needed to calculate balance with foreignAssets.account function',\n );\n }\n\n const multilocation = {\n parents: 2,\n interior: {\n X2: [\n { GlobalConsensus: { ethereum: { chainId: 1 } } },\n getExtrinsicAccount(asset.address),\n ],\n },\n };\n\n return new SubstrateQueryConfig({\n module: 'foreignAssets',\n func: 'account',\n args: [multilocation, address],\n transform: async (\n response: Option<PalletAssetsAssetAccount>,\n ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n });\n },\n }),\n id: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) => {\n return new SubstrateQueryConfig({\n module: 'foreignAssets',\n func: 'account',\n args: [asset.getBalanceAssetId(), address],\n transform: async (\n response: Option<PalletAssetsAssetAccount>,\n ): Promise<bigint> => response.unwrapOrDefault().balance.toBigInt(),\n });\n },\n }),\n }),\n };\n}\n\nfunction system() {\n return {\n account: (): BalanceConfigBuilder => ({\n build: ({ address }) =>\n new SubstrateQueryConfig({\n module: 'system',\n func: 'account',\n args: [address],\n transform: async (\n response: FrameSystemAccountInfo,\n ): Promise<bigint> => calculateSystemAccountBalance(response),\n }),\n }),\n accountEquilibrium: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) =>\n new SubstrateQueryConfig({\n module: 'system',\n func: 'account',\n args: [address],\n transform: async (response): Promise<bigint> => {\n if (response.data.isEmpty) {\n return 0n;\n }\n\n const res = response.data.toJSON() as unknown;\n let balances: EquilibriumSystemBalanceData | undefined;\n\n if (Array.isArray(res)) {\n balances = res;\n }\n\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n if (Array.isArray((res as any)?.v0?.balance)) {\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n balances = (res as any).v0.balance;\n }\n\n if (!balances) {\n throw new Error(\"Can't get balance from Equilibrium chain\");\n }\n\n const balance = balances.find(\n ([assetId]) => assetId === asset.getBalanceAssetId(),\n );\n\n if (!balance) {\n return 0n;\n }\n\n return BigInt(balance[1].positive);\n },\n }),\n }),\n accountEvmTo32: (): BalanceConfigBuilder => ({\n build: ({ address }) => {\n const substrateAddress = evmToAddress(address);\n\n return new SubstrateQueryConfig({\n module: 'system',\n func: 'account',\n args: [substrateAddress],\n transform: async (\n response: FrameSystemAccountInfo,\n ): Promise<bigint> => calculateSystemAccountBalance(response),\n });\n },\n }),\n };\n}\n\nfunction tokens() {\n return {\n accounts: (): BalanceConfigBuilder => ({\n build: ({ address, asset }) =>\n new SubstrateQueryConfig({\n module: 'tokens',\n func: 'accounts',\n args: [address, asset.getBalanceAssetId()],\n transform: async ({\n free,\n frozen,\n }: TokensPalletAccountData): Promise<bigint> =>\n BigInt(free.sub(frozen).toString()),\n }),\n }),\n };\n}\n\nexport async function calculateSystemAccountBalance(\n response: FrameSystemAccountInfo,\n): Promise<bigint> {\n const balance = response.data as PalletBalancesAccountData &\n PalletBalancesAccountDataOld;\n\n const free = BigInt(balance.free.toString());\n const frozen = balance.miscFrozen ?? balance.frozen;\n const frozenMinusReserved = BigInt(frozen.sub(balance.reserved).toString());\n const locked = frozenMinusReserved < 0n ? 0n : frozenMinusReserved;\n\n return free - locked;\n}\n","import { type Abi, encodeFunctionData } from 'viem';\nimport { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface ContractConfigConstructorParams\n extends BaseConfigConstructorParams {\n address: string;\n abi: Abi;\n args: unknown[];\n value?: bigint;\n}\n\nexport class ContractConfig extends BaseConfig {\n readonly address: string;\n readonly abi: Abi;\n readonly args: unknown[];\n readonly value?: bigint;\n\n static is(obj: unknown): obj is ContractConfig {\n return obj instanceof ContractConfig;\n }\n\n constructor({\n address,\n abi,\n args,\n value,\n ...other\n }: ContractConfigConstructorParams) {\n super({ ...other });\n\n this.address = address;\n this.abi = abi;\n this.args = args;\n this.value = value;\n }\n\n encodeFunctionData() {\n return encodeFunctionData({\n abi: this.abi,\n functionName: this.func,\n args: this.args,\n });\n }\n}\n","import type { AssetAmount } from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { BuilderParams } from '../../../builder.interfaces';\nimport { getExtrinsicArgumentVersion } from '../../../extrinsic/ExtrinsicBuilder.utils';\nimport { ContractConfig } from '../../../types';\nimport {\n type AssetAddressFormat,\n type AssetMultilocation,\n type ContractConfigBuilder,\n TransferType,\n} from '../../ContractBuilder.interfaces';\nimport {\n encodeXcmMessageToBytes,\n getAddressGlobalConsensusAssetMultilocation,\n getAssetAddressMultilocation,\n getBeneficiaryMultilocation,\n getDestinationParachainMultilocation,\n getGlobalConsensusAssetMultilocation,\n getGlobalConsensusDestination,\n getPalletInstanceMultilocation,\n} from '../../ContractBuilder.utils';\nimport { XCM_ABI } from './XcmPrecompileAbi';\n\nconst XCM_PRECOMPILE_ADDRESS = '0x000000000000000000000000000000000000081A';\n\nexport function XcmPrecompile() {\n return {\n transferAssetsToPara20: (\n shouldTransferAssetPrecedeFeeAsset = true,\n ): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination, fee }) => {\n const assets = getAssets(\n asset,\n fee,\n shouldTransferAssetPrecedeFeeAsset,\n );\n\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [destination.parachainId, destinationAddress, assets, 0],\n func: 'transferAssetsToPara20',\n module: 'Xcm',\n });\n },\n }),\n transferAssetsToPara32: (\n shouldTransferAssetPrecedeFeeAsset = false,\n ): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination, fee }) => {\n const assets = getAssets(\n asset,\n fee,\n shouldTransferAssetPrecedeFeeAsset,\n );\n\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n destination.parachainId,\n u8aToHex(decodeAddress(destinationAddress)),\n assets,\n 0,\n ],\n func: 'transferAssetsToPara32',\n module: 'Xcm',\n });\n },\n }),\n transferAssetsToRelay: (): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset }) => {\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n u8aToHex(decodeAddress(destinationAddress)),\n [[asset.address, asset.amount]],\n 0,\n ],\n func: 'transferAssetsToRelay',\n module: 'Xcm',\n });\n },\n }),\n transferAssetsLocation: () => ({\n nativeAsset: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n getPalletInstanceMultilocation(params.sourceApi, params.asset),\n ],\n });\n },\n }),\n localErc20: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n getAssetAddressMultilocation(\n params.sourceApi,\n params.asset,\n params.destination,\n ),\n ],\n });\n },\n }),\n foreignAsset: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n getGlobalConsensusAssetMultilocation(\n params.sourceApi,\n params.asset,\n params.destination,\n ),\n ],\n });\n },\n }),\n foreignErc20: (): ContractConfigBuilder => ({\n build: (params) => {\n return buildTransferAssetsLocation({\n ...params,\n assetsMultilocations: [\n // fee asset\n getGlobalConsensusAssetMultilocation(\n params.sourceApi,\n params.fee,\n params.destination,\n ),\n // transfer asset\n getAddressGlobalConsensusAssetMultilocation(\n params.sourceApi,\n params.asset,\n params.destination,\n ),\n ],\n });\n },\n }),\n }),\n transferAssetsUsingTypeAndThenAddress: (\n shouldTransferAssetPrecedeFeeAsset = false,\n ): ContractConfigBuilder => ({\n build: ({\n destinationAddress,\n asset,\n fee,\n destination,\n destinationApi,\n sourceApi,\n }) => {\n const assets = getAssets(\n asset,\n fee,\n shouldTransferAssetPrecedeFeeAsset,\n );\n\n const xcmMessage = buildXcmMessage(\n assets,\n destinationAddress,\n sourceApi,\n );\n\n const customXcmOnDest = encodeXcmMessageToBytes(\n xcmMessage,\n destinationApi,\n );\n\n const feeIndex = shouldTransferAssetPrecedeFeeAsset ? 1 : 0;\n\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n getDestinationParachainMultilocation(destination),\n assets,\n TransferType.DestinationReserve,\n feeIndex,\n TransferType.DestinationReserve,\n customXcmOnDest,\n ],\n func: 'transferAssetsUsingTypeAndThenAddress',\n module: 'Xcm',\n });\n },\n }),\n };\n}\n\nfunction getAssets(\n asset: AssetAmount,\n feeAsset: AssetAmount,\n shouldTransferAssetPrecedeFeeAsset: boolean,\n): AssetAddressFormat[] {\n if (feeAsset.isSame(asset)) {\n return [[asset.address, asset.amount]];\n }\n\n return shouldTransferAssetPrecedeFeeAsset\n ? [\n [asset.address, asset.amount],\n [feeAsset.address, feeAsset.amount],\n ]\n : [\n [feeAsset.address, feeAsset.amount],\n [asset.address, asset.amount],\n ];\n}\n\nfunction buildXcmMessage(\n assets: AssetAddressFormat[],\n destinationAddress: string,\n sourceApi: ApiPromise | undefined,\n) {\n const xcmVersion = getExtrinsicArgumentVersion(\n sourceApi?.tx.polkadotXcm?.send || sourceApi?.tx.xcmPallet?.send,\n );\n\n const instruction = {\n DepositAsset: {\n assets: { Wild: { AllCounted: assets.length } },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n {\n AccountId32: {\n id: u8aToHex(decodeAddress(destinationAddress)),\n network: null,\n },\n },\n ],\n },\n },\n },\n };\n return {\n [xcmVersion]: [instruction],\n };\n}\n\ninterface BuildTransferAssetsLocationParams extends BuilderParams {\n assetsMultilocations: AssetMultilocation[];\n feeAssetItem?: number;\n}\n\nfunction buildTransferAssetsLocation({\n assetsMultilocations,\n feeAssetItem = 0,\n destinationAddress,\n destination,\n sourceApi,\n}: BuildTransferAssetsLocationParams) {\n return new ContractConfig({\n address: XCM_PRECOMPILE_ADDRESS,\n abi: XCM_ABI,\n args: [\n getGlobalConsensusDestination(sourceApi, destination),\n getBeneficiaryMultilocation(destinationAddress, destination),\n assetsMultilocations,\n feeAssetItem,\n ],\n func: 'transferAssetsLocation',\n module: 'Xcm',\n });\n}\n","import type { HttpTransport, PublicClient } from 'viem';\n\nexport type EvmQueryFunctions = 'getBalance';\nexport type EvmFunctionArgs = Parameters<\n PublicClient<HttpTransport>[EvmQueryFunctions]\n>;\n\nexport interface EvmQueryConfigParams {\n readonly args: EvmFunctionArgs;\n readonly func: EvmQueryFunctions;\n}\n\nexport class EvmQueryConfig {\n readonly args: EvmFunctionArgs;\n readonly func: EvmQueryFunctions;\n\n static is(obj: unknown): obj is EvmQueryConfig {\n return obj instanceof EvmQueryConfig;\n }\n\n constructor({ args, func }: EvmQueryConfigParams) {\n this.args = args;\n this.func = func;\n }\n}\n","import type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { BaseConfig, type BaseConfigConstructorParams } from '../BaseConfig';\n\nexport interface ExtrinsicConfigConstructorParams\n extends Omit<BaseConfigConstructorParams, 'type'> {\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];\n}\n\nexport class ExtrinsicConfig extends BaseConfig {\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n getArgs: (func?: SubmittableExtrinsicFunction<'promise'>) => any[];\n\n static is(obj: unknown): obj is ExtrinsicConfig {\n return obj instanceof ExtrinsicConfig;\n }\n\n constructor({ getArgs, ...other }: ExtrinsicConfigConstructorParams) {\n super({ ...other });\n\n this.getArgs = getArgs;\n }\n}\n","import type { ApiPromise } from '@polkadot/api';\n\nexport interface SubstrateCallConfigConstructorParams {\n api: ApiPromise;\n call: () => Promise<bigint>;\n}\n\nexport class SubstrateCallConfig {\n readonly api: ApiPromise;\n\n // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n readonly call: () => Promise<any>;\n\n static is(obj: unknown): obj is SubstrateCallConfig {\n return obj instanceof SubstrateCallConfig;\n }\n\n constructor({ api, call }: SubstrateCallConfigConstructorParams) {\n this.api = api;\n this.call = call;\n }\n}\n","import type { ConfigBuilder } from '../builder.interfaces';\nimport type { ContractConfig } from '../types/evm/ContractConfig';\n\nexport type ContractConfigBuilder = ConfigBuilder<ContractConfig>;\n\nexport type DestinationMultilocation = [\n /**\n * 0 - if destination is referring to a location in the same chain\n * 1 - if transaction is going through or to a relay chain\n * 2 - if transaction is going to a parachain in another ecosystem\n */\n 0 | 1 | 2,\n (\n | [\n /**\n * example '0x00000007DC'\n * 7DC - parachain id in hex\n * can be found here:\n * - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fkusama-rpc.polkadot.io#/parachains\n * - https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.polkadot.io#/parachains\n */\n string,\n /**\n * example '0x01%account%00',\n * enum = 01 (AccountId32)\n * networkId = 00 (any)\n */\n string,\n ]\n | [\n /**\n * example '0x01%account%00',\n * enum = 01 (AccountId32)\n * networkId = 00 (any)\n */\n string,\n ]\n /**\n * example 'Here',\n */\n | []\n ),\n];\n\nexport type AssetAddressFormat = (string | bigint | undefined)[];\n\nexport enum TransferType {\n Teleport,\n LocalReserve,\n DestinationReserve,\n}\n\nexport type AssetMultilocation = [[number, string[]], bigint];\n","import {\n type AnyParachain,\n type AssetAmount,\n EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\nimport { getGlobalConsensus } from '../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\nimport type {\n AssetMultilocation,\n DestinationMultilocation,\n} from './ContractBuilder.interfaces';\n\nexport function getPrecompileDestinationInterior(\n destination: AnyParachain,\n address?: string,\n): [Address, Address] | [Address] {\n if (!address) {\n return [encodeParachain(destination.parachainId)];\n }\n const acc = encodeAddress(destination, address);\n\n return destination.parachainId\n ? [encodeParachain(destination.parachainId), acc]\n : [acc];\n}\n\nexport function getBeneficiaryMultilocation(\n address: string,\n destination: AnyParachain,\n): DestinationMultilocation {\n return [0, [encodeAddress(destination, address)]];\n}\n\nexport function getDestinationMultilocation(\n address: string,\n destination: AnyParachain,\n): DestinationMultilocation {\n const interior = getPrecompileDestinationInterior(destination, address);\n return [1, interior];\n}\n\nexport function getDestinationParachainMultilocation(\n destination: AnyParachain,\n): DestinationMultilocation {\n if (destination.isRelay) {\n return [1, []];\n }\n\n return [1, [encodeParachain(destination.parachainId)]];\n}\n\nexport function getGlobalConsensusDestination(\n sourceApi: ApiPromise | undefined,\n destination: AnyParachain,\n) {\n return [\n 2,\n [\n encodeGlobalConsensus(sourceApi, destination),\n encodeParachain(destination.parachainId),\n ],\n ];\n}\n\nexport function getPalletInstanceMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n): AssetMultilocation {\n return [\n [0, [encodePalletInstance(sourceApi, asset.getAssetPalletInstance())]],\n asset.amount,\n ];\n}\n\nexport function getAssetAddressMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n destination: AnyParachain,\n): AssetMultilocation {\n if (!asset.address) {\n throw new Error(`Asset address is required for ${asset.key}`);\n }\n\n return [\n [\n 0,\n [\n encodePalletInstance(sourceApi, asset.getAssetPalletInstance()),\n encodeAddress(destination, asset.address),\n ],\n ],\n asset.amount,\n ];\n}\n\nexport function getGlobalConsensusAssetMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n destination: AnyParachain,\n): AssetMultilocation {\n const assetInDestination = destination.getChainAsset(asset);\n return [\n [\n 2,\n [\n encodeGlobalConsensus(sourceApi, destination),\n encodeParachain(destination.parachainId),\n encodePalletInstance(\n sourceApi,\n assetInDestination.getAssetPalletInstance(),\n ),\n ],\n ],\n asset.amount,\n ];\n}\n\nexport function getAddressGlobalConsensusAssetMultilocation(\n sourceApi: ApiPromise | undefined,\n asset: AssetAmount,\n destination: AnyParachain,\n): AssetMultilocation {\n const assetInDestination = destination.getChainAsset(asset);\n\n if (!assetInDestination.address) {\n throw new Error(`Asset address is required for ${assetInDestination.key}`);\n }\n\n return [\n [\n 2,\n [\n encodeGlobalConsensus(sourceApi, destination),\n encodeParachain(destination.parachainId),\n encodePalletInstance(\n sourceApi,\n assetInDestination.getAssetPalletInstance(),\n ),\n encodeAddress(destination, assetInDestination.address),\n ],\n ],\n asset.amount,\n ];\n}\n\n/**\n * Encodes an XCM message to bytes for use in Solidity precompiles\n */\nexport function encodeXcmMessageToBytes(\n xcmMessage: Record<string, unknown>,\n api: ApiPromise | undefined,\n): Address {\n if (!api) {\n throw new Error('API is required to encode XCM message');\n }\n\n try {\n const versionedXcm = api.createType('XcmVersionedXcm', xcmMessage);\n return versionedXcm.toHex();\n } catch (error) {\n console.error('Failed to encode XCM message:', error);\n throw error;\n }\n}\n\nfunction encodeParachain(paraId: number): Address {\n return `0x00${paraId.toString(16).padStart(8, '0')}`;\n}\n\nfunction encodeGlobalConsensus(\n api: ApiPromise | undefined,\n destination: AnyParachain,\n): Address {\n const globalConsensus = getGlobalConsensus(destination);\n\n return encodeXcmJunction(api, {\n GlobalConsensus: globalConsensus,\n });\n}\n\nfunction encodePalletInstance(\n api: ApiPromise | undefined,\n palletInstance: number,\n): Address {\n return encodeXcmJunction(api, {\n PalletInstance: palletInstance,\n });\n}\n\nfunction encodeXcmJunction(\n api: ApiPromise | undefined,\n junction: object,\n): Address {\n if (!api) {\n throw new Error('API is required to encode XCM junction');\n }\n\n const junctionType = api.createType('XcmV3Junction', junction);\n\n return junctionType.toHex();\n}\n\nfunction encodeAddress(destination: AnyParachain, address: string): Address {\n const accountType = EvmParachain.is(destination) ? '03' : '01';\n return `0x${accountType}${u8aToHex(\n decodeAddress(address),\n -1,\n false,\n )}00` as Address;\n}\n","import { type AnyParachain, Ecosystem } from '@moonbeam-network/xcm-types';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport type { BuilderParams } from '../../../builder.interfaces';\nimport type { Parents } from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\n\nexport interface GetExtrinsicParams extends Omit<BuilderParams, 'asset'> {\n assets: object[];\n func?: SubmittableExtrinsicFunction<'promise'>;\n parents?: Parents;\n feeIndex?: number;\n globalConsensus?: Ecosystem;\n}\n\nexport function getPolkadotXcmExtrinsicArgs({\n assets,\n destinationAddress,\n destination,\n func,\n parents = 1,\n feeIndex = 0,\n}: GetExtrinsicParams) {\n const version = getExtrinsicArgumentVersion(func);\n\n return [\n // dest\n {\n [version]: normalizeX1(version, {\n parents,\n interior: {\n X1: {\n Parachain: destination.parachainId,\n },\n },\n }),\n },\n // beneficiary\n {\n [version]: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: getExtrinsicAccount(destinationAddress),\n },\n }),\n },\n // assets\n {\n [version]: assets,\n },\n // feeAssetItem\n feeIndex,\n // weightLimit\n 'Unlimited',\n ];\n}\n\nfunction isKusamaDestination(destination: AnyParachain) {\n return (\n destination.ecosystem === Ecosystem.Kusama ||\n destination.ecosystem === Ecosystem.MoonsamaRelay\n );\n}\n\nfunction isPolkadotDestination(destination: AnyParachain) {\n return (\n destination.ecosystem === Ecosystem.Polkadot ||\n destination.ecosystem === Ecosystem.MoonlamaRelay\n );\n}\n\nexport function getGlobalConsensus(destination: AnyParachain) {\n if (isKusamaDestination(destination)) {\n return 'Kusama';\n }\n\n if (isPolkadotDestination(destination)) {\n return 'Polkadot';\n }\n\n return {\n ByGenesis: destination.relayGenesisHash,\n };\n}\n\nexport function getEcosystemTransferExtrinsicArgs({\n assets,\n destinationAddress,\n destination,\n func,\n feeIndex = 0,\n}: GetExtrinsicParams) {\n const version = getExtrinsicArgumentVersion(func);\n\n const globalConsensus = getGlobalConsensus(destination);\n\n return [\n // dest\n {\n [version]: normalizeX1(version, {\n parents: 2,\n interior: {\n X2: [\n { GlobalConsensus: globalConsensus },\n {\n Parachain: destination.parachainId,\n },\n ],\n },\n }),\n },\n // beneficiary\n {\n [version]: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: getExtrinsicAccount(destinationAddress),\n },\n }),\n },\n // assets\n {\n [version]: assets,\n },\n // feeAssetItem\n feeIndex,\n // weightLimit\n 'Unlimited',\n ];\n}\n\nexport function shouldFeeAssetPrecedeAsset({\n asset,\n fee,\n}: BuilderParams): boolean {\n const assetIdNumber = Number(asset.getAssetId());\n const feeAssetIdNumber = Number(fee.getAssetId());\n\n if (Number.isNaN(assetIdNumber) || Number.isNaN(feeAssetIdNumber)) {\n return false;\n }\n\n return assetIdNumber > feeAssetIdNumber;\n}\n","export const XCM_ABI = [\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'beneficiary',\n type: 'tuple',\n },\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetLocationInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsLocation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'paraId',\n type: 'uint32',\n },\n {\n internalType: 'address',\n name: 'beneficiary',\n type: 'address',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsToPara20',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint32',\n name: 'paraId',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'beneficiary',\n type: 'bytes32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsToPara32',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'beneficiary',\n type: 'bytes32',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeAssetItem',\n type: 'uint32',\n },\n ],\n name: 'transferAssetsToRelay',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'assetsTransferType',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'feesTransferType',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenAddress',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetAddressInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'remoteReserve',\n type: 'tuple',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenAddress',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetLocationInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'assetsTransferType',\n type: 'uint8',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'enum XCM.TransferType',\n name: 'feesTransferType',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenLocation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'dest',\n type: 'tuple',\n },\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct XCM.AssetLocationInfo[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint8',\n name: 'remoteFeesIdIndex',\n type: 'uint8',\n },\n {\n internalType: 'bytes',\n name: 'customXcmOnDest',\n type: 'bytes',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XCM.Location',\n name: 'remoteReserve',\n type: 'tuple',\n },\n ],\n name: 'transferAssetsUsingTypeAndThenLocation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import type { AnyParachain } from '@moonbeam-network/xcm-types';\nimport { formatAssetIdToERC20 } from '@moonbeam-network/xcm-utils';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress, evmToAddress } from '@polkadot/util-crypto';\nimport { ContractConfig } from '../../../types/evm/ContractConfig';\nimport type {\n ContractConfigBuilder,\n DestinationMultilocation,\n} from '../../ContractBuilder.interfaces';\nimport { getDestinationMultilocation } from '../../ContractBuilder.utils';\nimport { XTOKENS_ABI } from './XtokensABI';\n\nconst U_64_MAX = 18446744073709551615n;\nconst XTOKENS_CONTRACT_ADDRESS = '0x0000000000000000000000000000000000000804';\n\nexport function Xtokens() {\n return {\n transfer: (weight = U_64_MAX): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ContractConfig({\n address: XTOKENS_CONTRACT_ADDRESS,\n abi: XTOKENS_ABI,\n args: [\n asset.address\n ? formatAssetIdToERC20(asset.address)\n : asset.getAssetId(),\n asset.amount,\n getDestinationMultilocation(destinationAddress, destination),\n weight,\n ],\n func: 'transfer',\n module: 'Xtokens',\n }),\n }),\n transferMultiCurrencies: (\n shouldTransferAssetPrecedeFeeAsset = true,\n weight = U_64_MAX,\n ): ContractConfigBuilder => ({\n build: ({ asset, destination, destinationAddress, fee }) => {\n const transferAsset = [\n asset.address\n ? formatAssetIdToERC20(asset.address)\n : asset.getAssetId(),\n asset.amount,\n ];\n\n const feeAsset = [\n fee.address ? formatAssetIdToERC20(fee.address) : fee.getAssetId(),\n fee.amount,\n ];\n\n const assets = shouldTransferAssetPrecedeFeeAsset\n ? [transferAsset, feeAsset]\n : [feeAsset, transferAsset];\n const feeAssetIndex = shouldTransferAssetPrecedeFeeAsset ? 1 : 0;\n return new ContractConfig({\n address: XTOKENS_CONTRACT_ADDRESS,\n abi: XTOKENS_ABI,\n args: [\n assets,\n feeAssetIndex,\n getDestinationMultilocation(destinationAddress, destination),\n weight,\n ],\n func: 'transferMultiCurrencies',\n module: 'Xtokens',\n });\n },\n }),\n transferWithEvmTo32: (weight = U_64_MAX): ContractConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) => {\n const multilocation =\n getDestinationMultilocationForPrecompileDestination(\n destinationAddress,\n destination,\n );\n\n return new ContractConfig({\n address: XTOKENS_CONTRACT_ADDRESS,\n abi: XTOKENS_ABI,\n args: [\n asset.address\n ? formatAssetIdToERC20(asset.address)\n : asset.getAssetId(),\n asset.amount,\n multilocation,\n weight,\n ],\n func: 'transfer',\n module: 'Xtokens',\n });\n },\n }),\n };\n}\n\nfunction getDestinationMultilocationForPrecompileDestination(\n address: string,\n destination: AnyParachain,\n): DestinationMultilocation {\n /* \n 01: AccountId32\n 03: AccountKey20\n https://docs.moonbeam.network/builders/interoperability/xcm/xc20/xtokens/#building-the-precompile-multilocation\n */\n const accountType = '01';\n const substrateAddress = evmToAddress(address);\n const acc = `0x${accountType}${u8aToHex(\n decodeAddress(substrateAddress),\n -1,\n false,\n )}00`;\n\n return [\n 1,\n destination.parachainId\n ? [`0x0000000${destination.parachainId.toString(16)}`, acc]\n : [acc],\n ];\n}\n","export const XTOKENS_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transfer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Xtokens.Currency[]',\n name: 'currencies',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeItem',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiCurrencies',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { XcmPrecompile } from './contracts/XcmPrecompile';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function ContractBuilder() {\n return {\n Xtokens,\n XcmPrecompile,\n };\n}\n","export const ERC20_ABI = [\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_spender',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address',\n },\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n] as const;\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\n\nexport enum EqBalancesFee {\n SovereignAccWillPay = 'SovereignAccWillPay',\n TargetChainAccWillPay = 'TargetChainAccWillPay',\n ThisAccWillPay = 'ThisAccWillPay',\n}\n\nconst pallet = 'eqBalances';\n\nexport function eqBalances() {\n return {\n xcmTransfer: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'xcmTransfer',\n getArgs: () => [\n asset.getAssetId(),\n asset.amount,\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(destinationAddress),\n ],\n },\n },\n EqBalancesFee.ThisAccWillPay,\n ],\n }),\n }),\n transferXcm: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination, fee }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'transferXcm',\n getArgs: () => {\n const amountWithoutFee =\n asset.amount - fee.amount > 0n ? asset.amount - fee.amount : 0n;\n\n return [\n [\n asset.getAssetId(),\n asset.isSame(fee) ? amountWithoutFee : asset.amount,\n ],\n [fee.getAssetId(), fee.amount],\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(address),\n ],\n },\n },\n ];\n },\n }),\n }),\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\nimport {\n getEcosystemTransferExtrinsicArgs,\n getGlobalConsensus,\n getPolkadotXcmExtrinsicArgs,\n shouldFeeAssetPrecedeAsset,\n} from './polkadotXcm.util';\n\nconst pallet = 'polkadotXcm';\n\nexport function polkadotXcm() {\n return {\n limitedReserveTransferAssets: () => {\n const func = 'limitedReserveTransferAssets';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X1: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const isAssetDifferent = !params.asset.isSame(params.fee);\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n const shouldFeeAssetPrecede =\n shouldFeeAssetPrecedeAsset(params);\n\n if (isAssetDifferent) {\n const feeAsset = {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance: params.fee.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.fee.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n };\n\n if (shouldFeeAssetPrecede) {\n assets.unshift(feeAsset);\n } else {\n assets.push(feeAsset);\n }\n }\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n feeIndex: isAssetDifferent && !shouldFeeAssetPrecede ? 1 : 0,\n });\n },\n }),\n }),\n X2PalletInstance: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n };\n },\n limitedReserveWithdrawAssets: () => {\n const func = 'limitedReserveWithdrawAssets';\n\n return {\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n };\n },\n transferAssets: () => {\n const func = 'transferAssets';\n\n return {\n here: (parents = 0): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X1: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X1: [\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X1GeneralKey: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const isAssetDifferent = !params.asset.isSame(params.fee);\n\n const assets = [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n GeneralKey: params.asset.getGeneralKey(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n if (isAssetDifferent) {\n const feeAsset = {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n GeneralKey: params.fee.getGeneralKey(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.fee.amount,\n },\n };\n\n assets.unshift(feeAsset);\n }\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n // TODO find a better way to identify when the asset info is in the destination\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X3: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n const feeAssetInDestination = params.destination.getChainAsset(\n params.fee,\n );\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n feeAssetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n },\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X3: [\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: assetInDestination.address,\n },\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n X2AndFeeHere: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n // Fee Asset\n {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n },\n ],\n feeIndex: 1,\n });\n },\n }),\n }),\n };\n },\n transferAssetsUsingTypeAndThen: () => {\n const func = 'transferAssetsUsingTypeAndThen';\n return {\n here: (parents = 0): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n return [\n {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n {\n [version]: [\n {\n id: {\n parents,\n interior: 'Here',\n },\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n },\n 'LocalReserve',\n {\n [version]: {\n parents,\n interior: 'Here',\n },\n },\n 'LocalReserve',\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: 1 },\n },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n getExtrinsicAccount(params.destinationAddress),\n ],\n },\n },\n },\n },\n ],\n },\n 'Unlimited',\n ];\n },\n }),\n }),\n X2: (parents = 0): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const isSameAsset = params.asset.isSame(params.fee);\n\n const shouldFeeAssetPrecede =\n shouldFeeAssetPrecedeAsset(params);\n\n const asset = {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance: params.asset.getAssetPalletInstance(),\n },\n {\n GeneralIndex: params.asset.getAssetId(),\n },\n ],\n },\n };\n\n const assetWithAmount = {\n id: asset,\n fun: { Fungible: params.asset.amount },\n };\n\n const feeAsset = {\n parents,\n interior: 'Here',\n };\n\n const feeAssetWithAmount = {\n id: feeAsset,\n fun: { Fungible: params.fee.amount },\n };\n\n const assets = isSameAsset\n ? [assetWithAmount]\n : shouldFeeAssetPrecede\n ? [feeAssetWithAmount, assetWithAmount]\n : [assetWithAmount, feeAssetWithAmount];\n\n return [\n // dest\n {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n // assets\n {\n [version]: assets,\n },\n // assetsTransferType\n 'LocalReserve',\n // remoteFeesId\n {\n [version]: isSameAsset ? asset : feeAsset,\n },\n // feesTransferType\n 'LocalReserve',\n // customXcmOnDest\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: isSameAsset ? 1 : 2 },\n },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n getExtrinsicAccount(params.destinationAddress),\n ],\n },\n },\n },\n },\n ],\n },\n // weightLimit\n 'Unlimited',\n ];\n },\n }),\n }),\n // TODO we could pass a parameter globalConsensus in the chain asset if we need a different one\n globalConsensusEthereum: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n\n getArgs: (extrinsicFunction) => {\n if (!params.asset.address) {\n throw new Error(\n 'Asset address is needed for transferAssetsUsingTypeAndThen.globalConsensus function',\n );\n }\n\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n return [\n {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n {\n [version]: [\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X2: [\n { globalConsensus: { Ethereum: { ChainId: 1 } } },\n getExtrinsicAccount(params.asset.address),\n ],\n },\n }),\n fun: { fungible: params.asset.amount },\n },\n ],\n },\n 'LocalReserve',\n {\n [version]: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X2: [\n { globalConsensus: { Ethereum: { ChainId: 1 } } },\n getExtrinsicAccount(params.asset.address),\n ],\n },\n }),\n },\n 'LocalReserve',\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: 1 },\n },\n beneficiary: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: getExtrinsicAccount(\n params.destinationAddress,\n ),\n },\n }),\n },\n },\n ],\n },\n 'Unlimited',\n ];\n },\n }),\n }),\n };\n },\n transferAssetsToEcosystem: () => {\n const func = 'transferAssets';\n\n return {\n X1: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: {\n X2: [\n {\n PalletInstance:\n params.asset.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: params.asset.address,\n },\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n X3: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X3: [\n {\n GlobalConsensus: getGlobalConsensus(\n params.destination,\n ),\n },\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n X4: (): ExtrinsicConfigBuilder => ({\n build: (params) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n\n const feeAssetInDestination = params.destination.getChainAsset(\n params.fee,\n );\n\n const assetInDestination = params.destination.getChainAsset(\n params.asset,\n );\n\n const globalConsensus = getGlobalConsensus(params.destination);\n\n const assets = [\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X3: [\n {\n GlobalConsensus: globalConsensus,\n },\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n feeAssetInDestination.getAssetPalletInstance(),\n },\n ],\n },\n }),\n fun: {\n Fungible: params.fee.amount,\n },\n },\n {\n id: normalizeConcrete(version, {\n parents: 2,\n interior: {\n X4: [\n {\n GlobalConsensus: globalConsensus,\n },\n {\n Parachain: params.destination.parachainId,\n },\n {\n PalletInstance:\n assetInDestination.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: assetInDestination.address,\n },\n },\n ],\n },\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ];\n\n return getEcosystemTransferExtrinsicArgs({\n ...params,\n func: extrinsicFunction,\n assets,\n });\n },\n });\n },\n }),\n };\n },\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport {\n type ExtrinsicConfigBuilder,\n type Parents,\n XcmVersion,\n} from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n} from '../../ExtrinsicBuilder.utils';\nimport { getPolkadotXcmExtrinsicArgs } from '../polkadotXcm/polkadotXcm.util';\n\nconst pallet = 'xcmPallet';\n\nexport function xcmPallet() {\n return {\n limitedReserveTransferAssets: (parents: Parents = 1) => {\n const func = 'limitedReserveTransferAssets';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const version = getExtrinsicArgumentVersion(extrinsicFunction);\n return getPolkadotXcmExtrinsicArgs({\n ...params,\n parents,\n func: extrinsicFunction,\n assets: [\n {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: 'Here',\n }),\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n });\n },\n }),\n }),\n };\n },\n transferAssetsUsingTypeAndThen: () => {\n const func = 'transferAssetsUsingTypeAndThen';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: (params) =>\n new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: () => {\n const version = XcmVersion.v4;\n return [\n {\n [version]: {\n parents: 0,\n interior: {\n X1: [\n {\n Parachain: params.destination.parachainId,\n },\n ],\n },\n },\n },\n {\n [version]: [\n {\n id: {\n parents: 0,\n interior: 'Here',\n },\n fun: {\n Fungible: params.asset.amount,\n },\n },\n ],\n },\n 'LocalReserve',\n {\n [version]: {\n parents: 0,\n interior: 'Here',\n },\n },\n 'LocalReserve',\n {\n [version]: [\n {\n DepositAsset: {\n assets: {\n Wild: { AllCounted: 1 },\n },\n beneficiary: {\n parents: 0,\n interior: {\n X1: [\n getExtrinsicAccount(params.destinationAddress),\n ],\n },\n },\n },\n },\n ],\n },\n 'Unlimited',\n ];\n },\n }),\n }),\n };\n },\n };\n}\n","import type { AnyParachain } from '@moonbeam-network/xcm-types';\nimport type { XcmVersion } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\nimport type { XTokensWeightLimit } from './xTokens.interfaces';\n\n/**\n * It is safer to always use unlimited\n */\nexport function getWeight(): XTokensWeightLimit {\n return 'Unlimited';\n}\n\nexport function getDestination(\n version: XcmVersion,\n address: string,\n destination: AnyParachain,\n) {\n return {\n [version]: {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(address),\n ],\n },\n },\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport {\n type ExtrinsicConfigBuilder,\n XcmVersion,\n} from '../../ExtrinsicBuilder.interfaces';\nimport {\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n normalizeX1,\n} from '../../ExtrinsicBuilder.utils';\nimport { getDestination, getWeight } from './xTokens.utils';\n\nconst pallet = 'xTokens';\n\nexport function xTokens() {\n return {\n transfer: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'transfer',\n getArgs: (func) => {\n const destIndex = 2;\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n asset.getAssetId(),\n asset.amount,\n getDestination(version, destinationAddress, destination),\n getWeight(),\n ];\n },\n }),\n }),\n transferMultiAsset: (originParachainId: number) => {\n const funcName = 'transferMultiasset';\n const destIndex = 1;\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: funcName,\n getArgs: (func) => {\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n {\n [version]: {\n id: normalizeConcrete(version, {\n parents: 0,\n interior: 'Here',\n }),\n fun: {\n Fungible: asset.amount,\n },\n },\n },\n getDestination(version, address, destination),\n getWeight(),\n ];\n },\n }),\n }),\n X1: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: funcName,\n getArgs: (func) => {\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n {\n [version]: {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 1,\n interior: {\n X1: {\n Parachain: originParachainId,\n },\n },\n }),\n ),\n fun: {\n Fungible: asset.amount,\n },\n },\n },\n getDestination(version, address, destination),\n getWeight(),\n ];\n },\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: funcName,\n getArgs: (func) => {\n const version = getExtrinsicArgumentVersion(func, destIndex);\n\n return [\n {\n [version]: {\n id: normalizeConcrete(version, {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: originParachainId,\n },\n {\n GeneralKey: asset.getAssetId(),\n },\n ],\n },\n }),\n fun: {\n Fungible: asset.amount,\n },\n },\n },\n getDestination(version, address, destination),\n getWeight(),\n ];\n },\n }),\n }),\n };\n },\n transferMultiCurrencies: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination, fee }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: 'transferMulticurrencies',\n getArgs: () => [\n [\n [asset.getAssetId(), asset.amount],\n [fee.getAssetId(), fee.amount],\n ],\n 1,\n getDestination(XcmVersion.v3, address, destination),\n getWeight(),\n ],\n }),\n }),\n };\n}\n","import { ExtrinsicConfig } from '../../../types/substrate/ExtrinsicConfig';\nimport type { ExtrinsicConfigBuilder } from '../../ExtrinsicBuilder.interfaces';\nimport { getExtrinsicAccount } from '../../ExtrinsicBuilder.utils';\n\nconst pallet = 'xTransfer';\n\nexport function xTransfer() {\n return {\n transfer: () => {\n const method = 'transfer';\n\n return {\n here: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress: address, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: method,\n getArgs: () => [\n {\n id: {\n Concrete: {\n parents: 0,\n interior: 'Here',\n },\n },\n fun: {\n Fungible: asset.amount,\n },\n },\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(address),\n ],\n },\n },\n {\n refTime: 5_000_000_000,\n proofSize: 0,\n },\n ],\n }),\n }),\n X2: (): ExtrinsicConfigBuilder => ({\n build: ({ destinationAddress, asset, destination }) =>\n new ExtrinsicConfig({\n module: pallet,\n func: method,\n getArgs: () => [\n {\n id: {\n Concrete: {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n ],\n },\n },\n },\n fun: {\n Fungible: asset.amount || 1n,\n },\n },\n {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(destinationAddress),\n ],\n },\n },\n {\n refTime: 5_000_000_000,\n proofSize: 0,\n },\n ],\n }),\n }),\n };\n },\n };\n}\n","import { eqBalances } from './pallets/eqBalances';\nimport { polkadotXcm } from './pallets/polkadotXcm';\nimport { xcmPallet } from './pallets/xcmPallet';\nimport { xTokens } from './pallets/xTokens';\nimport { xTransfer } from './pallets/xTransfer';\n\nexport function ExtrinsicBuilder() {\n return {\n eqBalances,\n xTokens,\n xTransfer,\n polkadotXcm,\n xcmPallet,\n };\n}\n","import { EvmChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { ContractConfig } from '../..';\nimport { GATEWAY_ABI } from '../../mrl/providers/snowbridge/snowbridge/SnowbridgeConstants';\nimport type { BridgeFeeConfigBuilder } from '../FeeBuilder.interfaces';\n\nexport function gateway() {\n return {\n quoteSendTokenFee(): BridgeFeeConfigBuilder {\n return {\n build: ({ asset, destination, source }) => {\n if (!asset.address) {\n throw new Error(`Asset ${asset.key} has no address`);\n }\n\n if (!EvmChain.is(source) || !source.contracts?.Gateway) {\n throw new Error(\n 'Source must be an EVMChain with the Gateway contract address configured for getting the quote send token fee for Gateway module',\n );\n }\n\n if (!EvmParachain.isAnyParachain(destination)) {\n throw new Error(\n 'Destination must be a Parachain or EvmParachain for getting the quote send token fee for Gateway module',\n );\n }\n\n return new ContractConfig({\n address: source.contracts.Gateway,\n abi: GATEWAY_ABI,\n args: [asset.address, destination.parachainId, 0n],\n func: 'quoteSendTokenFee',\n module: 'Gateway',\n });\n },\n };\n },\n };\n}\n","export const GATEWAY_ABI = [\n {\n inputs: [\n { internalType: 'address', name: 'beefyClient', type: 'address' },\n { internalType: 'address', name: 'agentExecutor', type: 'address' },\n { internalType: 'ParaID', name: 'bridgeHubParaID', type: 'uint32' },\n { internalType: 'bytes32', name: 'bridgeHubAgentID', type: 'bytes32' },\n { internalType: 'uint8', name: 'foreignTokenDecimals', type: 'uint8' },\n { internalType: 'uint128', name: 'maxDestinationFee', type: 'uint128' },\n ],\n stateMutability: 'nonpayable',\n type: 'constructor',\n },\n { inputs: [], name: 'AgentAlreadyCreated', type: 'error' },\n { inputs: [], name: 'AgentDoesNotExist', type: 'error' },\n { inputs: [], name: 'CantSetMiddlewareToSameAddress', type: 'error' },\n { inputs: [], name: 'CantSetMiddlewareToZeroAddress', type: 'error' },\n { inputs: [], name: 'ChannelAlreadyCreated', type: 'error' },\n { inputs: [], name: 'ChannelDoesNotExist', type: 'error' },\n { inputs: [], name: 'Disabled', type: 'error' },\n {\n inputs: [\n { internalType: 'uint256', name: 'epoch', type: 'uint256' },\n { internalType: 'uint256', name: 'eraIndex', type: 'uint256' },\n { internalType: 'address', name: 'tokenAddress', type: 'address' },\n { internalType: 'uint256', name: 'totalPointsToken', type: 'uint256' },\n { internalType: 'uint256', name: 'totalTokensInflated', type: 'uint256' },\n { internalType: 'bytes32', name: 'rewardsRoot', type: 'bytes32' },\n { internalType: 'bytes', name: 'errorBytes', type: 'bytes' },\n ],\n name: 'EUnableToProcessRewardsB',\n type: 'error',\n },\n {\n inputs: [\n { internalType: 'uint256', name: 'epoch', type: 'uint256' },\n { internalType: 'uint256', name: 'eraIndex', type: 'uint256' },\n { internalType: 'address', name: 'tokenAddress', type: 'address' },\n { internalType: 'uint256', name: 'totalPointsToken', type: 'uint256' },\n { internalType: 'uint256', name: 'totalTokensInflated', type: 'uint256' },\n { internalType: 'bytes32', name: 'rewardsRoot', type: 'bytes32' },\n { internalType: 'string', name: 'errorString', type: 'string' },\n ],\n name: 'EUnableToProcessRewardsS',\n type: 'error',\n },\n { inputs: [], name: 'FeePaymentToLow', type: 'error' },\n { inputs: [], name: 'InvalidAgentExecutionPayload', type: 'error' },\n { inputs: [], name: 'InvalidChannelUpdate', type: 'error' },\n { inputs: [], name: 'InvalidCodeHash', type: 'error' },\n { inputs: [], name: 'InvalidConstructorParams', type: 'error' },\n { inputs: [], name: 'InvalidContract', type: 'error' },\n { inputs: [], name: 'InvalidNonce', type: 'error' },\n { inputs: [], name: 'InvalidProof', type: 'error' },\n { inputs: [], name: 'MiddlewareNotSet', type: 'error' },\n { inputs: [], name: 'NativeTransferFailed', type: 'error' },\n { inputs: [], name: 'NotEnoughGas', type: 'error' },\n { inputs: [], name: 'Operators__OperatorsKeysCannotBeEmpty', type: 'error' },\n { inputs: [], name: 'Operators__OperatorsLengthTooLong', type: 'error' },\n {\n inputs: [\n { internalType: 'uint256', name: 'x', type: 'uint256' },\n { internalType: 'uint256', name: 'y', type: 'uint256' },\n ],\n name: 'PRBMath_MulDiv18_Overflow',\n type: 'error',\n },\n {\n inputs: [\n { internalType: 'uint256', name: 'x', type: 'uint256' },\n { internalType: 'uint256', name: 'y', type: 'uint256' },\n { internalType: 'uint256', name: 'denominator', type: 'uint256' },\n ],\n name: 'PRBMath_MulDiv_Overflow',\n type: 'error',\n },\n {\n inputs: [{ internalType: 'uint256', name: 'x', type: 'uint256' }],\n name: 'PRBMath_UD60x18_Convert_Overflow',\n type: 'error',\n },\n {\n inputs: [{ internalType: 'UD60x18', name: 'x', type: 'uint256' }],\n name: 'PRBMath_UD60x18_Exp2_InputTooBig',\n type: 'error',\n },\n {\n inputs: [{ internalType: 'UD60x18', name: 'x', type: 'uint256' }],\n name: 'PRBMath_UD60x18_Log_InputTooSmall',\n type: 'error',\n },\n { inputs: [], name: 'TokenNotRegistered', type: 'error' },\n { inputs: [], name: 'Unauthorized', type: 'error' },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'bytes32',\n name: 'agentID',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'agent',\n type: 'address',\n },\n ],\n name: 'AgentCreated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'agentID',\n type: 'bytes32',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'AgentFundsWithdrawn',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'ChannelID',\n name: 'channelID',\n type: 'bytes32',\n },\n ],\n name: 'ChannelCreated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'ChannelID',\n name: 'channelID',\n type: 'bytes32',\n },\n ],\n name: 'ChannelUpdated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'tokenID',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'ForeignTokenRegistered',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'ChannelID',\n name: 'channelID',\n type: 'bytes32',\n },\n { indexed: false, internalType: 'uint64', name: 'nonce', type: 'uint64' },\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'messageID',\n type: 'bytes32',\n },\n { indexed: false, internalType: 'bool', name: 'success', type: 'bool' },\n ],\n name: 'InboundMessageDispatched',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousMiddleware',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newMiddleware',\n type: 'address',\n },\n ],\n name: 'MiddlewareChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'enum OperatingMode',\n name: 'mode',\n type: 'uint8',\n },\n ],\n name: 'OperatingModeChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'uint256',\n name: 'validatorsCount',\n type: 'uint256',\n },\n { indexed: false, internalType: 'bytes', name: 'payload', type: 'bytes' },\n ],\n name: 'OperatorsDataCreated',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'ChannelID',\n name: 'channelID',\n type: 'bytes32',\n },\n { indexed: false, internalType: 'uint64', name: 'nonce', type: 'uint64' },\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'messageID',\n type: 'bytes32',\n },\n { indexed: false, internalType: 'bytes', name: 'payload', type: 'bytes' },\n ],\n name: 'OutboundMessageAccepted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'previousOwner',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newOwner',\n type: 'address',\n },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [],\n name: 'PricingParametersChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'TokenRegistrationSent',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'sender',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'ParaID',\n name: 'destinationChain',\n type: 'uint32',\n },\n {\n components: [\n { internalType: 'enum Kind', name: 'kind', type: 'uint8' },\n { internalType: 'bytes', name: 'data', type: 'bytes' },\n ],\n indexed: false,\n internalType: 'struct MultiAddress',\n name: 'destinationAddress',\n type: 'tuple',\n },\n {\n indexed: false,\n internalType: 'uint128',\n name: 'amount',\n type: 'uint128',\n },\n ],\n name: 'TokenSent',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [],\n name: 'TokenTransferFeesChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'operatorKey',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'slashFranction',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'epoch',\n type: 'uint256',\n },\n { indexed: false, internalType: 'bytes', name: 'error', type: 'bytes' },\n ],\n name: 'UnableToProcessIndividualSlashB',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'bytes32',\n name: 'operatorKey',\n type: 'bytes32',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'slashFranction',\n type: 'uint256',\n },\n {\n indexed: true,\n internalType: 'uint256',\n name: 'epoch',\n type: 'uint256',\n },\n { indexed: false, internalType: 'string', name: 'error', type: 'string' },\n ],\n name: 'UnableToProcessIndividualSlashS',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: 'bytes', name: 'error', type: 'bytes' },\n ],\n name: 'UnableToProcessRewardsMessageB',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: 'string', name: 'error', type: 'string' },\n ],\n name: 'UnableToProcessRewardsMessageS',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: 'bytes', name: 'error', type: 'bytes' },\n ],\n name: 'UnableToProcessSlashMessageB',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: false, internalType: 'string', name: 'error', type: 'string' },\n ],\n name: 'UnableToProcessSlashMessageS',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [],\n name: 'AGENT_EXECUTOR',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'BEEFY_CLIENT',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'agentExecute',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes32', name: 'agentID', type: 'bytes32' }],\n name: 'agentOf',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'ChannelID', name: 'channelID', type: 'bytes32' }],\n name: 'channelNoncesOf',\n outputs: [\n { internalType: 'uint64', name: '', type: 'uint64' },\n { internalType: 'uint64', name: '', type: 'uint64' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'ChannelID', name: 'channelID', type: 'bytes32' }],\n name: 'channelOperatingModeOf',\n outputs: [{ internalType: 'enum OperatingMode', name: '', type: 'uint8' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'createAgent',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'createChannel',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'implementation',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n name: 'isTokenRegistered',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'mintForeignToken',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'operatingMode',\n outputs: [{ internalType: 'enum OperatingMode', name: '', type: 'uint8' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pricingParameters',\n outputs: [\n { internalType: 'UD60x18', name: '', type: 'uint256' },\n { internalType: 'uint128', name: '', type: 'uint128' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n name: 'queryForeignTokenID',\n outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'quoteRegisterTokenFee',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'address', name: 'token', type: 'address' },\n { internalType: 'ParaID', name: 'destinationChain', type: 'uint32' },\n { internalType: 'uint128', name: 'destinationFee', type: 'uint128' },\n ],\n name: 'quoteSendTokenFee',\n outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'registerForeignToken',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'token', type: 'address' }],\n name: 'registerToken',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'reportSlashes',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 's_middleware',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'bytes32[]', name: 'data', type: 'bytes32[]' },\n { internalType: 'uint48', name: 'epoch', type: 'uint48' },\n ],\n name: 'sendOperatorsData',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'sendRewards',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'address', name: 'token', type: 'address' },\n { internalType: 'ParaID', name: 'destinationChain', type: 'uint32' },\n {\n components: [\n { internalType: 'enum Kind', name: 'kind', type: 'uint8' },\n { internalType: 'bytes', name: 'data', type: 'bytes' },\n ],\n internalType: 'struct MultiAddress',\n name: 'destinationAddress',\n type: 'tuple',\n },\n { internalType: 'uint128', name: 'destinationFee', type: 'uint128' },\n { internalType: 'uint128', name: 'amount', type: 'uint128' },\n ],\n name: 'sendToken',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'middleware', type: 'address' }],\n name: 'setMiddleware',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'setOperatingMode',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'setPricingParameters',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'setTokenTransferFees',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n { internalType: 'ChannelID', name: 'channelID', type: 'bytes32' },\n { internalType: 'uint64', name: 'nonce', type: 'uint64' },\n { internalType: 'enum Command', name: 'command', type: 'uint8' },\n { internalType: 'bytes', name: 'params', type: 'bytes' },\n { internalType: 'uint64', name: 'maxDispatchGas', type: 'uint64' },\n { internalType: 'uint256', name: 'maxFeePerGas', type: 'uint256' },\n { internalType: 'uint256', name: 'reward', type: 'uint256' },\n { internalType: 'bytes32', name: 'id', type: 'bytes32' },\n ],\n internalType: 'struct InboundMessage',\n name: 'message',\n type: 'tuple',\n },\n { internalType: 'bytes32[]', name: 'leafProof', type: 'bytes32[]' },\n {\n components: [\n {\n components: [\n { internalType: 'uint8', name: 'version', type: 'uint8' },\n { internalType: 'uint32', name: 'parentNumber', type: 'uint32' },\n { internalType: 'bytes32', name: 'parentHash', type: 'bytes32' },\n {\n internalType: 'uint64',\n name: 'nextAuthoritySetID',\n type: 'uint64',\n },\n {\n internalType: 'uint32',\n name: 'nextAuthoritySetLen',\n type: 'uint32',\n },\n {\n internalType: 'bytes32',\n name: 'nextAuthoritySetRoot',\n type: 'bytes32',\n },\n ],\n internalType: 'struct Verification.MMRLeafPartial',\n name: 'leafPartial',\n type: 'tuple',\n },\n { internalType: 'bytes32[]', name: 'leafProof', type: 'bytes32[]' },\n {\n internalType: 'bytes32',\n name: 'parachainHeadsRoot',\n type: 'bytes32',\n },\n { internalType: 'uint256', name: 'leafProofOrder', type: 'uint256' },\n ],\n internalType: 'struct Verification.Proof',\n name: 'headerProof',\n type: 'tuple',\n },\n ],\n name: 'submitV1',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes32', name: 'tokenID', type: 'bytes32' }],\n name: 'tokenAddressOf',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'transferNativeFromAgent',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'transferNativeToken',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'updateChannel',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'bytes', name: 'data', type: 'bytes' }],\n name: 'upgrade',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import type { u128 } from '@polkadot/types';\nimport { SubstrateQueryConfig } from '../../types';\nimport type { BridgeFeeConfigBuilder } from '../FeeBuilder.interfaces';\n\nexport function outboundQueueApi() {\n return {\n calculateFee: (): BridgeFeeConfigBuilder => {\n return {\n build: ({ address, balance, feeAsset }) => {\n const args = [\n {\n MintForeignToken: {\n tokenId: feeAsset.getAssetId(),\n recipient: address,\n amount: balance?.amount,\n },\n },\n null,\n ];\n return new SubstrateQueryConfig({\n module: 'outboundQueueApi',\n func: 'calculateFee',\n args,\n queryType: 'call',\n transform: async (data: {\n local: u128;\n remote: u128;\n }): Promise<bigint> =>\n data.local.toBigInt() + data.remote.toBigInt(),\n });\n },\n };\n },\n };\n}\n","import { type AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { isEthAddress } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { Result, u128 } from '@polkadot/types';\nimport type {\n Error as PolkadotError,\n Weight,\n} from '@polkadot/types/interfaces';\nimport type { AnyJson } from '@polkadot/types/types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { XcmVersion } from '../extrinsic';\nimport { getGlobalConsensus } from '../extrinsic/pallets/polkadotXcm/polkadotXcm.util';\n\nconst DEFAULT_AMOUNT = 10 ** 6;\nconst DEFAULT_HEX_STRING =\n '0xabcdef1234567890fedcba0987654321abcdef1234567890fedcba0987654321';\n\nexport const STABLE_XCM_VERSION: XcmVersion = XcmVersion.v4; // TODO: make this dynamic\n\nfunction isXcmV4() {\n return STABLE_XCM_VERSION === XcmVersion.v4;\n}\n\nexport function getWithdrawAssetInstruction(assetTypes: object[]) {\n return {\n WithdrawAsset: assetTypes.map((assetType) => ({\n id: { ...assetType },\n fun: {\n Fungible: DEFAULT_AMOUNT,\n },\n })),\n };\n}\n\nexport function getUniversalOriginInstruction(source?: AnyChain) {\n if (!EvmParachain.isAnyParachain(source)) {\n throw new Error('Source is not a parachain');\n }\n\n return {\n UniversalOrigin: {\n GlobalConsensus: getGlobalConsensus(source),\n },\n };\n}\n\nexport function getDescendOriginInstruction(source?: AnyChain) {\n if (!EvmParachain.isAnyParachain(source)) {\n throw new Error('Source is not a parachain');\n }\n\n return {\n DescendOrigin: {\n X1: [\n {\n Parachain: source.parachainId,\n },\n ],\n },\n };\n}\n\nexport function getReserveAssetDepositedInstruction(assetTypes: object[]) {\n return {\n ReserveAssetDeposited: assetTypes.map((assetType) => ({\n id: { ...assetType },\n fun: {\n Fungible: DEFAULT_AMOUNT,\n },\n })),\n };\n}\n\nexport function getClearOriginInstruction() {\n return {\n ClearOrigin: 'NULL',\n };\n}\n\nexport function getBuyExecutionInstruction(assetType: object) {\n // TODO should verify that asset is in acceptable payment assets\n // api.call.xcmPaymentApi.queryAcceptablePaymentAssets(xcmVersion)\n return {\n BuyExecution: {\n fees: {\n id: {\n ...assetType,\n },\n fun: {\n Fungible: DEFAULT_AMOUNT,\n },\n },\n weight_limit: {\n Unlimited: 'NULL',\n },\n },\n };\n}\n\nexport function getDepositAssetInstruction(address: string, assets: object[]) {\n const accountKey = {\n [isEthAddress(address) ? 'AccountKey20' : 'AccountId32']: {\n key: isEthAddress(address) ? address : u8aToHex(decodeAddress(address)),\n network: null,\n },\n };\n\n return {\n DepositAsset: {\n assets: {\n Wild: {\n AllCounted: assets.length,\n },\n },\n beneficiary: {\n interior: {\n X1: isXcmV4() ? [accountKey] : accountKey,\n },\n parents: 0,\n },\n max_assets: 0,\n },\n };\n}\n\nexport function getSetTopicInstruction() {\n return {\n SetTopic: DEFAULT_HEX_STRING,\n };\n}\n\nexport async function getFeeForXcmInstructionsAndAsset(\n api: ApiPromise,\n instructions: AnyJson,\n versionedAssetId: object,\n) {\n const xcmToWeightResult = await api.call.xcmPaymentApi.queryXcmWeight<\n Result<Weight, PolkadotError>\n >({\n [STABLE_XCM_VERSION]: instructions,\n });\n if (!xcmToWeightResult.isOk) {\n throw new Error(\n 'There was an error trying to get the weight for the xcm instructions (queryXcmWeight)',\n );\n }\n\n const xcmToWeight = xcmToWeightResult.asOk;\n\n const weightToForeignAssets =\n await api.call.xcmPaymentApi.queryWeightToAssetFee<\n Result<u128, PolkadotError>\n >(xcmToWeight, {\n [STABLE_XCM_VERSION]: {\n ...versionedAssetId,\n },\n });\n\n // If the asset is not supported by V4, retry with V5\n // TODO this is a temporary solution, we should find a better way to handle this, with xcmPallet.supportedVersion or polkadotXcm.supportedVersion\n if (!weightToForeignAssets.isOk) {\n console.error(\n 'Error trying to get the fee with the weight and asset (weightToForeignAssets) with V4, retrying with V5',\n );\n\n const weightToForeignAssetsV5 =\n await api.call.xcmPaymentApi.queryWeightToAssetFee<\n Result<u128, PolkadotError>\n >(xcmToWeight, {\n [XcmVersion.v5]: {\n ...versionedAssetId,\n },\n });\n\n if (!weightToForeignAssetsV5.isOk) {\n throw new Error(\n 'There was an error trying to get the fee with the weight and asset (weightToForeignAssets). Make sure the asset is supported by XcmPaymentApi.',\n );\n }\n return weightToForeignAssetsV5.asOk.toBigInt();\n }\n return weightToForeignAssets.asOk.toBigInt();\n}\n","import type { AnyChain, ChainAsset } from '@moonbeam-network/xcm-types';\nimport { Parachain } from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { Option } from '@polkadot/types';\nimport type { StagingXcmV4Location } from '@polkadot/types/lookup';\nimport { normalizeX1 } from '../extrinsic/ExtrinsicBuilder.utils';\nimport type { MoonbeamRuntimeXcmConfigAssetType } from './FeeBuilder.interfaces';\nimport { STABLE_XCM_VERSION } from './FeeBuilder.utils';\n\nexport function BuildVersionedAsset() {\n return {\n fromHere: (parents = 1) => ({\n parents,\n interior: 'Here',\n }),\n\n fromAccountKey20: (asset: ChainAsset): object => ({\n interior: {\n X2: [\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n {\n AccountKey20: {\n key: asset.address,\n network: null,\n },\n },\n ],\n },\n parents: '0',\n }),\n\n fromGeneralIndex: (asset: ChainAsset): object => ({\n interior: {\n X1: [{ GeneralIndex: asset.getAssetId() }],\n },\n parents: '0',\n }),\n\n fromGlobalConsensus: (asset: ChainAsset): object => ({\n interior: {\n X2: [\n { GlobalConsensus: { Ethereum: { chainId: 1 } } },\n { AccountKey20: { key: asset.address, network: null } },\n ],\n },\n parents: 2,\n }),\n\n fromPalletInstance: (asset: ChainAsset): object => {\n return {\n interior: {\n X1: [\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n ],\n },\n parents: '0',\n };\n },\n\n fromPalletInstanceAndGeneralIndex: (asset: ChainAsset): object => {\n return {\n interior: {\n X2: [\n {\n PalletInstance: asset.getAssetPalletInstance(),\n },\n { GeneralIndex: asset.getAssetId() },\n ],\n },\n parents: '0',\n };\n },\n\n fromSource: () => ({\n accountKey20: (source: AnyChain, asset: ChainAsset) => {\n if (!(source instanceof Parachain)) {\n throw new Error(\n `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n );\n }\n\n const sourceAsset = source.getChainAsset(asset);\n\n return {\n interior: {\n X3: [\n { Parachain: source.parachainId },\n { PalletInstance: sourceAsset.getAssetPalletInstance() },\n { AccountKey20: { key: sourceAsset.address, network: null } },\n ],\n },\n parents: 1,\n };\n },\n\n palletInstance: (source: AnyChain, asset: ChainAsset): object => {\n if (!(source instanceof Parachain)) {\n throw new Error(\n `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n );\n }\n\n const sourceAsset = source.getChainAsset(asset);\n\n return {\n interior: {\n X2: [\n { Parachain: source.parachainId },\n {\n PalletInstance: sourceAsset.getAssetPalletInstance(),\n },\n ],\n },\n parents: 1,\n };\n },\n\n palletInstanceAndGeneralIndex: (\n source: AnyChain,\n asset: ChainAsset,\n ): object => {\n if (!(source instanceof Parachain)) {\n throw new Error(\n `Chain ${source.name} must be a Parachain to build versioned asset id for XcmPaymentApi fee calculation`,\n );\n }\n\n const sourceAsset = source.getChainAsset(asset);\n\n return {\n interior: {\n X3: [\n { Parachain: source.parachainId },\n { PalletInstance: sourceAsset.getAssetPalletInstance() },\n { GeneralIndex: sourceAsset.getAssetId() },\n ],\n },\n parents: 1,\n };\n },\n }),\n };\n}\n\nexport function QueryVersionedAsset() {\n return {\n fromCurrencyIdToLocations: async (asset: ChainAsset, api: ApiPromise) => {\n const result = await api.query.assetRegistry.currencyIdToLocations(\n asset.getAssetRegisteredId(),\n );\n\n if (!result || result.isEmpty) {\n throw new Error(`No location found for asset ${asset.getSymbol()}`);\n }\n\n return result.toJSON() as object;\n },\n fromAssetId: async (asset: ChainAsset, api: ApiPromise) => {\n if (!asset.getAssetRegisteredId()) {\n throw new Error(\n `No asset registered id found for asset ${asset.getSymbol()}`,\n );\n }\n\n const assetManagerResult = await api.query.assetManager?.assetIdType<\n Option<MoonbeamRuntimeXcmConfigAssetType>\n >(asset.getAssetRegisteredId());\n\n if (\n !assetManagerResult ||\n assetManagerResult.isNone ||\n assetManagerResult.isEmpty ||\n !assetManagerResult.unwrap().isXcm\n ) {\n const evmForeignAssetsResult =\n await api.query.evmForeignAssets?.assetsById<\n Option<StagingXcmV4Location>\n >(asset.getAssetRegisteredId());\n\n if (\n !evmForeignAssetsResult ||\n evmForeignAssetsResult.isEmpty ||\n evmForeignAssetsResult.isNone\n ) {\n throw new Error(`No asset type found for asset ${asset.getSymbol()}`);\n }\n\n return evmForeignAssetsResult.unwrapOrDefault().toJSON() as object;\n }\n\n return normalizeX1(\n STABLE_XCM_VERSION,\n assetManagerResult.unwrapOrDefault().asXcm.toJSON(),\n ) as object;\n },\n };\n}\n","import type { AnyChain } from '@moonbeam-network/xcm-types';\nimport type { FeeConfigBuilderParams } from '../FeeBuilder.interfaces';\nimport {\n getBuyExecutionInstruction,\n getClearOriginInstruction,\n getDepositAssetInstruction,\n getDescendOriginInstruction,\n getReserveAssetDepositedInstruction,\n getSetTopicInstruction,\n getUniversalOriginInstruction,\n getWithdrawAssetInstruction,\n} from '../FeeBuilder.utils';\nimport type { CreateXcmFeeBuilderProps } from './xcmPaymentApi';\n\nexport interface GetVersionedAssetsProps extends CreateXcmFeeBuilderProps {\n params: FeeConfigBuilderParams;\n}\n\nexport async function getVersionedAssets({\n getVersionedFeeAsset,\n getVersionedTransferAsset,\n options,\n params,\n}: GetVersionedAssetsProps): Promise<[object[], object]> {\n const { asset: transferAsset, feeAsset } = params;\n const versionedFeeAssetId = await getVersionedFeeAsset(params);\n\n const assets = [versionedFeeAssetId];\n\n if (feeAsset !== transferAsset && getVersionedTransferAsset) {\n const versionedTransferAssetId = await getVersionedTransferAsset(params);\n\n if (options.shouldTransferAssetPrecedeFeeAsset) {\n assets.unshift(versionedTransferAssetId);\n } else {\n assets.push(versionedTransferAssetId);\n }\n }\n\n return [assets, versionedFeeAssetId];\n}\n\ninterface GetInstructionsProps {\n isAssetReserveChain: boolean;\n assets: object[];\n versionedFeeAssetId: object;\n address: string;\n source?: AnyChain;\n isEcosystemBridge?: boolean;\n}\n\nexport function getInstructions({\n isAssetReserveChain,\n assets,\n versionedFeeAssetId,\n address,\n source,\n isEcosystemBridge,\n}: GetInstructionsProps) {\n const instructions = [\n isAssetReserveChain\n ? getWithdrawAssetInstruction(assets)\n : getReserveAssetDepositedInstruction(assets),\n getClearOriginInstruction(),\n getBuyExecutionInstruction(versionedFeeAssetId),\n getDepositAssetInstruction(address, assets),\n getSetTopicInstruction(),\n ];\n\n if (isEcosystemBridge) {\n return [\n getUniversalOriginInstruction(source),\n getDescendOriginInstruction(source),\n ...instructions,\n ];\n }\n\n return instructions;\n}\n","import { SubstrateCallConfig } from '../../types/substrate/SubstrateCallConfig';\nimport type {\n FeeConfigBuilder,\n FeeConfigBuilderParams,\n GetVersionedAssetId,\n XcmPaymentFeeProps,\n} from '../FeeBuilder.interfaces';\nimport { getFeeForXcmInstructionsAndAsset } from '../FeeBuilder.utils';\nimport {\n BuildVersionedAsset,\n QueryVersionedAsset,\n} from '../VersionedAssetBuilder';\nimport { getInstructions, getVersionedAssets } from './xcmPaymentApi.utils';\n\nexport function xcmPaymentApi() {\n const localMethods = {\n fromHere: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: () =>\n BuildVersionedAsset().fromHere(options.parents),\n options,\n }),\n\n fromHereAndGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: () => BuildVersionedAsset().fromHere(),\n getVersionedTransferAsset: ({ asset }) =>\n BuildVersionedAsset().fromPalletInstanceAndGeneralIndex(asset),\n options,\n }),\n\n fromPalletInstanceAndGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromPalletInstanceAndGeneralIndex(feeAsset),\n options,\n }),\n\n fromHereAndSourceGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: () => BuildVersionedAsset().fromHere(),\n getVersionedTransferAsset: ({ source, asset }) =>\n BuildVersionedAsset()\n .fromSource()\n .palletInstanceAndGeneralIndex(source, asset),\n options,\n }),\n\n fromGeneralIndex: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromGeneralIndex(feeAsset),\n options,\n }),\n\n fromPalletInstance: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromPalletInstance(feeAsset),\n options,\n }),\n\n fromPalletInstanceAndAccountKey20: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromPalletInstance(feeAsset),\n getVersionedTransferAsset: ({ asset }) =>\n BuildVersionedAsset().fromAccountKey20(asset),\n options,\n }),\n\n fromGlobalConsensus: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ feeAsset }) =>\n BuildVersionedAsset().fromGlobalConsensus(feeAsset),\n options,\n }),\n };\n\n const sourceMethods = {\n fromSourceAccountKey20: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ source, asset }) =>\n BuildVersionedAsset().fromSource().accountKey20(source, asset),\n options,\n }),\n\n fromSourcePalletInstance: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: ({ source, feeAsset }) =>\n BuildVersionedAsset().fromSource().palletInstance(source, feeAsset),\n options,\n }),\n };\n\n const queryMethods = {\n fromCurrencyIdToLocations: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: async ({ feeAsset, api }) => {\n return await QueryVersionedAsset().fromCurrencyIdToLocations(\n feeAsset,\n api,\n );\n },\n options,\n }),\n fromAssetIdQuery: (options: XcmPaymentFeeProps) =>\n createXcmFeeBuilder({\n getVersionedFeeAsset: async ({ feeAsset, api }) => {\n return await QueryVersionedAsset().fromAssetId(feeAsset, api);\n },\n getVersionedTransferAsset: async ({ asset, api }) => {\n return await QueryVersionedAsset().fromAssetId(asset, api);\n },\n options,\n }),\n };\n\n return {\n ...localMethods,\n ...sourceMethods,\n ...queryMethods,\n };\n}\n\nexport interface CreateXcmFeeBuilderProps {\n getVersionedFeeAsset: GetVersionedAssetId;\n getVersionedTransferAsset?: GetVersionedAssetId;\n options: XcmPaymentFeeProps;\n}\n\nconst createXcmFeeBuilder = ({\n getVersionedFeeAsset,\n getVersionedTransferAsset,\n options,\n}: CreateXcmFeeBuilderProps): FeeConfigBuilder => ({\n build: (params: FeeConfigBuilderParams) => {\n return new SubstrateCallConfig({\n api: params.api,\n call: async (): Promise<bigint> => {\n const [assets, versionedFeeAssetId] = await getVersionedAssets({\n getVersionedFeeAsset,\n getVersionedTransferAsset,\n options,\n params,\n });\n\n const instructions = getInstructions({\n isAssetReserveChain: options.isAssetReserveChain,\n assets,\n versionedFeeAssetId,\n address: params.address,\n source: params.source,\n isEcosystemBridge: options.isEcosystemBridge,\n });\n\n return getFeeForXcmInstructionsAndAsset(\n params.api,\n instructions,\n versionedFeeAssetId,\n );\n },\n });\n },\n});\n","import { gateway } from './gateway';\nimport { outboundQueueApi } from './outboundQueueApi';\nimport { xcmPaymentApi } from './xcmPaymentApi';\n\nexport function FeeBuilder() {\n return {\n gateway,\n outboundQueueApi,\n xcmPaymentApi,\n };\n}\n","import type { Bool, U8aFixed } from '@polkadot/types';\nimport type {\n AccountId32,\n EventRecord,\n H256,\n} from '@polkadot/types/interfaces';\nimport type {\n CumulusPrimitivesCoreAggregateMessageOrigin,\n StagingXcmV5Location,\n} from '@polkadot/types/lookup';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type {\n DestinationChecker,\n MonitorEventReturn,\n SourceChecker,\n} from './eventMonitoring.interfaces';\nimport {\n createDestinationChecker,\n createSourceChecker,\n} from './eventMonitoring.utils';\n\ninterface MessageQueueProcessedData {\n id: H256;\n origin: CumulusPrimitivesCoreAggregateMessageOrigin;\n weightUsed: unknown;\n success: Bool;\n}\n\nexport interface XcmEventData {\n origin: StagingXcmV5Location;\n messageId: U8aFixed;\n}\n\ninterface XTokensEventData {\n sender: AccountId32;\n}\n\ninterface XcmQueueEventData {\n messageHash: U8aFixed;\n}\n\ninterface EthereumXcmEventData {\n xcmMsgHash: H256;\n ethTxHash: H256;\n}\n\nexport function GetAddress() {\n return {\n fromXcmEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as XcmEventData;\n const interior = eventData.origin.interior.asX1[0];\n\n if (interior.isAccountId32) {\n return interior.asAccountId32.id.toHex();\n } else if (interior.isAccountKey20) {\n return interior.asAccountKey20.key.toString();\n } else {\n throw new Error('Unsupported address type');\n }\n },\n\n fromXTokensEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as XTokensEventData;\n return u8aToHex(decodeAddress(eventData.sender.toString()));\n },\n };\n}\n\nexport function GetMessageId() {\n return {\n fromXcmEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as XcmEventData;\n return eventData.messageId.toHex();\n },\n\n fromXcmpQueue:\n () =>\n (_event: EventRecord, events?: EventRecord[]): string => {\n const xcmpEvent = events?.find(\n (event) =>\n event.event.section === 'xcmpQueue' &&\n event.event.method === 'XcmpMessageSent',\n );\n\n if (!xcmpEvent) {\n throw new Error('XcmpMessageSent event not found');\n }\n\n const eventData = xcmpEvent.event.data as unknown as XcmQueueEventData;\n return eventData.messageHash.toHex();\n },\n };\n}\n\nexport function MatchMessageId() {\n return {\n fromMessageQueueId:\n () =>\n (event: EventRecord, messageId?: string): boolean => {\n if (!messageId) return true;\n\n try {\n const eventData = event.event\n .data as unknown as MessageQueueProcessedData;\n return eventData.id.toString() === messageId;\n } catch {\n return false;\n }\n },\n\n fromXcmpQueueHash:\n () =>\n (event: EventRecord, messageId?: string): boolean => {\n if (!messageId) return true;\n\n try {\n const eventData = event.event.data as unknown as XcmQueueEventData;\n return eventData.messageHash.toString() === messageId;\n } catch {\n return false;\n }\n },\n\n fromEthereumXcmEvent:\n () =>\n (event: EventRecord): string => {\n const eventData = event.event.data as unknown as EthereumXcmEventData;\n return eventData.xcmMsgHash.toHex();\n },\n\n never: () => (): boolean => true, // Always match for cases where messageId is not used\n };\n}\n\nexport function GetIsSuccess() {\n return {\n fromMessageQueueProcessed:\n () =>\n (event: EventRecord): boolean => {\n try {\n const eventData = event.event\n .data as unknown as MessageQueueProcessedData;\n return eventData.success.isTrue;\n } catch {\n return false;\n }\n },\n\n fromXcmpQueueEvent:\n () =>\n (event: EventRecord): boolean => {\n return event.event.method === 'Success';\n },\n\n alwaysTrue: () => (): boolean => true, // Always successful for simple cases\n };\n}\n\nfunction CheckSource() {\n return {\n xcmPallet: (): SourceChecker =>\n createSourceChecker(\n 'xcmPallet',\n 'Sent',\n GetAddress().fromXcmEvent(),\n GetMessageId().fromXcmEvent(),\n ),\n\n polkadotXcm: (): SourceChecker =>\n createSourceChecker(\n 'polkadotXcm',\n 'Sent',\n GetAddress().fromXcmEvent(),\n GetMessageId().fromXcmEvent(),\n ),\n\n polkadotXcmAndXcmpQueue: (): SourceChecker =>\n createSourceChecker(\n 'polkadotXcm',\n 'Sent',\n GetAddress().fromXcmEvent(),\n GetMessageId().fromXcmpQueue(),\n ),\n\n xTokens: (): SourceChecker =>\n createSourceChecker(\n 'xTokens',\n ['TransferredMultiAssets', 'TransferredAssets'],\n GetAddress().fromXTokensEvent(),\n GetMessageId().fromXcmpQueue(),\n ),\n\n bridgeMessages: (): SourceChecker => (events) => {\n const event = events.find(\n (event) =>\n event.event.section === 'bridgeMessages' &&\n event.event.method === 'MessageAccepted',\n );\n\n return event ? { matched: true, event } : { matched: false };\n },\n };\n}\n\nfunction CheckDestination() {\n return {\n messageQueue: (): DestinationChecker =>\n createDestinationChecker(\n 'messageQueue',\n 'Processed',\n MatchMessageId().fromMessageQueueId(),\n GetIsSuccess().fromMessageQueueProcessed(),\n ),\n\n xcmpQueue: (): DestinationChecker => (events, messageId) => {\n // Special handling for xcmpQueue as it needs to check both Success and Fail events\n const messageIdMatcher = MatchMessageId().fromXcmpQueueHash();\n\n const successEvent = events.find((event) => {\n if (\n event.event.section !== 'xcmpQueue' ||\n event.event.method !== 'Success'\n ) {\n return false;\n }\n\n return messageIdMatcher(event, messageId);\n });\n\n const failEvent = events.find((event) => {\n if (\n event.event.section !== 'xcmpQueue' ||\n event.event.method !== 'Fail'\n ) {\n return false;\n }\n\n return messageIdMatcher(event, messageId);\n });\n\n if (!successEvent && !failEvent) {\n return { matched: false, success: false };\n }\n\n return {\n matched: true,\n success: !!successEvent,\n event: successEvent || failEvent,\n };\n },\n\n bridgeMessages: (): DestinationChecker =>\n createDestinationChecker(\n 'bridgeMessages',\n 'MessagesReceived',\n // TODO implement message matching\n MatchMessageId().never(),\n GetIsSuccess().alwaysTrue(),\n ),\n\n ethereumXcm: (): DestinationChecker =>\n createDestinationChecker(\n 'ethereumXcm',\n 'ExecutedFromXcm',\n MatchMessageId().never(),\n GetIsSuccess().alwaysTrue(),\n ),\n };\n}\n\nexport function monitorEvent(): MonitorEventReturn {\n return {\n xcmPallet: () => ({\n messageQueue: () => ({\n checkSource: CheckSource().xcmPallet(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n }),\n\n polkadotXcm: () => ({\n messageQueue: () => ({\n checkSource: CheckSource().polkadotXcm(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n mixedQueue: () => ({\n checkSource: CheckSource().polkadotXcmAndXcmpQueue(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n xcmpQueue: () => ({\n checkSource: CheckSource().polkadotXcmAndXcmpQueue(),\n checkDestination: CheckDestination().xcmpQueue(),\n }),\n }),\n\n xTokens: () => ({\n messageQueue: () => ({\n checkSource: CheckSource().xTokens(),\n checkDestination: CheckDestination().messageQueue(),\n }),\n ethereumXcm: () => ({\n checkSource: CheckSource().xTokens(),\n checkDestination: CheckDestination().ethereumXcm(),\n }),\n }),\n\n bridgeMessages: () => ({\n bridgeMessages: () => ({\n checkSource: CheckSource().bridgeMessages(),\n checkDestination: CheckDestination().bridgeMessages(),\n }),\n }),\n };\n}\n","import type { EventRecord } from '@polkadot/types/interfaces';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type {\n DestinationChecker,\n SourceChecker,\n} from './eventMonitoring.interfaces';\n\nexport const createSourceChecker =\n (\n section: string,\n method: string | string[],\n addressExtractor: (event: EventRecord) => string,\n messageIdExtractor: (event: EventRecord, events?: EventRecord[]) => string,\n ): SourceChecker =>\n (events, sourceAddress) => {\n const decodedSourceAddress = u8aToHex(decodeAddress(sourceAddress));\n const methods = Array.isArray(method) ? method : [method];\n\n const event = events.find((event) => {\n if (\n event.event.section !== section ||\n !methods.includes(event.event.method)\n ) {\n return false;\n }\n\n try {\n const address = addressExtractor(event);\n return address === decodedSourceAddress;\n } catch {\n return false;\n }\n });\n\n if (!event) {\n return { matched: false };\n }\n\n try {\n const messageId = messageIdExtractor(event, events);\n return { matched: true, messageId, event };\n } catch {\n return { matched: true, event }; // Return without messageId if extraction fails\n }\n };\n\nexport const createDestinationChecker =\n (\n section: string,\n method: string | string[],\n matchMessageId: (event: EventRecord, messageId?: string) => boolean,\n getIsSuccess: (event: EventRecord) => boolean,\n ): DestinationChecker =>\n (events, messageId) => {\n const methods = Array.isArray(method) ? method : [method];\n\n const event = events.find((event) => {\n if (\n event.event.section !== section ||\n !methods.includes(event.event.method)\n ) {\n return false;\n }\n\n return matchMessageId(event, messageId);\n });\n\n if (!event) {\n return { matched: false, success: false };\n }\n\n const success = getIsSuccess(event);\n return { matched: true, success, event };\n };\n","import { monitorEvent } from './eventMonitoring/eventMonitoring';\n\nexport function MonitoringBuilder() {\n return {\n monitorEvent,\n };\n}\n","import {\n type AnyChain,\n type AssetAmount,\n EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { SnowbridgeConfig } from '../../snowbridge';\n\nexport function Gateway() {\n const provider = Provider.Snowbridge;\n\n return {\n sendToken: (): MrlConfigBuilder => ({\n provider,\n build: ({ asset, destinationAddress, protocolFee, destination }) =>\n callSendToken(asset, protocolFee, destination, destinationAddress),\n }),\n approveAndSendToken: (): MrlConfigBuilder => ({\n provider,\n build: ({ asset, destinationAddress, protocolFee, destination }) => {\n const requiresApproval = protocolFee && !protocolFee.isSame(asset);\n\n return callSendToken(\n asset,\n protocolFee,\n destination,\n destinationAddress,\n requiresApproval,\n );\n },\n }),\n };\n}\n\nfunction callSendToken(\n asset: AssetAmount,\n protocolFee: AssetAmount | undefined,\n destination: AnyChain,\n destinationAddress: string,\n requiresApproval = false,\n): SnowbridgeConfig {\n if (!protocolFee) {\n throw new Error('Protocol fee is required for Gateway module');\n }\n\n if (!EvmParachain.isAnyParachain(destination)) {\n throw new Error(\n 'Destination must be a Parachain or EvmParachain for sending token with Gateway module',\n );\n }\n\n return new SnowbridgeConfig({\n args: {\n tokenAddress: asset.address as string,\n destinationAddress,\n destinationParaId: destination.parachainId,\n amount: asset.amount,\n bridgeFeeAmount: protocolFee.amount,\n requiresApproval,\n },\n func: 'sendToken',\n });\n}\n","import type {\n AnyChain,\n AnyParachain,\n AssetAmount,\n ChainAsset,\n} from '@moonbeam-network/xcm-types';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { HexString } from '@polkadot/util/types';\nimport type { BuilderParams, ConfigBuilder } from '../builder.interfaces';\nimport type { ContractConfig } from '../contract';\nimport type { ExtrinsicConfig } from '../extrinsic';\nimport type { SnowbridgeConfig } from './providers/snowbridge/snowbridge';\nimport type { WormholeConfig } from './providers/wormhole/wormhole';\n\nexport enum Provider {\n Snowbridge = 'snowbridge',\n Wormhole = 'wormhole',\n}\n\nexport type MrlTransferConfig =\n | ContractConfig\n | ExtrinsicConfig\n | WormholeConfig\n | SnowbridgeConfig;\n\nexport type MrlConfigBuilder = ConfigBuilder<\n MrlTransferConfig,\n MrlBuilderParams\n> & {\n provider?: Provider;\n};\n\nexport type MrlExecuteConfigBuilder = ConfigBuilder<\n ContractConfig,\n MrlExecuteBuilderParams\n>;\n\nexport interface MrlBuilderParams extends BuilderParams<AnyChain> {\n isAutomatic: boolean;\n protocolFee?: AssetAmount;\n moonApi: ApiPromise;\n moonAsset: ChainAsset;\n bridgeChain: AnyParachain;\n bridgeChainGasLimit?: bigint;\n sendOnlyRemoteExecution?: boolean;\n transact?: Transact;\n}\n\nexport interface MrlExecuteBuilderParams {\n bytes?: Uint8Array;\n}\n\nexport interface Transact {\n call: HexString;\n txWeight: {\n refTime: bigint;\n proofSize: bigint;\n };\n}\n","import { Provider } from '../../../MrlBuilder.interfaces';\n\nexport type SnowbridgeFunctions = 'sendToken';\n\nexport interface SnowbridgeFunctionArgs {\n tokenAddress: string;\n destinationAddress: string;\n destinationParaId: number;\n amount: bigint;\n bridgeFeeAmount: bigint;\n requiresApproval: boolean;\n}\n\nexport interface SnowbridgeConfigConstructorParams {\n args: SnowbridgeFunctionArgs;\n func: SnowbridgeFunctions;\n}\n\nexport class SnowbridgeConfig {\n readonly args: SnowbridgeFunctionArgs;\n\n readonly func: SnowbridgeFunctions;\n\n readonly provider = Provider.Snowbridge;\n\n static is(obj: unknown): obj is SnowbridgeConfig {\n return obj instanceof SnowbridgeConfig;\n }\n\n constructor({ args, func }: SnowbridgeConfigConstructorParams) {\n this.args = args;\n this.func = func;\n }\n}\n","import { Gateway } from './Gateway';\n\nexport function contract() {\n return { Gateway };\n}\n","import { ExtrinsicConfig } from '../../../../../types';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\n\nconst pallet = 'ethereumTokenTransfers';\n\nexport function ethereumTokenTransfers() {\n return {\n transferNativeToken: (): MrlConfigBuilder => {\n const func = 'transferNativeToken';\n const provider = Provider.Snowbridge;\n\n return {\n provider,\n build: ({ asset, destinationAddress }) => {\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: () => [asset.amount, destinationAddress],\n });\n },\n };\n },\n };\n}\n","import { EvmChain } from '@moonbeam-network/xcm-types';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { getGlobalConsensusArgs } from './xcmPallet.utils';\n\nconst pallet = 'xcmPallet';\n\nexport function xcmPallet() {\n return {\n transferAssets: () => {\n const func = 'transferAssets';\n const provider = Provider.Snowbridge;\n\n return {\n globalConsensus: (): MrlConfigBuilder => ({\n provider,\n build: ({ asset, destination, destinationAddress }) => {\n if (!EvmChain.is(destination)) {\n throw new Error(\n 'Destination must be an EVM chain for globalConsensus function',\n );\n }\n\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const assets = [\n {\n id: {\n parents: 1,\n interior: {\n X1: [\n {\n GlobalConsensus: {\n Ethereum: { chainId: destination.id },\n },\n },\n ],\n },\n },\n fun: { Fungible: asset.amount },\n },\n ];\n\n return getGlobalConsensusArgs({\n assets,\n destination,\n destinationAddress,\n func: extrinsicFunction,\n });\n },\n });\n },\n }),\n globalConsensusErc20: (): MrlConfigBuilder => ({\n provider,\n build: ({ asset, destination, destinationAddress }) => {\n if (!EvmChain.is(destination)) {\n throw new Error(\n 'Destination must be an EVM chain for globalConsensusErc20 function',\n );\n }\n\n const assetInDestination = destination.getChainAsset(asset);\n\n return new ExtrinsicConfig({\n module: pallet,\n func,\n getArgs: (extrinsicFunction) => {\n const assets = [\n {\n id: {\n parents: 1,\n interior: {\n X2: [\n {\n GlobalConsensus: {\n Ethereum: { chainId: destination.id },\n },\n },\n {\n AccountKey20: {\n network: {\n Ethereum: { chainId: destination.id },\n },\n key: assetInDestination.address,\n },\n },\n ],\n },\n },\n fun: { Fungible: asset.amount },\n },\n ];\n\n return getGlobalConsensusArgs({\n assets,\n destination,\n destinationAddress,\n func: extrinsicFunction,\n });\n },\n });\n },\n }),\n };\n },\n };\n}\n","import type { EvmChain } from '@moonbeam-network/xcm-types';\nimport type { SubmittableExtrinsicFunction } from '@polkadot/api/types';\nimport { getExtrinsicArgumentVersion } from '../../../../../extrinsic/ExtrinsicBuilder.utils';\n\ninterface GetGlobalConsensusArgsParams {\n assets: object[];\n destination: EvmChain;\n destinationAddress: string;\n func?: SubmittableExtrinsicFunction<'promise'>;\n}\n\nexport function getGlobalConsensusArgs({\n assets,\n destination,\n destinationAddress,\n func,\n}: GetGlobalConsensusArgsParams) {\n const version = getExtrinsicArgumentVersion(func);\n\n const dest = {\n [version]: {\n parents: 1,\n interior: {\n X1: [\n {\n GlobalConsensus: {\n Ethereum: { chainId: destination.id },\n },\n },\n ],\n },\n },\n };\n\n const beneficiary = {\n [version]: {\n parents: 0,\n interior: {\n X1: [\n {\n AccountKey20: {\n network: { Ethereum: { chainId: destination.id } },\n key: destinationAddress,\n },\n },\n ],\n },\n },\n };\n\n const assetsArg = {\n [version]: assets,\n };\n\n return [\n dest,\n beneficiary,\n assetsArg,\n 0, // feeAssetItem\n 'Unlimited',\n ];\n}\n","import { ethereumTokenTransfers } from './ethereumTokenTransfer/ethereumTokenTransfers';\nimport { xcmPallet } from './xcmPallet/xcmPallet';\n\nexport function extrinsic() {\n return { ethereumTokenTransfers, xcmPallet };\n}\n","import { contract } from './contract';\nimport { extrinsic } from './extrinsic';\n\nexport * from './snowbridge';\n\nexport function snowbridge() {\n return {\n contract,\n extrinsic,\n };\n}\n","import {\n type AnyParachain,\n type AssetAmount,\n type ChainAsset,\n EvmParachain,\n type Parachain,\n} from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport { type Address, encodeFunctionData, maxUint64 } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport { getPrecompileDestinationInterior } from '../../../../../contract/ContractBuilder.utils';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport {\n buildSendExtrinsic,\n CROSS_CHAIN_FEE,\n} from '../../extrinsic/polkadotXcm/polkadotXcm';\nimport { getAbisForChain } from './abi/abi.helpers';\n\nconst module = 'Batch';\n\nexport function Batch() {\n const provider = Provider.Wormhole;\n\n return {\n transferAssetsAndMessage: (): MrlConfigBuilder => ({\n provider,\n build: ({\n asset,\n destination,\n destinationAddress,\n fee,\n isAutomatic,\n moonAsset,\n bridgeChain,\n moonApi,\n source,\n sourceAddress,\n sourceApi,\n transact,\n }) => {\n if (!EvmParachain.is(source)) {\n throw new Error('Source chain needs to be an EVMParachain');\n }\n\n if (!sourceApi) {\n throw new Error('Source API needs to be defined');\n }\n\n if (\n !source.contracts?.Xtokens ||\n !source.contracts?.XcmUtils ||\n !source.contracts?.Batch\n ) {\n throw new Error(\n 'Source chain needs to have the Xtokens, XcmUtils and Batch contract addresses configured',\n );\n }\n\n const subMappedAddress = evmToAddress(sourceAddress);\n\n const { BatchAbi, XcmUtilsAbi, XtokensAbi } = getAbisForChain(source);\n\n const { address20: computedOriginAccount } =\n getMultilocationDerivedAddresses({\n address: subMappedAddress,\n paraId: source.parachainId,\n isParents: true,\n });\n\n const send = buildSendExtrinsic({\n asset,\n destination,\n destinationAddress,\n computedOriginAccount,\n fee,\n isAutomatic,\n moonAsset,\n bridgeChain,\n moonApi,\n source,\n sourceAddress,\n sourceApi,\n transact,\n });\n // we keep only the message\n const encodedXcmMessage = send.args[1].toHex();\n\n const { destinationParachain, destinationParachainAndAddress } =\n getDestinationInHex(bridgeChain, computedOriginAccount);\n\n const { currencies, feeItem } = getCurrencies({\n source,\n moonAsset,\n asset,\n });\n const weight = maxUint64;\n\n const multiTransferTxData = encodeFunctionData({\n abi: XtokensAbi,\n functionName: 'transferMultiCurrencies',\n args: [currencies, feeItem, destinationParachainAndAddress, weight],\n });\n\n const xcmSendTxData = encodeFunctionData({\n abi: XcmUtilsAbi,\n functionName: 'xcmSend',\n args: [destinationParachain, encodedXcmMessage],\n });\n\n return new ContractConfig({\n address: source.contracts.Batch,\n abi: BatchAbi,\n args: [\n [source.contracts.Xtokens, source.contracts.XcmUtils],\n [],\n [multiTransferTxData, xcmSendTxData],\n [],\n ],\n func: 'batchAll',\n module,\n });\n },\n }),\n };\n}\n\nfunction getDestinationInHex(\n bridgeChain: AnyParachain,\n computedOriginAccount: string,\n) {\n const destinationParachain = {\n parents: 1,\n interior: getPrecompileDestinationInterior(bridgeChain),\n } as const;\n\n const destinationParachainAndAddress = {\n parents: 1,\n interior: getPrecompileDestinationInterior(\n bridgeChain,\n computedOriginAccount,\n ),\n } as const;\n\n return {\n destinationParachain,\n destinationParachainAndAddress,\n };\n}\n\ninterface GetCurrenciesParams {\n source: Parachain | EvmParachain;\n moonAsset: ChainAsset;\n asset: AssetAmount;\n}\n\nfunction getCurrencies({ source, moonAsset, asset }: GetCurrenciesParams) {\n const currencies = [\n {\n currencyAddress: source.getChainAsset(moonAsset).address as Address,\n amount: CROSS_CHAIN_FEE,\n },\n {\n currencyAddress: asset.address as Address,\n amount: asset.amount,\n },\n ];\n const feeItem = 0; // moonAsset\n return { currencies, feeItem };\n}\n","import {\n type AnyParachain,\n AssetAmount,\n Parachain,\n} from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type { SubmittableExtrinsic } from '@polkadot/api/types';\nimport type { ISubmittableResult } from '@polkadot/types/types';\nimport { ExtrinsicBuilder } from '../../../../../extrinsic/ExtrinsicBuilder';\nimport {\n getExtrinsicArgumentVersion,\n normalizeConcrete,\n normalizeX1,\n} from '../../../../../extrinsic/ExtrinsicBuilder.utils';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport {\n type MrlBuilderParams,\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\n\n// TODO: these have to come from the configs\nconst BUY_EXECUTION_FEE = 100_000_000_000_000_000n; // bridgeChainFee\nexport const CROSS_CHAIN_FEE = 100_000_000_000_000_000n; // fee for processing the xcm message in moon chain\n\nexport function polkadotXcm() {\n const provider = Provider.Wormhole;\n\n return {\n send: (): MrlConfigBuilder => ({\n provider,\n build: ({\n asset,\n destination,\n destinationAddress,\n fee,\n isAutomatic,\n moonAsset,\n bridgeChain,\n moonApi,\n sendOnlyRemoteExecution,\n source,\n sourceAddress,\n sourceApi,\n transact,\n }) => {\n if (!destination.wh?.name) {\n throw new Error('Destination chain does not have a wormhole name');\n }\n\n if (!sourceApi) {\n throw new Error('Source API needs to be defined');\n }\n\n if (!Parachain.is(source)) {\n throw new Error('Source chain needs to be a parachain');\n }\n\n const { address20: computedOriginAccount } =\n getMultilocationDerivedAddresses({\n address: sourceAddress,\n paraId: source.parachainId,\n isParents: true,\n });\n\n const assetTransferTxs = getAssetTransferTxs({\n asset,\n computedOriginAccount,\n destination,\n destinationAddress,\n fee,\n isAutomatic,\n moonApi,\n moonAsset,\n bridgeChain,\n source,\n sourceAddress,\n sourceApi,\n });\n\n const send = buildSendExtrinsic({\n asset,\n destination,\n destinationAddress,\n computedOriginAccount,\n fee,\n isAutomatic,\n moonAsset,\n bridgeChain,\n moonApi,\n source,\n sourceAddress,\n sourceApi,\n transact,\n });\n\n const transactionsToSend = sendOnlyRemoteExecution\n ? [send]\n : [...assetTransferTxs, send];\n\n return new ExtrinsicConfig({\n module: 'utility',\n func: 'batchAll',\n getArgs: () => [transactionsToSend],\n });\n },\n }),\n };\n}\n\ninterface HelperFunctionParams extends MrlBuilderParams {\n computedOriginAccount: string;\n source: AnyParachain;\n sourceApi: ApiPromise;\n}\n\nexport function buildSendExtrinsic({\n computedOriginAccount,\n moonAsset,\n bridgeChain,\n sourceApi,\n transact,\n}: HelperFunctionParams) {\n if (!transact) {\n throw new Error('Transact params are required');\n }\n\n const version = getExtrinsicArgumentVersion(sourceApi.tx.polkadotXcm.send);\n\n return sourceApi.tx.polkadotXcm.send(\n {\n [version]: normalizeX1(version, {\n parents: 1,\n interior: {\n X1: { Parachain: bridgeChain.parachainId },\n },\n }),\n },\n {\n [version]: [\n {\n WithdrawAsset: [\n {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance: moonAsset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: { Fungible: BUY_EXECUTION_FEE },\n },\n ],\n },\n {\n BuyExecution: {\n fees: {\n id: normalizeConcrete(\n version,\n normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n PalletInstance: moonAsset.getAssetPalletInstance(),\n },\n },\n }),\n ),\n fun: { Fungible: BUY_EXECUTION_FEE },\n },\n weightLimit: 'Unlimited',\n },\n },\n {\n Transact: {\n originKind: 'SovereignAccount',\n requireWeightAtMost: {\n refTime: transact.txWeight.refTime,\n proofSize: transact.txWeight.proofSize,\n },\n call: {\n encoded: transact.call,\n },\n },\n },\n {\n SetAppendix: [\n { RefundSurplus: {} },\n {\n DepositAsset: {\n assets: { Wild: { AllCounted: 1 } },\n beneficiary: normalizeX1(version, {\n parents: 0,\n interior: {\n X1: {\n AccountKey20: { key: computedOriginAccount },\n },\n },\n }),\n },\n },\n ],\n },\n ],\n },\n );\n}\n\nfunction getAssetTransferTxs({\n asset,\n computedOriginAccount,\n fee,\n moonApi,\n moonAsset,\n bridgeChain,\n source,\n sourceAddress,\n sourceApi,\n}: HelperFunctionParams): SubmittableExtrinsic<\n 'promise',\n ISubmittableResult\n>[] {\n const { transfer, transferMulticurrencies } = sourceApi.tx.xTokens;\n const transferBuilder = ExtrinsicBuilder().xTokens().transfer();\n const transferMulticurrenciesBuilder = ExtrinsicBuilder()\n .xTokens()\n .transferMultiCurrencies();\n /**\n * TODO here we should compare the asset with the cross chain fee asset.\n * For example, FTM cannot pay for fees in Moonbase while AGNG can, so for FTM we have to send a transferMulticurrencies\n * This \"if\" is a workaround, change when we implement properly the concept of cross-chain fee (different from bridgeChainFee)\n */\n if (asset.isSame(fee)) {\n const assetTransferTx = transfer(\n ...transferBuilder\n .build({\n asset: asset.copyWith({\n // TODO for the moment this is only applicable to peaq, AGNG pays for fees and we have to include the cross chain fee\n // for this we have to add a new concept in the config (Cross Chain Fee), and get the value from there\n amount: asset.amount + 10n * CROSS_CHAIN_FEE,\n }),\n destination: bridgeChain,\n destinationAddress: computedOriginAccount,\n destinationApi: moonApi,\n fee,\n source: source,\n sourceAddress,\n sourceApi,\n })\n .getArgs(transfer),\n );\n const feeAssetTransferTx = transfer(\n ...transferBuilder\n .build({\n asset: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n }),\n destination: bridgeChain,\n destinationAddress: computedOriginAccount,\n destinationApi: moonApi,\n fee,\n source: source,\n sourceAddress,\n sourceApi,\n })\n .getArgs(transfer),\n );\n return [assetTransferTx, feeAssetTransferTx];\n }\n const multiCurrenciesTransferTx = transferMulticurrencies(\n ...transferMulticurrenciesBuilder\n .build({\n asset,\n destination: bridgeChain,\n destinationAddress: computedOriginAccount,\n destinationApi: moonApi,\n fee: AssetAmount.fromChainAsset(source.getChainAsset(moonAsset), {\n amount: CROSS_CHAIN_FEE + BUY_EXECUTION_FEE,\n }),\n source: source as AnyParachain,\n sourceAddress,\n sourceApi,\n })\n .getArgs(transferMulticurrencies),\n );\n return [multiCurrenciesTransferTx];\n}\n","export const PEAQ_BATCH_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallFailed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallSucceeded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSome',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSomeUntilFailure',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const PEAQ_XCM_UTILS_ABI = [\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XcmUtils.Multilocation',\n name: 'multilocation',\n type: 'tuple',\n },\n ],\n name: 'getUnitsPerSecond',\n outputs: [\n {\n internalType: 'uint256',\n name: 'unitsPerSecond',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'message',\n type: 'bytes',\n },\n ],\n name: 'weightMessage',\n outputs: [\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'message',\n type: 'bytes',\n },\n {\n internalType: 'uint64',\n name: 'maxWeight',\n type: 'uint64',\n },\n ],\n name: 'xcmExecute',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct XcmUtils.Multilocation',\n name: 'dest',\n type: 'tuple',\n },\n {\n internalType: 'bytes',\n name: 'message',\n type: 'bytes',\n },\n ],\n name: 'xcmSend',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const PEAQ_XTOKENS_ABI = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transfer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'location',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Xtokens.MultiAsset[]',\n name: 'assets',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeItem',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiAssets',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n internalType: 'struct Xtokens.Currency[]',\n name: 'currencies',\n type: 'tuple[]',\n },\n {\n internalType: 'uint32',\n name: 'feeItem',\n type: 'uint32',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiCurrencies',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'asset',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiasset',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'asset',\n type: 'tuple',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferMultiassetWithFee',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'currencyAddress',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n {\n components: [\n {\n internalType: 'uint8',\n name: 'parents',\n type: 'uint8',\n },\n {\n internalType: 'bytes[]',\n name: 'interior',\n type: 'bytes[]',\n },\n ],\n internalType: 'struct Xtokens.Multilocation',\n name: 'destination',\n type: 'tuple',\n },\n {\n internalType: 'uint64',\n name: 'weight',\n type: 'uint64',\n },\n ],\n name: 'transferWithFee',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import type { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { PEAQ_BATCH_ABI } from './peaq/PeaqBatchContractAbi';\nimport { PEAQ_XCM_UTILS_ABI } from './peaq/PeaqXcmUtilsContractAbi';\nimport { PEAQ_XTOKENS_ABI } from './peaq/PeaqXtokensContractAbi';\n\nexport function getAbisForChain(_: EvmParachain) {\n // TODO when we add more chains, find a way to handle Abis for the different chains, if the Abis differ\n return {\n BatchAbi: PEAQ_BATCH_ABI,\n XcmUtilsAbi: PEAQ_XCM_UTILS_ABI,\n XtokensAbi: PEAQ_XTOKENS_ABI,\n };\n}\n","import { u8aToHex } from '@polkadot/util';\nimport { ContractConfig } from '../../../../../contract';\nimport type { MrlExecuteConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport { GMP_ABI } from './GmpAbi';\n\nconst module = 'GMP';\n\nexport const GMP_CONTRACT_ADDRESS =\n '0x0000000000000000000000000000000000000816';\n\nexport function Gmp() {\n return {\n wormholeTransferERC20: (): MrlExecuteConfigBuilder => ({\n build: ({ bytes }) => {\n const hex = u8aToHex(bytes);\n\n return new ContractConfig({\n address: GMP_CONTRACT_ADDRESS,\n abi: GMP_ABI,\n args: [hex],\n func: 'wormholeTransferERC20',\n module,\n });\n },\n }),\n };\n}\n","export const GMP_ABI = [\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'vaa',\n type: 'bytes',\n },\n ],\n name: 'wormholeTransferERC20',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { wormholeFactory } from '../../wormhole';\nimport { TOKEN_BRIDGE_ABI } from './TokenBridgeAbi';\n\nconst module = 'TokenBridge';\n\nexport function TokenBridge() {\n const provider = Provider.Wormhole;\n\n return {\n transferTokens: (): MrlConfigBuilder => ({\n provider,\n build: ({ asset, destination, destinationAddress, bridgeChain }) => {\n const wh = wormholeFactory(bridgeChain);\n const whDestination = wh.getChain(destination.getWormholeName()).config\n .chainId;\n\n const tokenAddressOnBridgeChain = bridgeChain.getChainAsset(asset)\n .address as Address | undefined;\n\n if (!tokenAddressOnBridgeChain) {\n throw new Error(\n `Asset ${asset.symbol} does not have a token address on chain ${bridgeChain.name}`,\n );\n }\n\n const destinationAddress32bytes = convertAddressTo32Bytes(\n destinationAddress,\n ) as Address;\n const tokenAmountOnBridgeChain = asset.convertDecimals(\n bridgeChain.getChainAsset(asset).decimals,\n ).amount;\n\n const contractAddress =\n wh.getChain('Moonbeam').config.contracts.tokenBridge;\n\n if (!contractAddress) {\n throw new Error(`Wormhole address not found for ${bridgeChain.name}`);\n }\n\n return new ContractConfig({\n address: contractAddress,\n abi: TOKEN_BRIDGE_ABI,\n args: [\n tokenAddressOnBridgeChain,\n tokenAmountOnBridgeChain,\n whDestination,\n destinationAddress32bytes,\n 0n,\n 0,\n ],\n func: 'transferTokens',\n module,\n });\n },\n }),\n };\n}\n","import type {\n ChainAddress,\n TokenId,\n TokenTransfer,\n} from '@wormhole-foundation/sdk-connect';\nimport { Provider } from '../../../MrlBuilder.interfaces';\n\nexport enum Protocols {\n TokenBridge = 'TokenBridge',\n AutomaticTokenBridge = 'AutomaticTokenBridge',\n ExecutorTokenBridge = 'ExecutorTokenBridge',\n}\n\nexport type WormholeTransferFunctions = 'tokenTransfer';\n\nexport interface WormholeFunctionArgs {\n token: TokenId;\n amount: bigint;\n from: ChainAddress;\n to: ChainAddress;\n protocol: TokenTransfer.Protocol;\n payload?: Uint8Array;\n}\n\nexport interface WormholeConfigConstructorParams {\n args: WormholeFunctionArgs;\n func: WormholeTransferFunctions;\n}\n\nexport class WormholeConfig {\n readonly args: WormholeFunctionArgs;\n\n readonly func: WormholeTransferFunctions;\n\n readonly provider = Provider.Wormhole;\n\n static is(obj: unknown): obj is WormholeConfig {\n return obj instanceof WormholeConfig;\n }\n\n constructor({ args, func }: WormholeConfigConstructorParams) {\n this.args = args;\n this.func = func;\n }\n}\n","import { EvmChain, EvmParachain, Parachain } from '@moonbeam-network/xcm-types';\nimport { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils';\nimport { evmToAddress } from '@polkadot/util-crypto/address';\nimport { Wormhole } from '@wormhole-foundation/sdk-connect';\nimport {\n getExtrinsicAccount,\n getExtrinsicArgumentVersion,\n} from '../../../../extrinsic/ExtrinsicBuilder.utils';\nimport {\n type MrlBuilderParams,\n type MrlConfigBuilder,\n Provider,\n} from '../../../MrlBuilder.interfaces';\nimport { GMP_CONTRACT_ADDRESS } from '../contract/Gmp';\nimport { Protocols, WormholeConfig } from './WormholeConfig';\nimport { wormholeFactory } from './wormholeFactory';\n\nexport function wormhole() {\n const provider = Provider.Wormhole;\n\n return {\n tokenTransfer: (): MrlConfigBuilder => ({\n provider,\n build: ({\n asset,\n destination,\n destinationAddress,\n isAutomatic,\n moonApi,\n bridgeChain: moonChain,\n source,\n sourceAddress,\n }): WormholeConfig => {\n const isSourceParachain = Parachain.is(source);\n const isDestinationMoonChain = destination.isEqual(moonChain);\n const isDestinationEvmChain = EvmChain.is(destination);\n const isNativeAsset = asset.isSame(\n isDestinationEvmChain ? moonChain.nativeAsset : source.nativeAsset,\n );\n const tokenAddress = isNativeAsset\n ? 'native'\n : isDestinationEvmChain\n ? moonChain.getChainAsset(asset).address\n : asset.address;\n\n const { address20: computedOriginAccount } =\n getMultilocationDerivedAddresses({\n address: sourceAddress,\n paraId: isSourceParachain ? source.parachainId : undefined,\n isParents: true,\n });\n\n if (!tokenAddress) {\n throw new Error(`Asset ${asset.key} has no address`);\n }\n\n const wh = wormholeFactory(source);\n const whSource = isDestinationEvmChain\n ? wh.getChain(moonChain.getWormholeName())\n : wh.getChain(source.getWormholeName());\n const whDestination = isDestinationEvmChain\n ? wh.getChain(destination.getWormholeName())\n : wh.getChain(moonChain.getWormholeName());\n const whAsset = Wormhole.tokenId(whSource.chain, tokenAddress);\n const whSourceAddress = Wormhole.chainAddress(\n whSource.chain,\n isDestinationEvmChain ? computedOriginAccount : sourceAddress,\n );\n const whDestinationAddress = Wormhole.chainAddress(\n whDestination.chain,\n isDestinationMoonChain || isDestinationEvmChain\n ? destinationAddress\n : GMP_CONTRACT_ADDRESS,\n );\n\n return new WormholeConfig({\n args: {\n token: whAsset,\n amount: asset.amount,\n from: whSourceAddress,\n to: whDestinationAddress,\n protocol: isAutomatic\n ? Protocols.AutomaticTokenBridge\n : Protocols.TokenBridge,\n payload:\n isDestinationMoonChain || isDestinationEvmChain\n ? undefined\n : getPayload({ destination, destinationAddress, moonApi }),\n },\n func: 'tokenTransfer',\n });\n },\n }),\n };\n}\n\n/*\n * Extrinsic to GMP precompile\n * https://docs.moonbeam.network/builders/ethereum/precompiles/interoperability/gmp/\n */\nexport function getPayload({\n moonApi,\n destination,\n destinationAddress,\n}: Pick<MrlBuilderParams, 'destination' | 'destinationAddress' | 'moonApi'>):\n | Uint8Array\n | undefined {\n if (!EvmParachain.isAnyParachain(destination)) {\n throw new Error(\n `Destination ${destination.name} is not a Parachain or EvmParachain`,\n );\n }\n\n const isEvmDestination = EvmParachain.is(destination);\n\n const version = getExtrinsicArgumentVersion(moonApi.tx.polkadotXcm.send);\n\n const multilocation = moonApi.createType('XcmVersionedLocation', {\n [version]: {\n parents: 1,\n interior: {\n X2: [\n {\n Parachain: destination.parachainId,\n },\n getExtrinsicAccount(\n isEvmDestination\n ? evmToAddress(destinationAddress)\n : destinationAddress,\n ),\n ],\n },\n },\n });\n const action = moonApi.createType('XcmRoutingUserAction', {\n destination: multilocation,\n });\n const versioned = moonApi.createType('VersionedUserAction', {\n V1: action,\n });\n\n return versioned.toU8a();\n}\n","import { type AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { Wormhole } from '@wormhole-foundation/sdk-connect';\nimport { EvmPlatform } from '@wormhole-foundation/sdk-evm';\n\nexport function wormholeFactory(chain: AnyChain) {\n return new Wormhole(\n chain.isTestChain ? 'Testnet' : 'Mainnet',\n [EvmPlatform],\n EvmParachain.isAnyEvmChain(chain) && chain.wh\n ? {\n chains: {\n [chain.wh.name as string]: {\n rpc: chain.rpc,\n },\n },\n }\n : undefined,\n );\n}\n","export const TOKEN_BRIDGE_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'address',\n name: 'previousAdmin',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'newAdmin',\n type: 'address',\n },\n ],\n name: 'AdminChanged',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'beacon',\n type: 'address',\n },\n ],\n name: 'BeaconUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'oldContract',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newContract',\n type: 'address',\n },\n ],\n name: 'ContractUpgraded',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'implementation',\n type: 'address',\n },\n ],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [],\n name: 'WETH',\n outputs: [\n {\n internalType: 'contract IWETH',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'chainId_',\n type: 'uint16',\n },\n ],\n name: 'bridgeContracts',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'chainId',\n outputs: [\n {\n internalType: 'uint16',\n name: '',\n type: 'uint16',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'evmChainId',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'finality',\n outputs: [\n {\n internalType: 'uint8',\n name: '',\n type: 'uint8',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'hash',\n type: 'bytes32',\n },\n ],\n name: 'governanceActionIsConsumed',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'governanceChainId',\n outputs: [\n {\n internalType: 'uint16',\n name: '',\n type: 'uint16',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'governanceContract',\n outputs: [\n {\n internalType: 'bytes32',\n name: '',\n type: 'bytes32',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'isFork',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'impl',\n type: 'address',\n },\n ],\n name: 'isInitialized',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32',\n name: 'hash',\n type: 'bytes32',\n },\n ],\n name: 'isTransferCompleted',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'isWrappedAsset',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n name: 'outstandingBridged',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedRecoverChainId',\n type: 'bytes',\n },\n ],\n name: 'parseRecoverChainId',\n outputs: [\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'module',\n type: 'bytes32',\n },\n {\n internalType: 'uint8',\n name: 'action',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'evmChainId',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'newChainId',\n type: 'uint16',\n },\n ],\n internalType: 'struct BridgeStructs.RecoverChainId',\n name: 'rci',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseRegisterChain',\n outputs: [\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'module',\n type: 'bytes32',\n },\n {\n internalType: 'uint8',\n name: 'action',\n type: 'uint8',\n },\n {\n internalType: 'uint16',\n name: 'chainId',\n type: 'uint16',\n },\n {\n internalType: 'uint16',\n name: 'emitterChainID',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'emitterAddress',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.RegisterChain',\n name: 'chain',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseUpgrade',\n outputs: [\n {\n components: [\n {\n internalType: 'bytes32',\n name: 'module',\n type: 'bytes32',\n },\n {\n internalType: 'uint8',\n name: 'action',\n type: 'uint8',\n },\n {\n internalType: 'uint16',\n name: 'chainId',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'newContract',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.UpgradeContract',\n name: 'chain',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVM',\n type: 'bytes',\n },\n ],\n name: 'registerChain',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVM',\n type: 'bytes',\n },\n ],\n name: 'submitRecoverChainId',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'tokenImplementation',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVM',\n type: 'bytes',\n },\n ],\n name: 'upgrade',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'wormhole',\n outputs: [\n {\n internalType: 'contract IWormhole',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'tokenChainId',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n ],\n name: 'wrappedAsset',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n stateMutability: 'payable',\n type: 'receive',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'tokenAddress',\n type: 'address',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n ],\n name: 'attestToken',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'arbiterFee',\n type: 'uint256',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n ],\n name: 'wrapAndTransferETH',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n name: 'wrapAndTransferETHWithPayload',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint256',\n name: 'arbiterFee',\n type: 'uint256',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n ],\n name: 'transferTokens',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'recipientChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'recipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'nonce',\n type: 'uint32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n name: 'transferTokensWithPayload',\n outputs: [\n {\n internalType: 'uint64',\n name: 'sequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'updateWrapped',\n outputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'createWrapped',\n outputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransferWithPayload',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransferAndUnwrapETHWithPayload',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransfer',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encodedVm',\n type: 'bytes',\n },\n ],\n name: 'completeTransferAndUnwrapETH',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'symbol',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 'name',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.AssetMeta',\n name: 'meta',\n type: 'tuple',\n },\n ],\n name: 'encodeAssetMeta',\n outputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n internalType: 'struct BridgeStructs.Transfer',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n name: 'encodeTransfer',\n outputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'fromAddress',\n type: 'bytes32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n internalType: 'struct BridgeStructs.TransferWithPayload',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n name: 'encodeTransferWithPayload',\n outputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parsePayloadID',\n outputs: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseAssetMeta',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'symbol',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 'name',\n type: 'bytes32',\n },\n ],\n internalType: 'struct BridgeStructs.AssetMeta',\n name: 'meta',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseTransfer',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n internalType: 'struct BridgeStructs.Transfer',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: 'parseTransferWithPayload',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'fromAddress',\n type: 'bytes32',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n internalType: 'struct BridgeStructs.TransferWithPayload',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes',\n name: 'encoded',\n type: 'bytes',\n },\n ],\n name: '_parseTransferCommon',\n outputs: [\n {\n components: [\n {\n internalType: 'uint8',\n name: 'payloadID',\n type: 'uint8',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes32',\n name: 'tokenAddress',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'tokenChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'to',\n type: 'bytes32',\n },\n {\n internalType: 'uint16',\n name: 'toChain',\n type: 'uint16',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n internalType: 'struct BridgeStructs.Transfer',\n name: 'transfer',\n type: 'tuple',\n },\n ],\n stateMutability: 'pure',\n type: 'function',\n },\n] as const;\n","import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils';\nimport type { Address } from 'viem';\nimport { ContractConfig } from '../../../../../contract';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { wormholeFactory } from '../../wormhole';\nimport { TOKEN_BRIDGE_RELAYER_ABI } from './TokenBridgeRelayerAbi';\n\nconst module = 'TokenBridgeRelayer';\n\nexport function TokenBridgeRelayer() {\n const provider = Provider.Wormhole;\n\n return {\n transferTokensWithRelay: (): MrlConfigBuilder => ({\n provider,\n build: ({ asset, destination, destinationAddress, bridgeChain }) => {\n const wh = wormholeFactory(bridgeChain);\n const whDestination = wh.getChain(destination.getWormholeName()).config\n .chainId;\n\n const tokenAddressOnBridgeChain = bridgeChain.getChainAsset(asset)\n .address as Address | undefined;\n\n if (!tokenAddressOnBridgeChain) {\n throw new Error(\n `Asset ${asset.symbol} does not have a token address on chain ${bridgeChain.name}`,\n );\n }\n\n const destinationAddress32bytes = convertAddressTo32Bytes(\n destinationAddress,\n ) as Address;\n const tokenAmountOnBridgeChain = asset.convertDecimals(\n bridgeChain.getChainAsset(asset).decimals,\n ).amount;\n\n const contractAddress =\n wh.getChain('Moonbeam').config.contracts.tokenBridgeRelayer;\n\n if (!contractAddress) {\n throw new Error(`Wormhole address not found for ${bridgeChain.name}`);\n }\n\n return new ContractConfig({\n address: contractAddress,\n abi: TOKEN_BRIDGE_RELAYER_ABI,\n args: [\n tokenAddressOnBridgeChain,\n tokenAmountOnBridgeChain,\n 0,\n whDestination,\n destinationAddress32bytes,\n 0,\n ],\n func: 'transferTokensWithRelay',\n module,\n });\n },\n }),\n };\n}\n","export const TOKEN_BRIDGE_RELAYER_ABI = [\n {\n inputs: [\n {\n internalType: 'uint16',\n name: 'targetChainId',\n type: 'uint16',\n },\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint8',\n name: 'decimals',\n type: 'uint8',\n },\n ],\n name: 'calculateRelayerFee',\n outputs: [\n {\n internalType: 'uint256',\n name: 'feeInTokenDenomination',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'toNativeTokenAmount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'targetChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'targetRecipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'batchId',\n type: 'uint32',\n },\n ],\n name: 'transferTokensWithRelay',\n outputs: [\n {\n internalType: 'uint64',\n name: 'messageSequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'toNativeTokenAmount',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'targetChain',\n type: 'uint16',\n },\n {\n internalType: 'bytes32',\n name: 'targetRecipient',\n type: 'bytes32',\n },\n {\n internalType: 'uint32',\n name: 'batchId',\n type: 'uint32',\n },\n ],\n name: 'wrapAndTransferEthWithRelay',\n outputs: [\n {\n internalType: 'uint64',\n name: 'messageSequence',\n type: 'uint64',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n] as const;\n","import { Batch } from './Batch';\nimport { Gmp } from './Gmp';\nimport { TokenBridge } from './TokenBridge';\nimport { TokenBridgeRelayer } from './TokenBridgeRelayer';\n\nexport function contract() {\n return { Batch, Gmp, TokenBridge, TokenBridgeRelayer };\n}\n","import { type Address, encodeFunctionData } from 'viem';\nimport { ERC20_ABI } from '../../../../../balance/Erc20Abi';\nimport type { ContractConfig } from '../../../../../types/evm/ContractConfig';\nimport { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig';\nimport { BATCH_CONTRACT_ADDRESS } from '../../../../MrlBuilder.constants';\nimport {\n type MrlConfigBuilder,\n Provider,\n} from '../../../../MrlBuilder.interfaces';\nimport { contract as ContractBuilder } from '../../contract';\nimport { BATCH_CONTRACT_ABI } from './BatchContractAbi';\n\nexport function ethereumXcm() {\n const provider = Provider.Wormhole;\n\n return {\n transact: (): MrlConfigBuilder => ({\n provider,\n build: (params) => {\n const { asset, isAutomatic, bridgeChain, bridgeChainGasLimit } = params;\n\n if (!bridgeChainGasLimit) {\n throw new Error('bridgeChainGasLimit must be defined');\n }\n\n const tokenAddressOnBridgeChain = bridgeChain.getChainAsset(asset)\n .address as Address | undefined;\n\n if (!tokenAddressOnBridgeChain) {\n throw new Error(\n `Asset ${asset.symbol} does not have a token address on chain ${bridgeChain.name}`,\n );\n }\n\n const tokenAmountOnBridgeChain = asset.convertDecimals(\n bridgeChain.getChainAsset(asset).decimals,\n ).amount;\n\n const contract = (\n isAutomatic\n ? ContractBuilder()\n .TokenBridgeRelayer()\n .transferTokensWithRelay()\n .build(params)\n : ContractBuilder().TokenBridge().transferTokens().build(params)\n ) as ContractConfig;\n\n const approveTx = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: 'approve',\n args: [contract.address as Address, tokenAmountOnBridgeChain],\n });\n\n const batchAll = encodeFunctionData({\n abi: BATCH_CONTRACT_ABI,\n functionName: 'batchAll',\n args: [\n [tokenAddressOnBridgeChain, contract.address as Address],\n [0n, 0n], // Value to send for each call\n [approveTx, contract.encodeFunctionData()], // Call data for each call\n [], // Gas limit for each call\n ],\n });\n\n return new ExtrinsicConfig({\n module: 'ethereumXcm',\n func: 'transact',\n getArgs: () => [\n {\n V2: {\n gasLimit: bridgeChainGasLimit,\n action: {\n Call: BATCH_CONTRACT_ADDRESS,\n },\n value: 0,\n input: batchAll,\n },\n },\n ],\n });\n },\n }),\n };\n}\n","export const BATCH_CONTRACT_ADDRESS =\n '0x0000000000000000000000000000000000000808';\n","export const BATCH_CONTRACT_ABI = [\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallFailed',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint256',\n name: 'index',\n type: 'uint256',\n },\n ],\n name: 'SubcallSucceeded',\n type: 'event',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchAll',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSome',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address[]',\n name: 'to',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'value',\n type: 'uint256[]',\n },\n {\n internalType: 'bytes[]',\n name: 'callData',\n type: 'bytes[]',\n },\n {\n internalType: 'uint64[]',\n name: 'gasLimit',\n type: 'uint64[]',\n },\n ],\n name: 'batchSomeUntilFailure',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","import { ethereumXcm } from './ethereumXcm/ethereumXcm';\nimport { polkadotXcm } from './polkadotXcm/polkadotXcm';\n\nexport function extrinsic() {\n return { ethereumXcm, polkadotXcm };\n}\n","import { contract } from './contract';\nimport { extrinsic } from './extrinsic';\nimport { wormhole as whBuilder } from './wormhole';\n\nexport * from './extrinsic/ethereumXcm/BatchContractAbi';\nexport * from './wormhole/WormholeConfig';\nexport * from './wormhole/wormholeFactory';\n\nexport function wormhole() {\n return {\n contract,\n extrinsic,\n wormhole: whBuilder,\n };\n}\n","import { snowbridge } from './providers/snowbridge';\nimport { wormhole } from './providers/wormhole';\n\nexport function MrlBuilder() {\n return {\n snowbridge,\n wormhole,\n };\n}\n"],"mappings":"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","names":["XcmVersion","module","pallet","evmToAddress","u8aToHex","decodeAddress","TransferType","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","foreignAssets","evmToAddress","pallet","assets","pallet","pallet","pallet","EvmParachain","EvmParachain","EvmParachain","isEthAddress","u8aToHex","decodeAddress","isXcmV4","EvmParachain","assets","isEthAddress","u8aToHex","decodeAddress","assets","assets","u8aToHex","decodeAddress","u8aToHex","decodeAddress","event","u8aToHex","decodeAddress","event","EvmParachain","Provider","EvmParachain","pallet","EvmChain","assets","pallet","xcmPallet","EvmChain","assets","xcmPallet","EvmParachain","getMultilocationDerivedAddresses","evmToAddress","encodeFunctionData","Parachain","polkadotXcm","Parachain","EvmParachain","evmToAddress","getMultilocationDerivedAddresses","encodeFunctionData","u8aToHex","module","u8aToHex","Protocols","EvmChain","EvmParachain","Parachain","getMultilocationDerivedAddresses","evmToAddress","Wormhole","EvmParachain","Parachain","EvmChain","getMultilocationDerivedAddresses","Wormhole","EvmParachain","evmToAddress","module","convertAddressTo32Bytes","module","convertAddressTo32Bytes","contract","encodeFunctionData","contract","encodeFunctionData","extrinsic","polkadotXcm","wormhole","contract","extrinsic","wormhole"]}