diff --git a/packages/builder/src/mrl/MrlBuilder.constants.ts b/packages/builder/src/mrl/MrlBuilder.constants.ts index bbc56813..a9e9fc33 100644 --- a/packages/builder/src/mrl/MrlBuilder.constants.ts +++ b/packages/builder/src/mrl/MrlBuilder.constants.ts @@ -1,6 +1,2 @@ export const BATCH_CONTRACT_ADDRESS = '0x0000000000000000000000000000000000000808'; - -export enum Provider { - WORMHOLE = 'Wormhole', -} diff --git a/packages/builder/src/mrl/MrlBuilder.interfaces.ts b/packages/builder/src/mrl/MrlBuilder.interfaces.ts index c6bc9e5d..8d85587c 100644 --- a/packages/builder/src/mrl/MrlBuilder.interfaces.ts +++ b/packages/builder/src/mrl/MrlBuilder.interfaces.ts @@ -8,16 +8,12 @@ import type { HexString } from '@polkadot/util/types'; import type { BuilderPrams, ConfigBuilder } from '../builder.interfaces'; import type { ContractConfig } from '../contract'; import type { ExtrinsicConfig } from '../extrinsic'; -import type { Provider } from './MrlBuilder.constants'; import type { WormholeConfig } from './providers/wormhole/wormhole'; -export interface MrlConfigBuilder - extends ConfigBuilder< - ContractConfig | ExtrinsicConfig | WormholeConfig, - MrlBuilderParams - > { - provider: Provider; -} +export type MrlConfigBuilder = ConfigBuilder< + ContractConfig | ExtrinsicConfig | WormholeConfig, + MrlBuilderParams +>; export interface MrlBuilderParams extends BuilderPrams { isAutomatic: boolean; diff --git a/packages/builder/src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts b/packages/builder/src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts index e2740d74..780c3a9a 100644 --- a/packages/builder/src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts +++ b/packages/builder/src/mrl/providers/wormhole/contract/TokenBridge/TokenBridge.ts @@ -1,7 +1,6 @@ import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils'; import type { Address } from 'viem'; import { ContractConfig } from '../../../../../contract'; -import { Provider } from '../../../../MrlBuilder.constants'; import type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces'; import { wormholeFactory } from '../../wormhole'; import { TOKEN_BRIDGE_ABI } from './TokenBridgeAbi'; @@ -11,7 +10,6 @@ const module = 'TokenBridge'; export function TokenBridge() { return { transferTokens: (): MrlConfigBuilder => ({ - provider: Provider.WORMHOLE, build: ({ asset, destination, destinationAddress, moonChain }) => { const wh = wormholeFactory(moonChain); const whDestination = wh.getChain(destination.getWormholeName()).config diff --git a/packages/builder/src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts b/packages/builder/src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts index 8aa0fcf6..ec92a86e 100644 --- a/packages/builder/src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts +++ b/packages/builder/src/mrl/providers/wormhole/contract/TokenBridgeRelayer/TokenBridgeRelayer.ts @@ -1,7 +1,6 @@ import { convertAddressTo32Bytes } from '@moonbeam-network/xcm-utils'; import type { Address } from 'viem'; import { ContractConfig } from '../../../../../contract'; -import { Provider } from '../../../../MrlBuilder.constants'; import type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces'; import { wormholeFactory } from '../../wormhole'; import { TOKEN_BRIDGE_RELAYER_ABI } from './TokenBridgeRelayerAbi'; @@ -11,7 +10,6 @@ const module = 'TokenBridgeRelayer'; export function TokenBridgeRelayer() { return { transferTokensWithRelay: (): MrlConfigBuilder => ({ - provider: Provider.WORMHOLE, build: ({ asset, destination, destinationAddress, moonChain }) => { const wh = wormholeFactory(moonChain); const whDestination = wh.getChain(destination.getWormholeName()).config diff --git a/packages/builder/src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts b/packages/builder/src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts index a8b15dfc..88b28fe1 100644 --- a/packages/builder/src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts +++ b/packages/builder/src/mrl/providers/wormhole/extrinsic/ethereumXcm/ethereumXcm.ts @@ -2,10 +2,7 @@ import { type Address, encodeFunctionData } from 'viem'; import { ERC20_ABI } from '../../../../../balance/Erc20Abi'; import type { ContractConfig } from '../../../../../types/evm/ContractConfig'; import { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig'; -import { - BATCH_CONTRACT_ADDRESS, - Provider, -} from '../../../../MrlBuilder.constants'; +import { BATCH_CONTRACT_ADDRESS } from '../../../../MrlBuilder.constants'; import type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces'; import { contract as ContractBuilder } from '../../contract'; import { BATCH_CONTRACT_ABI } from './BatchContractAbi'; @@ -13,7 +10,6 @@ import { BATCH_CONTRACT_ABI } from './BatchContractAbi'; export function ethereumXcm() { return { transact: (): MrlConfigBuilder => ({ - provider: Provider.WORMHOLE, build: (params) => { const { asset, isAutomatic, moonChain, moonGasLimit } = params; diff --git a/packages/builder/src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts b/packages/builder/src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts index a32a9751..8f72998c 100644 --- a/packages/builder/src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts +++ b/packages/builder/src/mrl/providers/wormhole/extrinsic/polkadotXcm/polkadotXcm.ts @@ -2,7 +2,6 @@ import { type AnyParachain, AssetAmount } from '@moonbeam-network/xcm-types'; import { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils'; import { ExtrinsicBuilder } from '../../../../../extrinsic/ExtrinsicBuilder'; import { ExtrinsicConfig } from '../../../../../types/substrate/ExtrinsicConfig'; -import { Provider } from '../../../../MrlBuilder.constants'; import type { MrlConfigBuilder } from '../../../../MrlBuilder.interfaces'; // TODO: Can we move them somewhere? @@ -12,7 +11,6 @@ const CROSS_CHAIN_FEE = 100_000_000_000_000_000n; export function polkadotXcm() { return { send: (): MrlConfigBuilder => ({ - provider: Provider.WORMHOLE, build: ({ asset, destination, diff --git a/packages/builder/src/mrl/providers/wormhole/wormhole/wormhole.ts b/packages/builder/src/mrl/providers/wormhole/wormhole/wormhole.ts index f6716ff2..8ff19c30 100644 --- a/packages/builder/src/mrl/providers/wormhole/wormhole/wormhole.ts +++ b/packages/builder/src/mrl/providers/wormhole/wormhole/wormhole.ts @@ -3,12 +3,11 @@ import { getMultilocationDerivedAddresses } from '@moonbeam-network/xcm-utils'; import { evmToAddress } from '@polkadot/util-crypto/address'; import { Wormhole } from '@wormhole-foundation/sdk-connect'; import { getExtrinsicAccount } from '../../../../extrinsic/ExtrinsicBuilder.utils'; -import { Provider } from '../../../MrlBuilder.constants'; import type { MrlBuilderParams, MrlConfigBuilder, } from '../../../MrlBuilder.interfaces'; -import { WormholeConfig, type WormholeFunctionArgs } from './WormholeConfig'; +import { WormholeConfig } from './WormholeConfig'; import { wormholeFactory } from './wormholeFactory'; export const GMP_CONTRACT_ADDRESS = @@ -17,7 +16,6 @@ export const GMP_CONTRACT_ADDRESS = export function wormhole() { return { tokenTransfer: (): MrlConfigBuilder => ({ - provider: Provider.WORMHOLE, build: ({ asset, destination, @@ -31,7 +29,11 @@ export function wormhole() { const isNativeAsset = asset.isSame(source.nativeAsset); const isDestinationMoonChain = destination.isEqual(moonChain); const isDestinationEvmChain = EvmChain.is(destination); - const tokenAddress = isNativeAsset ? 'native' : asset.address; + const tokenAddress = isNativeAsset + ? 'native' + : isDestinationEvmChain + ? moonChain.getChainAsset(asset).address + : asset.address; const { address20: computedOriginAccount } = getMultilocationDerivedAddresses({ diff --git a/packages/config/src/mrl-configs/moonbaseAlpha.ts b/packages/config/src/mrl-configs/moonbaseAlpha.ts index 1c587a6a..efca13c9 100644 --- a/packages/config/src/mrl-configs/moonbaseAlpha.ts +++ b/packages/config/src/mrl-configs/moonbaseAlpha.ts @@ -14,6 +14,10 @@ export const moonbaseAlphaRoutes = new ChainRoutes({ asset: ftmwh, balance: BalanceBuilder().evm().erc20(), }, + fee: { + asset: dev, + balance: BalanceBuilder().substrate().system().account(), + }, }, destination: { asset: ftm, diff --git a/packages/mrl/src/getTransferData/getSourceData.ts b/packages/mrl/src/getTransferData/getSourceData.ts index fabab7cd..eb720818 100644 --- a/packages/mrl/src/getTransferData/getSourceData.ts +++ b/packages/mrl/src/getTransferData/getSourceData.ts @@ -2,7 +2,6 @@ import { ContractConfig, type ExtrinsicConfig, MrlBuilder, - Provider, WormholeConfig, } from '@moonbeam-network/xcm-builder'; import type { AssetRoute, FeeConfig } from '@moonbeam-network/xcm-config'; @@ -202,25 +201,22 @@ export async function getRelayFee({ return getWormholeFee({ asset, chain, config: transfer }); } - if (route?.mrl?.transfer.provider === Provider.WORMHOLE) { - const builderParams = await getMrlBuilderParams({ - asset, - destinationAddress, - destinationFee, - route, - sourceAddress, - }); - - const wormholeConfig = MrlBuilder() - .wormhole() - .wormhole() - .tokenTransfer() - .build(builderParams); + // TODO this is only valid for Wormhole Provider + const builderParams = await getMrlBuilderParams({ + asset, + destinationAddress, + destinationFee, + route, + sourceAddress, + }); - return getWormholeFee({ asset, chain, config: wormholeConfig }); - } + const wormholeConfig = MrlBuilder() + .wormhole() + .wormhole() + .tokenTransfer() + .build(builderParams); - return; + return getWormholeFee({ asset, chain, config: wormholeConfig }); } async function getWormholeFee({