@moonbeam-network/xcm-sdk 2.7.8 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +19 -11
- package/build/index.d.mts +195 -0
- package/build/index.d.ts +168 -301
- package/build/index.mjs +767 -1
- package/build/index.mjs.map +1 -1
- package/package.json +21 -31
- package/build/index.cjs +0 -2
- package/build/index.cjs.map +0 -1
- package/build/index.d.cts +0 -177
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contracts/Erc20/Erc20Public.ts","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n CallType,\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n AssetConfig,\n DestinationFeeConfig,\n FeeAssetConfig,\n TransferConfig,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyChain,\n AssetAmount,\n EvmParachain,\n} from '@moonbeam-network/xcm-types';\nimport {\n convertDecimals,\n toBigInt,\n toDecimal,\n} from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n createContract,\n createContractWithoutSigner,\n} from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport {\n BaseParams,\n getBalance,\n getDecimals,\n getMin,\n} from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n polkadot,\n sourceAddress,\n evmSigner,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n polkadot,\n }),\n });\n\n const feeAsset = polkadot.chain.getBalanceAssetId(\n config?.fee?.asset || config.asset,\n );\n\n const feeCfg = config.fee?.balance.build({\n address: destinationAddress,\n asset: feeAsset,\n });\n\n const feeDecimals = config.fee?.asset\n ? await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n assetBuiltConfig: feeCfg,\n chain,\n config,\n polkadot,\n })\n : undefined;\n\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: feeDecimals || 0,\n })\n : zeroAmount;\n\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n chain,\n config,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n asset: config.asset,\n balanceBuilder: config.balance,\n chain,\n decimals: zeroAmount.decimals,\n polkadot,\n });\n\n const feeBalance = await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroFeeAmount.decimals,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroDestinationFeeAmount.decimals,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n\n const fee = await getFee({\n balance,\n chain,\n contract,\n decimals: zeroFeeAmount.decimals,\n destinationFeeBalanceAmount,\n destinationFeeConfig: config.destinationFee,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFee,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeBalanceParams extends BaseParams {\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n decimals: number;\n}\n\nexport async function getFeeBalance({\n address,\n balance,\n chain,\n decimals,\n feeConfig,\n polkadot,\n}: GetFeeBalanceParams) {\n if (!feeConfig) {\n return balance;\n }\n\n const cfg = feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig;\n\n if (cfg.type === CallType.Evm) {\n const contract = createContractWithoutSigner(\n cfg,\n chain as EvmParachain,\n ) as BalanceContractInterface;\n\n const decimalsFromContract = await contract.getDecimals();\n const balanceFromContract = await contract.getBalance();\n\n return chain.usesChainDecimals\n ? convertDecimals(\n balanceFromContract,\n polkadot.decimals,\n decimalsFromContract,\n )\n : balanceFromContract;\n }\n\n const feeBalance = await polkadot.query(cfg);\n\n return chain.usesChainDecimals\n ? convertDecimals(feeBalance, polkadot.decimals, decimals)\n : feeBalance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n chain: AnyChain;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n destinationFeeConfig?: DestinationFeeConfig;\n destinationFeeBalanceAmount?: AssetAmount;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n chain,\n contract,\n decimals,\n destinationFeeConfig,\n destinationFeeBalanceAmount,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n if (\n destinationFeeConfig &&\n destinationFeeBalanceAmount &&\n typeof destinationFeeConfig.amount === 'number'\n ) {\n const destinationFeeBalance = Number(\n toDecimal(\n destinationFeeBalanceAmount.amount,\n destinationFeeBalanceAmount.decimals,\n ),\n );\n if (\n destinationFeeBalance &&\n destinationFeeConfig.amount > destinationFeeBalance\n ) {\n throw new Error(\n `Can't get a fee, make sure you have ${destinationFeeConfig?.amount} ${destinationFeeConfig?.asset.originSymbol} in your source balance, needed for destination fees`,\n );\n }\n }\n\n return getContractFee({\n balance,\n chain: chain as EvmParachain,\n config: contract,\n decimals,\n evmSigner,\n });\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n const totalFee = extrinsicFee + xcmDeliveryFee;\n\n return chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, decimals)\n : totalFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee({\n balance,\n config,\n decimals,\n evmSigner,\n chain,\n}: {\n balance: bigint;\n config: ContractConfig;\n decimals: number;\n evmSigner: EvmSigner;\n chain: EvmParachain;\n}): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n chain,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\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 return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n\nexport interface GetAssetsBalancesParams {\n address: string;\n chain: AnyChain;\n assets: AssetConfig[];\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getAssetsBalances({\n address,\n chain,\n assets,\n polkadot,\n}: GetAssetsBalancesParams): Promise<AssetAmount[]> {\n const uniqueAssets = assets.reduce(\n (acc: AssetConfig[], asset: AssetConfig) => {\n if (!acc.some((a: AssetConfig) => a.asset.isEqual(asset.asset))) {\n return [asset, ...acc];\n }\n\n return acc;\n },\n [],\n );\n\n const balances = await Promise.all(\n uniqueAssets.map(async (asset: AssetConfig) => {\n const decimals = await getDecimals({\n address,\n asset: asset.asset,\n chain,\n config: asset,\n polkadot,\n });\n\n // eslint-disable-next-line no-await-in-loop\n const balance = await getBalance({\n address,\n asset: asset.asset,\n balanceBuilder: asset.balance,\n chain,\n decimals,\n polkadot,\n });\n\n const assetAmount = AssetAmount.fromAsset(asset.asset, {\n amount: balance,\n decimals,\n });\n\n return assetAmount;\n }),\n );\n\n return balances;\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n this.address = config.address;\n\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return !('abi' in contract);\n}\n","[\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]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, TransactionResponse } from 'ethers';\nimport {\n Address,\n GetContractReturnType,\n PublicClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly defaultMoonChainAddress =\n '0x0000000000000000000000000000000000000804';\n\n readonly address: Address;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner, address?: Address) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.address = address ?? this.defaultMoonChainAddress;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return contract[this.#config.func].estimateGas(...this.#config.args);\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\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 try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n if (!this.#signer.provider) return 0n;\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.provider.getFeeData();\n\n return (gasPrice || 0n) + (maxPriorityFeePerGas || 0n);\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\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 \"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]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Chain, PublicClient, createPublicClient, http } from 'viem';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport abi from './Erc20ABI.json';\n\nexport class Erc20Public implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #publicClient: PublicClient;\n\n constructor(config: ContractConfig, chain: Chain) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n this.address = config.address;\n\n this.#config = config;\n\n this.#publicClient = createPublicClient({\n chain,\n transport: http(),\n });\n }\n\n async getBalance(): Promise<bigint> {\n const data = await this.#publicClient.readContract({\n abi,\n address: this.#config.address as `0x${string}`,\n args: this.#config.args,\n functionName: 'balanceOf',\n });\n\n return data as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const data = await this.#publicClient.readContract({\n abi,\n address: this.#config.address as `0x${string}`,\n functionName: 'decimals',\n });\n\n return data as unknown as number;\n }\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { AnyChain, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\nimport { Erc20Public } from './contracts/Erc20/Erc20Public';\n\nexport function createContractWithSigner(\n config: ContractConfig,\n signer: EvmSigner,\n chain?: AnyChain,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n if (chain && 'contracts' in chain) {\n const address = chain?.contracts?.Xtokens;\n\n return new Xtokens(config, signer, address);\n }\n\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n\nexport function createContractWithoutSigner(\n config: ContractConfig,\n chain: EvmParachain,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20Public(config, chain.getViemChain());\n }\n\n throw new Error(`Public Contract ${config.module} not found`);\n}\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner | undefined,\n chain: AnyChain,\n): TransferContractInterface | BalanceContractInterface {\n return signer\n ? createContractWithSigner(config, signer, chain)\n : createContractWithoutSigner(config, chain as EvmParachain);\n}\n","import {\n BalanceConfigBuilder,\n CallType,\n ContractConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, FeeAssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, EvmParachain } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport {\n BalanceContractInterface,\n createContractWithoutSigner,\n} from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n SourceChainTransferData,\n} from '../sdk.interfaces';\n\nexport interface BaseParams {\n address: string;\n chain: AnyChain;\n polkadot: PolkadotService;\n}\n\nexport interface GetBalancesParams extends BaseParams {\n asset: Asset;\n balanceBuilder: BalanceConfigBuilder;\n decimals: number;\n}\n\nexport interface GetDecimalsParams extends BaseParams {\n asset?: Asset;\n config: AssetConfig | FeeAssetConfig;\n assetBuiltConfig?: SubstrateQueryConfig | ContractConfig;\n}\n\nexport async function getBalance({\n address,\n chain,\n balanceBuilder,\n asset,\n decimals,\n polkadot,\n}: GetBalancesParams) {\n const cfg = balanceBuilder.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset),\n });\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n return chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, decimals)\n : balance;\n }\n\n const contract = createContractWithoutSigner(\n cfg,\n chain as EvmParachain,\n ) as BalanceContractInterface;\n\n const balance = await contract.getBalance();\n\n return balance;\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n polkadot,\n chain,\n assetBuiltConfig,\n}: GetDecimalsParams) {\n const cfg =\n assetBuiltConfig ||\n config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n const contract = createContractWithoutSigner(\n cfg,\n chain as EvmParachain,\n ) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n\ninterface ValidateSovereignAccountBalancesProps {\n amount: bigint;\n destination: DestinationChainTransferData;\n source: SourceChainTransferData;\n}\n\nexport function validateSovereignAccountBalances({\n amount,\n source,\n destination,\n}: ValidateSovereignAccountBalancesProps): void {\n if (\n !destination.chain.checkSovereignAccountBalances ||\n !destination.sovereignAccountBalances\n ) {\n return;\n }\n const { feeAssetBalance, transferAssetBalance } =\n destination.sovereignAccountBalances;\n\n if (amount > transferAssetBalance) {\n throw new Error(\n `${source.chain.name} Sovereign account in ${destination.chain.name} does not have enough balance for this transaction`,\n );\n }\n if (feeAssetBalance && source.destinationFee.amount > feeAssetBalance) {\n throw new Error(\n `${source.chain.name} Sovereign account in ${destination.chain.name} does not have enough balance to pay for fees for this transaction`,\n );\n }\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyChain,\n Asset,\n AssetAmount,\n Ecosystem,\n} from '@moonbeam-network/xcm-types';\nimport { getAssetsBalances } from './getTransferData/getSourceData';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { PolkadotService } from './polkadot';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport async function getParachainBalances(\n chain: AnyChain,\n address: string,\n): Promise<AssetAmount[]> {\n const configService = new ConfigService();\n const chainsConfig = configService.getChainConfig(chain);\n const assets = chainsConfig.getAssetsConfigs();\n\n const polkadot = await PolkadotService.create(chain, configService);\n\n const balances = await getAssetsBalances({\n chain,\n assets,\n address,\n polkadot,\n });\n\n return balances;\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransactionResponse } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\nimport { validateSovereignAccountBalances } from './getTransferData.utils';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti(\n [transferConfig.destination.chain, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n validateSovereignAccountBalances({\n amount: bigintAmount,\n destination,\n source,\n });\n\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(\n contract,\n evmSigner,\n chain,\n ) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction 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 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 async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals =\n await sourcePolkadot.getAssetDecimals(destinationFee);\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { IConfigService } from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\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.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.assets ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n const decimals =\n 'unwrapOrDefault' in unwrapped.decimals\n ? unwrapped.decimals.unwrapOrDefault()\n : unwrapped.decimals;\n\n return {\n decimals: decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n\n const decimals =\n this.chain.getAssetDecimals(asset) ||\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.decimals; // TODO remove this and handle it separately only for native assets\n\n if (!decimals) {\n throw new Error(`No decimals found for asset ${asset.originSymbol}`);\n }\n\n return decimals;\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 async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n withSignedTransaction: true,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport {\n getSovereignAccountAddresses,\n toBigInt,\n} from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n asset: config.asset,\n balanceBuilder: config.balance,\n chain,\n decimals: zeroAmount.decimals,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n sovereignAccountBalances: chain.checkSovereignAccountBalances\n ? await getSovereignAccountBalances({\n decimals: zeroAmount.decimals,\n polkadot,\n transferConfig,\n })\n : undefined,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n address,\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n address,\n api: polkadot.api,\n chain: polkadot.chain,\n feeAsset: polkadot.chain.getRegisteredAssetIdOrAddress(asset),\n transferAsset: polkadot.chain.getRegisteredAssetIdOrAddress(config.asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n\ninterface GetSovereignAccountBalancesProps {\n transferConfig: TransferConfig;\n decimals: number;\n polkadot: PolkadotService;\n}\n\nasync function getSovereignAccountBalances({\n transferConfig,\n decimals,\n polkadot,\n}: GetSovereignAccountBalancesProps) {\n const {\n destination: { chain, config },\n source: { config: sourceConfig },\n } = transferConfig;\n const sovereignAccountAddresses = getSovereignAccountAddresses(\n transferConfig.source.chain.parachainId,\n );\n\n const destinationFeeAssetBalance =\n sourceConfig.destinationFee?.destinationBalance;\n\n const sovereignAccountAddress = chain.isRelay\n ? sovereignAccountAddresses.relay\n : sovereignAccountAddresses.generic;\n\n const sovereignAccountBalance = await getBalance({\n address: sovereignAccountAddress,\n asset: config.asset,\n balanceBuilder: config.balance,\n chain,\n decimals,\n polkadot,\n });\n\n const sovereignAccountFeeAssetBalance = destinationFeeAssetBalance\n ? await getBalance({\n address: sovereignAccountAddress,\n asset: sourceConfig.destinationFee.asset,\n balanceBuilder: destinationFeeAssetBalance,\n chain,\n decimals, // TODO this is not correct but will only affect us if a chain has both checkSovereignAccountBalances and usesChainDecimals flags\n polkadot,\n })\n : undefined;\n return {\n feeAssetBalance: sovereignAccountFeeAssetBalance,\n transferAssetBalance: sovereignAccountBalance,\n };\n}\n"],"mappings":"AACA,OACE,YAAAA,OAIK,gCAOP,OAEE,eAAAC,MAEK,8BACP,OACE,mBAAAC,EACA,YAAAC,GACA,aAAAC,OACK,8BACP,OAAOC,OAAS,SCtBhB,OAAS,YAAAC,OAAgB,SACzB,OAGE,sBAAAC,GACA,eAAAC,GACA,QAAAC,OACK,OCJA,SAASC,EAAeC,EAA2C,CACxE,MAAO,aAAcA,CACvB,CAMO,SAASC,EACdC,EACsB,CACtB,MAAO,EAAE,QAASA,EACpB,CChBA,IAAAC,EAAA,CACE,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,OACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,QACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,WACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,cACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,QACR,KAAQ,SACV,EACA,CACE,KAAQ,MACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,WACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,OACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,YACR,QAAW,CACT,CACE,KAAQ,UACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,SACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,QACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,MACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,SACR,KAAQ,SACV,EACA,CACE,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,YACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,QAAW,GACX,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,UACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,KAAQ,OACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,KACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,CACF,EF7MO,IAAMC,EAAN,KAAgD,CAC5C,QAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAmB,CACrD,GAAI,CAACD,EAAO,QACV,MAAM,IAAI,MAAM,8BAA8B,EAEhD,KAAK,QAAUA,EAAO,QAEtB,KAAKF,GAAUE,EACf,KAAKD,GAAYG,EAAeD,CAAM,EAClC,IAAIE,GAAS,KAAK,QAASC,EAAKH,CAAM,EACtCI,GAAY,CACV,IAAAD,EACA,QAAS,KAAK,QACd,OAAQ,CACN,OAAQE,GAAmB,CACzB,MAAOL,EAAO,MACd,UAAWM,GAAK,CAClB,CAAC,EACD,OAAQN,CACV,CACF,CAAC,CACP,CAEA,MAAM,YAA8B,CAClC,OAAIO,EAAiB,KAAKT,EAAS,GACjB,MAAM,KAAKA,GAAU,UAAU,GAAG,KAAKD,GAAQ,IAAI,GACpD,SAAS,EAEnB,KAAKC,GAAU,KAAK,UACzB,KAAKD,GAAQ,IACf,CACF,CAEA,MAAM,aAA+B,CAKnC,OAJiBU,EAAiB,KAAKT,EAAS,EAC5C,MAAM,KAAKA,GAAU,SAAS,EAC9B,KAAKA,GAAU,KAAK,SAAS,CAGnC,CACF,EG7DA,OAAS,YAAAU,OAAqC,SAC9C,OAKE,sBAAAC,EACA,eAAAC,GACA,QAAAC,MACK,OCVP,IAAAC,EAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,WAAc,CACZ,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,aAAgB,4BAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,UACR,KAAQ,QACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,CACF,ED3EO,IAAMC,EAAN,KAAmD,CAC/C,wBACP,6CAEO,QAEAC,GAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAmBC,EAAmB,CACxE,KAAKL,GAAUG,EAEf,KAAKD,GAAUE,EAEf,KAAK,QAAUC,GAAW,KAAK,wBAE/B,KAAKJ,GAAYK,EAAeF,CAAM,EAClC,IAAIG,GAAS,KAAK,QAASC,EAAKJ,CAAM,EACtCK,GAAY,CACV,IAAAD,EACA,QAAS,KAAK,QACd,OAAQ,CACN,OAAQE,EAAmB,CACzB,MAAON,EAAO,MACd,UAAWO,EAAK,CAClB,CAAC,EACD,OAAQP,CACV,CACF,CAAC,CACP,CAEA,MAAM,UAAmE,CACvE,OAAIQ,EAAiB,KAAKX,EAAS,EAC1B,KAAKA,GAAU,KAAKD,GAAQ,IAAI,EAAE,GAAG,KAAKA,GAAQ,IAAI,EAGxD,KAAKC,GAAU,MAAM,KAAKD,GAAQ,IAAI,EAAE,KAAKA,GAAQ,IAAI,CAClE,CAEA,MAAM,8BAA8Ba,EAAqC,CACvE,OAAOA,EAAS,KAAKb,GAAQ,IAAI,EAAE,YAAY,GAAG,KAAKA,GAAQ,IAAI,CACrE,CAEA,MAAM,4BACJa,EACiB,CACjB,OAAKA,EAKEA,EAAS,YAAY,KAAKb,GAAQ,IAAI,EAAE,KAAKA,GAAQ,IAAW,EAJ9D,EAKX,CAEA,MAAM,OAAOc,EAAiC,CAC5C,GAAIA,IAAW,GACb,OAAO,GAMT,GAAI,CACF,IAAMC,EAAeH,EAAiB,KAAKX,EAAS,EAChD,MAAM,KAAK,8BAA8B,KAAKA,EAAS,EACvD,MAAM,KAAK,4BAA4B,KAAKA,EAAS,EACnDe,EAAW,MAAM,KAAK,YAAY,EACxC,OAAOD,EAAeC,CACxB,OAASC,EAAO,CAEd,cAAQ,MAAMA,CAAK,EACb,IAAI,MACR,0DACF,CACF,CACF,CAEA,MAAc,aAAc,CAC1B,GAAIX,EAAe,KAAKJ,EAAO,EAAG,CAChC,GAAI,CAAC,KAAKA,GAAQ,SAAU,OAAO,GACnC,GAAM,CAAE,SAAAc,EAAU,qBAAAE,CAAqB,EACrC,MAAM,KAAKhB,GAAQ,SAAS,WAAW,EAEzC,OAAQc,GAAY,KAAOE,GAAwB,GACrD,CAOA,OALqBR,EAAmB,CACtC,MAAO,KAAKR,GAAQ,MACpB,UAAWS,EAAK,CAClB,CAAC,EAEmB,YAAY,CAClC,CACF,EEjHA,OAA8B,sBAAAQ,GAAoB,QAAAC,OAAY,OAIvD,IAAMC,EAAN,KAAsD,CAClD,QAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAc,CAChD,GAAI,CAACD,EAAO,QACV,MAAM,IAAI,MAAM,8BAA8B,EAEhD,KAAK,QAAUA,EAAO,QAEtB,KAAKF,GAAUE,EAEf,KAAKD,GAAgBG,GAAmB,CACtC,MAAAD,EACA,UAAWE,GAAK,CAClB,CAAC,CACH,CAEA,MAAM,YAA8B,CAQlC,OAPa,MAAM,KAAKJ,GAAc,aAAa,CACjD,IAAAK,EACA,QAAS,KAAKN,GAAQ,QACtB,KAAM,KAAKA,GAAQ,KACnB,aAAc,WAChB,CAAC,CAGH,CAEA,MAAM,aAA+B,CAOnC,OANa,MAAM,KAAKC,GAAc,aAAa,CACjD,IAAAK,EACA,QAAS,KAAKN,GAAQ,QACtB,aAAc,UAChB,CAAC,CAGH,CACF,ECpCO,SAASO,GACdC,EACAC,EACAC,EACsD,CAdxD,IAAAC,EAeE,GAAIH,EAAO,SAAW,QACpB,OAAO,IAAII,EAAMJ,EAAQC,CAAM,EAGjC,GAAID,EAAO,SAAW,UAAW,CAC/B,GAAIE,GAAS,cAAeA,EAAO,CACjC,IAAMG,GAAUF,EAAAD,GAAA,YAAAA,EAAO,YAAP,YAAAC,EAAkB,QAElC,OAAO,IAAIG,EAAQN,EAAQC,EAAQI,CAAO,CAC5C,CAEA,OAAO,IAAIC,EAAQN,EAAQC,CAAM,CACnC,CAEA,MAAM,IAAI,MAAM,YAAYD,EAAO,MAAM,YAAY,CACvD,CAEO,SAASO,EACdP,EACAE,EACsD,CACtD,GAAIF,EAAO,SAAW,QACpB,OAAO,IAAIQ,EAAYR,EAAQE,EAAM,aAAa,CAAC,EAGrD,MAAM,IAAI,MAAM,mBAAmBF,EAAO,MAAM,YAAY,CAC9D,CAEO,SAASS,EACdT,EACAC,EACAC,EACsD,CACtD,OAAOD,EACHF,GAAyBC,EAAQC,EAAQC,CAAK,EAC9CK,EAA4BP,EAAQE,CAAqB,CAC/D,CCnDA,OAEE,YAAAQ,MAGK,gCAGP,OAAS,mBAAAC,GAAiB,YAAAC,OAAgB,8BA6B1C,eAAsBC,EAAW,CAC/B,QAAAC,EACA,MAAAC,EACA,eAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,CACF,EAAsB,CACpB,IAAMC,EAAMJ,EAAe,MAAM,CAC/B,QAAAF,EACA,MAAOK,EAAS,MAAM,kBAAkBF,CAAK,CAC/C,CAAC,EACD,GAAIG,EAAI,OAASC,EAAS,UAAW,CACnC,IAAMC,EAAU,MAAMH,EAAS,MAAMC,CAA2B,EAChE,OAAOL,EAAM,kBACTQ,GAAgBD,EAASH,EAAS,SAAUD,CAAQ,EACpDI,CACN,CASA,OAFgB,MALCE,EACfJ,EACAL,CACF,EAE+B,WAAW,CAG5C,CAEA,eAAsBU,EAAY,CAChC,QAAAX,EACA,MAAAG,EACA,OAAAS,EACA,SAAAP,EACA,MAAAJ,EACA,iBAAAY,CACF,EAAsB,CACpB,IAAMP,EACJO,GACAD,EAAO,QAAQ,MAAM,CACnB,QAAAZ,EACA,MAAOK,EAAS,MAAM,kBAAkBF,GAASS,EAAO,KAAK,CAC/D,CAAC,EAEH,OAAIN,EAAI,OAASC,EAAS,UACjBF,EAAS,iBAAiBF,GAASS,EAAO,KAAK,EAGvCF,EACfJ,EACAL,CACF,EAEgB,YAAY,CAC9B,CAEA,eAAsBa,EAAOF,EAAqBP,EAA2B,CAC3E,GAAIO,EAAO,IACT,OAAOP,EAAS,MACdO,EAAO,IAAI,MAAM,CAAE,MAAOP,EAAS,MAAM,cAAcO,EAAO,KAAK,CAAE,CAAC,CACxE,EAGF,IAAMG,EAAMV,EAAS,MAAM,YAAYO,EAAO,KAAK,EAEnD,GAAIG,EAAK,CACP,IAAMX,EAAW,MAAMC,EAAS,iBAAiBO,EAAO,KAAK,EAE7D,OAAOI,GAASD,EAAKX,CAAQ,CAC/B,CAEA,OAAO,EACT,CAQO,SAASa,EAAiC,CAC/C,OAAAC,EACA,OAAAC,EACA,YAAAC,CACF,EAAgD,CAC9C,GACE,CAACA,EAAY,MAAM,+BACnB,CAACA,EAAY,yBAEb,OAEF,GAAM,CAAE,gBAAAC,EAAiB,qBAAAC,CAAqB,EAC5CF,EAAY,yBAEd,GAAIF,EAASI,EACX,MAAM,IAAI,MACR,GAAGH,EAAO,MAAM,IAAI,yBAAyBC,EAAY,MAAM,IAAI,oDACrE,EAEF,GAAIC,GAAmBF,EAAO,eAAe,OAASE,EACpD,MAAM,IAAI,MACR,GAAGF,EAAO,MAAM,IAAI,yBAAyBC,EAAY,MAAM,IAAI,oEACrE,CAEJ,CR7FA,eAAsBG,GAAc,CAClC,eAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,SAAAC,EACA,cAAAC,EACA,UAAAC,CACF,EAA0D,CAvD1D,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAwDE,GAAM,CACJ,MAAAC,EACA,YAAAC,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAIhB,EAEEiB,EAAaC,EAAY,UAAUL,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMM,EAAY,CAC1B,QAASlB,EACT,MAAAc,EACA,OAAAC,EACA,SAAAb,CACF,CAAC,CACH,CAAC,EAEKiB,EAAWjB,EAAS,MAAM,oBAC9BG,EAAAU,GAAA,YAAAA,EAAQ,MAAR,YAAAV,EAAa,QAASU,EAAO,KAC/B,EAEMK,GAASd,EAAAS,EAAO,MAAP,YAAAT,EAAY,QAAQ,MAAM,CACvC,QAASN,EACT,MAAOmB,CACT,GAEME,GAAcd,EAAAQ,EAAO,MAAP,MAAAR,EAAY,MAC5B,MAAMW,EAAY,CAChB,QAASlB,EACT,MAAOe,EAAO,IAAI,MAClB,iBAAkBK,EAClB,MAAAN,EACA,OAAAC,EACA,SAAAb,CACF,CAAC,EACD,OAEEoB,GAAgBd,EAAAO,EAAO,MAAP,MAAAP,EAAY,MAC9BS,EAAY,UAAUF,EAAO,IAAI,MAAO,CACtC,OAAQ,GACR,SAAUM,GAAe,CAC3B,CAAC,EACDL,EAEEO,GAA2Bd,EAAAM,EAAO,iBAAP,MAAAN,EAAuB,MACpDQ,EAAY,UAAUF,EAAO,eAAe,MAAO,CACjD,OAAQ,GACR,SAAU,MAAMG,EAAY,CAC1B,QAASlB,EACT,MAAOe,EAAO,eAAe,MAC7B,MAAAD,EACA,OAAAC,EACA,SAAAb,CACF,CAAC,CACH,CAAC,EACDc,EAEEQ,EAAU,MAAMC,EAAW,CAC/B,QAAStB,EACT,MAAOY,EAAO,MACd,eAAgBA,EAAO,QACvB,MAAAD,EACA,SAAUE,EAAW,SACrB,SAAAd,CACF,CAAC,EAEKwB,EAAa,MAAMC,GAAc,CACrC,QAASxB,EACT,QAAAqB,EACA,MAAAV,EACA,SAAUQ,EAAc,SACxB,UAAWP,EAAO,IAClB,SAAAb,CACF,CAAC,EAEK0B,EAAwBb,EAAO,MAAM,QACzCA,EAAO,eAAe,KACxB,EACIS,EACA,MAAMG,GAAc,CAClB,QAASxB,EACT,QAAAqB,EACA,MAAAV,EACA,SAAUS,EAAyB,SACnC,UAAWR,EAAO,eAClB,SAAAb,CACF,CAAC,EAEC2B,EAAM,MAAMC,EAAOf,EAAQb,CAAQ,EAEnC6B,GAAYrB,EAAAK,EAAO,YAAP,YAAAL,EAAkB,MAAM,CACxC,QAASV,EACT,OAAQwB,EACR,MAAOV,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKZ,EAAe,OACpB,SAAUa,EAAM,WAAWb,CAAc,EACzC,eAAgBa,EAAM,uBAAuBF,CAAK,EAClD,OAAQE,CACV,GAEMkB,IAAWrB,EAAAI,EAAO,WAAP,YAAAJ,EAAiB,MAAM,CACtC,QAASX,EACT,OAAQwB,EACR,MAAOV,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKZ,EAAe,OACpB,SAAUa,EAAM,WAAWb,CAAc,CAC3C,GAEMgC,EAA8BV,EAAyB,SAAS,CACpE,OAAQK,CACV,CAAC,EAEKM,GAAM,MAAMC,GAAO,CACvB,QAAAX,EACA,MAAAV,EACA,SAAAkB,GACA,SAAUV,EAAc,SACxB,4BAAAW,EACA,qBAAsBlB,EAAO,eAC7B,UAAAX,EACA,UAAA2B,EACA,UAAWhB,EAAO,IAClB,SAAAb,EACA,cAAAC,CACF,CAAC,EAEKiC,EAAgBpB,EAAW,SAAS,CAAE,OAAQQ,CAAQ,CAAC,EACvD,CAAE,mBAAAa,CAAmB,EAAInC,EACzBoC,EAAYhB,EAAc,SAAS,CAAE,OAAQY,EAAI,CAAC,EAClDK,GAAmBjB,EAAc,SAAS,CAAE,OAAQI,CAAW,CAAC,EAEhEc,EAAYxB,EAAW,SAAS,CAAE,OAAQa,CAAI,CAAC,EAE/CY,GAAYC,GAAO,CACvB,cAAAN,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAE,CACF,CAAC,EAED,MAAO,CACL,QAASJ,EACT,MAAAtB,EACA,eAAAb,EACA,sBAAuBgC,EACvB,mBAAAI,EACA,IAAKC,EACL,WAAYC,GACZ,IAAKE,GACL,IAAKD,CACP,CACF,CAQA,eAAsBb,GAAc,CAClC,QAAAgB,EACA,QAAAnB,EACA,MAAAV,EACA,SAAA8B,EACA,UAAAC,EACA,SAAA3C,CACF,EAAwB,CACtB,GAAI,CAAC2C,EACH,OAAOrB,EAGT,IAAMsB,EAAMD,EAAU,QAAQ,MAAM,CAClC,QAAAF,EACA,MAAOzC,EAAS,MAAM,kBAAkB2C,EAAU,KAAK,CACzD,CAAC,EAED,GAAIC,EAAI,OAASC,GAAS,IAAK,CAC7B,IAAMf,EAAWgB,EACfF,EACAhC,CACF,EAEMmC,EAAuB,MAAMjB,EAAS,YAAY,EAClDkB,EAAsB,MAAMlB,EAAS,WAAW,EAEtD,OAAOlB,EAAM,kBACTqC,EACED,EACAhD,EAAS,SACT+C,CACF,EACAC,CACN,CAEA,IAAMxB,EAAa,MAAMxB,EAAS,MAAM4C,CAAG,EAE3C,OAAOhC,EAAM,kBACTqC,EAAgBzB,EAAYxB,EAAS,SAAU0C,CAAQ,EACvDlB,CACN,CAgBA,eAAsBS,GAAO,CAC3B,QAAAX,EACA,MAAAV,EACA,SAAAkB,EACA,SAAAY,EACA,qBAAAQ,EACA,4BAAAnB,EACA,UAAA7B,EACA,UAAA2B,EACA,UAAAc,EACA,SAAA3C,EACA,cAAAC,CACF,EAAkC,CAChC,GAAI6B,EAAU,CACZ,GAAI,CAAC5B,EACH,MAAM,IAAI,MAAM,6BAA6B,EAG/C,GACEgD,GACAnB,GACA,OAAOmB,EAAqB,QAAW,SACvC,CACA,IAAMxB,EAAwB,OAC5ByB,GACEpB,EAA4B,OAC5BA,EAA4B,QAC9B,CACF,EACA,GACEL,GACAwB,EAAqB,OAASxB,EAE9B,MAAM,IAAI,MACR,uCAAuCwB,GAAA,YAAAA,EAAsB,MAAM,IAAIA,GAAA,YAAAA,EAAsB,MAAM,YAAY,sDACjH,CAEJ,CAEA,OAAOE,GAAe,CACpB,QAAA9B,EACA,MAAOV,EACP,OAAQkB,EACR,SAAAY,EACA,UAAAxC,CACF,CAAC,CACH,CAEA,GAAI2B,EAAW,CACb,IAAMwB,EAAe,MAAMC,GACzBhC,EACAO,EACA7B,EACAC,CACF,EAEMsD,EAAiBC,GAAkBd,EAAUC,CAAS,EAEtDc,EAAWJ,EAAeE,EAEhC,OAAO3C,EAAM,kBACTqC,EAAgBQ,EAAUzD,EAAS,SAAU0C,CAAQ,EACrDe,CACN,CAEA,MAAM,IAAI,MAAM,+CAA+C,CACjE,CAEA,eAAsBL,GAAe,CACnC,QAAA9B,EACA,OAAAT,EACA,SAAA6B,EACA,UAAAxC,EACA,MAAAU,CACF,EAMoB,CAMlB,IAAMoB,EAAM,MALK0B,EACf7C,EACAX,EACAU,CACF,EAC2B,OAAOU,CAAO,EAEzC,OAAO2B,EAAgBjB,EAAK,GAAIU,CAAQ,CAC1C,CAEA,eAAsBY,GACpBhC,EACAO,EACA7B,EACAC,EACiB,CAMjB,GAAI,CACF,OAAO,MAAMD,EAAS,OAAOC,EAAe4B,CAAS,CACvD,OAAS8B,EAAO,CACd,GAAIrC,EACF,MAAMqC,EAGR,OAAO,EACT,CACF,CAEA,SAASH,GACPd,EACAC,EACQ,CACR,OAAOA,GAAA,MAAAA,EAAW,qBACdiB,GAASjB,EAAU,qBAAsBD,CAAQ,EACjD,EACN,CASO,SAASF,GAAO,CACrB,cAAAN,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAE,CACF,EAA8B,CAC5B,IAAMuB,EAAS3B,EACZ,MAAM,EACN,MAAMI,EAAU,MAAM,CAAC,EACvB,MACCJ,EAAc,OAAOC,CAAkB,EACnCA,EAAmB,MAAM,EACzB2B,GAAI,CAAC,CACX,EACC,MAAM5B,EAAc,OAAOE,CAAS,EAAIA,EAAU,MAAM,EAAI0B,GAAI,CAAC,CAAC,EAErE,OAAO5B,EAAc,SAAS,CAC5B,OAAQ2B,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,CAUA,eAAsBE,GAAkB,CACtC,QAAAtB,EACA,MAAA7B,EACA,OAAAoD,EACA,SAAAhE,CACF,EAAoD,CAClD,IAAMiE,EAAeD,EAAO,OAC1B,CAACE,EAAoBxD,IACdwD,EAAI,KAAMC,GAAmBA,EAAE,MAAM,QAAQzD,EAAM,KAAK,CAAC,EAIvDwD,EAHE,CAACxD,EAAO,GAAGwD,CAAG,EAKzB,CAAC,CACH,EA+BA,OA7BiB,MAAM,QAAQ,IAC7BD,EAAa,IAAI,MAAOvD,GAAuB,CAC7C,IAAMgC,EAAW,MAAM1B,EAAY,CACjC,QAAAyB,EACA,MAAO/B,EAAM,MACb,MAAAE,EACA,OAAQF,EACR,SAAAV,CACF,CAAC,EAGKsB,EAAU,MAAMC,EAAW,CAC/B,QAAAkB,EACA,MAAO/B,EAAM,MACb,eAAgBA,EAAM,QACtB,MAAAE,EACA,SAAA8B,EACA,SAAA1C,CACF,CAAC,EAOD,OALoBe,EAAY,UAAUL,EAAM,MAAO,CACrD,OAAQY,EACR,SAAAoB,CACF,CAAC,CAGH,CAAC,CACH,CAGF,CS5dA,OACE,iBAAA0B,GACA,iBAAAC,OAEK,+BCFP,OAAS,mBAAAC,GAAiB,YAAAC,OAAgB,8BAC1C,OAAOC,MAAS,SCJhB,MAAO,wBAOP,OAGE,eAAAC,OAEK,8BACP,OAAS,kBAAAC,OAAsB,8BAOxB,IAAMC,EAAN,MAAMC,CAAgB,CAClB,IAEA,MAEA,cAET,YACEC,EACAC,EACAC,EACA,CACA,KAAK,IAAMF,EACX,KAAK,MAAQC,EACb,KAAK,cAAgBC,CACvB,CAEA,aAAa,OACXD,EACAC,EAC0B,CAC1B,OAAO,IAAIH,EACT,MAAMF,GAAeI,EAAM,EAAE,EAC7BA,EACAC,CACF,CACF,CAEA,aAAa,YACXC,EACAD,EAC4B,CAC5B,OAAO,QAAQ,IACbC,EAAO,IAAKF,GACVF,EAAgB,OAAOE,EAAOC,CAAa,CAC7C,CACF,CACF,CAEA,IAAI,UAAmB,CACrB,OAAO,KAAK,IAAI,SAAS,cAAc,GAAG,CAAC,GAAK,EAClD,CAEA,IAAI,OAAe,CACjB,IAAME,EAAS,KAAK,IAAI,SAAS,YAAY,GAAG,CAAC,EAC3CC,EAAMD,GAAA,YAAAA,EAAQ,WAAW,cAE/B,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,4BAA4B,EAG9C,IAAMC,EAAQ,KAAK,cAAc,SAASD,CAAG,EAE7C,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2BD,CAAG,iBAAiBD,CAAM,GAAG,EAG1E,OAAOE,CACT,CAEA,IAAI,oBAAkC,CAhFxC,IAAAC,EAAAC,EAiFI,IAAMC,GAAqBF,EAAA,KAAK,IAAI,OAAO,WAAhB,YAAAA,EAA0B,mBAC/CG,GAAuBF,EAAA,KAAK,IAAI,OAAO,aAAhB,YAAAA,EACzB,mBACEG,GACJF,GAAA,YAAAA,EAAoB,cAAcC,GAAA,YAAAA,EAAsB,aAAc,GAExE,OAAOd,GAAY,UAAU,KAAK,MAAO,CACvC,OAAAe,EACA,SAAU,KAAK,QACjB,CAAC,CACH,CAEA,MAAM,aACJL,EAC2D,CA/F/D,IAAAC,EAAAC,EAAAI,EAAAC,EAAAC,EAAAC,EAgGI,IAAMC,IACJT,EAAA,KAAK,IAAI,MAAM,SAAf,YAAAA,EAAuB,aACvBC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,WAC9BI,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,aAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,sBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,mBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,kBAEhC,GAAI,CAACC,EACH,OAGF,IAAMC,EAAQ,MAAMD,EAAGV,CAAK,EACtBY,EAAY,oBAAqBD,EAAOA,EAAK,gBAAgB,EAAIA,EAMvE,MAAO,CACL,UALA,oBAAqBC,EAAU,SAC3BA,EAAU,SAAS,gBAAgB,EACnCA,EAAU,UAGK,SAAS,EAC5B,OAAQA,EAAU,OAAO,SAAS,CACpC,CACF,CAEA,MAAM,0BACJZ,EAC6B,CA3HjC,IAAAC,EA4HI,IAAMS,GAAKT,EAAA,KAAK,IAAI,MAAM,iBAAf,YAAAA,EAA+B,cAE1C,OAAKS,GAIS,MAAMA,EAAGV,CAAK,GAEhB,gBAAgB,EAAE,SAAS,EALrC,MAMJ,CAEA,MAAM,iBAAiBA,EAA+B,CAvIxD,IAAAC,EAwII,IAAMY,EAAS,KAAK,MAAM,mBAAmBb,CAAK,EAE5Cc,EACJ,KAAK,MAAM,iBAAiBd,CAAK,GAChC,MAAM,KAAK,0BAA0Ba,CAAM,KAC3CZ,EAAA,MAAM,KAAK,aAAaY,CAAM,IAA9B,YAAAZ,EAAkC,WACnC,KAAK,SAEP,GAAI,CAACa,EACH,MAAM,IAAI,MAAM,+BAA+Bd,EAAM,YAAY,EAAE,EAGrE,OAAOc,CACT,CAEA,MAAM,MAAMC,EAA+C,CACzD,IAAMC,EAAW,MAAM,KAAK,IAAI,MAAMD,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC9D,GAAGA,EAAO,IACZ,EAEA,OAAOA,EAAO,UAAUC,CAAQ,CAClC,CAEA,MAAM,OAAOC,EAAiBF,EAA0C,CACtE,IAAML,EAAK,KAAK,IAAI,GAAGK,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQL,CAAE,EAK9B,OAFa,MADKA,EAAG,GAAGQ,CAAI,EACC,YAAYD,EAAS,CAAE,MAAO,EAAG,CAAC,GAEnD,WAAW,SAAS,CAClC,CAEA,MAAM,SACJA,EACAF,EACAI,EACiB,CACjB,IAAMT,EAAK,KAAK,IAAI,GAAGK,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQL,CAAE,EAY9B,OATa,MADKA,EAAG,GAAGQ,CAAI,EACC,YAC3B,KAAKE,GAAUD,CAAM,EAAIF,EAAUE,EACnC,CACE,MAAO,GACP,OAAQ,KAAKC,GAAUD,CAAM,EAAIA,EAAS,OAC1C,sBAAuB,EACzB,CACF,GAEY,SAAS,CACvB,CAGAC,GAAUD,EAAiE,CACzE,MAAO,gBAAiBA,CAC1B,CACF,EC/LA,OAAS,eAAAE,OAAmB,8BAC5B,OACE,gCAAAC,GACA,YAAAC,OACK,8BAWP,eAAsBC,GAAmB,CACvC,eAAAC,EACA,mBAAAC,EACA,SAAAC,CACF,EAAoE,CAClE,GAAM,CACJ,MAAAC,EACA,YAAa,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC/B,EAAIL,EAEEM,EAAaC,GAAY,UAAUJ,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMK,EAAY,CAC1B,QAASP,EACT,MAAAG,EACA,OAAAC,EACA,SAAAH,CACF,CAAC,CACH,CAAC,EAEKO,EAAU,MAAMC,EAAW,CAC/B,QAAST,EACT,MAAOI,EAAO,MACd,eAAgBA,EAAO,QACvB,MAAAD,EACA,SAAUE,EAAW,SACrB,SAAAJ,CACF,CAAC,EAEKS,EAAM,MAAMC,EAAOP,EAAQH,CAAQ,EAEnCW,EAAgBP,EAAW,SAAS,CAAE,OAAQG,CAAQ,CAAC,EACvD,CAAE,mBAAAK,CAAmB,EAAIZ,EAEzBa,EAAY,MAAMC,GAAO,CAC7B,QAASf,EACT,OAAQD,EACR,SAAAE,CACF,CAAC,EACKe,EAAYX,EAAW,SAAS,CAAE,OAAQK,CAAI,CAAC,EAErD,MAAO,CACL,QAASE,EACT,MAAAT,EACA,mBAAAU,EACA,IAAKC,EACL,IAAKE,EACL,yBAA0Bb,EAAM,8BAC5B,MAAMc,GAA4B,CAChC,SAAUZ,EAAW,SACrB,SAAAJ,EACA,eAAAF,CACF,CAAC,EACD,MACN,CACF,CAQA,eAAsBgB,GAAO,CAC3B,QAAAG,EACA,OAAAd,EACA,SAAAH,CACF,EAAuC,CACrC,GAAM,CAAE,OAAAkB,EAAQ,MAAAjB,CAAM,EAAIE,EAAO,OAAO,OAAO,eAEzCgB,EAAW,MAAMnB,EAAS,iBAAiBC,CAAK,EAChDG,EAAaC,GAAY,UAAUJ,EAAO,CAC9C,OAAQ,GACR,SAAAkB,CACF,CAAC,EAED,GAAI,OAAO,SAASD,CAAM,EACxB,OAAOd,EAAW,SAAS,CACzB,OAAQgB,GAASF,EAAkBC,CAAQ,CAC7C,CAAC,EAGH,IAAME,EAAOH,EAA4B,MAAM,CAC7C,QAAAD,EACA,IAAKjB,EAAS,IACd,MAAOA,EAAS,MAChB,SAAUA,EAAS,MAAM,8BAA8BC,CAAK,EAC5D,cAAeD,EAAS,MAAM,8BAA8BG,EAAO,KAAK,CAC1E,CAAC,EAED,OAAOC,EAAW,SAAS,CACzB,OAAQ,MAAMiB,EAAI,KAAK,CACzB,CAAC,CACH,CAQA,eAAeL,GAA4B,CACzC,eAAAlB,EACA,SAAAqB,EACA,SAAAnB,CACF,EAAqC,CA3HrC,IAAAsB,EA4HE,GAAM,CACJ,YAAa,CAAE,MAAApB,EAAO,OAAAC,CAAO,EAC7B,OAAQ,CAAE,OAAQoB,CAAa,CACjC,EAAIzB,EACE0B,EAA4BC,GAChC3B,EAAe,OAAO,MAAM,WAC9B,EAEM4B,GACJJ,EAAAC,EAAa,iBAAb,YAAAD,EAA6B,mBAEzBK,EAA0BzB,EAAM,QAClCsB,EAA0B,MAC1BA,EAA0B,QAExBI,EAA0B,MAAMpB,EAAW,CAC/C,QAASmB,EACT,MAAOxB,EAAO,MACd,eAAgBA,EAAO,QACvB,MAAAD,EACA,SAAAiB,EACA,SAAAnB,CACF,CAAC,EAYD,MAAO,CACL,gBAXsC0B,EACpC,MAAMlB,EAAW,CACf,QAASmB,EACT,MAAOJ,EAAa,eAAe,MACnC,eAAgBG,EAChB,MAAAxB,EACA,SAAAiB,EACA,SAAAnB,CACF,CAAC,EACD,OAGF,qBAAsB4B,CACxB,CACF,CF1IA,eAAsBC,EAAgB,CACpC,cAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,eAAAC,EACA,cAAAC,EACA,eAAAC,CACF,EAAiD,CAC/C,GAAM,CAACC,EAAcC,CAAW,EAAI,MAAMC,EAAgB,YACxD,CAACH,EAAe,YAAY,MAAOA,EAAe,OAAO,KAAK,EAC9DL,CACF,EAEMS,EAAc,MAAMC,GAAmB,CAC3C,mBAAAT,EACA,SAAUK,EACV,eAAAD,CACF,CAAC,EAEKM,EAAiB,MAAMC,GAC3BL,EACAE,EAAY,GACd,EAEMI,EAAS,MAAMC,GAAc,CACjC,mBAAAb,EACA,eAAAU,EACA,UAAAT,EACA,SAAUK,EACV,cAAAH,EACA,eAAAC,CACF,CAAC,EAED,MAAO,CACL,YAAAI,EACA,YAAYM,EAAyB,CAKnC,IAAMC,EAJYC,EAChBC,GAASH,EAAQF,EAAO,QAAQ,QAAQ,EAAE,SAAS,CACrD,EAEyB,MACvBA,EAAO,QAAQ,OAAOF,CAAc,EAAIA,EAAe,MAAM,EAAIM,EAAI,CAAC,CACxE,EAEA,OAAOJ,EAAO,QAAQ,SAAS,CAC7B,OAAQG,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,EAMA,eAAgB,GAChB,IAAKH,EAAO,IACZ,IAAKM,GAAOV,CAAW,EACvB,OAAAI,EACA,MAAM,MAAO,CACX,OAAOd,EAAgB,CACrB,cAAAC,EACA,mBAAoBI,EACpB,UAAAF,EACA,eAAAC,EACA,cAAeF,EACf,eAAgB,CACd,GAAGI,EACH,YAAaA,EAAe,OAC5B,OAAQA,EAAe,WACzB,CACF,CAAC,CACH,EACA,MAAM,SAASU,EAAyB,CA/F5C,IAAAK,EAAAC,EAgGM,IAAMC,EAAeJ,GAASH,EAAQF,EAAO,QAAQ,QAAQ,EAC7DU,EAAiC,CAC/B,OAAQD,EACR,YAAAb,EACA,OAAAI,CACF,CAAC,EAED,GAAM,CACJ,MAAAW,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAIrB,EAEEsB,GAAWP,EAAAM,EAAO,WAAP,YAAAN,EAAiB,MAAM,CACtC,QAASnB,EACT,OAAQqB,EACR,MAAOG,EAAM,WAAWD,CAAK,EAC7B,YAAaf,EAAY,MACzB,IAAKE,EAAe,OACpB,SAAUc,EAAM,WAAWd,CAAc,CAC3C,GACMiB,GAAYP,EAAAK,EAAO,YAAP,YAAAL,EAAkB,MAAM,CACxC,QAASpB,EACT,OAAQqB,EACR,MAAOG,EAAM,WAAWD,CAAK,EAC7B,YAAaf,EAAY,MACzB,IAAKE,EAAe,OACpB,SAAUc,EAAM,WAAWd,CAAc,EACzC,eAAgBc,EAAM,uBAAuBD,CAAK,EAClD,OAAQC,CACV,GAEA,GAAIE,EAAU,CACZ,GAAI,CAACzB,EACH,MAAM,IAAI,MAAM,6BAA6B,EAG/C,OACE2B,EACEF,EACAzB,EACAuB,CACF,EAEC,SAAS,EACT,KAAMK,GACL,OAAOA,GAAO,SAAYA,EAA2B,KAAOA,CAC9D,CACJ,CAEA,GAAIF,EAAW,CACb,GAAI,CAACzB,EACH,MAAM,IAAI,MAAM,kCAAkC,EAGpD,OAAOI,EAAY,SAASH,EAAewB,EAAWzB,CAAc,CACtE,CAEA,MAAM,IAAI,MAAM,+CAA+C,CACjE,CACF,CACF,CAEA,SAASgB,GAAO,CACd,QAAAY,EACA,mBAAAC,EACA,IAAAC,EACA,IAAAC,CACF,EAAiC,CAC/B,IAAMlB,EAASC,EAAI,CAAC,EACjB,KAAKc,EAAQ,OAAOE,CAAG,EAAIA,EAAI,MAAM,EAAIhB,EAAI,CAAC,CAAC,EAC/C,KACCc,EAAQ,OAAOC,CAAkB,GAC/BD,EAAQ,MAAM,EAAE,GAAGC,EAAmB,MAAM,CAAC,EAC3CA,EAAmB,MAAM,EACzBf,EAAI,CAAC,CACX,EACC,KAAKc,EAAQ,MAAM,EAAE,GAAGG,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,EAAIjB,EAAI,CAAC,CAAC,EAE9D,OAAOc,EAAQ,SAAS,CACtB,OAAQ,OAAOf,EAAO,QAAQ,CAAC,CACjC,CAAC,CACH,CAEA,eAAsBJ,GACpBuB,EACAxB,EACsB,CACtB,IAAMyB,EACJ,MAAMD,EAAe,iBAAiBxB,CAAc,EAatD,OAXEA,EAAe,WAAayB,EACxBzB,EACAA,EAAe,SAAS,CACtB,OAAQ0B,GACN1B,EAAe,OACfA,EAAe,SACfyB,CACF,EACA,SAAUA,CACZ,CAAC,CAGT,CDjLO,SAASE,GAAIC,EAAsB,CACxC,IAAMC,GAAgBD,GAAA,YAAAA,EAAS,gBAAiB,IAAIE,GAEpD,MAAO,CACL,OAAOC,EAAuB,CAC5B,GAAM,CAAE,OAAAC,EAAQ,MAAAC,CAAM,EAAIC,GAAcL,CAAa,EAAE,OAAOE,CAAS,EAEvE,MAAO,CACL,OAAAC,EACA,MAAMG,EAA4B,CAChC,GAAM,CAAE,aAAAC,EAAc,OAAAC,CAAO,EAAIJ,EAAME,CAAU,EAEjD,MAAO,CACL,aAAAC,EACA,OAAOE,EAA+B,CACpC,GAAM,CAAE,kBAAAC,EAAmB,YAAAC,CAAY,EAAIH,EAAOC,CAAU,EAE5D,MAAO,CACL,kBAAAC,EACA,YAAYE,EAAmC,CAC7C,MAAO,CACL,MAAM,SACJC,EACAC,EACAC,EACuB,CACvB,OAAOC,EAAI,CACT,GAAGjB,EACH,cAAAC,EACA,mBAAAc,EACA,WAAWC,GAAA,YAAAA,EAAS,aAAaA,GAAA,YAAAA,EAAS,cAC1C,cAAAF,EACA,eAAgBF,EAAYC,CAAc,EAAE,MAAM,EAClD,eAAgBG,GAAA,YAAAA,EAAS,cAC3B,CAAC,CACH,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,MAAM,gBAAgB,CACpB,mBAAAD,EACA,sBAAAG,EACA,aAAAC,EACA,UAAAC,EACA,WAAAb,EACA,eAAAc,EACA,cAAAP,EACA,iBAAAQ,CACF,EAA6C,CAC3C,OAAOL,EAAI,CACT,cAAAhB,EACA,mBAAAc,EACA,UAAWK,GAAaD,EACxB,eAAAE,EACA,cAAAP,EACA,eAAgBR,GAAcL,CAAa,EACxC,OAAO,EACP,MAAMM,CAAU,EAChB,OAAOe,CAAgB,EACvB,YAAYJ,CAAqB,EACjC,MAAM,CACX,CAAC,CACH,CACF,CACF,CAEA,eAAsBK,GACpBC,EACAC,EACwB,CACxB,IAAMxB,EAAgB,IAAIC,GAEpBE,EADeH,EAAc,eAAeuB,CAAK,EAC3B,iBAAiB,EAEvCE,EAAW,MAAMC,EAAgB,OAAOH,EAAOvB,CAAa,EASlE,OAPiB,MAAM2B,GAAkB,CACvC,MAAAJ,EACA,OAAApB,EACA,QAAAqB,EACA,SAAAC,CACF,CAAC,CAGH","names":["CallType","AssetAmount","convertDecimals","toBigInt","toDecimal","Big","Contract","createPublicClient","getContract","http","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Contract","Erc20ABI_default","getContract","createPublicClient","http","isEthersContract","Contract","createPublicClient","getContract","http","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","address","isEthersSigner","Contract","XtokensABI_default","getContract","createPublicClient","http","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createPublicClient","http","Erc20Public","#config","#publicClient","config","chain","createPublicClient","http","Erc20ABI_default","createContractWithSigner","config","signer","chain","_a","Erc20","address","Xtokens","createContractWithoutSigner","Erc20Public","createContract","CallType","convertDecimals","toBigInt","getBalance","address","chain","balanceBuilder","asset","decimals","polkadot","cfg","CallType","balance","convertDecimals","createContractWithoutSigner","getDecimals","config","assetBuiltConfig","getMin","min","toBigInt","validateSovereignAccountBalances","amount","source","destination","feeAssetBalance","transferAssetBalance","getSourceData","transferConfig","destinationAddress","destinationFee","polkadot","sourceAddress","evmSigner","_a","_b","_c","_d","_e","_f","_g","asset","destination","chain","config","zeroAmount","AssetAmount","getDecimals","feeAsset","feeCfg","feeDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalance","destinationFeeBalance","min","getMin","extrinsic","contract","destinationFeeBalanceAmount","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","feeConfig","cfg","CallType","createContractWithoutSigner","decimalsFromContract","balanceFromContract","convertDecimals","destinationFeeConfig","toDecimal","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","totalFee","createContract","error","toBigInt","result","Big","getAssetsBalances","assets","uniqueAssets","acc","a","ConfigBuilder","ConfigService","convertDecimals","toBigInt","Big","AssetAmount","getPolkadotApi","PolkadotService","_PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","_f","fn","data","unwrapped","metaId","decimals","config","response","account","args","signer","#isSigner","AssetAmount","getSovereignAccountAddresses","toBigInt","getDestinationData","transferConfig","destinationAddress","polkadot","asset","chain","config","zeroAmount","AssetAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","getSovereignAccountBalances","address","amount","decimals","toBigInt","cfg","_a","sourceConfig","sovereignAccountAddresses","getSovereignAccountAddresses","destinationFeeAssetBalance","sovereignAccountAddress","sovereignAccountBalance","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","validateSovereignAccountBalances","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","configService","ConfigService","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain","getParachainBalances","chain","address","polkadot","PolkadotService","getAssetsBalances"]}
|
|
1
|
+
{"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}\n\nexport async function getDestinationFee({\n address,\n asset,\n destination,\n fee,\n feeAsset,\n}: GetDestinationFeeParams): Promise<AssetAmount> {\n const zero = AssetAmount.fromChainAsset(destination.getChainAsset(feeAsset), {\n amount: 0n,\n });\n\n if (Number.isFinite(fee)) {\n return zero.copyWith({\n amount: fee as number,\n });\n }\n\n if (EvmParachain.isAnyParachain(destination)) {\n const polkadot = await PolkadotService.create(destination);\n const cfg = (fee as FeeConfigBuilder).build({\n address,\n api: polkadot.api,\n asset: destination.getChainAsset(asset),\n destination,\n feeAsset: destination.getChainAsset(feeAsset),\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 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;AAUA,eAAsB,kBAAkB;AAAA,EACtC;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,SAAS,GAAG,GAAG;AACxB,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,MAAO,IAAyB,MAAM;AAAA,MAC1C;AAAA,MACA,KAAK,SAAS;AAAA,MACd,OAAO,YAAY,cAAc,KAAK;AAAA,MACtC;AAAA,MACA,UAAU,YAAY,cAAc,QAAQ;AAAA,IAC9C,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;;;AE9VA,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,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;;;ACzGA,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"]}
|
package/package.json
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moonbeam-network/xcm-sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"description": "The Moonbeam XCM SDK enables developers to easily deposit and withdraw assets to Moonbeam/Moonriver from the relay chain and other parachains in the Polkadot/Kusama ecosystem",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "tsup",
|
|
7
|
-
"dev": "
|
|
8
|
-
"link": "
|
|
9
|
-
"lint": "eslint ./src --ext .js,.ts",
|
|
10
|
-
"lint:fix": "npm run lint -- --fix",
|
|
7
|
+
"dev": "tsup --watch",
|
|
8
|
+
"link": "pnpm ln --global",
|
|
11
9
|
"typecheck": "tsc --noEmit",
|
|
12
|
-
"test:acc": "vitest --run --testTimeout 300000 ./tests/acceptance"
|
|
13
|
-
"prepack": "prettier --write build/index.d.ts"
|
|
10
|
+
"test:acc": "vitest --run --testTimeout 300000 ./tests/acceptance"
|
|
14
11
|
},
|
|
15
12
|
"author": "moonbeam-foundation",
|
|
16
13
|
"license": "MIT",
|
|
@@ -32,37 +29,30 @@
|
|
|
32
29
|
"url": "https://github.com/moonbeam-foundation/xcm-sdk/issues"
|
|
33
30
|
},
|
|
34
31
|
"homepage": "https://moonbeam-foundation.github.io/xcm-sdk/latest",
|
|
35
|
-
"files": [
|
|
36
|
-
"build"
|
|
37
|
-
],
|
|
32
|
+
"files": ["build"],
|
|
38
33
|
"type": "module",
|
|
39
34
|
"exports": {
|
|
40
|
-
"
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
"default": "./build/index.mjs"
|
|
44
|
-
},
|
|
45
|
-
"require": {
|
|
46
|
-
"types": "./build/index.d.ts",
|
|
47
|
-
"default": "./build/index.cjs"
|
|
48
|
-
}
|
|
49
|
-
}
|
|
35
|
+
"import": "./build/index.mjs",
|
|
36
|
+
"types": "./build/index.d.ts",
|
|
37
|
+
"default": "./build/index.mjs"
|
|
50
38
|
},
|
|
51
39
|
"types": "./build/index.d.ts",
|
|
52
|
-
"main": "./build/index.
|
|
40
|
+
"main": "./build/index.mjs",
|
|
53
41
|
"dependencies": {
|
|
54
|
-
"@moonbeam-network/xcm-builder": "
|
|
55
|
-
"@moonbeam-network/xcm-config": "
|
|
56
|
-
"@moonbeam-network/xcm-types": "
|
|
57
|
-
"@moonbeam-network/xcm-utils": "
|
|
42
|
+
"@moonbeam-network/xcm-builder": "3.0.0",
|
|
43
|
+
"@moonbeam-network/xcm-config": "3.0.0",
|
|
44
|
+
"@moonbeam-network/xcm-types": "3.0.0",
|
|
45
|
+
"@moonbeam-network/xcm-utils": "3.0.0",
|
|
58
46
|
"big.js": "^6.2.1"
|
|
59
47
|
},
|
|
60
48
|
"peerDependencies": {
|
|
61
|
-
"@polkadot/api": "
|
|
62
|
-
"@polkadot/api-augment": "
|
|
63
|
-
"@polkadot/types": "
|
|
64
|
-
"@polkadot/util": "
|
|
65
|
-
"
|
|
66
|
-
|
|
49
|
+
"@polkadot/api": "14.3.1",
|
|
50
|
+
"@polkadot/api-augment": "14.3.1",
|
|
51
|
+
"@polkadot/types": "14.3.1",
|
|
52
|
+
"@polkadot/util": "13.2.3",
|
|
53
|
+
"viem": "^2.21.7"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/big.js": "^6.2.2"
|
|
67
57
|
}
|
|
68
58
|
}
|
package/build/index.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var Dt=Object.create;var O=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var It=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,Ft=Object.prototype.hasOwnProperty;var Mt=(a,t)=>{for(var e in t)O(a,e,{get:t[e],enumerable:!0})},lt=(a,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of It(t))!Ft.call(a,s)&&s!==e&&O(a,s,{get:()=>t[s],enumerable:!(n=Et(t,s))||n.enumerable});return a};var ft=(a,t,e)=>(e=a!=null?Dt(Tt(a)):{},lt(t||!a||!a.__esModule?O(e,"default",{value:a,enumerable:!0}):e,a)),Gt=a=>lt(O({},"__esModule",{value:!0}),a);var Vt={};Mt(Vt,{Sdk:()=>Xt,getAssetsBalances:()=>U,getBalance:()=>C,getContractFee:()=>ht,getDecimals:()=>A,getExtrinsicFee:()=>Ct,getFee:()=>yt,getFeeBalance:()=>H,getMax:()=>At,getMin:()=>F,getParachainBalances:()=>_t,getSourceData:()=>J,validateSovereignAccountBalances:()=>j});module.exports=Gt(Vt);var gt=require("@moonbeam-network/xcm-builder"),M=require("@moonbeam-network/xcm-types"),y=require("@moonbeam-network/xcm-utils"),L=ft(require("big.js"),1);var dt=require("ethers"),w=require("viem");function I(a){return"provider"in a}function P(a){return!("abi"in a)}var S=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var q=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=I(e)?new dt.Contract(this.address,S,e):(0,w.getContract)({abi:S,address:this.address,client:{public:(0,w.createPublicClient)({chain:e.chain,transport:(0,w.http)()}),wallet:e}})}async getBalance(){return P(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return P(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};var pt=require("ethers"),h=require("viem");var z=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var T=class{defaultMoonChainAddress="0x0000000000000000000000000000000000000804";address;#t;#e;#a;constructor(t,e,n){this.#t=t,this.#a=e,this.address=n??this.defaultMoonChainAddress,this.#e=I(e)?new pt.Contract(this.address,z,e):(0,h.getContract)({abi:z,address:this.address,client:{public:(0,h.createPublicClient)({chain:e.chain,transport:(0,h.http)()}),wallet:e}})}async transfer(){return P(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return t[this.#t.func].estimateGas(...this.#t.args)}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=P(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(I(this.#a)){if(!this.#a.provider)return 0n;let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#a.provider.getFeeData();return(e||0n)+(n||0n)}return(0,h.createPublicClient)({chain:this.#a.chain,transport:(0,h.http)()}).getGasPrice()}};var N=require("viem");var $=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=(0,N.createPublicClient)({chain:e,transport:(0,N.http)()})}async getBalance(){return await this.#e.readContract({abi:S,address:this.#t.address,args:this.#t.args,functionName:"balanceOf"})}async getDecimals(){return await this.#e.readContract({abi:S,address:this.#t.address,functionName:"decimals"})}};function Rt(a,t,e){var n;if(a.module==="Erc20")return new q(a,t);if(a.module==="Xtokens"){if(e&&"contracts"in e){let s=(n=e==null?void 0:e.contracts)==null?void 0:n.Xtokens;return new T(a,t,s)}return new T(a,t)}throw new Error(`Contract ${a.module} not found`)}function v(a,t){if(a.module==="Erc20")return new $(a,t.getViemChain());throw new Error(`Public Contract ${a.module} not found`)}function Q(a,t,e){return t?Rt(a,t,e):v(a,e)}var K=require("@moonbeam-network/xcm-builder"),X=require("@moonbeam-network/xcm-utils");async function C({address:a,chain:t,balanceBuilder:e,asset:n,decimals:s,polkadot:o}){let i=e.build({address:a,asset:o.chain.getBalanceAssetId(n)});if(i.type===K.CallType.Substrate){let r=await o.query(i);return t.usesChainDecimals?(0,X.convertDecimals)(r,o.decimals,s):r}return await v(i,t).getBalance()}async function A({address:a,asset:t,config:e,polkadot:n,chain:s,assetBuiltConfig:o}){let i=o||e.balance.build({address:a,asset:n.chain.getBalanceAssetId(t||e.asset)});return i.type===K.CallType.Substrate?n.getAssetDecimals(t||e.asset):v(i,s).getDecimals()}async function F(a,t){if(a.min)return t.query(a.min.build({asset:t.chain.getMinAssetId(a.asset)}));let e=t.chain.getAssetMin(a.asset);if(e){let n=await t.getAssetDecimals(a.asset);return(0,X.toBigInt)(e,n)}return 0n}function j({amount:a,source:t,destination:e}){if(!e.chain.checkSovereignAccountBalances||!e.sovereignAccountBalances)return;let{feeAssetBalance:n,transferAssetBalance:s}=e.sovereignAccountBalances;if(a>s)throw new Error(`${t.chain.name} Sovereign account in ${e.chain.name} does not have enough balance for this transaction`);if(n&&t.destinationFee.amount>n)throw new Error(`${t.chain.name} Sovereign account in ${e.chain.name} does not have enough balance to pay for fees for this transaction`)}async function J({transferConfig:a,destinationAddress:t,destinationFee:e,polkadot:n,sourceAddress:s,evmSigner:o}){var st,rt,it,ot,ct,mt,ut;let{asset:i,destination:m,source:{chain:c,config:r}}=a,u=M.AssetAmount.fromAsset(i,{amount:0n,decimals:await A({address:t,chain:c,config:r,polkadot:n})}),f=n.chain.getBalanceAssetId(((st=r==null?void 0:r.fee)==null?void 0:st.asset)||r.asset),p=(rt=r.fee)==null?void 0:rt.balance.build({address:t,asset:f}),d=(it=r.fee)!=null&&it.asset?await A({address:t,asset:r.fee.asset,assetBuiltConfig:p,chain:c,config:r,polkadot:n}):void 0,l=(ot=r.fee)!=null&&ot.asset?M.AssetAmount.fromAsset(r.fee.asset,{amount:0n,decimals:d||0}):u,D=(ct=r.destinationFee)!=null&&ct.asset?M.AssetAmount.fromAsset(r.destinationFee.asset,{amount:0n,decimals:await A({address:t,asset:r.destinationFee.asset,chain:c,config:r,polkadot:n})}):u,g=await C({address:s,asset:r.asset,balanceBuilder:r.balance,chain:c,decimals:u.decimals,polkadot:n}),k=await H({address:s,balance:g,chain:c,decimals:l.decimals,feeConfig:r.fee,polkadot:n}),W=r.asset.isEqual(r.destinationFee.asset)?g:await H({address:s,balance:g,chain:c,decimals:D.decimals,feeConfig:r.destinationFee,polkadot:n}),R=await F(r,n),E=(mt=r.extrinsic)==null?void 0:mt.build({address:t,amount:g,asset:c.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(i),source:c}),wt=(ut=r.contract)==null?void 0:ut.build({address:t,amount:g,asset:c.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),Z=D.copyWith({amount:W}),vt=await yt({balance:g,chain:c,contract:wt,decimals:l.decimals,destinationFeeBalanceAmount:Z,destinationFeeConfig:r.destinationFee,evmSigner:o,extrinsic:E,feeConfig:r.fee,polkadot:n,sourceAddress:s}),tt=u.copyWith({amount:g}),{existentialDeposit:et}=n,at=l.copyWith({amount:vt}),Bt=l.copyWith({amount:k}),nt=u.copyWith({amount:R}),xt=At({balanceAmount:tt,existentialDeposit:et,feeAmount:at,minAmount:nt});return{balance:tt,chain:c,destinationFee:e,destinationFeeBalance:Z,existentialDeposit:et,fee:at,feeBalance:Bt,max:xt,min:nt}}async function H({address:a,balance:t,chain:e,decimals:n,feeConfig:s,polkadot:o}){if(!s)return t;let i=s.balance.build({address:a,asset:o.chain.getBalanceAssetId(s.asset)});if(i.type===gt.CallType.Evm){let c=v(i,e),r=await c.getDecimals(),u=await c.getBalance();return e.usesChainDecimals?(0,y.convertDecimals)(u,o.decimals,r):u}let m=await o.query(i);return e.usesChainDecimals?(0,y.convertDecimals)(m,o.decimals,n):m}async function yt({balance:a,chain:t,contract:e,decimals:n,destinationFeeConfig:s,destinationFeeBalanceAmount:o,evmSigner:i,extrinsic:m,feeConfig:c,polkadot:r,sourceAddress:u}){if(e){if(!i)throw new Error("EVM Signer must be provided");if(s&&o&&typeof s.amount=="number"){let f=Number((0,y.toDecimal)(o.amount,o.decimals));if(f&&s.amount>f)throw new Error(`Can't get a fee, make sure you have ${s==null?void 0:s.amount} ${s==null?void 0:s.asset.originSymbol} in your source balance, needed for destination fees`)}return ht({balance:a,chain:t,config:e,decimals:n,evmSigner:i})}if(m){let f=await Ct(a,m,r,u),p=Ot(n,c),d=f+p;return t.usesChainDecimals?(0,y.convertDecimals)(d,r.decimals,n):d}throw new Error("Either contract or extrinsic must be provided")}async function ht({balance:a,config:t,decimals:e,evmSigner:n,chain:s}){let i=await Q(t,n,s).getFee(a);return(0,y.convertDecimals)(i,18,e)}async function Ct(a,t,e,n){try{return await e.getFee(n,t)}catch(s){if(a)throw s;return 0n}}function Ot(a,t){return t!=null&&t.xcmDeliveryFeeAmount?(0,y.toBigInt)(t.xcmDeliveryFeeAmount,a):0n}function At({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let s=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():(0,L.default)(0)).minus(a.isSame(e)?e.toBig():(0,L.default)(0));return a.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}async function U({address:a,chain:t,assets:e,polkadot:n}){let s=e.reduce((i,m)=>i.some(c=>c.asset.isEqual(m.asset))?i:[m,...i],[]);return await Promise.all(s.map(async i=>{let m=await A({address:a,asset:i.asset,chain:t,config:i,polkadot:n}),c=await C({address:a,asset:i.asset,balanceBuilder:i.balance,chain:t,decimals:m,polkadot:n});return M.AssetAmount.fromAsset(i.asset,{amount:c,decimals:m})}))}var x=require("@moonbeam-network/xcm-config");var G=require("@moonbeam-network/xcm-utils"),b=ft(require("big.js"),1);var _e=require("@polkadot/api-augment"),bt=require("@moonbeam-network/xcm-types"),Pt=require("@moonbeam-network/xcm-utils"),B=class a{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new a(await(0,Pt.getPolkadotApi)(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>a.create(n,e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var s,o;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(o=this.api.consts.eqBalances)==null?void 0:o.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return bt.AssetAmount.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var i,m,c,r,u,f;let e=((i=this.api.query.assets)==null?void 0:i.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.assets)||((c=this.api.query.assetRegistry)==null?void 0:c.metadata)||((r=this.api.query.assetRegistry)==null?void 0:r.currencyMetadatas)||((u=this.api.query.assetRegistry)==null?void 0:u.assetMetadatas)||((f=this.api.query.assetRegistry)==null?void 0:f.assetMetadataMap);if(!e)return;let n=await e(t),s="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:("unwrapOrDefault"in s.decimals?s.decimals.unwrapOrDefault():s.decimals).toNumber(),symbol:s.symbol.toString()}}async getAssetDecimalsFromQuery(t){var s;let e=(s=this.api.query.assetsRegistry)==null?void 0:s.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var s;let e=this.chain.getMetadataAssetId(t),n=this.chain.getAssetDecimals(t)||await this.getAssetDecimalsFromQuery(e)||((s=await this.getAssetMeta(e))==null?void 0:s.decimals)||this.decimals;if(!n)throw new Error(`No decimals found for asset ${t.originSymbol}`);return n}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],s=e.getArgs(n);return(await n(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let s=this.api.tx[e.module][e.func],o=e.getArgs(s);return(await s(...o).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0,withSignedTransaction:!0})).toString()}#t(t){return"signPayload"in t}};var Y=require("@moonbeam-network/xcm-types"),_=require("@moonbeam-network/xcm-utils");async function St({transferConfig:a,destinationAddress:t,polkadot:e}){let{asset:n,destination:{chain:s,config:o}}=a,i=Y.AssetAmount.fromAsset(n,{amount:0n,decimals:await A({address:t,chain:s,config:o,polkadot:e})}),m=await C({address:t,asset:o.asset,balanceBuilder:o.balance,chain:s,decimals:i.decimals,polkadot:e}),c=await F(o,e),r=i.copyWith({amount:m}),{existentialDeposit:u}=e,f=await qt({address:t,config:a,polkadot:e}),p=i.copyWith({amount:c});return{balance:r,chain:s,existentialDeposit:u,fee:f,min:p,sovereignAccountBalances:s.checkSovereignAccountBalances?await $t({decimals:i.decimals,polkadot:e,transferConfig:a}):void 0}}async function qt({address:a,config:t,polkadot:e}){let{amount:n,asset:s}=t.source.config.destinationFee,o=await e.getAssetDecimals(s),i=Y.AssetAmount.fromAsset(s,{amount:0n,decimals:o});if(Number.isFinite(n))return i.copyWith({amount:(0,_.toBigInt)(n,o)});let m=n.build({address:a,api:e.api,chain:e.chain,feeAsset:e.chain.getRegisteredAssetIdOrAddress(s),transferAsset:e.chain.getRegisteredAssetIdOrAddress(t.asset)});return i.copyWith({amount:await m.call()})}async function $t({transferConfig:a,decimals:t,polkadot:e}){var f;let{destination:{chain:n,config:s},source:{config:o}}=a,i=(0,_.getSovereignAccountAddresses)(a.source.chain.parachainId),m=(f=o.destinationFee)==null?void 0:f.destinationBalance,c=n.isRelay?i.relay:i.generic,r=await C({address:c,asset:s.asset,balanceBuilder:s.balance,chain:n,decimals:t,polkadot:e});return{feeAssetBalance:m?await C({address:c,asset:o.destinationFee.asset,balanceBuilder:m,chain:n,decimals:t,polkadot:e}):void 0,transferAssetBalance:r}}async function V({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:s,transferConfig:o}){let[i,m]=await B.createMulti([o.destination.chain,o.source.chain],a),c=await St({destinationAddress:t,polkadot:i,transferConfig:o}),r=await Qt(m,c.fee),u=await J({destinationAddress:t,destinationFee:r,evmSigner:e,polkadot:m,sourceAddress:s,transferConfig:o});return{destination:c,getEstimate(f){let d=(0,b.default)((0,G.toBigInt)(f,u.balance.decimals).toString()).minus(u.balance.isSame(r)?r.toBig():(0,b.default)(0));return u.balance.copyWith({amount:d.lt(0)?0n:BigInt(d.toFixed())})},isSwapPossible:!0,max:u.max,min:Nt(c),source:u,async swap(){return V({configService:a,destinationAddress:s,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...o,destination:o.source,source:o.destination}})},async transfer(f){var W,R;let p=(0,G.toBigInt)(f,u.balance.decimals);j({amount:p,destination:c,source:u});let{asset:d,source:{chain:l,config:D}}=o,g=(W=D.contract)==null?void 0:W.build({address:t,amount:p,asset:l.getAssetId(d),destination:c.chain,fee:r.amount,feeAsset:l.getAssetId(r)}),k=(R=D.extrinsic)==null?void 0:R.build({address:t,amount:p,asset:l.getAssetId(d),destination:c.chain,fee:r.amount,feeAsset:l.getAssetId(r),palletInstance:l.getAssetPalletInstance(d),source:l});if(g){if(!e)throw new Error("EVM Signer must be provided");return Q(g,e,l).transfer().then(E=>typeof E=="object"?E.hash:E)}if(k){if(!n)throw new Error("Polkadot signer must be provided");return m.transfer(s,k,n)}throw new Error("Either contract or extrinsic must be provided")}}}function Nt({balance:a,existentialDeposit:t,fee:e,min:n}){let s=(0,b.default)(0).plus(a.isSame(e)?e.toBig():(0,b.default)(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():(0,b.default)(0)).plus(a.toBig().lt(n.toBig())?n.toBig():(0,b.default)(0));return a.copyWith({amount:BigInt(s.toFixed())})}async function Qt(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,G.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function Xt(a){let t=(a==null?void 0:a.configService)??new x.ConfigService;return{assets(e){let{assets:n,asset:s}=(0,x.ConfigBuilder)(t).assets(e);return{assets:n,asset(o){let{sourceChains:i,source:m}=s(o);return{sourceChains:i,source(c){let{destinationChains:r,destination:u}=m(c);return{destinationChains:r,destination(f){return{async accounts(p,d,l){return V({...a,configService:t,destinationAddress:d,evmSigner:(l==null?void 0:l.evmSigner)??(l==null?void 0:l.ethersSigner),sourceAddress:p,transferConfig:u(f).build(),polkadotSigner:l==null?void 0:l.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:s,evmSigner:o,keyOrAsset:i,polkadotSigner:m,sourceAddress:c,sourceKeyOrChain:r}){return V({configService:t,destinationAddress:e,evmSigner:o??s,polkadotSigner:m,sourceAddress:c,transferConfig:(0,x.ConfigBuilder)(t).assets().asset(i).source(r).destination(n).build()})}}}async function _t(a,t){let e=new x.ConfigService,s=e.getChainConfig(a).getAssetsConfigs(),o=await B.create(a,e);return await U({chain:a,assets:s,address:t,polkadot:o})}0&&(module.exports={Sdk,getAssetsBalances,getBalance,getContractFee,getDecimals,getExtrinsicFee,getFee,getFeeBalance,getMax,getMin,getParachainBalances,getSourceData,validateSovereignAccountBalances});
|
|
2
|
-
//# sourceMappingURL=index.cjs.map
|