Skip to main content
Defined in: client/evm/evm.ts:107 The namespace containing all EVM methods.

Implements

Constructors

Constructor

new EvmClient(): EvmClient;

Returns

EvmClient

Methods

createAccount()

createAccount(options?: CreateServerAccountOptions): Promise<{
  address: `0x${string}`;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  policies?: string[];
  quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>;
  sign: (parameters: {
     hash: `0x${string}`;
  }) => Promise<`0x${string}`>;
  signMessage: (parameters: {
     message: SignableMessage;
  }) => Promise<`0x${string}`>;
  signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>;
  signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>;
  swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>;
  transfer: (options: TransferOptions) => Promise<{
     transactionHash: `0x${string}`;
  }>;
  type: "evm-server";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<{ address: `0x${string}`; listTokenBalances: (options: Omit<(...), (...)>) => Promise<(...)>; name?: string; policies?: (...)[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<(...)>; requestFaucet: (options: Omit<(...), (...)>) => Promise<(...)>; sendTransaction: (options: Omit<(...), (...)>) => Promise<(...)>; sign: (parameters: { hash: ... }) => Promise<(...)>; signMessage: (parameters: { message: ... }) => Promise<(...)>; signTransaction: (transaction: TransactionSerializable) => Promise<(...)>; signTypedData: (parameters: TypedDataDefinition<(...), (...)>) => Promise<(...)>; swap: (options: AccountSwapOptions) => Promise<(...)>; transfer: (options: TransferOptions) => Promise<(...)>; type: "evm-server"; useNetwork: <Network extends NetworkOrRpcUrl>(network: Network) => Promise<{ [K in keyof (Omit<{ address: `0x${string}`; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<...>; ... 12 more ...; useNetwork: ...; }, keyof Actions | ... 5 mor...; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(...)> }, (keyof Actions) | "transfer" | "sendTransaction" | "quoteSwap" | "swap" | "useSpendPermission" | "useNetwork"> & { [K in string | number | symbol]: ({ sendTransaction: ...; transfer: ...; waitForTransactionReceipt: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>;
}>;
Defined in: client/evm/evm.ts:142 Creates a new CDP EVM account.

Parameters

options?
CreateServerAccountOptions = {} Optional parameters for creating the account.

Returns

Promise<{ address: `0x${string}`; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; policies?: string[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<`0x${string}`>; signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>; signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>; swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>; transfer: (options: TransferOptions) => Promise<{ transactionHash: `0x${string}`; }>; type: "evm-server"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<&#123; address: `0x\&#123;string\&#125;\`; listTokenBalances: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; name?: string; policies?: (...)\[\]; quoteSwap: (options: AccountQuoteSwapOptions) =\> Promise\<(...)\>; requestFaucet: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sendTransaction: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sign: (parameters: \{ hash: ... \}) =\> Promise\<(...)\>; signMessage: (parameters: \{ message: ... \}) =\> Promise\<(...)\>; signTransaction: (transaction: TransactionSerializable) =\> Promise\<(...)\>; signTypedData: (parameters: TypedDataDefinition\<(...), (...)\>) =\> Promise\<(...)\>; swap: (options: AccountSwapOptions) =\> Promise\<(...)\>; transfer: (options: TransferOptions) =\> Promise\<(...)\>; type: "evm-server"; useNetwork: \<Network extends NetworkOrRpcUrl\>(network: Network) =\> Promise\<\{ \[K in keyof (Omit\<\{ address: \`0x&#123;string&#125;`; sign: (parameters: { hash: `0x\&#123;string\&#125;\`; \}) =\> Promise\<\`0x&#123;string&#125;`>; signMessage: (parameters: &#123; message: SignableMessage; &#125;) => Promise<…>; … 12 more …; useNetwork: …; }, keyof Actions | … 5 mor…; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(…)> }, (keyof Actions) | “transfer” | “sendTransaction” | “quoteSwap” | “swap” | “useSpendPermission” | “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; sendTransaction: …; transfer: …; waitForTransactionReceipt: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>; }> A promise that resolves to the newly created account.

Examples

         const account = await cdp.evm.createAccount();
         const account = await cdp.evm.createAccount(&#123; name: "MyAccount" &#125;);
         const idempotencyKey = uuidv4();

         // First call
         await cdp.evm.createAccount({
           idempotencyKey,
         });

         // Second call with the same idempotency key will return the same account
         await cdp.evm.createAccount({
           idempotencyKey,
         });

Implementation of

EvmClientInterface.createAccount

createEvmEip7702Delegation()

createEvmEip7702Delegation(options: CreateEvmEip7702DelegationOptions): Promise<CreateEvmEip7702Delegation201>;
Defined in: client/evm/evm.ts:1560 Creates an EIP-7702 delegation for an EVM EOA account, upgrading it with smart account capabilities. The delegation allows the EVM EOA to be used as a smart account, which enables batched transactions and gas sponsorship via paymaster.

Parameters

options
CreateEvmEip7702DelegationOptions The delegation parameters (address and network required, enableSpendPermissions and idempotencyKey optional).

Returns

Promise<CreateEvmEip7702Delegation201> A promise that resolves to the delegation result including the delegation operation ID.

Example

const result = await cdp.evm.createEvmEip7702Delegation({
  address: account.address,
  network: "base-sepolia",
  enableSpendPermissions: false,
});
console.log(result.delegationOperationId);

Implementation of

EvmClientInterface.createEvmEip7702Delegation

createSmartAccount()

createSmartAccount(options: CreateSmartAccountOptions): Promise<{
  address: `0x${string}`;
  getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  owners: EvmAccount[];
  policies: string[] | undefined;
  quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>;
  signTypedData: (options: Omit<SignTypedDataOptions, "address"> & {
     network: KnownEvmNetworks;
  }) => Promise<`0x${string}`>;
  swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>;
  transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>;
  type: "evm-smart";
  useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, "useNetwork"> & &#123; [K in string | number | symbol]: (&#123; getUserOperation: ...; sendUserOperation: ...; signTypedData: ...; waitForUserOperation: ... &#125; & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & &#123; network: Network &#125;)[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>;
  waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>;
}>;
Defined in: client/evm/evm.ts:363 Creates a new CDP EVM smart account.

Parameters

options
CreateSmartAccountOptions Parameters for creating the smart account.

Returns

Promise<{ address: `0x${string}`; getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; owners: EvmAccount[]; policies: string[] | undefined; quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>; signTypedData: (options: Omit<SignTypedDataOptions, "address"> & { network: KnownEvmNetworks; }) => Promise<`0x${string}`>; swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>; transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>; type: "evm-smart"; useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, “useNetwork”> & { [K in string | number | symbol]: ({ getUserOperation: …; sendUserOperation: …; signTypedData: …; waitForUserOperation: … } & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & { network: Network })[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>; waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>; }> A promise that resolves to the newly created smart account.

Examples

         const account = await cdp.evm.createAccount();
         const smartAccount = await cdp.evm.createSmartAccount({
           owner: account,
         });
         // See https://viem.sh/docs/accounts/local/privateKeyToAccount
         const privateKey = generatePrivateKey();
         const account = privateKeyToAccount(privateKey);
         const smartAccount = await client.evm.createSmartAccount({
           owner: account,
         });
         const idempotencyKey = uuidv4();

         // First call
         await cdp.evm.createSmartAccount({
           owner: account,
           idempotencyKey,
         });

         // Second call with the same idempotency key will return the same smart account
         await cdp.evm.createSmartAccount({
           owner: account,
           idempotencyKey,

Implementation of

EvmClientInterface.createSmartAccount

createSpendPermission()

createSpendPermission(options: CreateSpendPermissionOptions): Promise<UserOperation>;
Defined in: client/evm/evm.ts:394 Creates a spend permission for a smart account.

Parameters

options
CreateSpendPermissionOptions Parameters for creating the spend permission.

Returns

Promise<UserOperation> A promise that resolves to the spend permission.

Example

const userOperation = await cdp.evm.createSpendPermission({
  spendPermission,
  network: "base-sepolia",
});

createSwapQuote()

createSwapQuote(options: CreateSwapQuoteOptions): Promise<
  | CreateSwapQuoteResult
| SwapUnavailableResult>;
Defined in: client/evm/evm.ts:722 Creates a quote for a swap between two tokens on an EVM network.

Parameters

options
CreateSwapQuoteOptions The options for creating a swap quote.

Returns

Promise< | CreateSwapQuoteResult | SwapUnavailableResult> A promise that resolves to the swap quote result or a response indicating that liquidity is unavailable.

Example

const swapQuote = await cdp.evm.createSwapQuote({
  network: "ethereum",
  toToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
  fromToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
  fromAmount: BigInt("1000000000000000000"), // 1 WETH
  taker: "0x1234567890123456789012345678901234567890"
});

Implementation of

EvmClientInterface.createSwapQuote

exportAccount()

exportAccount(options: ExportServerAccountOptions): Promise<string>;
Defined in: client/evm/evm.ts:276 Exports a CDP EVM account’s private key. It is important to store the private key in a secure place after it’s exported.

Parameters

options
ExportServerAccountOptions Parameters for exporting the account.

Returns

Promise<string> A promise that resolves to the exported account’s 32-byte private key as a hex string, without the “0x” prefix.

Examples

const privateKey = await cdp.evm.exportAccount({
  address: "0x1234567890123456789012345678901234567890",
});
const privateKey = await cdp.evm.exportAccount({
  name: "MyAccount",
});

Implementation of

EvmClientInterface.exportAccount

getAccount()

getAccount(options: GetServerAccountOptions): Promise<{
  address: `0x${string}`;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  policies?: string[];
  quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>;
  sign: (parameters: {
     hash: `0x${string}`;
  }) => Promise<`0x${string}`>;
  signMessage: (parameters: {
     message: SignableMessage;
  }) => Promise<`0x${string}`>;
  signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>;
  signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>;
  swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>;
  transfer: (options: TransferOptions) => Promise<{
     transactionHash: `0x${string}`;
  }>;
  type: "evm-server";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<{ address: `0x${string}`; listTokenBalances: (options: Omit<(...), (...)>) => Promise<(...)>; name?: string; policies?: (...)[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<(...)>; requestFaucet: (options: Omit<(...), (...)>) => Promise<(...)>; sendTransaction: (options: Omit<(...), (...)>) => Promise<(...)>; sign: (parameters: { hash: ... }) => Promise<(...)>; signMessage: (parameters: { message: ... }) => Promise<(...)>; signTransaction: (transaction: TransactionSerializable) => Promise<(...)>; signTypedData: (parameters: TypedDataDefinition<(...), (...)>) => Promise<(...)>; swap: (options: AccountSwapOptions) => Promise<(...)>; transfer: (options: TransferOptions) => Promise<(...)>; type: "evm-server"; useNetwork: <Network extends NetworkOrRpcUrl>(network: Network) => Promise<{ [K in keyof (Omit<{ address: `0x${string}`; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<...>; ... 12 more ...; useNetwork: ...; }, keyof Actions | ... 5 mor...; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(...)> }, (keyof Actions) | "transfer" | "sendTransaction" | "quoteSwap" | "swap" | "useSpendPermission" | "useNetwork"> & { [K in string | number | symbol]: ({ sendTransaction: ...; transfer: ...; waitForTransactionReceipt: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>;
}>;
Defined in: client/evm/evm.ts:515 Gets a CDP EVM account.

Parameters

options
GetServerAccountOptions Parameters for getting the account. Either address or name must be provided. If both are provided, lookup will be done by address and name will be ignored.

Returns

Promise<{ address: `0x${string}`; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; policies?: string[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<`0x${string}`>; signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>; signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>; swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>; transfer: (options: TransferOptions) => Promise<{ transactionHash: `0x${string}`; }>; type: "evm-server"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<&#123; address: `0x\&#123;string\&#125;\`; listTokenBalances: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; name?: string; policies?: (...)\[\]; quoteSwap: (options: AccountQuoteSwapOptions) =\> Promise\<(...)\>; requestFaucet: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sendTransaction: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sign: (parameters: \{ hash: ... \}) =\> Promise\<(...)\>; signMessage: (parameters: \{ message: ... \}) =\> Promise\<(...)\>; signTransaction: (transaction: TransactionSerializable) =\> Promise\<(...)\>; signTypedData: (parameters: TypedDataDefinition\<(...), (...)\>) =\> Promise\<(...)\>; swap: (options: AccountSwapOptions) =\> Promise\<(...)\>; transfer: (options: TransferOptions) =\> Promise\<(...)\>; type: "evm-server"; useNetwork: \<Network extends NetworkOrRpcUrl\>(network: Network) =\> Promise\<\{ \[K in keyof (Omit\<\{ address: \`0x&#123;string&#125;`; sign: (parameters: { hash: `0x\&#123;string\&#125;\`; \}) =\> Promise\<\`0x&#123;string&#125;`>; signMessage: (parameters: &#123; message: SignableMessage; &#125;) => Promise<…>; … 12 more …; useNetwork: …; }, keyof Actions | … 5 mor…; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(…)> }, (keyof Actions) | “transfer” | “sendTransaction” | “quoteSwap” | “swap” | “useSpendPermission” | “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; sendTransaction: …; transfer: …; waitForTransactionReceipt: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>; }> A promise that resolves to the account.

Examples

         const account = await cdp.evm.getAccount({
           address: "0x1234567890123456789012345678901234567890",
         });
         const account = await cdp.evm.getAccount({
           name: "MyAccount",
         });

Implementation of

EvmClientInterface.getAccount

getEvmEip7702DelegationOperationById()

getEvmEip7702DelegationOperationById(delegationOperationId: string): Promise<EvmEip7702DelegationOperation>;
Defined in: client/evm/evm.ts:1594 Gets the EIP-7702 delegation operation status.

Parameters

delegationOperationId
string The delegation operation ID returned by createEvmEip7702Delegation.

Returns

Promise<EvmEip7702DelegationOperation> A promise that resolves to the delegation operation status.

Example

const operation = await cdp.evm.getEvmEip7702DelegationOperationById(
  "delegation-op-123",
);
console.log(operation.status); // "PENDING" | "SUBMITTED" | "COMPLETED" | "FAILED"

Implementation of

EvmClientInterface.getEvmEip7702DelegationOperationById

getOrCreateAccount()

getOrCreateAccount(options: GetOrCreateServerAccountOptions): Promise<{
  address: `0x${string}`;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  policies?: string[];
  quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>;
  sign: (parameters: {
     hash: `0x${string}`;
  }) => Promise<`0x${string}`>;
  signMessage: (parameters: {
     message: SignableMessage;
  }) => Promise<`0x${string}`>;
  signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>;
  signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>;
  swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>;
  transfer: (options: TransferOptions) => Promise<{
     transactionHash: `0x${string}`;
  }>;
  type: "evm-server";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<{ address: `0x${string}`; listTokenBalances: (options: Omit<(...), (...)>) => Promise<(...)>; name?: string; policies?: (...)[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<(...)>; requestFaucet: (options: Omit<(...), (...)>) => Promise<(...)>; sendTransaction: (options: Omit<(...), (...)>) => Promise<(...)>; sign: (parameters: { hash: ... }) => Promise<(...)>; signMessage: (parameters: { message: ... }) => Promise<(...)>; signTransaction: (transaction: TransactionSerializable) => Promise<(...)>; signTypedData: (parameters: TypedDataDefinition<(...), (...)>) => Promise<(...)>; swap: (options: AccountSwapOptions) => Promise<(...)>; transfer: (options: TransferOptions) => Promise<(...)>; type: "evm-server"; useNetwork: <Network extends NetworkOrRpcUrl>(network: Network) => Promise<{ [K in keyof (Omit<{ address: `0x${string}`; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<...>; ... 12 more ...; useNetwork: ...; }, keyof Actions | ... 5 mor...; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(...)> }, (keyof Actions) | "transfer" | "sendTransaction" | "quoteSwap" | "swap" | "useSpendPermission" | "useNetwork"> & { [K in string | number | symbol]: ({ sendTransaction: ...; transfer: ...; waitForTransactionReceipt: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>;
}>;
Defined in: client/evm/evm.ts:579 Gets a CDP EVM account, or creates one if it doesn’t exist.

Parameters

options
GetOrCreateServerAccountOptions Parameters for getting or creating the account.

Returns

Promise<{ address: `0x${string}`; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; policies?: string[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<`0x${string}`>; signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>; signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>; swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>; transfer: (options: TransferOptions) => Promise<{ transactionHash: `0x${string}`; }>; type: "evm-server"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<&#123; address: `0x\&#123;string\&#125;\`; listTokenBalances: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; name?: string; policies?: (...)\[\]; quoteSwap: (options: AccountQuoteSwapOptions) =\> Promise\<(...)\>; requestFaucet: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sendTransaction: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sign: (parameters: \{ hash: ... \}) =\> Promise\<(...)\>; signMessage: (parameters: \{ message: ... \}) =\> Promise\<(...)\>; signTransaction: (transaction: TransactionSerializable) =\> Promise\<(...)\>; signTypedData: (parameters: TypedDataDefinition\<(...), (...)\>) =\> Promise\<(...)\>; swap: (options: AccountSwapOptions) =\> Promise\<(...)\>; transfer: (options: TransferOptions) =\> Promise\<(...)\>; type: "evm-server"; useNetwork: \<Network extends NetworkOrRpcUrl\>(network: Network) =\> Promise\<\{ \[K in keyof (Omit\<\{ address: \`0x&#123;string&#125;`; sign: (parameters: { hash: `0x\&#123;string\&#125;\`; \}) =\> Promise\<\`0x&#123;string&#125;`>; signMessage: (parameters: &#123; message: SignableMessage; &#125;) => Promise<…>; … 12 more …; useNetwork: …; }, keyof Actions | … 5 mor…; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(…)> }, (keyof Actions) | “transfer” | “sendTransaction” | “quoteSwap” | “swap” | “useSpendPermission” | “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; sendTransaction: …; transfer: …; waitForTransactionReceipt: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>; }> A promise that resolves to the account.

Example

const account = await cdp.evm.getOrCreateAccount({
  name: "MyAccount",
});

Implementation of

EvmClientInterface.getOrCreateAccount

getOrCreateSmartAccount()

getOrCreateSmartAccount(options: GetOrCreateSmartAccountOptions): Promise<{
  address: `0x${string}`;
  getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  owners: EvmAccount[];
  policies: string[] | undefined;
  quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>;
  signTypedData: (options: Omit<SignTypedDataOptions, "address"> & {
     network: KnownEvmNetworks;
  }) => Promise<`0x${string}`>;
  swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>;
  transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>;
  type: "evm-smart";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, "useNetwork"> & { [K in string | number | symbol]: ({ getUserOperation: ...; sendUserOperation: ...; signTypedData: ...; waitForUserOperation: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>;
  waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>;
}>;
Defined in: client/evm/evm.ts:633 Gets a CDP EVM smart account, or creates one if it doesn’t exist. This method first attempts to retrieve an existing smart account with the given parameters. If no account exists, it creates a new one with the specified owner.

Parameters

options
GetOrCreateSmartAccountOptions Configuration options for getting or creating the smart account.

Returns

Promise<{ address: `0x${string}`; getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; owners: EvmAccount[]; policies: string[] | undefined; quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>; signTypedData: (options: Omit<SignTypedDataOptions, "address"> & { network: KnownEvmNetworks; }) => Promise<`0x${string}`>; swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>; transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>; type: "evm-smart"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; getUserOperation: …; sendUserOperation: …; signTypedData: …; waitForUserOperation: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>; waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>; }> A promise that resolves to the retrieved or newly created smart account.

Example

const smartAccount = await cdp.evm.getOrCreateSmartAccount({
  name: "MySmartAccount",
  owner: account,
});

getSmartAccount()

getSmartAccount(options: GetSmartAccountOptions): Promise<{
  address: `0x${string}`;
  getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  owners: EvmAccount[];
  policies: string[] | undefined;
  quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>;
  signTypedData: (options: Omit<SignTypedDataOptions, "address"> & {
     network: KnownEvmNetworks;
  }) => Promise<`0x${string}`>;
  swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>;
  transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>;
  type: "evm-smart";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, "useNetwork"> & { [K in string | number | symbol]: ({ getUserOperation: ...; sendUserOperation: ...; signTypedData: ...; waitForUserOperation: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>;
  waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>;
}>;
Defined in: client/evm/evm.ts:551 Gets a CDP EVM smart account.

Parameters

options
GetSmartAccountOptions Parameters for getting the smart account. Either address or name must be provided. If both are provided, lookup will be done by address and name will be ignored.

Returns

Promise<{ address: `0x${string}`; getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; owners: EvmAccount[]; policies: string[] | undefined; quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>; signTypedData: (options: Omit<SignTypedDataOptions, "address"> & { network: KnownEvmNetworks; }) => Promise<`0x${string}`>; swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>; transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>; type: "evm-smart"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; getUserOperation: …; sendUserOperation: …; signTypedData: …; waitForUserOperation: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>; waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>; }> A promise that resolves to the smart account.

Example

const smartAccount = await cdp.evm.getSmartAccount({
  address: "0x1234567890123456789012345678901234567890",
  owner: account,
});

Implementation of

EvmClientInterface.getSmartAccount

getSwapPrice()

getSwapPrice(options: GetSwapPriceOptions): Promise<
  | SwapUnavailableResult
| GetSwapPriceResult>;
Defined in: client/evm/evm.ts:686 Gets the price for a swap between two tokens on an EVM network.

Parameters

options
GetSwapPriceOptions The options for getting a swap price.

Returns

Promise< | SwapUnavailableResult | GetSwapPriceResult> A promise that resolves to the swap price result or a response indicating that liquidity is unavailable.

Example

const price = await cdp.evm.getSwapPrice({
  network: "ethereum-mainnet",
  toToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", // USDC
  fromToken: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", // WETH
  fromAmount: BigInt("1000000000000000000"), // 1 WETH
  taker: "0x1234567890123456789012345678901234567890"
});

Implementation of

EvmClientInterface.getSwapPrice

getUserOperation()

getUserOperation(options: GetUserOperationOptions): Promise<UserOperation>;
Defined in: client/evm/evm.ts:757 Gets a user operation for a smart account by user operation hash.

Parameters

options
GetUserOperationOptions Parameters for getting the user operation.

Returns

Promise<UserOperation> A promise that resolves to the user operation.

Example

const userOp = await cdp.evm.getUserOperation({
  smartAccount,
  userOpHash: "0x1234567890123456789012345678901234567890123456789012345678901234",
});

Implementation of

EvmClientInterface.getUserOperation

importAccount()

importAccount(options: ImportServerAccountOptions): Promise<{
  address: `0x${string}`;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  policies?: string[];
  quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>;
  sign: (parameters: {
     hash: `0x${string}`;
  }) => Promise<`0x${string}`>;
  signMessage: (parameters: {
     message: SignableMessage;
  }) => Promise<`0x${string}`>;
  signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>;
  signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>;
  swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>;
  transfer: (options: TransferOptions) => Promise<{
     transactionHash: `0x${string}`;
  }>;
  type: "evm-server";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<{ address: `0x${string}`; listTokenBalances: (options: Omit<(...), (...)>) => Promise<(...)>; name?: string; policies?: (...)[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<(...)>; requestFaucet: (options: Omit<(...), (...)>) => Promise<(...)>; sendTransaction: (options: Omit<(...), (...)>) => Promise<(...)>; sign: (parameters: { hash: ... }) => Promise<(...)>; signMessage: (parameters: { message: ... }) => Promise<(...)>; signTransaction: (transaction: TransactionSerializable) => Promise<(...)>; signTypedData: (parameters: TypedDataDefinition<(...), (...)>) => Promise<(...)>; swap: (options: AccountSwapOptions) => Promise<(...)>; transfer: (options: TransferOptions) => Promise<(...)>; type: "evm-server"; useNetwork: <Network extends NetworkOrRpcUrl>(network: Network) => Promise<{ [K in keyof (Omit<{ address: `0x${string}`; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<...>; ... 12 more ...; useNetwork: ...; }, keyof Actions | ... 5 mor...; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(...)> }, (keyof Actions) | "transfer" | "sendTransaction" | "quoteSwap" | "swap" | "useSpendPermission" | "useNetwork"> & { [K in string | number | symbol]: ({ sendTransaction: ...; transfer: ...; waitForTransactionReceipt: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>;
}>;
Defined in: client/evm/evm.ts:198 Imports a CDP EVM account from an external source.

Parameters

options
ImportServerAccountOptions Parameters for importing the account.

Returns

Promise<{ address: `0x${string}`; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; policies?: string[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<`0x${string}`>; signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>; signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>; swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>; transfer: (options: TransferOptions) => Promise<{ transactionHash: `0x${string}`; }>; type: "evm-server"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<&#123; address: `0x\&#123;string\&#125;\`; listTokenBalances: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; name?: string; policies?: (...)\[\]; quoteSwap: (options: AccountQuoteSwapOptions) =\> Promise\<(...)\>; requestFaucet: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sendTransaction: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sign: (parameters: \{ hash: ... \}) =\> Promise\<(...)\>; signMessage: (parameters: \{ message: ... \}) =\> Promise\<(...)\>; signTransaction: (transaction: TransactionSerializable) =\> Promise\<(...)\>; signTypedData: (parameters: TypedDataDefinition\<(...), (...)\>) =\> Promise\<(...)\>; swap: (options: AccountSwapOptions) =\> Promise\<(...)\>; transfer: (options: TransferOptions) =\> Promise\<(...)\>; type: "evm-server"; useNetwork: \<Network extends NetworkOrRpcUrl\>(network: Network) =\> Promise\<\{ \[K in keyof (Omit\<\{ address: \`0x&#123;string&#125;`; sign: (parameters: { hash: `0x\&#123;string\&#125;\`; \}) =\> Promise\<\`0x&#123;string&#125;`>; signMessage: (parameters: &#123; message: SignableMessage; &#125;) => Promise<…>; … 12 more …; useNetwork: …; }, keyof Actions | … 5 mor…; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(…)> }, (keyof Actions) | “transfer” | “sendTransaction” | “quoteSwap” | “swap” | “useSpendPermission” | “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; sendTransaction: …; transfer: …; waitForTransactionReceipt: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>; }> A promise that resolves to the imported account.

Examples

         const account = await cdp.evm.importAccount({
           privateKey: "0x123456"
         });
         const account = await cdp.evm.importAccount({
           privateKey: "0x123456",
           name: "MyAccount"
         });
         const idempotencyKey = uuidv4();

         // First call
         await cdp.evm.importAccount({
           privateKey: "0x123456",
           idempotencyKey,
         });

         // Second call with the same idempotency key will return the same account
         await cdp.evm.importAccount({
           privateKey: "0x123456"
           idempotencyKey,
         });

Implementation of

EvmClientInterface.importAccount

listAccounts()

listAccounts(options?: ListServerAccountsOptions): Promise<ListServerAccountResult>;
Defined in: client/evm/evm.ts:794 Lists CDP EVM accounts.

Parameters

options?
ListServerAccountsOptions = {} Optional parameters for listing the accounts.

Returns

Promise<ListServerAccountResult> A promise that resolves to an array of accounts, and a token to paginate through the accounts.

Examples

const accounts = await cdp.evm.listAccounts();
         let page = await cdp.evm.listAccounts();

         while (page.nextPageToken) {
           page = await cdp.evm.listAccounts(&#123; pageToken: page.nextPageToken &#125;);
         }

Implementation of

EvmClientInterface.listAccounts

listSmartAccounts()

listSmartAccounts(options?: ListSmartAccountsOptions): Promise<ListSmartAccountResult>;
Defined in: client/evm/evm.ts:896 Lists CDP EVM smart accounts.

Parameters

options?
ListSmartAccountsOptions = {} Parameters for listing the smart accounts.

Returns

Promise<ListSmartAccountResult> A promise that resolves to an array of smart accounts, and a token to paginate through the smart accounts.

Examples

const smartAccounts = await cdp.evm.listSmartAccounts();
         let page = await cdp.evm.listSmartAccounts();

         while (page.nextPageToken) {
           page = await cdp.evm.listSmartAccounts({ pageToken: page.nextPageToken });
         }

Implementation of

EvmClientInterface.listSmartAccounts

listSpendPermissions()

listSpendPermissions(options: ListSpendPermissionsOptions): Promise<ListSpendPermissionsResult>;
Defined in: client/evm/evm.ts:932 Lists the spend permissions for a smart account.

Parameters

options
ListSpendPermissionsOptions Parameters for listing the spend permissions.

Returns

Promise<ListSpendPermissionsResult> A promise that resolves to the spend permissions.

Implementation of

EvmClientInterface.listSpendPermissions

listTokenBalances()

listTokenBalances(options: ListTokenBalancesOptions): Promise<ListTokenBalancesResult>;
Defined in: client/evm/evm.ts:856 Lists CDP EVM token balances.

Parameters

options
ListTokenBalancesOptions Parameters for listing the token balances.

Returns

Promise<ListTokenBalancesResult> A promise that resolves to an array of token balances, and a token to paginate through the token balances.

Examples

const tokenBalances = await cdp.evm.listTokenBalances({
  address: "0x1234567890123456789012345678901234567890",
  network: "base-sepolia",
});
With pagination
let page = await cdp.evm.listTokenBalances({
  address: "0x1234567890123456789012345678901234567890",
  network: "base-sepolia",
});

while (page.nextPageToken) {
  page = await cdp.evm.listTokenBalances({
    address: "0x1234567890123456789012345678901234567890",
    network: "base-sepolia",
    pageToken: page.nextPageToken,
  });
}

#### Implementation of

```ts
EvmClientInterface.listTokenBalances

prepareAndSendUserOperation()

prepareAndSendUserOperation(options: PrepareAndSendUserOperationOptions): Promise<PrepareAndSendUserOperationReturnType>;
Defined in: client/evm/evm.ts:1036 Prepares and sends a user operation for a smart account.

Parameters

options
PrepareAndSendUserOperationOptions Parameters for preparing and sending the user operation.

Returns

Promise<PrepareAndSendUserOperationReturnType> A promise that resolves to the smart account address, user operation hash, and status of the user operation.

Example

const { userOpHash } = await cdp.evm.prepareAndSendUserOperation({
  smartAccount,
  network: "base-sepolia",
  calls: [
    {
      to: "0x1234567890123456789012345678901234567890",
      value: parseEther("0.000001"),
      data: "0x",
    },
  ],
});

Implementation of

EvmClientInterface.prepareAndSendUserOperation

prepareUserOperation()

prepareUserOperation(options: PrepareUserOperationOptions): Promise<UserOperation>;
Defined in: client/evm/evm.ts:973 Prepares a user operation for a smart account.

Parameters

options
PrepareUserOperationOptions Parameters for preparing the user operation.

Returns

Promise<UserOperation> A promise that resolves to the user operation hash.

Example

const userOp = await cdp.evm.prepareUserOperation({
  smartAccount,
  network: "base-sepolia",
  calls: [
    {
      to: "0x1234567890123456789012345678901234567890",
      value: parseEther("0.000001"),
      data: "0x",
    },
  ],
});

Implementation of

EvmClientInterface.prepareUserOperation

requestFaucet()

requestFaucet(options: RequestFaucetOptions): Promise<RequestFaucetResult>;
Defined in: client/evm/evm.ts:1092 Requests funds from an EVM faucet.

Parameters

options
RequestFaucetOptions Parameters for requesting funds from the EVM faucet.

Returns

Promise<RequestFaucetResult> A promise that resolves to the transaction hash.

Example

const result = await cdp.evm.requestFaucet({
  address: "0x1234567890123456789012345678901234567890",
  network: "base-sepolia",
  token: "eth",
});

Implementation of

EvmClientInterface.requestFaucet

revokeSpendPermission()

revokeSpendPermission(options: RevokeSpendPermissionOptions): Promise<UserOperation>;
Defined in: client/evm/evm.ts:458 Revokes a spend permission for a smart account.

Parameters

options
RevokeSpendPermissionOptions Parameters for revoking the spend permission.

Returns

Promise<UserOperation> A promise that resolves to the user operation.

Example

const userOperation = await cdp.evm.revokeSpendPermission({
  address: "0x1234567890123456789012345678901234567890",
  permissionHash: "0x1234567890123456789012345678901234567890123456789012345678901234",
  network: "base-sepolia",
});

sendTransaction()

sendTransaction(options: SendTransactionOptions): Promise<TransactionResult>;
Defined in: client/evm/evm.ts:1154 Signs an EVM transaction and sends it to the specified network using the Coinbase API. This method handles nonce management and gas estimation automatically.

Parameters

options
SendTransactionOptions Configuration options for sending the transaction.

Returns

Promise<TransactionResult> A promise that resolves to the transaction hash.

Examples

Sending an RLP-encoded transaction
import { parseEther, serializeTransaction } from "viem";
import { baseSepolia } from "viem/chains";

const { transactionHash } = await cdp.evm.sendTransaction({
  address: account.address,
  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 cdp.evm.sendTransaction({
  address: account.address,
  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",
});

Implementation of

EvmClientInterface.sendTransaction

sendUserOperation()

sendUserOperation(options: SendUserOperationOptions<unknown[]>): Promise<SendUserOperationReturnType>;
Defined in: client/evm/evm.ts:1198 Sends a user operation.

Parameters

options
SendUserOperationOptions<unknown[]> Parameters for sending the user operation.

Returns

Promise<SendUserOperationReturnType> A promise that resolves to an object containing the smart account address, the user operation hash, and the status of the user operation.

Example

const userOp = await cdp.evm.sendUserOperation({
  smartAccount,
  network: "base-sepolia",
  calls: [
    {
      to: "0x1234567890123456789012345678901234567890",
      value: parseEther("0.000001"),
      data: "0x",
    },
  ],
});

Implementation of

EvmClientInterface.sendUserOperation

signHash()

signHash(options: SignHashOptions): Promise<SignatureResult>;
Defined in: client/evm/evm.ts:1244 Signs an EVM hash.

Parameters

options
SignHashOptions Parameters for signing the hash.

Returns

Promise<SignatureResult> A promise that resolves to the signature.

Example

// Create a new EVM server account to sign with
const ethAccount = await cdp.createEvmServerAccount({});

const signature = await cdp.evm.signHash({
  address: ethAccount.address,
  hash: "0x1234567890123456789012345678901234567890123456789012345678901234",
});

Implementation of

EvmClientInterface.signHash

signMessage()

signMessage(options: SignMessageOptions): Promise<SignatureResult>;
Defined in: client/evm/evm.ts:1288 Signs an EIP-191 message.

Parameters

options
SignMessageOptions Parameters for signing the message.

Returns

Promise<SignatureResult> A promise that resolves to the signature.

Example

// Create a new EVM server account to sign with
const ethAccount = await cdp.createEvmServerAccount({});

const signature = await cdp.evm.signMessage({
  address: ethAccount.address,
  message: "Hello, world!",
});

Implementation of

EvmClientInterface.signMessage

signTransaction()

signTransaction(options: SignTransactionOptions): Promise<SignatureResult>;
Defined in: client/evm/evm.ts:1420 Signs an EVM transaction.

Parameters

options
SignTransactionOptions Configuration options for signing the transaction.

Returns

Promise<SignatureResult> A promise that resolves to the signature.

Example

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

// Create a new EVM server account to sign with
const ethAccount = await cdp.createEvmServerAccount({});

const serializedTx = serializeTransaction(
  {
    chainId: baseSepolia.id,
    data: "0x",
    to: "0x4252e0c9A3da5A2700e7d91cb50aEf522D0C6Fe8",
    type: "eip1559",
    value: parseEther("0.000001"),
  },
);

const signature = await cdp.evm.signTransaction({
  address: ethAccount.address,
  transaction: serializedTx,
});

Implementation of

EvmClientInterface.signTransaction

signTypedData()

signTypedData(options: SignTypedDataOptions): Promise<SignatureResult>;
Defined in: client/evm/evm.ts:1356 Signs an EIP-712 message.

Parameters

options
SignTypedDataOptions Parameters for signing the EIP-712 message.

Returns

Promise<SignatureResult> A promise that resolves to the signature.

Example

const signature = await cdp.evm.signTypedData({
  address: account.address,
  domain: {
    name: "Permit2",
    chainId: 1,
    verifyingContract: "0x000000000022D473030F116dDEE9F6B43aC78BA3",
  },
  types: {
    EIP712Domain: [
      { name: "name", type: "string" },
      { name: "chainId", type: "uint256" },
      { name: "verifyingContract", type: "address" },
    ],
    PermitTransferFrom: [
      { name: "permitted", type: "TokenPermissions" },
      { name: "spender", type: "address" },
      { name: "nonce", type: "uint256" },
      { name: "deadline", type: "uint256" },
    ],
    TokenPermissions: [
      { name: "token", type: "address" },
      { name: "amount", type: "uint256" },
    ],
  },
  primaryType: "PermitTransferFrom",
  message: {
    permitted: {
      token: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
      amount: "1000000",
    },
    spender: "0xFfFfFfFFfFFfFFfFFfFFFFFffFFFffffFfFFFfFf",
    nonce: "0",
    deadline: "1717123200",
  },
});

Implementation of

EvmClientInterface.signTypedData

updateAccount()

updateAccount(options?: UpdateEvmAccountOptions): Promise<{
  address: `0x${string}`;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  policies?: string[];
  quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>;
  sign: (parameters: {
     hash: `0x${string}`;
  }) => Promise<`0x${string}`>;
  signMessage: (parameters: {
     message: SignableMessage;
  }) => Promise<`0x${string}`>;
  signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>;
  signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>;
  swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>;
  transfer: (options: TransferOptions) => Promise<{
     transactionHash: `0x${string}`;
  }>;
  type: "evm-server";
  useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<{ address: `0x${string}`; listTokenBalances: (options: Omit<(...), (...)>) => Promise<(...)>; name?: string; policies?: (...)[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<(...)>; requestFaucet: (options: Omit<(...), (...)>) => Promise<(...)>; sendTransaction: (options: Omit<(...), (...)>) => Promise<(...)>; sign: (parameters: { hash: ... }) => Promise<(...)>; signMessage: (parameters: { message: ... }) => Promise<(...)>; signTransaction: (transaction: TransactionSerializable) => Promise<(...)>; signTypedData: (parameters: TypedDataDefinition<(...), (...)>) => Promise<(...)>; swap: (options: AccountSwapOptions) => Promise<(...)>; transfer: (options: TransferOptions) => Promise<(...)>; type: "evm-server"; useNetwork: <Network extends NetworkOrRpcUrl>(network: Network) => Promise<{ [K in keyof (Omit<{ address: `0x${string}`; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<...>; ... 12 more ...; useNetwork: ...; }, keyof Actions | ... 5 mor...; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(...)> }, (keyof Actions) | "transfer" | "sendTransaction" | "quoteSwap" | "swap" | "useSpendPermission" | "useNetwork"> & { [K in string | number | symbol]: ({ sendTransaction: ...; transfer: ...; waitForTransactionReceipt: ... } & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & { network: Network })[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>;
}>;
Defined in: client/evm/evm.ts:1484 Updates a CDP EVM account.

Parameters

options?
UpdateEvmAccountOptions Optional parameters for creating the account.

Returns

Promise<{ address: `0x${string}`; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; policies?: string[]; quoteSwap: (options: AccountQuoteSwapOptions) => Promise<AccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendTransaction: (options: Omit<SendTransactionOptions, "address">) => Promise<TransactionResult>; sign: (parameters: { hash: `0x${string}`; }) => Promise<`0x${string}`>; signMessage: (parameters: { message: SignableMessage; }) => Promise<`0x${string}`>; signTransaction: (transaction: TransactionSerializable) => Promise<`0x${string}`>; signTypedData: <typedData, primaryType>(parameters: TypedDataDefinition<typedData, primaryType>) => Promise<`0x${string}`>; swap: (options: AccountSwapOptions) => Promise<SendSwapTransactionResult>; transfer: (options: TransferOptions) => Promise<{ transactionHash: `0x${string}`; }>; type: "evm-server"; useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<&#123; address: `0x\&#123;string\&#125;\`; listTokenBalances: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; name?: string; policies?: (...)\[\]; quoteSwap: (options: AccountQuoteSwapOptions) =\> Promise\<(...)\>; requestFaucet: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sendTransaction: (options: Omit\<(...), (...)\>) =\> Promise\<(...)\>; sign: (parameters: \{ hash: ... \}) =\> Promise\<(...)\>; signMessage: (parameters: \{ message: ... \}) =\> Promise\<(...)\>; signTransaction: (transaction: TransactionSerializable) =\> Promise\<(...)\>; signTypedData: (parameters: TypedDataDefinition\<(...), (...)\>) =\> Promise\<(...)\>; swap: (options: AccountSwapOptions) =\> Promise\<(...)\>; transfer: (options: TransferOptions) =\> Promise\<(...)\>; type: "evm-server"; useNetwork: \<Network extends NetworkOrRpcUrl\>(network: Network) =\> Promise\<\{ \[K in keyof (Omit\<\{ address: \`0x&#123;string&#125;`; sign: (parameters: { hash: `0x\&#123;string\&#125;\`; \}) =\> Promise\<\`0x&#123;string&#125;`>; signMessage: (parameters: &#123; message: SignableMessage; &#125;) => Promise<…>; … 12 more …; useNetwork: …; }, keyof Actions | … 5 mor…; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<(…)> }, (keyof Actions) | “transfer” | “sendTransaction” | “quoteSwap” | “swap” | “useSpendPermission” | “useNetwork”> & &#123; [K in string | number | symbol]: (&#123; sendTransaction: …; transfer: …; waitForTransactionReceipt: … &#125; & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & &#123; network: Network &#125;)[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<TransactionResult>; }> A promise that resolves to the updated account.

Examples

         const account = await cdp.evm.updateAccount({ address: "0x...", update: { name: "New Name" } });
         const account = await cdp.evm.updateAccount(&#123; address: "0x...", update: &#123; accountPolicy: "73bcaeeb-d7af-4615-b064-42b5fe83a31e" &#125; });
         const idempotencyKey = uuidv4();

         // First call
         await cdp.evm.updateAccount({
           address: "0x...",
           update: { accountPolicy: "73bcaeeb-d7af-4615-b064-42b5fe83a31e" },
           idempotencyKey,
         });

         // Second call with the same idempotency key will not update
         await cdp.evm.updateAccount({
           address: '0x...',
           update: { name: "" },
           idempotencyKey,
         });

Implementation of

EvmClientInterface.updateAccount

updateSmartAccount()

updateSmartAccount(options?: UpdateEvmSmartAccountOptions): Promise<{
  address: `0x${string}`;
  getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>;
  listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>;
  name?: string;
  owners: EvmAccount[];
  policies: string[] | undefined;
  quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>;
  requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>;
  sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>;
  signTypedData: (options: Omit<SignTypedDataOptions, "address"> & {
     network: KnownEvmNetworks;
  }) => Promise<`0x${string}`>;
  swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>;
  transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>;
  type: "evm-smart";
  useNetwork: <Network>(network: Network) => Promise<&#123; [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, "useNetwork"> & &#123; [K in string | number | symbol]: (&#123; getUserOperation: ...; sendUserOperation: ...; signTypedData: ...; waitForUserOperation: ... &#125; & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)) & ((...) extends (...) ? (...) : (...)))[K] } & &#123; network: Network &#125;)[K] }>;
  useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>;
  waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>;
}>;
Defined in: client/evm/evm.ts:1519 Updates a CDP EVM smart account.

Parameters

options?
UpdateEvmSmartAccountOptions Optional parameters for updating the account.

Returns

Promise<{ address: `0x${string}`; getUserOperation: (options: Omit<GetUserOperationOptions, "smartAccount">) => Promise<UserOperation>; listTokenBalances: (options: Omit<ListTokenBalancesOptions, "address">) => Promise<ListTokenBalancesResult>; name?: string; owners: EvmAccount[]; policies: string[] | undefined; quoteSwap: (options: SmartAccountQuoteSwapOptions) => Promise<SmartAccountQuoteSwapResult>; requestFaucet: (options: Omit<RequestFaucetOptions, "address">) => Promise<RequestFaucetResult>; sendUserOperation: (options: Omit<SendUserOperationOptions<unknown[]>, "smartAccount">) => Promise<SendUserOperationReturnType>; signTypedData: (options: Omit<SignTypedDataOptions, "address"> & { network: KnownEvmNetworks; }) => Promise<`0x${string}`>; swap: (options: SmartAccountSwapOptions) => Promise<SmartAccountSwapResult>; transfer: (options: SmartAccountTransferOptions) => Promise<SendUserOperationReturnType>; type: "evm-smart"; useNetwork: <Network>(network: Network) => Promise<{ [K in string | number | symbol]: (Omit<EvmSmartAccountProperties, “useNetwork”> & { [K in string | number | symbol]: ({ getUserOperation: …; sendUserOperation: …; signTypedData: …; waitForUserOperation: … } & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)) & ((…) extends (…) ? (…) : (…)))[K] } & { network: Network })[K] }>; useSpendPermission: (options: UseSpendPermissionOptions) => Promise<SendUserOperationReturnType>; waitForUserOperation: (options: Omit<WaitForUserOperationOptions, "smartAccountAddress">) => Promise<WaitForUserOperationReturnType>; }> A promise that resolves to the updated account.

Implementation of

EvmClientInterface.updateSmartAccount

waitForEvmEip7702DelegationOperationStatus()

waitForEvmEip7702DelegationOperationStatus(options: WaitForEvmEip7702DelegationOperationStatusOptions): Promise<EvmEip7702DelegationOperation>;
Defined in: client/evm/evm.ts:1626 Polls the EIP-7702 delegation operation status until the status is COMPLETED or a timeout occurs.

Parameters

options
WaitForEvmEip7702DelegationOperationStatusOptions Parameters for waiting, including delegationOperationId and optional wait configuration.

Returns

Promise<EvmEip7702DelegationOperation> A promise that resolves to the delegation operation once it reaches COMPLETED.

Example

const operation = await cdp.evm.waitForEvmEip7702DelegationOperationStatus({
  delegationOperationId: "delegation-op-123",
});
console.log(operation.status); // "COMPLETED"

Implementation of

EvmClientInterface.waitForEvmEip7702DelegationOperationStatus

waitForUserOperation()

waitForUserOperation(options: WaitForUserOperationOptions): Promise<WaitForUserOperationReturnType>;
Defined in: client/evm/evm.ts:1673 Waits for a user operation to complete or fail.

Parameters

options
WaitForUserOperationOptions Parameters for waiting for the user operation.

Returns

Promise<WaitForUserOperationReturnType> A promise that resolves to the transaction receipt.

Example

// Send a user operation and get the user operation hash
const &#123; userOpHash &#125; = await cdp.evm.sendUserOperation({
  smartAccount,
  network: "base-sepolia",
  calls: [
    {
      to: "0x0000000000000000000000000000000000000000",
      value: parseEther("0.000001"),
      data: "0x",
    },
  ],
});

// Wait for the user operation to complete or fail
const result = await cdp.evm.waitForUserOperation({
  smartAccountAddress: smartAccount.address,
  userOpHash: userOp.userOpHash,
});