Skip to main content
If your app uses Dynamic for user authentication (email, social login, wallet connection) instead of passkeys, use the Dynamic-managed EOA as the signer for a modular wallet. The result is a modular wallet whose smart account is signed by the user’s Dynamic EOA. After setup, every transfer, signature, and batched operation is signed by Dynamic automatically. To use a passkey signer instead, see Create a modular wallet.

Before you begin

Before you begin, ensure that you’ve:
  • Created a Circle Console account and a client key for the modular wallets SDK: Console → Keys → Create a key → Client Key.
  • Created a Dynamic Dashboard account and obtained your Environment ID.
  • Enabled email login and embedded wallets (WaaS) in your Dynamic environment, and added Arc Testnet as a supported network. The examples below target Arc Testnet.
  • Installed Node.js 22+ and the modular wallets Web SDK.

Steps

1

Configure environment variables

Make your Circle client key, modular wallets backend URL, and Dynamic environment ID available to your app. The backend URL is the same for every app: https://modular-sdk.circle.com/v1/rpc/w3s/buidl.
Web SDK (TypeScript)
2

Install the Dynamic headless SDK packages

Dynamic’s headless SDK (@dynamic-labs-sdk/client) works with any web framework. Install it alongside the Circle modular wallets SDK and viem.
3

Initialize the Dynamic client

Create a Dynamic client, register the EVM extension, and wait for initialization before reading wallet accounts. If Dynamic’s network data for Arc Testnet omits RPC URLs, supply them in a networkData transformer.
Web SDK (TypeScript)
4

Authenticate the user

Sign the user in with any Dynamic-supported auth flow. The snippet below uses email OTP; social login and external wallet connection work the same way once Dynamic reports an authenticated session.After authentication, create an embedded EVM wallet on your target chain if the user does not have one yet.
Web SDK (TypeScript)
5

Create a transport

The modular transport routes user operations through Circle’s bundler and paymaster for the blockchain you target. The example below uses Arc Testnet.
Web SDK (TypeScript)
6

Create the bundler client and smart account

Switch the Dynamic wallet to your target network, convert it to a viem local account, and pass it as the owner to toCircleSmartAccount. The bundler client submits user operations through the MSCA; every operation is signed by the Dynamic-managed EOA automatically.
Web SDK (TypeScript)
The user now has a modular wallet, signed by their Dynamic-managed EOA.

Next steps