import { authenticatedEvmClient } from './client';
import { http, createWalletClient } from 'viem';
import { base } from 'viem/chains';
import { parseEther } from 'viem/utils';
export const sendEth = async ({
fromAddress,
toAddress,
amount,
password,
}: {
fromAddress: string;
toAddress: string;
amount: string; // Amount in ETH (e.g., "0.1")
password?: string;
}) => {
const evmClient = await authenticatedEvmClient();
// Get external server key shares (required for signing)
const keyShares = await evmClient.getExternalServerKeyShares({
accountAddress: fromAddress,
});
// Create public client for transaction preparation
const publicClient = evmClient.createViemPublicClient({
chain: base,
rpcUrl: 'https://mainnet.base.org',
});
// Prepare transaction
const preparedTx = await publicClient.prepareTransactionRequest({
to: toAddress as `0x${string}`,
value: parseEther(amount),
chain: base,
account: fromAddress as `0x${string}`,
});
// Sign transaction
const signedTx = await evmClient.signTransaction({
senderAddress: fromAddress as `0x${string}`,
externalServerKeyShares: keyShares,
transaction: preparedTx,
password,
});
// Send transaction
const walletClient = createWalletClient({
chain: base,
transport: http('https://mainnet.base.org'),
account: fromAddress as `0x${string}`,
});
const txHash = await walletClient.sendRawTransaction({
serializedTransaction: signedTx,
});
return txHash;
};
// Usage
const txHash = await sendEth({
fromAddress: '0xYourWalletAddress',
toAddress: '0xRecipientAddress',
amount: '0.1',
password: 'your-password',
});
console.log('Transaction sent:', txHash);