import { SolanaAgentKit } from "../index"; import { PublicKey, SystemProgram, Transaction } from "@solana/web3.js"; import { LAMPORTS_PER_SOL } from "@solana/web3.js"; import { getAssociatedTokenAddress, createTransferInstruction, getMint } from "@solana/spl-token"; /** * Transfer SOL or SPL tokens to a recipient * @param agent SolanaAgentKit instance * @param to Recipient's public key * @param amount Amount to transfer * @param mint Optional mint address for SPL tokens * @returns Transaction signature */ export async function transfer( agent: SolanaAgentKit, to: PublicKey, amount: number, mint?: PublicKey ): Promise { try { let tx: string; if (!mint) { // Transfer native SOL const transaction = new Transaction().add( SystemProgram.transfer({ fromPubkey: agent.wallet_address, toPubkey: to, lamports: amount * LAMPORTS_PER_SOL }) ); tx = await agent.connection.sendTransaction( transaction, [agent.wallet] ); } else { // Transfer SPL token const fromAta = await getAssociatedTokenAddress(mint, agent.wallet_address); const toAta = await getAssociatedTokenAddress(mint, to); // Get mint info to determine decimals const mintInfo = await getMint(agent.connection, mint); const adjustedAmount = amount * Math.pow(10, mintInfo.decimals); const transaction = new Transaction().add( createTransferInstruction( fromAta, toAta, agent.wallet_address, adjustedAmount ) ); tx = await agent.connection.sendTransaction( transaction, [agent.wallet] ); } return tx; } catch (error: any) { throw new Error(`Transfer failed: ${error.message}`); } }