CDP SDK TypeScript - v1.31.0
    Preparing search index...

    Type Alias AccountActions

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

    Type declaration

    • 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",
      });
    • 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",
      });
    • 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`);
      }
    • 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}`);
    • __experimental_useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>

      Experimental! This method name will change, and is subject to other breaking changes.

      Uses a spend permission to execute a transaction. This allows the account to spend tokens that have been approved via a spend permission.

      If the network doesn't support spend permissions via CDP API.

      const spendPermission = {
      account: "0x1234...", // Smart account that owns the tokens
      spender: account.address, // This account that can spend
      token: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", // ETH
      allowance: parseEther("0.01"),
      period: 86400, // 1 day
      start: 0,
      end: 281474976710655,
      salt: 0n,
      extraData: "0x",
      };

      const result = await account.__experimental_useSpendPermission({
      spendPermission,
      value: parseEther("0.001"), // Spend 0.001 ETH
      network: "base-sepolia",
      });