diff --git a/packages/config/src/types/AssetRoute.ts b/packages/config/src/types/AssetRoute.ts index 34574411..9856104e 100644 --- a/packages/config/src/types/AssetRoute.ts +++ b/packages/config/src/types/AssetRoute.ts @@ -18,7 +18,6 @@ export interface AssetRouteConstructorParams { destination: DestinationConfig; contract?: ContractConfigBuilder; extrinsic?: ExtrinsicConfigBuilder; - mrl?: MrlConfig; } export interface SourceConfig { @@ -75,20 +74,16 @@ export class AssetRoute { readonly extrinsic?: ExtrinsicConfigBuilder; - readonly mrl?: MrlConfig; - constructor({ source, destination, contract, extrinsic, - mrl, }: AssetRouteConstructorParams) { this.source = source; this.destination = destination; this.contract = contract; this.extrinsic = extrinsic; - this.mrl = mrl; } getDestinationFeeAssetOnSource(): ChainAsset { diff --git a/packages/config/src/types/ChainRoutes.ts b/packages/config/src/types/ChainRoutes.ts index 35046e9e..a95d6c10 100644 --- a/packages/config/src/types/ChainRoutes.ts +++ b/packages/config/src/types/ChainRoutes.ts @@ -23,14 +23,13 @@ export class ChainRoutes { constructor({ chain, routes }: ChainRoutesConstructorParams) { this.chain = chain; this.#routes = new Map( - routes.map(({ source, destination, contract, extrinsic, mrl }) => [ + routes.map(({ source, destination, contract, extrinsic }) => [ `${source.asset.key}-${destination.chain.key}`, new AssetRoute({ source: { ...source, chain }, destination, contract, extrinsic, - mrl, }), ]), ); diff --git a/packages/config/src/types/MrlAssetRoute.ts b/packages/config/src/types/MrlAssetRoute.ts index f23d05a0..83a36312 100644 --- a/packages/config/src/types/MrlAssetRoute.ts +++ b/packages/config/src/types/MrlAssetRoute.ts @@ -3,12 +3,14 @@ import type { Asset } from '@moonbeam-network/xcm-types'; import { AssetRoute, type AssetRouteConstructorParams, + type MrlConfig, type SourceConfig, } from './AssetRoute'; export interface MrlAssetRouteConstructorParams extends AssetRouteConstructorParams { source: MrlSourceConfig; + mrl: MrlConfig; } export interface MrlSourceConfig extends SourceConfig { @@ -19,6 +21,7 @@ export interface MrlSourceConfig extends SourceConfig { } export class MrlAssetRoute extends AssetRoute { + readonly mrl: MrlConfig; readonly source: MrlSourceConfig; constructor({ @@ -28,7 +31,8 @@ export class MrlAssetRoute extends AssetRoute { extrinsic, mrl, }: MrlAssetRouteConstructorParams & { source: MrlSourceConfig }) { - super({ source, destination, contract, extrinsic, mrl }); + super({ source, destination, contract, extrinsic }); + this.mrl = mrl; this.source = source; } } diff --git a/packages/config/src/types/MrlChainRoutes.ts b/packages/config/src/types/MrlChainRoutes.ts index 4aa9b88d..55930a6c 100644 --- a/packages/config/src/types/MrlChainRoutes.ts +++ b/packages/config/src/types/MrlChainRoutes.ts @@ -1,3 +1,5 @@ +import type { AnyAsset, AnyChain } from '@moonbeam-network/xcm-types'; +import { getKey } from '../config.utils'; import { ChainRoutes, type ChainRoutesConstructorParams } from './ChainRoutes'; import { MrlAssetRoute, @@ -37,4 +39,21 @@ export class MrlChainRoutes extends ChainRoutes { getRoutes(): MrlAssetRoute[] { return Array.from(this.#routes.values()); } + + getAssetRoute( + asset: string | AnyAsset, + destination: string | AnyChain, + ): MrlAssetRoute { + const assetKey = getKey(asset); + const destKey = getKey(destination); + const route = this.#routes.get(`${assetKey}-${destKey}`); + + if (!route) { + throw new Error( + `AssetRoute for asset ${assetKey} and destination ${destKey} not found`, + ); + } + + return route; + } } diff --git a/packages/mrl/src/mrl.ts b/packages/mrl/src/mrl.ts index 05341f49..b3c06cdf 100644 --- a/packages/mrl/src/mrl.ts +++ b/packages/mrl/src/mrl.ts @@ -1,4 +1,8 @@ -import { ConfigService, mrlRoutesMap } from '@moonbeam-network/xcm-config'; +import { + ConfigService, + type MrlAssetRoute, + mrlRoutesMap, +} from '@moonbeam-network/xcm-config'; import type { AnyAsset, AnyChain, @@ -39,6 +43,7 @@ export function Mrl(options?: MrlOptions) { source, destination, }); + return { setIsAutomatic(isAutomatic: boolean) { return { @@ -50,7 +55,7 @@ export function Mrl(options?: MrlOptions) { destinationAddress: string; }) { return getTransferData({ - route, + route: route as MrlAssetRoute, sourceAddress, destinationAddress, isAutomatic,