Introduction

Pimlico is an account abstraction infrastructure platform. Leverage Pimlico’s paymasters and bundlers to create smart accounts for your application. Pimlico’s core product is permissionless.js which is a TypeScript library built on viem for building with ERC-4337 smart accounts, bundlers, paymasters, and user operations. Permissionless.js focuses on having no dependencies, maximum viem compatibility and a small bundle size. Permissionless.js also supports the major ERC-4337 smart accounts including Safe, Kernel, Biconomy, and SimpleAccount.

Getting Started

Get started with Permissionless.js by following

these steps

. Follow these steps to create a Para signer .

Connecting Pimlico to a Para

After creating a Para signer, you will have access to a ParaWeb3Provider object that you can use to create a SmartAccountSigner object

Pimlico Integration
import Para from "@getpara/web-sdk";
import { createParaViemClient } from "@getpara/viem-v2-integration";
import { walletClientToSmartAccountSigner } from "permissionless";
import { http } from "viem";
import { sepolia } from "viem/chains";

// Param options here will be specific to your project.  See the Para docs for more info.
const para = new Para(env, apiKey);

// Convert a Para viem client to a SmartAccountSigner
// Follow the Para docs for more instructions on creating the Viem client https://docs.getpara.com/integration-guide/signing-transactions
const viemClient = createParaViemClient(para, {
  chain: sepolia,
  transport: http("https://rpc.ankr.com/eth_sepolia"),
});

const smartAccountSigner = walletClientToSmartAccountSigner(viemClient);

Use with permissionless.js

import { signerToSimpleSmartAccount } from "permissionless/accounts"
import { createPublicClient, http } from "viem"
import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"
import { sepolia } from "viem/chains"
 
export const publicClient = createPublicClient({
	transport: http("https://rpc.ankr.com/eth_sepolia"),
	chain: sepolia,
})
 
const smartAccount = await signerToSimpleSmartAccount(publicClient, {
	signer: smartAccountSigner,
	factoryAddress: "0x9406Cc6185a346906296840746125a0E44976454",
	entryPoint: ENTRYPOINT_ADDRESS_V06,
})

If you need access to Para or help getting set up, please refer to our quick start guide: