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