diff --git a/packages/plugin-evm/src/actions/bridge.ts b/packages/plugin-evm/src/actions/bridge.ts index 5683f814b30..0e62ce4564e 100644 --- a/packages/plugin-evm/src/actions/bridge.ts +++ b/packages/plugin-evm/src/actions/bridge.ts @@ -1,5 +1,7 @@ -import type { IAgentRuntime, Memory, State } from "@elizaos/core"; import { + IAgentRuntime, + Memory, + State, composeContext, generateObjectDeprecated, ModelClass, @@ -10,7 +12,7 @@ import { ExtendedChain, getRoutes, } from "@lifi/sdk"; - +import { zeroAddress } from "viem"; import { initWalletProvider, WalletProvider } from "../providers/wallet"; import { bridgeTemplate } from "../templates"; import type { BridgeParams, Transaction } from "../types"; @@ -59,8 +61,9 @@ export class BridgeAction { fromChainId: this.walletProvider.getChainConfigs(params.fromChain) .id, toChainId: this.walletProvider.getChainConfigs(params.toChain).id, - fromTokenAddress: params.fromToken, - toTokenAddress: params.toToken, + // if user wants to bridge native token, setting fromToken to zero address + fromTokenAddress: params.fromToken ? params.fromToken : zeroAddress, + toTokenAddress: params.toToken ? params.toToken : zeroAddress, fromAmount: parseEther(params.amount).toString(), fromAddress: fromAddress, toAddress: params.toAddress || fromAddress, @@ -100,15 +103,24 @@ export const bridgeAction = { const walletProvider = initWalletProvider(runtime); const action = new BridgeAction(walletProvider); + // Get all chains from walletProvider + const chains = Object.keys(walletProvider.chains); + // Compose bridge context const bridgeContext = composeContext({ state, template: bridgeTemplate, }); + const contextWithChains = bridgeContext.replace( + "SUPPORTED_CHAINS", + chains.map((item) => `"${item}"`).join("|") + ); + + // Generate bridge details object const content = await generateObjectDeprecated({ runtime, - context: bridgeContext, - modelClass: ModelClass.LARGE, + context: contextWithChains, + modelClass: ModelClass.SMALL, }); const bridgeOptions: BridgeParams = { diff --git a/packages/plugin-evm/src/actions/swap.ts b/packages/plugin-evm/src/actions/swap.ts index 718be7edb9d..0543df97b5c 100644 --- a/packages/plugin-evm/src/actions/swap.ts +++ b/packages/plugin-evm/src/actions/swap.ts @@ -1,5 +1,7 @@ -import type { IAgentRuntime, Memory, State } from "@elizaos/core"; import { + IAgentRuntime, + Memory, + State, composeContext, generateObjectDeprecated, ModelClass, @@ -10,7 +12,6 @@ import { ExtendedChain, getRoutes, } from "@lifi/sdk"; - import { initWalletProvider, WalletProvider } from "../providers/wallet"; import { swapTemplate } from "../templates"; import type { SwapParams, Transaction } from "../types"; @@ -107,29 +108,36 @@ export const swapAction = { callback?: any ) => { console.log("Swap action handler called"); - const walletProvider = initWalletProvider(runtime); - const action = new SwapAction(walletProvider); - // Compose swap context - const swapContext = composeContext({ - state, - template: swapTemplate, - }); - const content = await generateObjectDeprecated({ - runtime, - context: swapContext, - modelClass: ModelClass.LARGE, - }); + try { + const walletProvider = initWalletProvider(runtime); - const swapOptions: SwapParams = { - chain: content.chain, - fromToken: content.inputToken, - toToken: content.outputToken, - amount: content.amount, - slippage: content.slippage, - }; + const chains = Object.keys(walletProvider.chains); + const context = composeContext({ + state, + template: swapTemplate, + }); + const contextWithChains = context.replace( + "SUPPORTED_CHAINS", + chains.map((item) => `"${item}"`).join("|") + ); - try { + // Generate swap details object + const content = (await generateObjectDeprecated({ + runtime, + context: contextWithChains, + modelClass: ModelClass.SMALL, + })) as SwapParams; + + const swapOptions: SwapParams = { + chain: content.chain, + fromToken: content.fromToken, + toToken: content.toToken, + amount: content.amount, + slippage: content.slippage, + }; + + const action = new SwapAction(walletProvider); const swapResp = await action.swap(swapOptions); if (callback) { callback({