Skip to main content

Overview

This guide explains how to use Dynamic embedded wallets with Particle Universal Accounts in EIP-7702 mode. In that mode, the user keeps the same EOA address while delegating execution to Particle’s Universal Account contract via a Type-4 transaction—Particle’s docs describe the model in EIP-7702 compatible embedded wallets. Universal Accounts provide users with a single account and balance that works across any chain, eliminating the need to manage multiple wallets or manually bridge assets. Particle Network’s infrastructure handles all cross-chain liquidity routing and bridging behind the scenes, making the entire Web3 ecosystem feel like one unified network. Developers can easily integrate them via the Universal SDK, with built-in support for social logins, wallet connections, and gasless cross-chain transactions. EIP-7702 uses an authorizationList on the transaction; each authorization must be signed by the EOA key. Standard JSON-RPC wallets (for example MetaMask or Rabby) typically do not expose what you need, so Particle documents embedded / WaaS signers for this path—including Dynamic. Dynamic supplies signAuthorization on the WaaS connector so your app can satisfy Particle’s delegation and inline-auth steps. Use the reference demo and Dynamic API notes below together with Particle’s Universal Account SDK.
Particle’s EIP-7702 Universal Account mode expects an embedded wallet that can sign EIP-7702 authorizations. External wallets generally do not implement signAuthorization (or equivalent) on the user’s EOA. If you must support only external wallets with Particle, use the account mode their docs describe for JSON-RPC wallets instead of strict EIP-7702 delegation from that EOA.

Stack in the reference demo

The ua-dynamic-7702 app uses this combination end to end:
PieceRole
Next.jsApp Router host app
@dynamic-labs/sdk-react-core plus Ethereum and @dynamic-labs/waas-evmAuth, embedded WaaS EOA, and signAuthorization({ address, chainId, nonce })
@particle-network/universal-account-sdkUniversal Account client: delegation status, auth parameters, routing, and sendTransaction
ethers v6Serialize authorizations (for example Signature.from() on the object Dynamic returns) for the SDK
viem walletClientSend the Type-4 delegation transaction with authorizationList
Call isDynamicWaasConnector() before using signAuthorization on the connector. For the same signing pattern in other React setups, see Delegate to a custom smart account.

Delegation flow with Universal Accounts

Particle’s client drives status, auth parameters, and broadcast; Dynamic signs. The shape usually matches:
  1. Check status — Universal Account client (for example getEIP7702Deployments()).
  2. Fetch auth parameters — Per chain from the client (for example getEIP7702Auth([chainId])).
  3. SignwaasConnector.signAuthorization({ address, chainId, nonce }) with Dynamic WaaS (see Stack in the reference demo).
  4. Broadcast — Type-4 transaction with authorizationList (often via walletClient.sendTransaction).
  5. Later steps — Particle may require a rootHash or message signature via normal signing, then sendTransaction on the Universal Account client.
Steps 3–4 require Dynamic embedded WaaS; method names on the Particle side follow their reference.

Inline authorizations on later transactions

After delegation, Universal Account transactions can include pending EIP-7702 authorizations on individual user operations. Sign each with Dynamic’s signAuthorization, serialize as your integration expects (for example ethers Signature.from()), pass them into Particle’s sendTransaction flow along with the rootHash signature. The demo in the next section does this for a cross-chain convert.

Reference demo: Next.js, Dynamic, and Particle

The open-source app ua-dynamic-7702 implements Dynamic WaaS login, EIP-7702 delegation on Arbitrum, and a cross-chain convert with Particle’s Universal Account SDK. Use it as the working reference for:
  • isDynamicWaasConnector() before calling signAuthorization
  • Network — Switching to the chain used for delegation before sending the Type-4 transaction
  • Signature shape — Using ethers Signature.from() when the downstream SDK expects serialized authorizations
  • Provider edge cases — The repo documents a getSigner() / account workaround in hooks/universal-account-provider.tsx for their Universal Account integration
Dependencies and env vars — Match the stack table; use the demo package.json, lockfile, and README for exact versions and .env.local keys.

ua-dynamic-7702 on GitHub

Next.js demo: Dynamic embedded wallet, EIP-7702 delegation, and Universal Accounts cross-chain convert.
For the full Particle-side API and provider comparison, see EIP-7702 compatible embedded wallets.