Learn how to use Privy with account abstraction.

If you are using Privy to sign transactions, you can import the useWallets method to get the signer. This signer can then be used to sign the user operation via the builder.

Configuring Privy

First, see how to configure Privy at


Here's a code snippet showing how to use the useWallets method to get the signer. This example uses the SimpleAccount preset, but you can use any userop.js builder.

import {useWallets} from '@privy-io/react-auth';

// Initialize the builder
const {wallets} = useWallets();
const embeddedWallet = wallets.find((wallet) => (wallet.walletClientType === 'privy'));
const eip1193provider = await embeddedWallet.getEthersProvider();
const signer = eip1193provider.getSigner();

// Create a builder with the signer
var builder = await Presets.Builder.SimpleAccount.init(signer, rpcUrl);
const address = builder.getSender();
console.log(Account address: ${address});

To access the privy wallet you will need to add the PrivyProvider component to your front end. In React, this may look like this:

        /* Replace this with your desired login methods */
        loginMethods: ['email', 'wallet'],
        /* Replace this with your desired appearance configuration */
        appearance: {
            theme: 'light',
            accentColor: '#676FFF',
            logo: 'your-logo-url'
        embeddedWallets: {
            createOnLogin: 'users-without-wallets',
            noPromptOnSignature: true
    {/* Your app's components */}