AccountActions: Actions & {
    quoteSwap: (
        options: AccountQuoteSwapOptions,
    ) => Promise<AccountQuoteSwapResult>;
    sendTransaction: (
        options: Omit<SendTransactionOptions, "address">,
    ) => Promise<TransactionResult>;
    swap: (options: AccountSwapOptions) => Promise<AccountSwapResult>;
    transfer: (options: TransferOptions) => Promise<{ transactionHash: Hex }>;
}

Type declaration

  • quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>

    Creates a swap quote without executing the transaction. This is useful when you need to get swap details before executing the swap. The taker is automatically set to the account's address.

    const swapQuote = await account.quoteSwap({
    network: "base",
    fromToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
    toToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
    fromAmount: BigInt("1000000000000000000"), // 1 WETH in wei
    });

    if (swapQuote.liquidityAvailable) {
    console.log(`Can swap for ${swapQuote.toAmount} USDC`);
    }
  • sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>

    Signs an EVM transaction and sends it to the specified network using the Coinbase API. This method handles nonce management and gas estimation automatically.

    Sending an RLP-encoded transaction

    import { parseEther, serializeTransaction } from "viem";
    import { baseSepolia } from "viem/chains";

    const { transactionHash } = await account.sendTransaction({
    transaction: serializeTransaction({
    to: "0x4252e0c9A3da5A2700e7d91cb50aEf522D0C6Fe8",
    value: parseEther("0.000001"),
    chainId: baseSepolia.id,
    // Fields below are optional, CDP API will populate them if omitted.
    // nonce
    // maxPriorityFeePerGas
    // maxFeePerGas
    // gas
    }),
    network: "base-sepolia",
    });

    Sending an EIP-1559 transaction request object

    const { transactionHash } = await account.sendTransaction({
    transaction: {
    to: "0x4252e0c9A3da5A2700e7d91cb50aEf522D0C6Fe8",
    value: parseEther("0.000001"),
    // Fields below are optional, CDP API will populate them if omitted.
    // nonce
    // maxPriorityFeePerGas
    // maxFeePerGas
    // gas
    },
    network: "base-sepolia",
    });
  • swap: (options: AccountSwapOptions) => Promise<AccountSwapResult>

    Executes a token swap on the specified network. This method handles all the steps required for a swap, including Permit2 signatures if needed. The taker is automatically set to the account's address.

    If liquidity is not available when using inline options.

    // First create a swap quote
    const swapQuote = await cdp.evm.createSwapQuote({
    network: "base",
    toToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
    fromToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
    fromAmount: BigInt("1000000000000000000"), // 1 WETH in wei
    taker: account.address
    });

    // Check if liquidity is available
    if (!swapQuote.liquidityAvailable) {
    console.error("Insufficient liquidity for swap");
    return;
    }

    // Execute the swap
    const { transactionHash } = await account.swap({
    swapQuote: swapQuote
    });

    console.log(`Swap executed with transaction hash: ${transactionHash}`);
    // Create and execute swap in one call
    const { transactionHash } = await account.swap({
    network: "base",
    toToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
    fromToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
    fromAmount: BigInt("1000000000000000000"), // 1 WETH in wei
    });

    console.log(`Swap executed with transaction hash: ${transactionHash}`);
  • transfer: (options: TransferOptions) => Promise<{ transactionHash: Hex }>

    Transfer an amount of a token from an account to another account.

    const { transactionHash } = await sender.transfer({
    to: "0x9F663335Cd6Ad02a37B633602E98866CF944124d",
    amount: 10000n, // equivalent to 0.01 USDC
    token: "usdc",
    network: "base-sepolia",
    });

    Using parseUnits to specify USDC amount

    import { parseUnits } from "viem";

    const { transactionHash } = await sender.transfer({
    to: "0x9F663335Cd6Ad02a37B633602E98866CF944124d",
    amount: parseUnits("0.01", 6), // USDC uses 6 decimal places
    token: "usdc",
    network: "base-sepolia",
    });

    Transfer ETH

    import { parseEther } from "viem";

    const { transactionHash } = await sender.transfer({
    to: "0x9F663335Cd6Ad02a37B633602E98866CF944124d",
    amount: parseEther("0.000001"),
    token: "eth",
    network: "base-sepolia",
    });

    Using a contract address

    import { parseEther } from "viem";

    const { transactionHash } = await sender.transfer({
    to: "0x9F663335Cd6Ad02a37B633602E98866CF944124d",
    amount: parseEther("0.000001"),
    token: "0x4200000000000000000000000000000000000006", // WETH on Base Sepolia
    network: "base-sepolia",
    });

    Transfer to another account

    const sender = await cdp.evm.createAccount({ name: "Sender" });
    const receiver = await cdp.evm.createAccount({ name: "Receiver" });

    const { transactionHash } = await sender.transfer({
    to: receiver,
    amount: 10000n, // equivalent to 0.01 USDC
    token: "usdc",
    network: "base-sepolia",
    });