Skip to content

Supported Smart Account Implementations

SBC supports the following smart account implementations for ERC-4337 (EntryPoint v0.7):

Sample Usage

Assuming you have a viem client, owner wallet address, and an entry point address:

import { createWalletClient, http } from "viem";
import { base } from "viem/chains";
 
const publicClient = createPublicClient({
  chain: base,
  transport: http("https://base-rpc.publicnode.com"),
});
 
const owner = createWalletClient({
  account: "0x..." as Address, // your wallet address
  chain: base, 
  transport: custom((window as any).ethereum),
});
 
const owner2 = privateKeyToAccount(
  "0x..." as Address // your wallet private key
);

Please note that each smart account implementation has its slightly different parameters.

SimpleAccount

import { toSimpleSmartAccount } from "permissionless/accounts";
 
const simpleAccount = await toSimpleSmartAccount({
  client: publicClient,
  owner: owner,
  entryPoint: {
    address: entryPoint07Address,
    version: "0.7",
  },
});

Safe

import { toSafeSmartAccount } from "permissionless/accounts";
 
const safeAccount = await toSafeSmartAccount({
  client: publicClient,
  owners: [owner],
  entryPoint: {
    address: entryPoint07Address,
    version: "0.7",
  },
  version: "1.4.1",
});

Thirdweb Smart Account

import { toThirdwebSmartAccount } from "permissionless/accounts";
 
const thirdwebAccount = await toThirdwebSmartAccount({
  client: publicClient,
  owner: owner,
  entryPoint: {
    address: entryPoint07Address,
    version: "0.7",
  },
});

Kernel (ZeroDev)

import { toKernelSmartAccount } from "permissionless/accounts";
 
const kernelAccount = await toKernelSmartAccount({
  client: publicClient,
  owners: [owner],
  entryPoint: {
    address: entryPoint07Address,
    version: "0.7",
  },
});

Light (Alchemy)

import { toLightSmartAccount } from "permissionless/accounts";
 
const lightAccount = await toLightSmartAccount({
  client: publicClient,
  owner: owner,
  entryPoint: {
    address: entryPoint07Address,
    version: "0.7",
  },
  version: "2.0.0",
});

Nexus (Biconomy)

import { toNexusSmartAccount } from "permissionless/accounts";
 
const nexusAccount = await toNexusSmartAccount({
  client: publicClient,
  owners: [owner],
  version: "1.0.0",
});