import { CdpClient } from '@coinbase/cdp-sdk';
import { parseEther, createPublicClient, http } from 'viem';
import { baseSepolia } from 'viem/chains';
import { Connection } from '@solana/web3.js';
const publicClient = createPublicClient({
chain: baseSepolia,
transport: http(),
});
const connection = new Connection("https://api.devnet.solana.com");
async function sendTransferWithEVMAccount(cdp: CdpClient): Promise<void> {
console.log("\n=== EOA Example ===");
const sender = await cdp.evm.getOrCreateAccount({ name: "Sender" });
const receiver = await cdp.evm.getOrCreateAccount({ name: "Receiver" });
console.log(`Transferring 0.00001 ETH from ${sender.address} to ${receiver.address}...`);
const { transactionHash } = await sender.transfer({
to: receiver,
amount: parseEther("0.00001"),
token: "eth",
network: "base-sepolia"
});
const receipt = await publicClient.waitForTransactionReceipt({
hash: transactionHash,
});
console.log(`Transfer status: ${receipt.status}`);
console.log(
`Explorer link: https://sepolia.basescan.org/tx/${receipt.transactionHash}`
);
}
async function sendTransferWithSmartAccount(cdp: CdpClient): Promise<void> {
console.log("\n=== Smart Account Example ===");
const sender = await cdp.evm.createSmartAccount({
owner: await cdp.evm.getOrCreateAccount({ name: "Owner" })
});
const receiver = await cdp.evm.getOrCreateAccount({ name: "Receiver" });
console.log(`Transferring 0.00001 ETH from ${sender.address} to ${receiver.address}...`);
const { userOpHash } = await sender.transfer({
to: receiver,
amount: parseEther("0.00001"),
token: "eth",
network: "base-sepolia"
});
const receipt = await sender.waitForUserOperation({
userOpHash,
});
console.log(`Transfer status: ${receipt.status}`);
console.log(`Explorer link: https://sepolia.basescan.org/tx/${transactionHash}`);
}
async function sendTransferWithSolanaAccount(cdp: CdpClient): Promise<void> {
console.log("\n=== Solana Account Example ===");
const sender = await cdp.solana.getOrCreateAccount({ name: "Sender" });
const receiver = await cdp.solana.getOrCreateAccount({ name: "Receiver" });
console.log(`Transferring 0.0001 SOL from ${sender.address} to ${receiver.address}...`);
const { signature } = await sender.transfer({
to: receiver,
amount: 0.0001 * LAMPORTS_PER_SOL,
token: "sol",
network: "devnet",
});
const { blockhash, lastValidBlockHeight } =
await connection.getLatestBlockhash();
const confirmation = await connection.confirmTransaction(
{
signature,
blockhash,
lastValidBlockHeight,
},
"confirmed"
);
if (confirmation.value.err) {
console.log(`Something went wrong! Error: ${confirmation.value.err.toString()}`);
} else {
console.log(
`Transaction confirmed: Link: https://explorer.solana.com/tx/${signature}?cluster=devnet`
);
}
}
async function main(): Promise<void> {
const cdp = new CdpClient();
try {
await sendTransferWithEVMAccount(cdp);
await sendTransferWithSmartAccount(cdp);
await sendTransferWithSolanaAccount(cdp);
} catch (error) {
console.error('Error:', error);
}
}
if (require.main === module) {
main().catch(console.error);
}