Skip to main content

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

  • Simple Account
  • Safe Account
  • Kernel Account
  • Biconomy Account
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,
})
I