Skip to main content
This tutorial walks you through creating a developer-controlled wallet to sign transactions on EVM chains.
You can only create Externally Owned Accounts (EOA) for signing transactions. For details, see the Account Types guide.

Prerequisites

Before you begin:
If you have created a wallet on an EVM-compatible chain such as Ethereum, Polygon, Avalanche, or Arbitrum, an EVM wallet created under the same wallet set maps to the same address.In the case where a native wallet is already created, it is important that you don’t use the generic EVM wallet to sign transactions in place of the native wallet on those chains.If you sign with the generic EVM wallet, your transaction may become stuck.

Step 1. Create EVM wallets

When creating a developer-controlled wallet, pass EVM-TESTNET or EVM in the blockchains field. This wallet can be used to sign transactions on any EVM chain. The following example code shows how to create a wallet using the Circle Developer SDK.
Use count to specify the number of wallets to create, up to a maximum of 200 per API request.

Step 2. Build transactions

To build a transaction, connect to an Ethereum node and prepare your transaction object as shown in the following example code.
Note: The txObject schema conforms to the Ethereum JSON-RPC transaction specification. In go-ethereum, this corresponds to the transaction call object. chainId is required to ensure the transaction is processed on the right chain; use the appropriate chain ID for your network.For EVM-compatible wallets, these EIP-1559 fields are required when setting gas fees:
  • maxFeePerGas - the maximum total fee per unit of gas
  • maxPriorityFeePerGas - the maximum priority fee per unit of gas

Step 3. Sign a transaction

The following example code shows how to sign a transaction.