{"version":3,"sources":["../src/services/polkadot/PolkadotService.ts","../src/getTransferData/getTransferData.utils.ts","../src/services/evm/EvmService.ts","../src/getTransferData/getSourceData.ts","../src/getTransferData/getDestinationData.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts"],"sourcesContent":["import '@polkadot/api-augment';\n\nimport type {\n  ExtrinsicConfig,\n  SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { type AnyParachain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport type { ApiPromise } from '@polkadot/api';\nimport type {\n  Signer as PolkadotSigner,\n  SubmittableExtrinsic,\n} from '@polkadot/api/types';\nimport type { u128 } from '@polkadot/types';\nimport type { RuntimeDispatchInfo } from '@polkadot/types/interfaces';\nimport type { IKeyringPair, ISubmittableResult } from '@polkadot/types/types';\nimport type { HexString } from '@polkadot/util/types';\n\nexport class PolkadotService {\n  readonly api: ApiPromise;\n\n  readonly chain: AnyParachain;\n\n  constructor(api: ApiPromise, chain: AnyParachain) {\n    this.api = api;\n    this.chain = chain;\n  }\n\n  static async create(chain: AnyParachain): Promise<PolkadotService> {\n    return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n  }\n\n  static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n    return Promise.all(\n      chains.map((chain: AnyParachain) => PolkadotService.create(chain)),\n    );\n  }\n\n  get decimals(): number {\n    return this.api.registry.chainDecimals.at(0) || 12;\n  }\n\n  get existentialDeposit(): AssetAmount {\n    const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n    const eqExistentialDeposit = this.api.consts.eqBalances\n      ?.existentialDeposit as unknown as u128 | undefined;\n    const amount =\n      existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n    return AssetAmount.fromChainAsset(this.chain.nativeAsset, { amount });\n  }\n\n  async query(config: SubstrateQueryConfig): Promise<bigint> {\n    const response = await this.api.query[config.module][config.func](\n      ...config.args,\n    );\n\n    return config.transform(response);\n  }\n\n  getExtrinsic(\n    config: ExtrinsicConfig,\n  ): SubmittableExtrinsic<'promise', ISubmittableResult> {\n    const fn = this.api.tx[config.module][config.func];\n    const args = config.getArgs(fn);\n\n    return fn(...args);\n  }\n\n  getExtrinsicCallHash(config: ExtrinsicConfig): HexString {\n    return this.getExtrinsic(config).method.toHex();\n  }\n\n  async getPaymentInfo(\n    account: string,\n    config: ExtrinsicConfig,\n  ): Promise<RuntimeDispatchInfo> {\n    const extrinsic = this.getExtrinsic(config);\n\n    return extrinsic.paymentInfo(account, { nonce: -1 });\n  }\n\n  async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n    const info = await this.getPaymentInfo(account, config);\n\n    return info.partialFee.toBigInt();\n  }\n\n  async transfer(\n    account: string,\n    config: ExtrinsicConfig,\n    signer: PolkadotSigner | IKeyringPair,\n    statusCallback?: (params: ISubmittableResult) => void,\n  ): Promise<string> {\n    const extrinsic = this.getExtrinsic(config);\n\n    const isSigner = this.#isSigner(signer);\n    const signOptions = {\n      nonce: -1,\n      signer: isSigner ? signer : undefined,\n      withSignedTransaction: true,\n    };\n\n    const hash = await new Promise<string>((resolve, reject) => {\n      extrinsic\n        .signAndSend(isSigner ? account : signer, signOptions, (result) => {\n          if (result.isError || result.dispatchError) {\n            reject(\n              new Error(\n                result.dispatchError?.toString() || 'Transaction failed',\n              ),\n            );\n          }\n          if (result.txHash) {\n            resolve(result.txHash.toString());\n          }\n          statusCallback?.(result);\n        })\n        .catch(reject);\n    });\n\n    return hash;\n  }\n\n  #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n    return 'signPayload' in signer;\n  }\n}\n","import {\n  type AssetMinConfigBuilder,\n  type BalanceConfigBuilder,\n  ContractConfig,\n  EvmQueryConfig,\n  type ExtrinsicConfig,\n  type FeeConfigBuilder,\n  SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport type { AssetRoute, FeeConfig } from '@moonbeam-network/xcm-config';\nimport {\n  type AnyChain,\n  type AnyParachain,\n  type Asset,\n  AssetAmount,\n  type ChainAsset,\n  EvmChain,\n  EvmParachain,\n  Parachain,\n} from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport type {\n  DestinationChainTransferData,\n  SourceChainTransferData,\n} from '../sdk.interfaces';\nimport { EvmService } from '../services/evm/EvmService';\nimport { PolkadotService } from '../services/polkadot';\n\nexport interface GetBalancesParams {\n  address: string;\n  asset: ChainAsset;\n  builder: BalanceConfigBuilder;\n  chain: AnyChain;\n}\nexport async function getBalance({\n  address,\n  asset,\n  builder,\n  chain,\n}: GetBalancesParams): Promise<AssetAmount> {\n  const config = builder.build({\n    address,\n    asset,\n  });\n  const amount = AssetAmount.fromChainAsset(asset, { amount: 0n });\n\n  if (SubstrateQueryConfig.is(config) && EvmParachain.isAnyParachain(chain)) {\n    const polkadot = await PolkadotService.create(chain);\n    const balance = await polkadot.query(config);\n    const converted = chain.usesChainDecimals\n      ? convertDecimals(balance, polkadot.decimals, asset.decimals)\n      : balance;\n\n    return amount.copyWith({ amount: converted });\n  }\n\n  if (EvmChain.is(chain) || EvmParachain.is(chain)) {\n    const evm = EvmService.create(chain);\n\n    if (ContractConfig.is(config)) {\n      const balance = await evm.getBalance(address, config);\n\n      return amount.copyWith({ amount: balance });\n    }\n\n    if (EvmQueryConfig.is(config)) {\n      const balance = await evm.query(config);\n\n      return amount.copyWith({ amount: balance });\n    }\n  }\n\n  throw new Error(\n    `Can't get balance for ${address} on chain ${chain.name} and asset ${asset.symbol}`,\n  );\n}\n\nexport interface GetMinParams {\n  asset: Asset;\n  builder?: AssetMinConfigBuilder;\n  chain: AnyChain;\n}\n\nexport async function getAssetMin({\n  asset,\n  builder,\n  chain,\n}: GetMinParams): Promise<AssetAmount> {\n  const zero = AssetAmount.fromChainAsset(chain.getChainAsset(asset), {\n    amount: 0n,\n  });\n\n  if (builder && EvmParachain.isAnyParachain(chain)) {\n    const polkadot = await PolkadotService.create(chain);\n    const min = await polkadot.query(\n      builder.build({ asset: zero.getMinAssetId(), address: zero.address }),\n    );\n\n    return zero.copyWith({ amount: min });\n  }\n\n  if (zero.min) {\n    return zero.copyWith({ amount: zero.min });\n  }\n\n  return zero;\n}\n\nexport function getMin({\n  balance,\n  existentialDeposit,\n  fee,\n  min,\n}: DestinationChainTransferData) {\n  const result = Big(0)\n    .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n    .plus(\n      existentialDeposit &&\n        balance.isSame(existentialDeposit) &&\n        balance.toBig().lt(existentialDeposit.toBig())\n        ? existentialDeposit.toBig()\n        : Big(0),\n    )\n    .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n  return balance.copyWith({\n    amount: BigInt(result.toFixed()),\n  });\n}\n\nexport interface GetMaxParams {\n  balance: AssetAmount;\n  existentialDeposit?: AssetAmount;\n  fee: AssetAmount;\n  min: AssetAmount;\n}\n\nexport function getMax({\n  balance,\n  existentialDeposit,\n  fee,\n  min,\n}: GetMaxParams): AssetAmount {\n  const result = balance\n    .toBig()\n    .minus(min.toBig())\n    .minus(\n      existentialDeposit && balance.isSame(existentialDeposit)\n        ? existentialDeposit.toBig()\n        : Big(0),\n    )\n    .minus(balance.isSame(fee) ? fee.toBig() : Big(0));\n\n  return balance.copyWith({\n    amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n  });\n}\n\nexport interface GetDestinationFeeParams {\n  address: string;\n  asset: Asset;\n  feeAsset: Asset;\n  destination: AnyChain;\n  fee: number | FeeConfigBuilder;\n  source: AnyChain;\n}\n\nexport async function getDestinationFee({\n  address,\n  asset,\n  destination,\n  fee,\n  feeAsset,\n  source,\n}: GetDestinationFeeParams): Promise<AssetAmount> {\n  const zero = AssetAmount.fromChainAsset(destination.getChainAsset(feeAsset), {\n    amount: 0n,\n  });\n\n  if (typeof fee === 'number') {\n    return zero.copyWith({\n      amount: fee,\n    });\n  }\n\n  if (EvmParachain.isAnyParachain(destination)) {\n    const polkadot = await PolkadotService.create(destination);\n    const cfg = fee.build({\n      address,\n      api: polkadot.api,\n      asset: destination.getChainAsset(asset),\n      destination,\n      feeAsset: destination.getChainAsset(feeAsset),\n      source,\n    });\n\n    return zero.copyWith({\n      amount: await cfg.call(),\n    });\n  }\n\n  return zero;\n}\n\nexport interface ConvertToChainDecimalsParams {\n  asset: AssetAmount;\n  target: ChainAsset;\n}\n\nexport function convertToChainDecimals({\n  asset,\n  target,\n}: ConvertToChainDecimalsParams): AssetAmount {\n  return AssetAmount.fromChainAsset(target, {\n    amount: asset.convertDecimals(target.decimals).amount,\n  });\n}\n\nexport async function getExistentialDeposit(\n  chain: AnyChain,\n): Promise<AssetAmount | undefined> {\n  if (EvmParachain.isAnyParachain(chain)) {\n    const polkadot = await PolkadotService.create(chain);\n\n    return polkadot.existentialDeposit;\n  }\n\n  return undefined;\n}\n\nexport interface GetDestinationFeeBalanceParams {\n  balance: AssetAmount;\n  feeBalance: AssetAmount;\n  route: AssetRoute;\n  sourceAddress: string;\n}\n\nexport async function getDestinationFeeBalance({\n  balance,\n  feeBalance,\n  route,\n  sourceAddress,\n}: GetDestinationFeeBalanceParams): Promise<AssetAmount> {\n  if (route.destination.fee.asset.isEqual(balance)) {\n    return balance;\n  }\n\n  if (route.destination.fee.asset.isEqual(feeBalance)) {\n    return feeBalance;\n  }\n\n  if (!route.source.destinationFee?.balance) {\n    throw new Error(\n      'BalanceBuilder must be defined for source.destinationFee.balance for AssetRoute',\n    );\n  }\n\n  return getBalance({\n    address: sourceAddress,\n    asset: route.getDestinationFeeAssetOnSource(),\n    builder: route.source.destinationFee?.balance,\n    chain: route.source.chain,\n  });\n}\n\nexport interface GetExtrinsicFeeParams {\n  address: string;\n  balance: AssetAmount;\n  chain: AnyParachain;\n  extrinsic: ExtrinsicConfig;\n  feeBalance: AssetAmount;\n  feeConfig?: FeeConfig;\n}\n\nexport async function getExtrinsicFee({\n  address,\n  balance,\n  chain,\n  extrinsic,\n  feeBalance,\n  feeConfig,\n}: GetExtrinsicFeeParams): Promise<AssetAmount> {\n  /**\n   * If account has no balance (account doesn't exist),\n   * we can't get the fee from some chains.\n   * Example: Phala - PHA\n   */\n  try {\n    const polkadot = await PolkadotService.create(chain);\n    const fee = await polkadot.getFee(address, extrinsic);\n    const extra = feeConfig?.extra\n      ? toBigInt(feeConfig.extra, feeBalance.decimals)\n      : 0n;\n    const totalFee = fee + extra;\n\n    const converted = chain.usesChainDecimals\n      ? convertDecimals(totalFee, polkadot.decimals, feeBalance.decimals)\n      : totalFee;\n\n    return feeBalance.copyWith({ amount: converted });\n  } catch (error) {\n    if (balance.amount) {\n      throw error;\n    }\n\n    return feeBalance.copyWith({ amount: 0n });\n  }\n}\n\nexport interface GetContractFeeParams {\n  address: string;\n  balance: AssetAmount;\n  chain: EvmChain | EvmParachain;\n  contract: ContractConfig;\n  destinationFee: AssetAmount;\n  feeBalance: AssetAmount;\n  feeConfig?: FeeConfig;\n}\n\nexport async function getContractFee({\n  address,\n  balance,\n  chain,\n  contract,\n  destinationFee,\n  feeBalance,\n  feeConfig,\n}: GetContractFeeParams): Promise<AssetAmount> {\n  try {\n    if (balance.amount === 0n) {\n      return feeBalance.copyWith({ amount: 0n });\n    }\n    const evm = EvmService.create(chain);\n    const fee = await evm.getFee(address, contract);\n    const extra = feeConfig?.extra\n      ? toBigInt(feeConfig.extra, feeBalance.decimals)\n      : 0n;\n\n    return feeBalance.copyWith({ amount: fee + extra });\n  } catch (error) {\n    /**\n     * Contract can throw an error if user balance is smaller than fee.\n     * Or if you try to send 0 as amount.\n     */\n    throw new Error(\n      `Can't get a fee, make sure you have ${destinationFee.toDecimal()} ${destinationFee.getSymbol()} in your source balance, needed for destination fees`,\n      { cause: error },\n    );\n  }\n}\n\ninterface ValidateSovereignAccountBalancesProps {\n  amount: bigint;\n  destinationData: DestinationChainTransferData;\n  sourceData: SourceChainTransferData;\n}\n\nexport function validateSovereignAccountBalances({\n  amount,\n  sourceData,\n  destinationData,\n}: ValidateSovereignAccountBalancesProps): void {\n  if (\n    !Parachain.is(destinationData.chain) ||\n    !destinationData.chain.checkSovereignAccountBalances ||\n    !destinationData.sovereignAccountBalances\n  ) {\n    return;\n  }\n  const { feeAssetBalance, transferAssetBalance } =\n    destinationData.sovereignAccountBalances;\n\n  if (amount > transferAssetBalance) {\n    throw new Error(\n      `${sourceData.chain.name} Sovereign account in ${destinationData.chain.name} does not have enough balance for this transaction`,\n    );\n  }\n  if (feeAssetBalance && sourceData.destinationFee.amount > feeAssetBalance) {\n    throw new Error(\n      `${sourceData.chain.name} Sovereign account in ${destinationData.chain.name} does not have enough balance to pay for fees for this transaction`,\n    );\n  }\n}\n","import type {\n  ContractConfig,\n  EvmQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport type { EvmChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport {\n  http,\n  type Address,\n  type Hash,\n  type HttpTransport,\n  type PublicClient,\n  createPublicClient,\n} from 'viem';\nimport type { EvmSigner } from '../../sdk.interfaces';\n\nexport class EvmService {\n  readonly chain: EvmChain | EvmParachain;\n\n  readonly client: PublicClient<HttpTransport>;\n\n  static create(chain: EvmChain | EvmParachain): EvmService {\n    return new EvmService(chain);\n  }\n\n  constructor(chain: EvmChain | EvmParachain) {\n    this.chain = chain;\n    this.client = createPublicClient({\n      chain: chain.getViemChain(),\n      transport: http(),\n    });\n  }\n\n  async query(query: EvmQueryConfig) {\n    return this.client[query.func](...query.args);\n  }\n\n  async getFee(address: string, contract: ContractConfig): Promise<bigint> {\n    const gas = await this.client.estimateContractGas({\n      abi: contract.abi,\n      account: address as Address,\n      address: contract.address as Address,\n      args: contract.args,\n      functionName: contract.func,\n    });\n    const gasPrice = await this.client.getGasPrice();\n\n    return gas * gasPrice;\n  }\n\n  async getBalance(address: string, contract: ContractConfig): Promise<bigint> {\n    const balance = await this.client.readContract({\n      abi: contract.abi,\n      address: contract.address as Address,\n      args: [address],\n      functionName: 'balanceOf',\n    });\n\n    if (typeof balance !== 'bigint') {\n      throw new Error(\n        `Could not get balance on ${this.chain.name} for ${address} from contract ${contract.address}`,\n      );\n    }\n\n    return balance;\n  }\n\n  async transfer(signer: EvmSigner, contract: ContractConfig): Promise<Hash> {\n    const { request } = await this.client.simulateContract({\n      abi: contract.abi,\n      account: signer.account,\n      address: contract.address as Address,\n      args: contract.args,\n      functionName: contract.func,\n    });\n    const hash = await signer.writeContract(request);\n\n    return hash;\n  }\n}\n","import type {\n  ContractConfig,\n  ExtrinsicConfig,\n} from '@moonbeam-network/xcm-builder';\nimport type { AssetRoute, FeeConfig } from '@moonbeam-network/xcm-config';\nimport type {\n  AnyParachain,\n  AssetAmount,\n  EvmChain,\n  EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport type { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport { PolkadotService } from '../services/polkadot';\nimport {\n  getAssetMin,\n  getBalance,\n  getContractFee,\n  getDestinationFeeBalance,\n  getExistentialDeposit,\n  getExtrinsicFee,\n  getMax,\n} from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n  route: AssetRoute;\n  destinationAddress: string;\n  destinationFee: AssetAmount;\n  sourceAddress: string;\n}\n\nexport async function getSourceData({\n  route,\n  destinationAddress,\n  destinationFee,\n  sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n  const source = route.source.chain as AnyParachain;\n  const destination = route.destination.chain as AnyParachain;\n  const [sourcePolkadot, destinationPolkadot] =\n    await PolkadotService.createMulti([source, destination]);\n  const asset = source.getChainAsset(route.source.asset);\n  const feeAsset = route.source.fee\n    ? source.getChainAsset(route.source.fee.asset)\n    : asset;\n\n  const balance = await getBalance({\n    address: sourceAddress,\n    asset,\n    builder: route.source.balance,\n    chain: source,\n  });\n  const feeBalance = route.source.fee\n    ? await getBalance({\n        address: sourceAddress,\n        asset: feeAsset,\n        builder: route.source.fee.balance,\n        chain: source,\n      })\n    : balance;\n  const destinationFeeBalance = await getDestinationFeeBalance({\n    balance,\n    feeBalance,\n    route,\n    sourceAddress,\n  });\n\n  const existentialDeposit = await getExistentialDeposit(source);\n  const min = await getAssetMin({\n    asset,\n    builder: route.source.min,\n    chain: source,\n  });\n\n  const extrinsic = route.extrinsic?.build({\n    asset: balance,\n    destination: route.destination.chain as AnyParachain,\n    destinationAddress,\n    destinationApi: destinationPolkadot.api,\n    fee: destinationFee,\n    source,\n    sourceAddress,\n    sourceApi: sourcePolkadot.api,\n  });\n\n  const contract = route.contract?.build({\n    asset: balance,\n    destination: route.destination.chain as AnyParachain,\n    destinationAddress,\n    destinationApi: destinationPolkadot.api,\n    fee: destinationFee,\n    source,\n    sourceAddress,\n    sourceApi: sourcePolkadot.api,\n  });\n\n  const fee = await getFee({\n    balance,\n    chain: source,\n    contract,\n    destinationFee,\n    extrinsic,\n    feeBalance,\n    feeConfig: route.source.fee,\n    sourceAddress,\n  });\n\n  const max = getMax({\n    balance,\n    existentialDeposit,\n    fee,\n    min,\n  });\n\n  return {\n    balance,\n    chain: source,\n    destinationFee,\n    destinationFeeBalance,\n    existentialDeposit,\n    fee,\n    feeBalance,\n    max,\n    min,\n  };\n}\n\nexport interface GetFeeParams {\n  balance: AssetAmount;\n  feeBalance: AssetAmount;\n  contract?: ContractConfig;\n  chain: AnyParachain;\n  destinationFee: AssetAmount;\n  extrinsic?: ExtrinsicConfig;\n  feeConfig?: FeeConfig;\n  sourceAddress: string;\n}\n\nexport async function getFee({\n  balance,\n  feeBalance,\n  chain,\n  contract,\n  destinationFee,\n  extrinsic,\n  feeConfig,\n  sourceAddress,\n}: GetFeeParams): Promise<AssetAmount> {\n  if (!contract && !extrinsic) {\n    throw new Error('Either contract or extrinsic must be provided');\n  }\n\n  if (contract) {\n    return getContractFee({\n      address: sourceAddress,\n      balance,\n      chain: chain as EvmChain | EvmParachain,\n      contract,\n      destinationFee,\n      feeBalance,\n      feeConfig,\n    });\n  }\n\n  return getExtrinsicFee({\n    address: sourceAddress,\n    balance,\n    chain,\n    extrinsic: extrinsic as ExtrinsicConfig,\n    feeBalance,\n    feeConfig,\n  });\n}\n\nexport interface GetAssetsBalancesParams {\n  address: string;\n  chain: AnyParachain;\n  routes: AssetRoute[];\n  evmSigner?: EvmSigner;\n}\n\nexport async function getAssetsBalances({\n  address,\n  chain,\n  routes,\n}: GetAssetsBalancesParams): Promise<AssetAmount[]> {\n  const uniqueRoutes = routes.reduce((acc: AssetRoute[], route: AssetRoute) => {\n    if (\n      !acc.some((a: AssetRoute) => a.source.asset.isEqual(route.source.asset))\n    ) {\n      // biome-ignore lint/performance/noAccumulatingSpread: I think this is fine here\n      return [route, ...acc];\n    }\n\n    return acc;\n  }, []);\n\n  const balances = await Promise.all(\n    uniqueRoutes.map(async (route: AssetRoute) =>\n      getBalance({\n        address,\n        asset: chain.getChainAsset(route.source.asset),\n        builder: route.source.balance,\n        chain,\n      }),\n    ),\n  );\n\n  return balances;\n}\n","import type {\n  AssetRoute,\n  DestinationConfig,\n  SourceConfig,\n} from '@moonbeam-network/xcm-config';\nimport { Parachain } from '@moonbeam-network/xcm-types';\nimport { getSovereignAccountAddresses } from '@moonbeam-network/xcm-utils';\nimport type { DestinationChainTransferData } from '../sdk.interfaces';\nimport {\n  getAssetMin,\n  getBalance,\n  getDestinationFee,\n  getExistentialDeposit,\n} from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n  route: AssetRoute;\n  destinationAddress: string;\n}\n\nexport async function getDestinationData({\n  route,\n  destinationAddress,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n  const destination = route.destination.chain;\n  const asset = destination.getChainAsset(route.destination.asset);\n  const balance = await getBalance({\n    address: destinationAddress,\n    asset,\n    builder: route.destination.balance,\n    chain: destination,\n  });\n  const min = await getAssetMin({\n    asset,\n    builder: route.destination.min,\n    chain: destination,\n  });\n  const fee = await getDestinationFee({\n    address: destinationAddress,\n    feeAsset: route.destination.fee.asset,\n    destination,\n    fee: route.destination.fee.amount,\n    source: route.source.chain,\n    asset: route.source.asset,\n  });\n  const existentialDeposit = await getExistentialDeposit(destination);\n\n  return {\n    chain: destination,\n    balance,\n    existentialDeposit,\n    fee,\n    min,\n    sovereignAccountBalances: await getSovereignAccountBalances({\n      source: route.source,\n      destination: route.destination,\n    }),\n  };\n}\n\ninterface GetSovereignAccountBalancesProps {\n  source: SourceConfig;\n  destination: DestinationConfig;\n}\n\nasync function getSovereignAccountBalances({\n  destination,\n  source,\n}: GetSovereignAccountBalancesProps) {\n  if (\n    !Parachain.is(source.chain) ||\n    !Parachain.is(destination.chain) ||\n    !destination.chain.checkSovereignAccountBalances\n  ) {\n    return undefined;\n  }\n\n  const sovereignAccountAddresses = getSovereignAccountAddresses(\n    source.chain.parachainId,\n  );\n\n  const destinationFeeAssetBalance = destination.fee.balance;\n\n  const sovereignAccountAddress = destination.chain.isRelay\n    ? sovereignAccountAddresses.relay\n    : sovereignAccountAddresses.generic;\n\n  const sovereignAccountBalance = await getBalance({\n    address: sovereignAccountAddress,\n    asset: destination.chain.getChainAsset(destination.asset),\n    builder: destination.balance,\n    chain: destination.chain,\n  });\n\n  const sovereignAccountFeeAssetBalance = destinationFeeAssetBalance\n    ? await getBalance({\n        address: sovereignAccountAddress,\n        asset: destination.chain.getChainAsset(destination.fee.asset),\n        builder: destinationFeeAssetBalance,\n        chain: destination.chain,\n      })\n    : undefined;\n  return {\n    feeAssetBalance: sovereignAccountFeeAssetBalance?.amount,\n    transferAssetBalance: sovereignAccountBalance.amount,\n  };\n}\n","import { ConfigService, xcmRoutesMap } from '@moonbeam-network/xcm-config';\nimport {\n  type AnyAsset,\n  type AnyChain,\n  type AnyParachain,\n  type AssetAmount,\n  type Ecosystem,\n  EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport { getAssetsBalances } from './getTransferData/getSourceData';\nimport { getTransferData } from './getTransferData/getTransferData';\nimport type { TransferData } from './sdk.interfaces';\n\nconst DEFAULT_SERVICE = new ConfigService({ routes: xcmRoutesMap });\n\nexport interface SdkOptions {\n  configService?: ConfigService;\n  ecosystem?: Ecosystem;\n}\n\nexport function Sdk({ configService, ecosystem }: SdkOptions = {}) {\n  const service = configService ?? DEFAULT_SERVICE;\n  const assets = service.getEcosystemAssets(ecosystem);\n\n  return {\n    assets,\n    setAsset(asset: string | AnyAsset) {\n      const sources = service.getSourceChains({ asset, ecosystem });\n\n      return {\n        sources,\n        setSource(source: string | AnyChain) {\n          const destinations = service.getDestinationChains({\n            asset,\n            source,\n          });\n\n          return {\n            destinations,\n            setDestination(destination: string | AnyChain) {\n              const route = service.getAssetRoute({\n                asset,\n                source,\n                destination,\n              });\n\n              return {\n                setAddresses({\n                  sourceAddress,\n                  destinationAddress,\n                }: {\n                  sourceAddress: string;\n                  destinationAddress: string;\n                }): Promise<TransferData> {\n                  const sourceChain = service.getChain(source);\n\n                  if (!EvmParachain.isAnyParachain(sourceChain)) {\n                    throw new Error(\n                      'Source chain should be a Parachain or EvmParachain',\n                    );\n                  }\n\n                  if (!EvmParachain.isAnyParachain(route.destination.chain)) {\n                    throw new Error(\n                      'Destination chain should be a Parachain or EvmParachain',\n                    );\n                  }\n\n                  return getTransferData({\n                    route,\n                    sourceAddress,\n                    destinationAddress,\n                  });\n                },\n              };\n            },\n          };\n        },\n      };\n    },\n  };\n}\n\nexport async function getParachainBalances(\n  chain: AnyParachain,\n  address: string,\n  service: ConfigService = DEFAULT_SERVICE,\n): Promise<AssetAmount[]> {\n  const routes = service.getChainRoutes(chain).getRoutes();\n  const balances = await getAssetsBalances({\n    chain,\n    routes,\n    address,\n  });\n\n  return balances;\n}\n","import type { AssetRoute } from '@moonbeam-network/xcm-config';\nimport {\n  type AnyParachain,\n  AssetAmount,\n  type EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport type { Signers, TransferData } from '../sdk.interfaces';\nimport { EvmService } from '../services/evm/EvmService';\nimport { PolkadotService } from '../services/polkadot';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\nimport {\n  convertToChainDecimals,\n  getMin,\n  validateSovereignAccountBalances,\n} from './getTransferData.utils';\n\ninterface GetTransferDataParams {\n  route: AssetRoute;\n  sourceAddress: string;\n  destinationAddress: string;\n}\n\nexport async function getTransferData({\n  route,\n  sourceAddress,\n  destinationAddress,\n}: GetTransferDataParams): Promise<TransferData> {\n  const destinationData = await getDestinationData({\n    route,\n    destinationAddress,\n  });\n\n  // NOTE: Here we need to convert the fee on the destination chain\n  // to an asset on source chain.\n  const destinationFee = convertToChainDecimals({\n    asset: destinationData.fee,\n    target: route.getDestinationFeeAssetOnSource(),\n  });\n\n  const sourceData = await getSourceData({\n    route,\n    destinationAddress,\n    destinationFee,\n    sourceAddress,\n  });\n\n  return {\n    destination: destinationData,\n    getEstimate(amount: number | string) {\n      const bigAmount = Big(\n        toBigInt(amount, sourceData.balance.decimals).toString(),\n      );\n\n      const result = bigAmount.minus(\n        sourceData.balance.isSame(destinationFee)\n          ? destinationFee.toBig()\n          : Big(0),\n      );\n\n      return sourceData.balance.copyWith({\n        amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n      });\n    },\n    max: sourceData.max,\n    min: getMin(destinationData),\n    source: sourceData,\n    async transfer(\n      amount,\n      { evmSigner, polkadotSigner }: Partial<Signers>,\n    ): Promise<string> {\n      const source = route.source.chain as AnyParachain;\n      const destination = route.destination.chain as AnyParachain;\n      const bigintAmount = toBigInt(amount, sourceData.balance.decimals);\n      validateSovereignAccountBalances({\n        amount: bigintAmount,\n        destinationData,\n        sourceData,\n      });\n      const asset = AssetAmount.fromChainAsset(\n        route.source.chain.getChainAsset(route.source.asset),\n        { amount: bigintAmount },\n      );\n      const [sourcePolkadot, destinationPolkadot] =\n        await PolkadotService.createMulti([source, destination]);\n\n      const contract = route.contract?.build({\n        asset,\n        destination,\n        destinationAddress,\n        destinationApi: destinationPolkadot.api,\n        fee: destinationFee,\n        source,\n        sourceAddress,\n        sourceApi: sourcePolkadot.api,\n      });\n      const extrinsic = route.extrinsic?.build({\n        asset,\n        destination,\n        destinationAddress,\n        destinationApi: destinationPolkadot.api,\n        fee: destinationFee,\n        source,\n        sourceAddress,\n        sourceApi: sourcePolkadot.api,\n      });\n\n      if (contract) {\n        if (!evmSigner) {\n          throw new Error('EVM Signer must be provided');\n        }\n\n        const evm = EvmService.create(source as EvmParachain);\n\n        return evm.transfer(evmSigner, contract);\n      }\n\n      if (extrinsic) {\n        if (!polkadotSigner) {\n          throw new Error('Polkadot signer must be provided');\n        }\n\n        return sourcePolkadot.transfer(\n          sourceAddress,\n          extrinsic,\n          polkadotSigner,\n        );\n      }\n\n      throw new Error('Either contract or extrinsic must be provided');\n    },\n  };\n}\n"],"mappings":";AAAA,OAAO;AAMP,SAA4B,mBAAmB;AAC/C,SAAS,sBAAsB;AAWxB,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAClB;AAAA,EAEA;AAAA,EAET,YAAY,KAAiB,OAAqB;AAChD,SAAK,MAAM;AACX,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,aAAa,OAAO,OAA+C;AACjE,WAAO,IAAI,iBAAgB,MAAM,eAAe,MAAM,EAAE,GAAG,KAAK;AAAA,EAClE;AAAA,EAEA,aAAa,YAAY,QAAoD;AAC3E,WAAO,QAAQ;AAAA,MACb,OAAO,IAAI,CAAC,UAAwB,iBAAgB,OAAO,KAAK,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,IAAI,WAAmB;AACrB,WAAO,KAAK,IAAI,SAAS,cAAc,GAAG,CAAC,KAAK;AAAA,EAClD;AAAA,EAEA,IAAI,qBAAkC;AACpC,UAAM,qBAAqB,KAAK,IAAI,OAAO,UAAU;AACrD,UAAM,uBAAuB,KAAK,IAAI,OAAO,YACzC;AACJ,UAAM,SACJ,oBAAoB,SAAS,KAAK,sBAAsB,SAAS,KAAK;AAExE,WAAO,YAAY,eAAe,KAAK,MAAM,aAAa,EAAE,OAAO,CAAC;AAAA,EACtE;AAAA,EAEA,MAAM,MAAM,QAA+C;AACzD,UAAM,WAAW,MAAM,KAAK,IAAI,MAAM,OAAO,MAAM,EAAE,OAAO,IAAI;AAAA,MAC9D,GAAG,OAAO;AAAA,IACZ;AAEA,WAAO,OAAO,UAAU,QAAQ;AAAA,EAClC;AAAA,EAEA,aACE,QACqD;AACrD,UAAM,KAAK,KAAK,IAAI,GAAG,OAAO,MAAM,EAAE,OAAO,IAAI;AACjD,UAAM,OAAO,OAAO,QAAQ,EAAE;AAE9B,WAAO,GAAG,GAAG,IAAI;AAAA,EACnB;AAAA,EAEA,qBAAqB,QAAoC;AACvD,WAAO,KAAK,aAAa,MAAM,EAAE,OAAO,MAAM;AAAA,EAChD;AAAA,EAEA,MAAM,eACJ,SACA,QAC8B;AAC9B,UAAM,YAAY,KAAK,aAAa,MAAM;AAE1C,WAAO,UAAU,YAAY,SAAS,EAAE,OAAO,GAAG,CAAC;AAAA,EACrD;AAAA,EAEA,MAAM,OAAO,SAAiB,QAA0C;AACtE,UAAM,OAAO,MAAM,KAAK,eAAe,SAAS,MAAM;AAEtD,WAAO,KAAK,WAAW,SAAS;AAAA,EAClC;AAAA,EAEA,MAAM,SACJ,SACA,QACA,QACA,gBACiB;AACjB,UAAM,YAAY,KAAK,aAAa,MAAM;AAE1C,UAAM,WAAW,KAAK,UAAU,MAAM;AACtC,UAAM,cAAc;AAAA,MAClB,OAAO;AAAA,MACP,QAAQ,WAAW,SAAS;AAAA,MAC5B,uBAAuB;AAAA,IACzB;AAEA,UAAM,OAAO,MAAM,IAAI,QAAgB,CAAC,SAAS,WAAW;AAC1D,gBACG,YAAY,WAAW,UAAU,QAAQ,aAAa,CAAC,WAAW;AACjE,YAAI,OAAO,WAAW,OAAO,eAAe;AAC1C;AAAA,YACE,IAAI;AAAA,cACF,OAAO,eAAe,SAAS,KAAK;AAAA,YACtC;AAAA,UACF;AAAA,QACF;AACA,YAAI,OAAO,QAAQ;AACjB,kBAAQ,OAAO,OAAO,SAAS,CAAC;AAAA,QAClC;AACA,yBAAiB,MAAM;AAAA,MACzB,CAAC,EACA,MAAM,MAAM;AAAA,IACjB,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,QAAiE;AACzE,WAAO,iBAAiB;AAAA,EAC1B;AACF;;;AC/HA;AAAA,EAGE;AAAA,EACA;AAAA,EAGA;AAAA,OACK;AAEP;AAAA,EAIE,eAAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB,gBAAgB;AAC1C,OAAO,SAAS;;;AChBhB;AAAA,EACE;AAAA,EAKA;AAAA,OACK;AAGA,IAAM,aAAN,MAAM,YAAW;AAAA,EACb;AAAA,EAEA;AAAA,EAET,OAAO,OAAO,OAA4C;AACxD,WAAO,IAAI,YAAW,KAAK;AAAA,EAC7B;AAAA,EAEA,YAAY,OAAgC;AAC1C,SAAK,QAAQ;AACb,SAAK,SAAS,mBAAmB;AAAA,MAC/B,OAAO,MAAM,aAAa;AAAA,MAC1B,WAAW,KAAK;AAAA,IAClB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAM,OAAuB;AACjC,WAAO,KAAK,OAAO,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI;AAAA,EAC9C;AAAA,EAEA,MAAM,OAAO,SAAiB,UAA2C;AACvE,UAAM,MAAM,MAAM,KAAK,OAAO,oBAAoB;AAAA,MAChD,KAAK,SAAS;AAAA,MACd,SAAS;AAAA,MACT,SAAS,SAAS;AAAA,MAClB,MAAM,SAAS;AAAA,MACf,cAAc,SAAS;AAAA,IACzB,CAAC;AACD,UAAM,WAAW,MAAM,KAAK,OAAO,YAAY;AAE/C,WAAO,MAAM;AAAA,EACf;AAAA,EAEA,MAAM,WAAW,SAAiB,UAA2C;AAC3E,UAAM,UAAU,MAAM,KAAK,OAAO,aAAa;AAAA,MAC7C,KAAK,SAAS;AAAA,MACd,SAAS,SAAS;AAAA,MAClB,MAAM,CAAC,OAAO;AAAA,MACd,cAAc;AAAA,IAChB,CAAC;AAED,QAAI,OAAO,YAAY,UAAU;AAC/B,YAAM,IAAI;AAAA,QACR,4BAA4B,KAAK,MAAM,IAAI,QAAQ,OAAO,kBAAkB,SAAS,OAAO;AAAA,MAC9F;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,QAAmB,UAAyC;AACzE,UAAM,EAAE,QAAQ,IAAI,MAAM,KAAK,OAAO,iBAAiB;AAAA,MACrD,KAAK,SAAS;AAAA,MACd,SAAS,OAAO;AAAA,MAChB,SAAS,SAAS;AAAA,MAClB,MAAM,SAAS;AAAA,MACf,cAAc,SAAS;AAAA,IACzB,CAAC;AACD,UAAM,OAAO,MAAM,OAAO,cAAc,OAAO;AAE/C,WAAO;AAAA,EACT;AACF;;;AD3CA,eAAsB,WAAW;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4C;AAC1C,QAAM,SAAS,QAAQ,MAAM;AAAA,IAC3B;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,SAASC,aAAY,eAAe,OAAO,EAAE,QAAQ,GAAG,CAAC;AAE/D,MAAI,qBAAqB,GAAG,MAAM,KAAK,aAAa,eAAe,KAAK,GAAG;AACzE,UAAM,WAAW,MAAM,gBAAgB,OAAO,KAAK;AACnD,UAAM,UAAU,MAAM,SAAS,MAAM,MAAM;AAC3C,UAAM,YAAY,MAAM,oBACpB,gBAAgB,SAAS,SAAS,UAAU,MAAM,QAAQ,IAC1D;AAEJ,WAAO,OAAO,SAAS,EAAE,QAAQ,UAAU,CAAC;AAAA,EAC9C;AAEA,MAAI,SAAS,GAAG,KAAK,KAAK,aAAa,GAAG,KAAK,GAAG;AAChD,UAAM,MAAM,WAAW,OAAO,KAAK;AAEnC,QAAI,eAAe,GAAG,MAAM,GAAG;AAC7B,YAAM,UAAU,MAAM,IAAI,WAAW,SAAS,MAAM;AAEpD,aAAO,OAAO,SAAS,EAAE,QAAQ,QAAQ,CAAC;AAAA,IAC5C;AAEA,QAAI,eAAe,GAAG,MAAM,GAAG;AAC7B,YAAM,UAAU,MAAM,IAAI,MAAM,MAAM;AAEtC,aAAO,OAAO,SAAS,EAAE,QAAQ,QAAQ,CAAC;AAAA,IAC5C;AAAA,EACF;AAEA,QAAM,IAAI;AAAA,IACR,yBAAyB,OAAO,aAAa,MAAM,IAAI,cAAc,MAAM,MAAM;AAAA,EACnF;AACF;AAQA,eAAsB,YAAY;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,QAAM,OAAOA,aAAY,eAAe,MAAM,cAAc,KAAK,GAAG;AAAA,IAClE,QAAQ;AAAA,EACV,CAAC;AAED,MAAI,WAAW,aAAa,eAAe,KAAK,GAAG;AACjD,UAAM,WAAW,MAAM,gBAAgB,OAAO,KAAK;AACnD,UAAM,MAAM,MAAM,SAAS;AAAA,MACzB,QAAQ,MAAM,EAAE,OAAO,KAAK,cAAc,GAAG,SAAS,KAAK,QAAQ,CAAC;AAAA,IACtE;AAEA,WAAO,KAAK,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,EACtC;AAEA,MAAI,KAAK,KAAK;AACZ,WAAO,KAAK,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;AAAA,EAC3C;AAEA,SAAO;AACT;AAEO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM,SAAS,IAAI,CAAC,EACjB,KAAK,QAAQ,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC,EAC/C;AAAA,IACC,sBACE,QAAQ,OAAO,kBAAkB,KACjC,QAAQ,MAAM,EAAE,GAAG,mBAAmB,MAAM,CAAC,IAC3C,mBAAmB,MAAM,IACzB,IAAI,CAAC;AAAA,EACX,EACC,KAAK,QAAQ,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC;AAE9D,SAAO,QAAQ,SAAS;AAAA,IACtB,QAAQ,OAAO,OAAO,QAAQ,CAAC;AAAA,EACjC,CAAC;AACH;AASO,SAAS,OAAO;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8B;AAC5B,QAAM,SAAS,QACZ,MAAM,EACN,MAAM,IAAI,MAAM,CAAC,EACjB;AAAA,IACC,sBAAsB,QAAQ,OAAO,kBAAkB,IACnD,mBAAmB,MAAM,IACzB,IAAI,CAAC;AAAA,EACX,EACC,MAAM,QAAQ,OAAO,GAAG,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,CAAC;AAEnD,SAAO,QAAQ,SAAS;AAAA,IACtB,QAAQ,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,OAAO,QAAQ,CAAC;AAAA,EACrD,CAAC;AACH;AAWA,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkD;AAChD,QAAM,OAAOA,aAAY,eAAe,YAAY,cAAc,QAAQ,GAAG;AAAA,IAC3E,QAAQ;AAAA,EACV,CAAC;AAED,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,KAAK,SAAS;AAAA,MACnB,QAAQ;AAAA,IACV,CAAC;AAAA,EACH;AAEA,MAAI,aAAa,eAAe,WAAW,GAAG;AAC5C,UAAM,WAAW,MAAM,gBAAgB,OAAO,WAAW;AACzD,UAAM,MAAM,IAAI,MAAM;AAAA,MACpB;AAAA,MACA,KAAK,SAAS;AAAA,MACd,OAAO,YAAY,cAAc,KAAK;AAAA,MACtC;AAAA,MACA,UAAU,YAAY,cAAc,QAAQ;AAAA,MAC5C;AAAA,IACF,CAAC;AAED,WAAO,KAAK,SAAS;AAAA,MACnB,QAAQ,MAAM,IAAI,KAAK;AAAA,IACzB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAOO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AACF,GAA8C;AAC5C,SAAOA,aAAY,eAAe,QAAQ;AAAA,IACxC,QAAQ,MAAM,gBAAgB,OAAO,QAAQ,EAAE;AAAA,EACjD,CAAC;AACH;AAEA,eAAsB,sBACpB,OACkC;AAClC,MAAI,aAAa,eAAe,KAAK,GAAG;AACtC,UAAM,WAAW,MAAM,gBAAgB,OAAO,KAAK;AAEnD,WAAO,SAAS;AAAA,EAClB;AAEA,SAAO;AACT;AASA,eAAsB,yBAAyB;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyD;AACvD,MAAI,MAAM,YAAY,IAAI,MAAM,QAAQ,OAAO,GAAG;AAChD,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,YAAY,IAAI,MAAM,QAAQ,UAAU,GAAG;AACnD,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,MAAM,OAAO,gBAAgB,SAAS;AACzC,UAAM,IAAI;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAEA,SAAO,WAAW;AAAA,IAChB,SAAS;AAAA,IACT,OAAO,MAAM,+BAA+B;AAAA,IAC5C,SAAS,MAAM,OAAO,gBAAgB;AAAA,IACtC,OAAO,MAAM,OAAO;AAAA,EACtB,CAAC;AACH;AAWA,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAM9C,MAAI;AACF,UAAM,WAAW,MAAM,gBAAgB,OAAO,KAAK;AACnD,UAAM,MAAM,MAAM,SAAS,OAAO,SAAS,SAAS;AACpD,UAAM,QAAQ,WAAW,QACrB,SAAS,UAAU,OAAO,WAAW,QAAQ,IAC7C;AACJ,UAAM,WAAW,MAAM;AAEvB,UAAM,YAAY,MAAM,oBACpB,gBAAgB,UAAU,SAAS,UAAU,WAAW,QAAQ,IAChE;AAEJ,WAAO,WAAW,SAAS,EAAE,QAAQ,UAAU,CAAC;AAAA,EAClD,SAAS,OAAO;AACd,QAAI,QAAQ,QAAQ;AAClB,YAAM;AAAA,IACR;AAEA,WAAO,WAAW,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,EAC3C;AACF;AAYA,eAAsB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,MAAI;AACF,QAAI,QAAQ,WAAW,IAAI;AACzB,aAAO,WAAW,SAAS,EAAE,QAAQ,GAAG,CAAC;AAAA,IAC3C;AACA,UAAM,MAAM,WAAW,OAAO,KAAK;AACnC,UAAM,MAAM,MAAM,IAAI,OAAO,SAAS,QAAQ;AAC9C,UAAM,QAAQ,WAAW,QACrB,SAAS,UAAU,OAAO,WAAW,QAAQ,IAC7C;AAEJ,WAAO,WAAW,SAAS,EAAE,QAAQ,MAAM,MAAM,CAAC;AAAA,EACpD,SAAS,OAAO;AAKd,UAAM,IAAI;AAAA,MACR,uCAAuC,eAAe,UAAU,CAAC,IAAI,eAAe,UAAU,CAAC;AAAA,MAC/F,EAAE,OAAO,MAAM;AAAA,IACjB;AAAA,EACF;AACF;AAQO,SAAS,iCAAiC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,MACE,CAAC,UAAU,GAAG,gBAAgB,KAAK,KACnC,CAAC,gBAAgB,MAAM,iCACvB,CAAC,gBAAgB,0BACjB;AACA;AAAA,EACF;AACA,QAAM,EAAE,iBAAiB,qBAAqB,IAC5C,gBAAgB;AAElB,MAAI,SAAS,sBAAsB;AACjC,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,MAAM,IAAI,yBAAyB,gBAAgB,MAAM,IAAI;AAAA,IAC7E;AAAA,EACF;AACA,MAAI,mBAAmB,WAAW,eAAe,SAAS,iBAAiB;AACzE,UAAM,IAAI;AAAA,MACR,GAAG,WAAW,MAAM,IAAI,yBAAyB,gBAAgB,MAAM,IAAI;AAAA,IAC7E;AAAA,EACF;AACF;;;AEjWA,eAAsB,cAAc;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0D;AACxD,QAAM,SAAS,MAAM,OAAO;AAC5B,QAAM,cAAc,MAAM,YAAY;AACtC,QAAM,CAAC,gBAAgB,mBAAmB,IACxC,MAAM,gBAAgB,YAAY,CAAC,QAAQ,WAAW,CAAC;AACzD,QAAM,QAAQ,OAAO,cAAc,MAAM,OAAO,KAAK;AACrD,QAAM,WAAW,MAAM,OAAO,MAC1B,OAAO,cAAc,MAAM,OAAO,IAAI,KAAK,IAC3C;AAEJ,QAAM,UAAU,MAAM,WAAW;AAAA,IAC/B,SAAS;AAAA,IACT;AAAA,IACA,SAAS,MAAM,OAAO;AAAA,IACtB,OAAO;AAAA,EACT,CAAC;AACD,QAAM,aAAa,MAAM,OAAO,MAC5B,MAAM,WAAW;AAAA,IACf,SAAS;AAAA,IACT,OAAO;AAAA,IACP,SAAS,MAAM,OAAO,IAAI;AAAA,IAC1B,OAAO;AAAA,EACT,CAAC,IACD;AACJ,QAAM,wBAAwB,MAAM,yBAAyB;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,qBAAqB,MAAM,sBAAsB,MAAM;AAC7D,QAAM,MAAM,MAAM,YAAY;AAAA,IAC5B;AAAA,IACA,SAAS,MAAM,OAAO;AAAA,IACtB,OAAO;AAAA,EACT,CAAC;AAED,QAAM,YAAY,MAAM,WAAW,MAAM;AAAA,IACvC,OAAO;AAAA,IACP,aAAa,MAAM,YAAY;AAAA,IAC/B;AAAA,IACA,gBAAgB,oBAAoB;AAAA,IACpC,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW,eAAe;AAAA,EAC5B,CAAC;AAED,QAAM,WAAW,MAAM,UAAU,MAAM;AAAA,IACrC,OAAO;AAAA,IACP,aAAa,MAAM,YAAY;AAAA,IAC/B;AAAA,IACA,gBAAgB,oBAAoB;AAAA,IACpC,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA,WAAW,eAAe;AAAA,EAC5B,CAAC;AAED,QAAM,MAAM,MAAM,OAAO;AAAA,IACvB;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM,OAAO;AAAA,IACxB;AAAA,EACF,CAAC;AAED,QAAM,MAAM,OAAO;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAaA,eAAsB,OAAO;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAuC;AACrC,MAAI,CAAC,YAAY,CAAC,WAAW;AAC3B,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAEA,MAAI,UAAU;AACZ,WAAO,eAAe;AAAA,MACpB,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO,gBAAgB;AAAA,IACrB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACH;AASA,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAAoD;AAClD,QAAM,eAAe,OAAO,OAAO,CAAC,KAAmB,UAAsB;AAC3E,QACE,CAAC,IAAI,KAAK,CAAC,MAAkB,EAAE,OAAO,MAAM,QAAQ,MAAM,OAAO,KAAK,CAAC,GACvE;AAEA,aAAO,CAAC,OAAO,GAAG,GAAG;AAAA,IACvB;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,WAAW,MAAM,QAAQ;AAAA,IAC7B,aAAa;AAAA,MAAI,OAAO,UACtB,WAAW;AAAA,QACT;AAAA,QACA,OAAO,MAAM,cAAc,MAAM,OAAO,KAAK;AAAA,QAC7C,SAAS,MAAM,OAAO;AAAA,QACtB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;;;AC3MA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,oCAAoC;AAc7C,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AACF,GAAoE;AAClE,QAAM,cAAc,MAAM,YAAY;AACtC,QAAM,QAAQ,YAAY,cAAc,MAAM,YAAY,KAAK;AAC/D,QAAM,UAAU,MAAM,WAAW;AAAA,IAC/B,SAAS;AAAA,IACT;AAAA,IACA,SAAS,MAAM,YAAY;AAAA,IAC3B,OAAO;AAAA,EACT,CAAC;AACD,QAAM,MAAM,MAAM,YAAY;AAAA,IAC5B;AAAA,IACA,SAAS,MAAM,YAAY;AAAA,IAC3B,OAAO;AAAA,EACT,CAAC;AACD,QAAM,MAAM,MAAM,kBAAkB;AAAA,IAClC,SAAS;AAAA,IACT,UAAU,MAAM,YAAY,IAAI;AAAA,IAChC;AAAA,IACA,KAAK,MAAM,YAAY,IAAI;AAAA,IAC3B,QAAQ,MAAM,OAAO;AAAA,IACrB,OAAO,MAAM,OAAO;AAAA,EACtB,CAAC;AACD,QAAM,qBAAqB,MAAM,sBAAsB,WAAW;AAElE,SAAO;AAAA,IACL,OAAO;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,0BAA0B,MAAM,4BAA4B;AAAA,MAC1D,QAAQ,MAAM;AAAA,MACd,aAAa,MAAM;AAAA,IACrB,CAAC;AAAA,EACH;AACF;AAOA,eAAe,4BAA4B;AAAA,EACzC;AAAA,EACA;AACF,GAAqC;AACnC,MACE,CAACC,WAAU,GAAG,OAAO,KAAK,KAC1B,CAACA,WAAU,GAAG,YAAY,KAAK,KAC/B,CAAC,YAAY,MAAM,+BACnB;AACA,WAAO;AAAA,EACT;AAEA,QAAM,4BAA4B;AAAA,IAChC,OAAO,MAAM;AAAA,EACf;AAEA,QAAM,6BAA6B,YAAY,IAAI;AAEnD,QAAM,0BAA0B,YAAY,MAAM,UAC9C,0BAA0B,QAC1B,0BAA0B;AAE9B,QAAM,0BAA0B,MAAM,WAAW;AAAA,IAC/C,SAAS;AAAA,IACT,OAAO,YAAY,MAAM,cAAc,YAAY,KAAK;AAAA,IACxD,SAAS,YAAY;AAAA,IACrB,OAAO,YAAY;AAAA,EACrB,CAAC;AAED,QAAM,kCAAkC,6BACpC,MAAM,WAAW;AAAA,IACf,SAAS;AAAA,IACT,OAAO,YAAY,MAAM,cAAc,YAAY,IAAI,KAAK;AAAA,IAC5D,SAAS;AAAA,IACT,OAAO,YAAY;AAAA,EACrB,CAAC,IACD;AACJ,SAAO;AAAA,IACL,iBAAiB,iCAAiC;AAAA,IAClD,sBAAsB,wBAAwB;AAAA,EAChD;AACF;;;AC1GA,SAAS,eAAe,oBAAoB;AAC5C;AAAA,EAME,gBAAAC;AAAA,OACK;;;ACPP;AAAA,EAEE,eAAAC;AAAA,OAEK;AACP,SAAS,YAAAC,iBAAgB;AACzB,OAAOC,UAAS;AAkBhB,eAAsB,gBAAgB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAAiD;AAC/C,QAAM,kBAAkB,MAAM,mBAAmB;AAAA,IAC/C;AAAA,IACA;AAAA,EACF,CAAC;AAID,QAAM,iBAAiB,uBAAuB;AAAA,IAC5C,OAAO,gBAAgB;AAAA,IACvB,QAAQ,MAAM,+BAA+B;AAAA,EAC/C,CAAC;AAED,QAAM,aAAa,MAAM,cAAc;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL,aAAa;AAAA,IACb,YAAY,QAAyB;AACnC,YAAM,YAAYC;AAAA,QAChBC,UAAS,QAAQ,WAAW,QAAQ,QAAQ,EAAE,SAAS;AAAA,MACzD;AAEA,YAAM,SAAS,UAAU;AAAA,QACvB,WAAW,QAAQ,OAAO,cAAc,IACpC,eAAe,MAAM,IACrBD,KAAI,CAAC;AAAA,MACX;AAEA,aAAO,WAAW,QAAQ,SAAS;AAAA,QACjC,QAAQ,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,OAAO,QAAQ,CAAC;AAAA,MACrD,CAAC;AAAA,IACH;AAAA,IACA,KAAK,WAAW;AAAA,IAChB,KAAK,OAAO,eAAe;AAAA,IAC3B,QAAQ;AAAA,IACR,MAAM,SACJ,QACA,EAAE,WAAW,eAAe,GACX;AACjB,YAAM,SAAS,MAAM,OAAO;AAC5B,YAAM,cAAc,MAAM,YAAY;AACtC,YAAM,eAAeC,UAAS,QAAQ,WAAW,QAAQ,QAAQ;AACjE,uCAAiC;AAAA,QAC/B,QAAQ;AAAA,QACR;AAAA,QACA;AAAA,MACF,CAAC;AACD,YAAM,QAAQC,aAAY;AAAA,QACxB,MAAM,OAAO,MAAM,cAAc,MAAM,OAAO,KAAK;AAAA,QACnD,EAAE,QAAQ,aAAa;AAAA,MACzB;AACA,YAAM,CAAC,gBAAgB,mBAAmB,IACxC,MAAM,gBAAgB,YAAY,CAAC,QAAQ,WAAW,CAAC;AAEzD,YAAM,WAAW,MAAM,UAAU,MAAM;AAAA,QACrC;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB,oBAAoB;AAAA,QACpC,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,WAAW,eAAe;AAAA,MAC5B,CAAC;AACD,YAAM,YAAY,MAAM,WAAW,MAAM;AAAA,QACvC;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB,oBAAoB;AAAA,QACpC,KAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA,WAAW,eAAe;AAAA,MAC5B,CAAC;AAED,UAAI,UAAU;AACZ,YAAI,CAAC,WAAW;AACd,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AAEA,cAAM,MAAM,WAAW,OAAO,MAAsB;AAEpD,eAAO,IAAI,SAAS,WAAW,QAAQ;AAAA,MACzC;AAEA,UAAI,WAAW;AACb,YAAI,CAAC,gBAAgB;AACnB,gBAAM,IAAI,MAAM,kCAAkC;AAAA,QACpD;AAEA,eAAO,eAAe;AAAA,UACpB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAEA,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAAA,EACF;AACF;;;ADzHA,IAAM,kBAAkB,IAAI,cAAc,EAAE,QAAQ,aAAa,CAAC;AAO3D,SAAS,IAAI,EAAE,eAAe,UAAU,IAAgB,CAAC,GAAG;AACjE,QAAM,UAAU,iBAAiB;AACjC,QAAM,SAAS,QAAQ,mBAAmB,SAAS;AAEnD,SAAO;AAAA,IACL;AAAA,IACA,SAAS,OAA0B;AACjC,YAAM,UAAU,QAAQ,gBAAgB,EAAE,OAAO,UAAU,CAAC;AAE5D,aAAO;AAAA,QACL;AAAA,QACA,UAAU,QAA2B;AACnC,gBAAM,eAAe,QAAQ,qBAAqB;AAAA,YAChD;AAAA,YACA;AAAA,UACF,CAAC;AAED,iBAAO;AAAA,YACL;AAAA,YACA,eAAe,aAAgC;AAC7C,oBAAM,QAAQ,QAAQ,cAAc;AAAA,gBAClC;AAAA,gBACA;AAAA,gBACA;AAAA,cACF,CAAC;AAED,qBAAO;AAAA,gBACL,aAAa;AAAA,kBACX;AAAA,kBACA;AAAA,gBACF,GAG0B;AACxB,wBAAM,cAAc,QAAQ,SAAS,MAAM;AAE3C,sBAAI,CAACC,cAAa,eAAe,WAAW,GAAG;AAC7C,0BAAM,IAAI;AAAA,sBACR;AAAA,oBACF;AAAA,kBACF;AAEA,sBAAI,CAACA,cAAa,eAAe,MAAM,YAAY,KAAK,GAAG;AACzD,0BAAM,IAAI;AAAA,sBACR;AAAA,oBACF;AAAA,kBACF;AAEA,yBAAO,gBAAgB;AAAA,oBACrB;AAAA,oBACA;AAAA,oBACA;AAAA,kBACF,CAAC;AAAA,gBACH;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,qBACpB,OACA,SACA,UAAyB,iBACD;AACxB,QAAM,SAAS,QAAQ,eAAe,KAAK,EAAE,UAAU;AACvD,QAAM,WAAW,MAAM,kBAAkB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":["AssetAmount","AssetAmount","Parachain","Parachain","EvmParachain","AssetAmount","toBigInt","Big","Big","toBigInt","AssetAmount","EvmParachain"]}