Setup Smart Account Client
How to setup your smart account client :
import {
createComethPaymasterClient,
createSafeSmartAccount,
createSmartAccountClient,
providerToSmartAccountSigner
} from "@cometh/connect-core-sdk";
import { arbitrumSepolia } from "viem/chains";
import { privateKeyToAccount } from "viem/accounts";
import { http } from "viem";
const bundlerUrl = process.env.NEXT_PUBLIC_4337_BUNDLER_URL;
const paymasterUrl = process.env.NEXT_PUBLIC_4337_PAYMASTER_URL;
const signer = await providerToSmartAccountSigner(
window.ethereum
);
const publicClient = createPublicClient({
chain: arbitrumSepolia,
transport: http(),
cacheTime: 60_000,
batch: {
multicall: { wait: 50 },
},
});
const smartAccount = await createSafeSmartAccount({
chain: arbitrumSepolia,
publicClient,
signer,
})
const paymasterClient = await createComethPaymasterClient({
transport: http(paymasterUrl),
chain: arbitrumSepolia,
publicClient,
});
const smartAccountClient = createSmartAccountClient({
account: smartAccount,
chain,
bundlerTransport: http(bundlerUrl),
paymaster: paymasterClient,
userOperation: {
estimateFeesPerGas: async () => {
return await paymasterClient.getUserOperationGasPrice();
},
}
})
import { RHINESTONE_ATTESTER_ADDRESS, getSmartSessionsValidator } from "@rhinestone/module-sdk";
import { toSafeSmartAccount } from "permissionless/accounts";
import { createSmartAccountClient} from "permissionless";
import { createPaymasterClient, entryPoint07Address } from "viem/account-abstraction";
import { createPimlicoClient } from "permissionless/clients/pimlico"
import { http, type Hex, type PublicClient, createPublicClient } from "viem";
import { arbitrumSepolia } from "viem/chains";
const bundlerUrl = process.env.NEXT_PUBLIC_4337_BUNDLER_URL;
const paymasterUrl = process.env.NEXT_PUBLIC_4337_PAYMASTER_URL;
const smartSessions = getSmartSessionsValidator({});
const smartAccount = await toSafeSmartAccount({
client: publicClient,
owners: [signer],
version: "1.4.1",
entryPoint: {
address: entryPoint07Address,
version: "0.7",
},
safe4337ModuleAddress: "0x7579EE8307284F293B1927136486880611F20002",
erc7579LaunchpadAddress: "0x7579011aB74c46090561ea277Ba79D510c6C00ff",
attesters: [
RHINESTONE_ATTESTER_ADDRESS,
],
attestersThreshold: 1,
validators: [
{
address: smartSessions.address,
context: smartSessions.initData,
},
],
});
const paymasterClient = await createPaymasterClient({
transport: http(paymasterUrl)
});
const pimlicoClient = createPimlicoClient({
transport: http(paymasterUrl),
entryPoint: {
address: entryPoint07Address,
version: "0.7",
},
})
const smartAccountClient = createSmartAccountClient({
account: smartAccount,
chain: arbitrumSepolia,
bundlerTransport: http(bundlerUrl, {
retryCount: 5,
retryDelay: 1000,
timeout: 20_000,
}),
paymaster: paymasterClient,
userOperation: {
estimateFeesPerGas: async () => {
return (await pimlicoClient.getUserOperationGasPrice()).fast
},
},
});
Last updated