Docs

Getting Started

Getting started to add ERC-4337 compatible smart accounts to your application easily.

Once set, your application will:

  • Let users connect to their smart account using any personal wallet, including email and local wallets for easy onboarding.
  • Automatically deploy individual account contracts for your users when they do their first onchain transaction.
  • Handle all transaction gas costs via the thirdweb paymaster.

1. Deploy an account factory contract

Deployable via the explore page or build your own ERC 4337 compatible factory contract using the Solidity SDK.

thirdweb offers different kinds of account factories:

Read about the differences between the account factory types here.

2. Get a free API key

You will require an API key to use thirdweb's infrastructure services such as the bundler and paymaster.

Obtain an API key from the thirdweb dashboard Settings page.

The API key lets you access thirdweb's bundler and paymaster infrastructure, which is required for smart accounts to operate and optionally enable gasless transactions.

Learn more about creating an API key and restricting which contracts the smart account can interact with here.

3. Connect smart accounts in your application

Use the following code to integrate account abstraction into your apps. This will:

  • Connect your users to their smart account based on their personal wallet (can be any EOA wallet such as in-app wallet or metamask).
  • Automatically deploy the individual account contracts for your users when they do their first onchain transaction.
  • Handle all transaction gas costs via the thirdweb paymaster.
  • Select your deployed account factory and client ID to use the thirdweb infrastructure.
import { createThirdwebClient } from "thirdweb";
import { ThirdwebProvider, ConnectButton } from "thirdweb/react";
const client = createThirdwebClient({
clientId: "YOUR_CLIENT_ID",
});
export default function App() {
return (
<ThirdwebProvider>
<ConnectButton
client={client}
accountAbstraction={{
chain: sepolia, // the chain where your smart accounts will be or is deployed
factoryAddress: "0x...", // your deployed factory address
gasless: true, // enable or disable gasless transactions
}}
/>
</ThirdwebProvider>
);
}

Demos

Learn by example with these open-source demos:

Account Abstraction Demos

A reference implementation to create and interact with smart accounts.

4. Executing Transactions with Smart Accounts

Once setup, you can use the thirdweb TypeScript, React, React Native and Unity SDKs to deploy contracts, perform transactions, and manipulate wallets like any other wallet.

import { getContract } from "thirdweb";
import { useActiveAccount, TransactionButton } from "thirdweb/react";
import { mintTo } from "thirdweb/extensions/erc721";
const contract = getContract({ client, chain, address: "0x..." });
// The ThirdwebProvider setup above already handles the connection to the smart account
// Within the provider, you can use the SDK normally to interact with the blockchain
export default function MyComponent() {
// Get the connected smart account
const smartAccount = useActiveAccount();
// Fetch owned NFTs
const { data, isLoading } = useReadContract(
getOwnedNFTs,
{
contract,
address: smartAccount.address!,
},
{
enabled: !!smartAccount,
},
);
// Mint a new NFT
return (
<TransactionButton
transaction={() => {
if (!account) return;
return mintTo({
contract,
to: account.address,
nft: {
name: "My NFT",
description: "My NFT description",
image: "https://example.com/image.png",
},
});
}}
>
Mint NFT
</TransactionButton>
);
}