import { CHAIN_NAMESPACES, PortalRequestMethod } from '@portal-hq/utils' import type { IPortalApi, IPortalProvider } from '@portal-hq/utils' import type { SendAssetParams } from '@portal-hq/utils' import type { SendAssetResponse } from '../../../types' import type { ChainHandler, SendOptions } from './ChainHandler' export class EvmChainHandler implements ChainHandler { readonly namespace = CHAIN_NAMESPACES.EIP155 constructor( private readonly api: IPortalApi, private readonly provider: IPortalProvider, ) {} public async send( params: SendAssetParams, chainId: string, options: SendOptions, ): Promise { const { to, token, amount } = params const transactionDetails = await this.api.buildTransaction( to, token, amount, chainId, options.traceId, ) return this.provider.request({ method: PortalRequestMethod.EthSendTransaction, params: [transactionDetails.transaction], chainId, ...(Object.keys(options).length > 0 && { options }), }) } }