@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
JavaScript
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
};