Skip to content

supportsExecutionMode

Checks if a ERC-7579 execution mode is supported on the smart account. Check out this guide for a complete tutorial.

Usage

Create a smart account client with one of the following accounts that support ERC-7579:

Kernel Account
import { publicClient } from "../publicClient"
import { createSmartAccountClient } from "permissionless"
import { sepolia } from "viem/chains"
import { http } from "viem"
import { entryPoint07Address } from "viem/account-abstraction"
import { createPimlicoClient } from "permissionless/clients/pimlico"
import { erc7579Actions } from "permissionless/actions/erc7579"
import { owner } from "../owner"
import { toEcdsaKernelSmartAccount } from "permissionless/accounts"
 
const apiKey = "YOUR_PIMLICO_API_KEY"
const pimlicoUrl = `https://api.pimlico.io/v2/sepolia/rpc?apikey=${apiKey}`
 
const pimlicoClient = createPimlicoClient({
	transport: http(pimlicoUrl),
	chain: sepolia,
	entryPoint: {
		address: entryPoint07Address,
		version: "0.7",
	},
})
 
const kernelAccount = await toEcdsaKernelSmartAccount({
	client: publicClient,
	owners: [owner],
	version: "0.3.1",
})
 
// Extend the client with the ERC7579 actions
const smartAccountClient = createSmartAccountClient({
	account: kernelAccount,
	chain: sepolia,
	bundlerTransport: http(pimlicoUrl),
	paymaster: pimlicoClient,
	userOperation: {
		estimateFeesPerGas: async () => {
			return (await pimlicoClient.getUserOperationGasPrice()).fast
		},
	},
}).extend(erc7579Actions())

Use the supportsExecutionMode method to check if an execution mode is supported on the smart account.

const isExecutionModeSupported = await smartAccountClient.supportsExecutionMode({
	type: "delegatecall",
	revertOnError: true,
	selector: "0x",
	context: "0x",
})

Returns

  • Type: boolean

True if the execution mode is supported, false otherwise.

Parameters

type

  • Type: CallType

Type of the call. Accepted values are "call" | "delegatecall" | "staticcall".

revertOnError (optional)

  • Type: boolean

If true, the execution will revert if the call fails. Defaults to false.

selector (optional)

  • Type: Hex

The selector of the function to call. If not provided, 0x will be used.

context (optional)

  • Type: Hex

Context bytes that will be passed to the module as part of modeContext.