UNPKG

@owlprotocol/contracts-account-abstraction

Version:

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

38 lines (37 loc) 1.54 kB
import { getAction } from "viem/utils"; import { writeContract, simulateContract, getChainId } from "viem/actions"; import { getUserOperationHash } from "viem/account-abstraction"; import { getSupportedEntryPoints } from "./getSupportedEntryPoints.js"; import { handleOps, errors as IEntryPointErrors } from "../../artifacts/IEntryPoint.js"; import { toPackedUserOperation } from "../../models/PackedUserOperation.js"; import { encodeUserOp } from "../../models/UserOperation.js"; async function sendUserOperation(client, parameters) { const chainId = client.chain?.id ?? await getAction(client, getChainId, "getChainId")({}); const supportedEntryPoints = await getAction(client, getSupportedEntryPoints, "getSupportedEntryPoints")({}); const entryPointAddress = supportedEntryPoints[0]; const userOperation = parameters; const userOpPacked = toPackedUserOperation(encodeUserOp(userOperation)); const handleOpsArgs = [[userOpPacked], client.account.address]; const { request } = await getAction( client, simulateContract, "simulateContract" )({ account: client.account, address: entryPointAddress, abi: [handleOps, ...IEntryPointErrors], functionName: "handleOps", args: handleOpsArgs }); getAction(client, writeContract, "writeContract")({ ...request, abi: [handleOps, ...IEntryPointErrors] }); const userOpHash = getUserOperationHash({ userOperation, entryPointAddress, entryPointVersion: "0.7", chainId }); return userOpHash; } export { sendUserOperation };