Moonbeam XCM SDK Reference: Types and Interfaces
The XCM SDK is based on defining an asset to transfer, then the source chain to send the asset from, and the destination chain to send the asset to, which, together, build the transfer data.
The following sections cover the types and interfaces you'll encounter when working with assets, chains, and transfer data.
Assets
The Asset Object
Defines an asset's key and symbol used on the asset's origin chain.
Attributes
keystring - Identifies an assetoriginSymbolstring - The symbol of the asset on the asset's origin chain
The Asset Amount Object
Defines properties related to an asset, including Asset properties, the decimals and symbol of the asset, and the amount an associated source or destination address has of the asset.
Note
A few utility methods are available for working with the AssetAmount class that converts the amount to various formats. Please refer to the Methods for Asset Conversions section.
Attributes
keystring - Identifies an assetoriginSymbolstring - The symbol of the asset on the asset's origin chainamountbigint - Identifies a particular amount of the asset (i.e., balance, minimum, maximum, etc.)decimalsnumber - The number of decimals the asset hassymbolstring - The symbol of the asset
Chains
The Ecosystem Type
Specifies the relay chain ecosystem a chain belongs to. Can be any of the following ecosystems as defined by the Ecosystem enum:
The Chain Type
Specifies what kind of parachain a chain is.
The Chain Asset ID Type
A generic type used to specify the location of the asset on the chain, which is different on every chain.
The Chain Object
Defines properties related to a chain and is used to define the source and destination chains. If a chain is an EVM parachain, there are a couple of additional properties.
Attributes
ecosystemEcosystem - Identifies the ecosystem the chain belongs to:polkadot,kusama, oralphanet-relayisTestChainboolean - Whether the chain is a testnetkeystring - Identifies a chainnamestring - The name of the chaintypeChainType - The type of the chain:parachainorevm-parachainassetsDataMap<string, ChainAssetsData> - A list of the assets that the chain supportsgenesisHashstring - The hash of the genesis blockparachainIdnumber - The ID of the parachain (not the EVM chain ID)ss58Formatnumber - The ss58 format for the chainusesChainDecimalsboolean - A flag indicating if the chain uses its own decimals in balance queries for all the assets. Defaults tofalsecheckSovereignAccountBalancesboolean - Indicates whether a check of the sovereign account balances for the asset is required when transferring to this chain. Defaults tofalsewsstring - The WebSocket endpoint for the chainidnumber - For EVM parachains only - The chain IDrpcstring - For EVM parachains only - The HTTP RPC endpoint for the chain
// The Chain object
// Moonbeam's Chain Object
{
ecosystem: 'polkadot',
isTestChain: false,
key: 'moonbeam',
name: 'Moonbeam',
type: 'evm-parachain',
assetsData: [Map],
genesisHash: '0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d',
parachainId: 2004,
ss58Format: 1284,
usesChainDecimals: false,
weight: 1000000000,
ws: 'wss://wss.api.moonbeam.network',
id: 1284,
rpc: 'https://rpc.api.moonbeam.network'
}
The Chain Assets Data Object
Defines the information needed to target the asset on the chain. This is mostly for internal usage to accommodate how chains store their assets. The SDK defaults to the asset ID if certain properties do not apply to the given chain.
Attributes
assetAsset - The asset's key and origin symbolbalanceIdChainAssetId - The balance ID of the asset. Defaults to the asset IDdecimalsnumber - The number of decimals the asset hasidChainAssetId - The asset IDmetadataIdChainAssetId - The metadata ID of the assetminIdChainAssetId - The minimum ID of the assetpalletInstancenumber - The number of the pallet instance the asset belongs tominnumber - The minimum amount of the asset that is required to be left in the account for it to be active. Similar to the existential deposit, except it is for non-native assets
Transfer Data
The Transfer Data Object
Defines the complete transfer data for transferring an asset, including asset, source chain, and destination chain information, as well as a few helper functions for the transfer process.
Attributes
destinationDestinationChainTransferData - The assembled destination chain and address informationgetEstimatefunction - Gets the estimated amount of the asset that the destination address will receiveisSwapPossibleboolean - Returns whether or not the swap is possiblemaxAssetAmount - The maximum amount of the asset that can be transferredminAssetAmount - The minimum amount of the asset that can be transferredsourceSourceChainTransferData - The assembled source chain and address informationswapfunction - Swaps the destination and the source chains and returns the swapped transfer datatransferfunction - Transfers a given amount of the asset from the source chain to the destination chain
// The Transfer Data object
// For sending DOT from Polkadot to Moonbeam
{
destination: {
balance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
chain: {
ecosystem: 'polkadot',
isTestChain: false,
key: 'moonbeam',
name: 'Moonbeam',
type: 'evm-parachain',
assetsData: [Map],
genesisHash: '0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d',
parachainId: 2004,
ss58Format: 1284,
usesChainDecimals: false,
weight: 1000000000,
ws: 'wss://wss.api.moonbeam.network',
id: 1284,
rpc: 'https://rpc.api.moonbeam.network'
},
existentialDeposit: {
key: 'glmr',
originSymbol: 'GLMR',
amount: 0n,
decimals: 18,
symbol: 'GLMR'
},
fee: {
key: 'dot',
originSymbol: 'DOT',
amount: 33068783n,
decimals: 10,
symbol: 'DOT'
},
min: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
}
},
getEstimate: [Function: getEstimate],
isSwapPossible: true,
max: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
min: {
key: 'dot',
originSymbol: 'DOT',
amount: 33068783n,
decimals: 10,
symbol: 'DOT'
},
source: {
balance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
chain: {
ecosystem: 'polkadot',
isTestChain: false,
key: 'polkadot',
name: 'Polkadot',
type: 'parachain',
assetsData: Map(0) {},
genesisHash: '0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3',
parachainId: 0,
ss58Format: 0,
usesChainDecimals: false,
weight: 1000000000,
ws: 'wss://rpc.polkadot.io'
},
destinationFeeBalance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
existentialDeposit: {
key: 'dot',
originSymbol: 'DOT',
amount: 10000000000n,
decimals: 10,
symbol: 'DOT'
},
fee: {
key: 'dot',
originSymbol: 'DOT',
amount: 169328990n,
decimals: 10,
symbol: 'DOT'
},
feeBalance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
max: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
min: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
}
},
swap: [AsyncFunction: swap],
transfer: [AsyncFunction: transfer]
}
The Destination Chain Transfer Data Object
Defines the destination chain data for the transfer.
Attributes
balanceAssetAmount - The balance of the asset being transferred on the destination addresschainAnyChain - The destination chain informationexistentialDepositAssetAmount - The existential deposit for the asset being transferred on the destination chainfeeAssetAmount - The amount of fees for the asset being transferred on the destination chainminAssetAmount - The minimum amount of the asset to transfer. This is different thanTransferData.min, as this dictates the minimum amount that should be received on the destination chain
// The Destination Chain Transfer Data object
// For sending DOT from Polkadot to Moonbeam
{
balance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
chain: {
ecosystem: 'polkadot',
isTestChain: false,
key: 'moonbeam',
name: 'Moonbeam',
type: 'evm-parachain',
assetsData: [Map],
genesisHash: '0xfe58ea77779b7abda7da4ec526d14db9b1e9cd40a217c34892af80a9b332b76d',
parachainId: 2004,
ss58Format: 1284,
usesChainDecimals: false,
weight: 1000000000,
ws: 'wss://wss.api.moonbeam.network',
id: 1284,
rpc: 'https://rpc.api.moonbeam.network'
},
existentialDeposit: {
key: 'glmr',
originSymbol: 'GLMR',
amount: 0n,
decimals: 18,
symbol: 'GLMR'
},
fee: {
key: 'dot',
originSymbol: 'DOT',
amount: 33068783n,
decimals: 10,
symbol: 'DOT'
},
min: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
}
}
The Source Chain Transfer Data Object
Defines the source chain data for the transfer.
Attributes
balanceAssetAmount - The balance of the asset being transferred for the source addresschainAnyChain - The source chain informationdestinationFeeBalanceAssetAmount - The balance of the asset used to pay for fees in the destination chainexistentialDepositAssetAmount - The existential deposit for the asset being transferred on the source chainfeeAssetAmount - The amount of fees for the asset being transferred on the source chainfeeBalanceAssetAmount - The balance of the asset being transferred on the source chainminAssetAmount - The minimum amount of the asset that should be kept on the source chain, taking into consideration theexistentialDepositandfeefor the transfermaxAssetAmount - The maximum amount of the asset that can be transferred
// The Source Chain Transfer Data object
// For sending DOT from Polkadot to Moonbeam
{
balance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
chain: {
ecosystem: 'polkadot',
isTestChain: false,
key: 'polkadot',
name: 'Polkadot',
type: 'parachain',
assetsData: Map(0) {},
genesisHash: '0x91b171bb158e2d3848fa23a9f1c25182fb8e20313b2c1eb49219da7a70ce90c3',
parachainId: 0,
ss58Format: 0,
usesChainDecimals: false,
weight: 1000000000,
ws: 'wss://rpc.polkadot.io'
},
destinationFeeBalance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
existentialDeposit: {
key: 'dot',
originSymbol: 'DOT',
amount: 10000000000n,
decimals: 10,
symbol: 'DOT'
},
fee: {
key: 'dot',
originSymbol: 'DOT',
amount: 169328990n,
decimals: 10,
symbol: 'DOT'
},
feeBalance: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
max: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
},
min: {
key: 'dot',
originSymbol: 'DOT',
amount: 0n,
decimals: 10,
symbol: 'DOT'
}
}
SDK Options
The SDK Options Object
Defines options to initialize the SDK, including EVM and Polkadot signers and a custom configuration service.
Attributes
Signers
The EVM Signer Type
Defines the EVM signer for transfers involving EVM chains. Can be an Ethers signer or viem Wallet Client.
The Polkadot Signer Type
Defines the signer for transfers involving non-EVM chains. Can be a signer or a Keyring pair.
Configurations
The interfaces in this section are primarily used for defining your own custom configuration source and adding or updating new asset and chain configurations to the XCM SDK. To learn how to add new configurations, please refer to the Contribute to the XCM SDK guide.
The Config Service Object
Defines a custom configuration service. This overrides the asset and chain configurations in the xcm-config package, which is exposed by default by the SDK.
Attributes
assetsMap<string, Asset> - A list of the supported assets mapping each asset key to its correspondingAssetobjectchainsMap<string, AnyChain> - A list of the supported assets mapping each chain key to its correspondingChainobjectchainsConfigMap<string, ChainConfig> - A list of the supported chain configurations mapping each chain key to its correspondingChainConfigobject
The Chain Config Object
Defines a chain's configurations, including information for each chain's supported assets.
Attributes
// The Chain Config object
// For configuring the Polkadot Asset Hub
{
assets: [
...new AssetConfig({
asset: usdt,
balance: BalanceBuilder().substrate().assets().account(),
destination: moonbeam,
destinationFee: {
amount: FeeBuilder()
.xcmPaymentApi()
.xcmPaymentFee({ isAssetReserveChain: false }),
asset: usdt,
balance: BalanceBuilder().substrate().assets().account(),
},
extrinsic: ExtrinsicBuilder()
.polkadotXcm()
.limitedReserveTransferAssets()
.X2(),
fee: {
asset: dot,
balance: BalanceBuilder().substrate().system().account(),
xcmDeliveryFeeAmount,
},
min: AssetMinBuilder().assets().asset(),
}),
...
],
chain: new Parachain({
assetsData: [
{
asset: usdt,
id: 1984,
palletInstance: 50,
},
...
],
ecosystem: Ecosystem.Polkadot,
genesisHash:
'0x68d56f15f85d3136970ec16946040bc1752654e906147f7e43e9d539d7c3de2f',
key: 'Polkadot-asset-hub',
name: 'Polkadot Asset Hub',
parachainId: 1000,
ss58Format: 42,
ws: 'wss://polkadot-asset-hub-rpc.polkadot.io',
})
}
The Asset Config Object
Defines an asset's configurations for a source chain and includes information about the destination chain, associated fees for transferring the asset from the source chain to the destination chain, and builder functions that define how to transfer the asset.
Attributes
assetAsset - The asset's key and origin symbolbalanceBalanceConfigBuilder - The query builder for retrieving the balance of an asset for a given accountcontractContractConfigBuilder - The contract call builder for a cross-chain transfer. This is specific to EVM chains that use contracts to interact with Substrate pallets for cross-chain transfers, such as Moonbeam's X-Tokens precompiled contractdestinationAnyChain - The destination chain informationdestinationFeeDestinationFeeConfig - The destination chain feesextrinsicExtrinsicConfigBuilder - The extrinsic builder for a cross-chain transferfeeFeeAssetConfig - The source chain feesminAssetMinConfigBuilder - The query builder for retrieving the minimum amount of an asset required to be left in an account
// The Asset Config object
// For configuring USDT to be sent from
// the Polkadot Asset Hub to Moonbeam
{
asset: usdt,
balance: BalanceBuilder().substrate().assets().account(),
destination: moonbeam,
destinationFee: {
amount: FeeBuilder()
.xcmPaymentApi()
.xcmPaymentFee({ isAssetReserveChain: false }),
asset: usdt,
balance: BalanceBuilder().substrate().assets().account(),
},
extrinsic: ExtrinsicBuilder()
.polkadotXcm()
.limitedReserveTransferAssets()
.X2(),
fee: {
asset: dot,
balance: BalanceBuilder().substrate().system().account(),
xcmDeliveryFeeAmount,
},
min: AssetMinBuilder().assets().asset(),
}
The Fee Asset Config
Defines the fees for a particular asset on the source chain.
Attributes
The Destination Fee Asset Config
Defines the fees for a particular asset on the destination chain.
Attributes
assetAsset - The asset's key and origin symbolbalanceBalanceConfigBuilder - The query builder for retrieving the balance of an asset for a given accountxcmDeliveryFeeAmountnumber - The delivery fee amount for the cross-chain transferamountnumber | FeeConfigBuilder - The fee amount or the query builder for retrieving the fee amount for the execution of the cross-chain transfer