UNPKG

@owlprotocol/contracts-account-abstraction

Version:

ERC4337 Account Abstraction support for deploying relevant smart contracts and interacting with UserOps.

42 lines (41 loc) 1.44 kB
import { encodeFunctionData, decodeAbiParameters, decodeErrorResult } from "viem"; import { getAction } from "viem/utils"; import { call } from "viem/actions"; import { abi as PimlicoEntryPointSimulationsAbi } from "../../artifacts/PimlicoEntryPointSimulations.js"; import { abi as EntryPointV07Abi } from "../../artifacts/EntryPoint.js"; async function simulateEntryPoint(client, parameters) { const { entryPoint, entryPointSimulationsCallData, entryPointSimulationsAddress, stateOverride } = parameters; const callData = encodeFunctionData({ abi: PimlicoEntryPointSimulationsAbi, functionName: "simulateEntryPoint", args: [entryPoint, entryPointSimulationsCallData] }); const callReturn = await getAction( client, call, "call" )({ to: entryPointSimulationsAddress, data: callData, blockTag: "latest", stateOverride: stateOverride ? [stateOverride] : void 0 }); const result = callReturn.data; if (!result) { throw new Error("simulateEntryPoint return empty data"); } const returnBytes = decodeAbiParameters([{ name: "ret", type: "bytes[]" }], result); return returnBytes[0].map((data) => { const decodedDelegateAndError = decodeErrorResult({ abi: EntryPointV07Abi, data }); if (!decodedDelegateAndError?.args?.[1]) { throw new Error("Unexpected error"); } return decodedDelegateAndError.args[1]; }); } export { simulateEntryPoint };