{"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/contracts/XcmPrecompile/XcmPrecompileAbi.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/builder.utils.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.util.ts","../src/extrinsic/pallets/polkadotXcm/polkadotXcm.ts","../src/extrinsic/pallets/xTokens/xTokens.utils.ts","../src/extrinsic/pallets/xTokens/xTokens.ts","../src/extrinsic/pallets/xTransfer/xTransfer.ts","../src/extrinsic/pallets/xcmPallet/xcmPallet.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/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/wormhole.ts","../src/mrl/providers/wormhole/wormhole/WormholeConfig.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 './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: (): 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  };\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 { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport { ContractConfig } from '../../../types';\nimport type { ContractConfigBuilder } from '../../ContractBuilder.interfaces';\nimport { XCM_ABI } from './XcmPrecompileAbi';\n\nconst XCM_PRECOMPILE_ADDRESS = '0x000000000000000000000000000000000000081A';\n\nexport function XcmPrecompile() {\n  return {\n    transferAssetsToPara20: (): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination }) => {\n        return new ContractConfig({\n          address: XCM_PRECOMPILE_ADDRESS,\n          abi: XCM_ABI,\n          args: [\n            destination.parachainId,\n            destinationAddress,\n            [[asset.address, asset.amount]],\n            0,\n          ],\n          func: 'transferAssetsToPara20',\n          module: 'Xcm',\n        });\n      },\n    }),\n    transferAssetsToPara32: (): ContractConfigBuilder => ({\n      build: ({ destinationAddress, asset, destination }) => {\n        return new ContractConfig({\n          address: XCM_PRECOMPILE_ADDRESS,\n          abi: XCM_ABI,\n          args: [\n            destination.parachainId,\n            u8aToHex(decodeAddress(destinationAddress)),\n            [[asset.address, asset.amount]],\n            0,\n          ],\n          func: 'transferAssetsToPara32',\n          module: 'Xcm',\n        });\n      },\n    }),\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","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 { getPrecompileDestinationInterior } from '../../../builder.utils';\nimport { ContractConfig } from '../../../types/evm/ContractConfig';\nimport type { ContractConfigBuilder } from '../../ContractBuilder.interfaces';\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\ntype DestinationMultilocation = [\n  /**\n   * 1 - if transaction is going through a relay chain\n   */\n  1,\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];\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\nfunction getDestinationMultilocation(\n  address: string,\n  destination: AnyParachain,\n): DestinationMultilocation {\n  const interior = getPrecompileDestinationInterior(destination, address);\n  return [1, interior];\n}\n","import { type AnyParachain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { u8aToHex } from '@polkadot/util';\nimport { decodeAddress } from '@polkadot/util-crypto';\nimport type { Address } from 'viem';\n\nexport function getPrecompileDestinationInterior(\n  destination: AnyParachain,\n  address?: string,\n): [Address, Address] | [Address] {\n  if (!address) {\n    return [`0x0000000${destination.parachainId.toString(16)}`];\n  }\n\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 = EvmParachain.is(destination) ? '03' : '01';\n  const acc = `0x${accountType}${u8aToHex(\n    decodeAddress(address),\n    -1,\n    false,\n  )}00` as Address;\n\n  return destination.parachainId\n    ? [`0x0000000${destination.parachainId.toString(16)}`, acc]\n    : [acc];\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 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 BuilderParams {\n  // biome-ignore lint/suspicious/noExplicitAny: not sure how to fix this\n  asset: any;\n  func?: SubmittableExtrinsicFunction<'promise'>;\n  parents?: Parents;\n  feeIndex?: number;\n}\n\nexport function getPolkadotXcmExtrinsicArgs({\n  asset,\n  destinationAddress,\n  destination,\n  func,\n  parents = 1,\n  feeIndex = 0,\n}: GetExtrinsicParams) {\n  const version = getExtrinsicArgumentVersion(func);\n\n  return [\n    {\n      [version]: normalizeX1(version, {\n        parents,\n        interior: {\n          X1: {\n            Parachain: destination.parachainId,\n          },\n        },\n      }),\n    },\n    {\n      [version]: normalizeX1(version, {\n        parents: 0,\n        interior: {\n          X1: getExtrinsicAccount(destinationAddress),\n        },\n      }),\n    },\n    {\n      [version]: asset,\n    },\n    feeIndex,\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","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  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                  asset: [\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                  asset: [\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                  asset: assets,\n                  feeIndex: isAssetDifferent && !shouldFeeAssetPrecede ? 1 : 0,\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                  asset: [\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                  asset: [\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        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                  asset: [\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: (): 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: 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        // 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  };\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 { 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                  asset: [\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 { eqBalances } from './pallets/eqBalances';\nimport { polkadotXcm } from './pallets/polkadotXcm';\nimport { xTokens } from './pallets/xTokens';\nimport { xTransfer } from './pallets/xTransfer';\nimport { xcmPallet } from './pallets/xcmPallet';\n\nexport function ExtrinsicBuilder() {\n  return {\n    eqBalances,\n    xTokens,\n    xTransfer,\n    polkadotXcm,\n    xcmPallet,\n  };\n}\n","import { 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';\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 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 } from '@moonbeam-network/xcm-types';\nimport type { 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      validatePalletInstance(asset);\n\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      validatePalletInstance(asset);\n\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        validatePalletInstance(sourceAsset);\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        validatePalletInstance(sourceAsset);\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        validatePalletInstance(sourceAsset);\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.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\nconst validatePalletInstance = (asset: ChainAsset) => {\n  if (!asset.getAssetPalletInstance()) {\n    throw new Error(\n      `No pallet instance configured for the asset ${asset.key} for XcmPaymentApi fee calculation`,\n    );\n  }\n};\n","import type { FeeConfigBuilderParams } from '../FeeBuilder.interfaces';\nimport {\n  getDepositAssetInstruction,\n  getSetTopicInstruction,\n} from '../FeeBuilder.utils';\nimport { getBuyExecutionInstruction } from '../FeeBuilder.utils';\nimport {\n  getClearOriginInstruction,\n  getReserveAssetDepositedInstruction,\n} from '../FeeBuilder.utils';\nimport { getWithdrawAssetInstruction } 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}\n\nexport function getInstructions({\n  isAssetReserveChain,\n  assets,\n  versionedFeeAssetId,\n  address,\n}: GetInstructionsProps) {\n  return [\n    isAssetReserveChain\n      ? getWithdrawAssetInstruction(assets)\n      : getReserveAssetDepositedInstruction(assets),\n    getClearOriginInstruction(),\n    getBuyExecutionInstruction(versionedFeeAssetId),\n    getDepositAssetInstruction(address, assets),\n    getSetTopicInstruction(),\n  ];\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 } from './xcmPaymentApi.utils';\nimport { 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        });\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 {\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 { _0n } from '@polkadot/util';\nimport { evmToAddress } from '@polkadot/util-crypto';\nimport { type Address, encodeFunctionData, maxUint64 } from 'viem';\nimport { getPrecompileDestinationInterior } from '../../../../../builder.utils';\nimport { ContractConfig } from '../../../../../contract';\nimport type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces';\nimport {\n  CROSS_CHAIN_FEE,\n  buildSendExtrinsic,\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 { 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  return sourceApi.tx.polkadotXcm.send(\n    {\n      // TODO apply XCM versioning\n      V3: {\n        parents: 1,\n        interior: { X1: { Parachain: moonChain.parachainId } },\n      },\n    },\n    {\n      V3: [\n        {\n          WithdrawAsset: [\n            {\n              id: {\n                Concrete: {\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: {\n                Concrete: {\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: {\n                  parents: 0,\n                  interior: {\n                    X1: { AccountKey20: { key: computedOriginAccount } },\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(chain: 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 { 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 { getExtrinsicAccount } from '../../../../extrinsic/ExtrinsicBuilder.utils';\nimport type {\n  MrlBuilderParams,\n  MrlConfigBuilder,\n} from '../../../MrlBuilder.interfaces';\nimport { GMP_CONTRACT_ADDRESS } from '../contract/Gmp';\nimport { 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            whAsset,\n            asset.amount,\n            whSourceAddress,\n            whDestinationAddress,\n            isAutomatic,\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  // TODO: This is workaround for Peaq EVM. Can we improve it so we don't need to have hardcoded values?\n  const isPeaqEvm =\n    destination.key === 'peaq-evm-Alphanet' || destination.key === 'peaq-evm';\n\n  const multilocation = moonApi.createType('XcmVersionedLocation', {\n    V3: {\n      parents: 1,\n      interior: {\n        X2: [\n          {\n            Parachain: destination.parachainId,\n          },\n          getExtrinsicAccount(\n            isPeaqEvm ? evmToAddress(destinationAddress) : 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 { Network, Wormhole } from '@wormhole-foundation/sdk-connect';\n\nexport type WormholeTransferFunctions = 'tokenTransfer';\nexport type WormholeFunctionArgs = Parameters<\n  Wormhole<Network>[WormholeTransferFunctions]\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 type { AnyChain } 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    {\n      chains: {\n        Ethereum: {\n          rpc: 'https://eth.llamarpc.com',\n        },\n        Moonbeam: {\n          rpc: 'https://rpc.api.moonbeam.network',\n        },\n      },\n    },\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","u8aToHex","decodeAddress","u8aToHex","decodeAddress","u8aToHex","decodeAddress","assets","u8aToHex","decodeAddress","assets","foreignAssets","evmToAddress","pallet","assets","pallet","pallet","pallet","isEthAddress","u8aToHex","decodeAddress","isXcmV4","assets","isEthAddress","u8aToHex","decodeAddress","assets","assets","EvmParachain","getMultilocationDerivedAddresses","evmToAddress","encodeFunctionData","Parachain","polkadotXcm","Parachain","EvmParachain","evmToAddress","getMultilocationDerivedAddresses","encodeFunctionData","u8aToHex","module","u8aToHex","EvmParachain","Parachain","getMultilocationDerivedAddresses","evmToAddress","Wormhole","Parachain","getMultilocationDerivedAddresses","Wormhole","EvmParachain","evmToAddress","module","convertAddressTo32Bytes","module","convertAddressTo32Bytes","encodeFunctionData","contract","encodeFunctionData","polkadotXcm","wormhole","wormhole"]}