EIP-7702 is now live on Ethereum mainnet! 🎉

We’re excited to bring EIP-7702 to production and are focused on making the integration as seamless and developer-friendly as possible. Please share your feedback—we’re committed to working closely with you to meet your needs.

What is EIP-7702?

EIP-7702 enables Externally Owned Accounts (EOAs) to seamlessly upgrade into smart accounts, unlocking the full power of AA (Account Abstraction). With Dynamic’s integration, both EOAs and AA wallets can access advanced smart account capabilities.


Key Features

  • Gasless Transactions & Policies
    Define and manage sponsorship rules via provider dashboards.
  • Batch Transactions
    Execute multiple operations in a single, atomic transaction.
  • Smart Account Capabilities
    Use powerful AA features like automation and chain abstraction directly from EOAs.
  • Rhinestone EIP-7579 Support (Coming Soon)
    Enhanced modular smart account standard.

How It Works

EIP-7702 introduces a new transaction type that allows an EOA to delegate execution to an address with a deployed smart account. This means:

  • No need to switch or manage multiple accounts and wallets.
  • Users retain their existing EOA and gain smart account functionality.
  • The transition is smooth and invisible to the end user.

Implementing with ZeroDev

To add EIP-7702 support using Dynamic and ZeroDev, follow our ZeroDev integration guide. We natively support EIP-7702 with ZeroDev but you can also use other providers listed in the Smart Wallet Providers section.


Common questions

When does the delegation (authorization) signing happen?

The delegation authorization is signed automatically behind the scenes on the first transaction. If a paymaster is used, the paymaster will pay for the transaction.

How long does the delegation remain active?

The delegation stays active until the user delegates to a new address.

How does this work for existing EOAs (e.g. MetaMask)?

At the moment, delegation is a feature exclusive to embedded wallets. That’s because we need to sign the authorization in a very specific way that requires access to the private key. From what we’ve heard, branded wallets like MetaMask are unlikely to expose the signAuthorization method, making it unclear how (or if) this flow will work with them.

How to delegate to a custom smart account?

To delegate to a custom smart account, you need to sign the delegation authorization manually.

import { useDynamicContext} from '@dynamic-labs/sdk-react-core';
import { isTurnkeyWalletConnector } from '@dynamic-labs/wallet-connector-core';

const { primaryWallet } = useDynamicContext();
  const handleAuthorize = async () => {
    const connector = primaryWallet?.connector;
    if (!primaryWallet || !isEthereumWallet(primaryWallet)) {
      console.log('Primary wallet is not available or not an Ethereum wallet');
      return null;
    }

    if (!connector || !isTurnkeyWalletConnector(connector)) {
      console.log('Connector is not a Turnkey wallet connector');
      return null;
    }

    try {
      console.log('Starting authorization process...');

      const smartAccountAddress = '0xd6CEDDe84be40893d153Be9d467CD6aD37875b28';
      const sepoliaChainId = 11155111;

      console.log('Signing authorization for', smartAccountAddress);
      const authorization = await connector.signAuthorization({
        address: smartAccountAddress,
        chainId: sepoliaChainId,
        nonce: 0,
      });

      console.log('Authorization signed:', authorization);

      const connectorAddress = await connector.getAddress();
      console.log('Connector address:', connectorAddress);

      const walletClient = await primaryWallet.getWalletClient();
      const hash = await walletClient.sendTransaction({
        authorizationList: [authorization],
        to: connectorAddress as `0x${string}`,
        value: BigInt(0),
      });

      console.log('Transaction hash:', hash);
      return hash;
    } catch (err) {
      console.error('Error during authorization:', err);
      return null;
    }
  };

Resources