UNPKG

edwin-sdk

Version:

SDK for integrating AI agents with DeFi protocols

62 lines (54 loc) 2.25 kB
import { EdwinPlugin } from '../../core/classes/edwinPlugin'; import { EdwinTool, Chain } from '../../core/types'; import { UniswapProtocol } from './uniswapProtocol'; import { EdwinEVMWallet } from '../../core/wallets'; import { LiquidityParametersSchema, LiquidityParameters } from './parameters'; export class UniswapPlugin extends EdwinPlugin { constructor(wallet: EdwinEVMWallet) { super('uniswap', [new UniswapProtocol(wallet)]); } getTools(): Record<string, EdwinTool> { // Combine public and private tools return { ...this.getPublicTools(), ...this.getPrivateTools(), }; } getPublicTools(): Record<string, EdwinTool> { // Uniswap has no public tools return {}; } getPrivateTools(): Record<string, EdwinTool> { const uniswapProtocol = this.toolProviders.find( provider => provider instanceof UniswapProtocol ) as UniswapProtocol; return { uniswapSwap: { name: 'uniswap_swap', description: 'Swap tokens on Uniswap', schema: LiquidityParametersSchema.schema, execute: async (params: LiquidityParameters) => { return await uniswapProtocol.swap(params); }, }, uniswapAddLiquidity: { name: 'uniswap_add_liquidity', description: 'Add liquidity to Uniswap pool', schema: LiquidityParametersSchema.schema, execute: async (params: LiquidityParameters) => { return await uniswapProtocol.addLiquidity(params); }, }, uniswapRemoveLiquidity: { name: 'uniswap_remove_liquidity', description: 'Remove liquidity from Uniswap pool', schema: LiquidityParametersSchema.schema, execute: async (params: LiquidityParameters) => { return await uniswapProtocol.removeLiquidity(params); }, }, }; } supportsChain = (chain: Chain) => chain.type === 'evm'; } export const uniswap = (wallet: EdwinEVMWallet) => new UniswapPlugin(wallet);