Supported Smart Account Implementations
SBC supports the following smart account implementations for ERC-4337 (EntryPoint v0.7):
- SimpleAccount
- Safe
- Kernel from ZeroDev
- Light from Alchemy
- Thirdweb Smart Account
- Nexus from Biconomy
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",
});