UNPKG

@owlprotocol/contracts-account-abstraction

Version:

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

83 lines (82 loc) 3.47 kB
var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var getUserOperation_exports = {}; __export(getUserOperation_exports, { getUserOperation: () => getUserOperation }); module.exports = __toCommonJS(getUserOperation_exports); var import_viem = require("viem"); var import_account_abstraction = require("viem/account-abstraction"); var import_actions = require("viem/actions"); var import_utils = require("viem/utils"); var import_chains = require("viem/chains"); var import_IEntryPointSimulations = require("../../artifacts/IEntryPointSimulations.js"); var import_PackedUserOperation = require("../../models/PackedUserOperation.js"); var import_IEntryPoint = require("../../artifacts/IEntryPoint.js"); async function getUserOperation(client, { hash }) { const chainIdNumber = client.chain.id; let rpcMaxRange = 90000n; if (chainIdNumber === import_chains.sei.id || chainIdNumber === import_chains.seiDevnet.id || chainIdNumber === import_chains.seiTestnet.id) { rpcMaxRange = 2000n; } const blockNumber = await (0, import_actions.getBlockNumber)(client); const fromBlock = rpcMaxRange < blockNumber ? blockNumber - rpcMaxRange : 0n; const filterResult = await (0, import_utils.getAction)( client, import_actions.getLogs, "getLogs" )({ address: import_account_abstraction.entryPoint07Address, event: import_IEntryPointSimulations.UserOperationEvent, args: { userOpHash: hash }, fromBlock, toBlock: "latest", strict: true }); const userOperationEvent = filterResult[0]; if (!userOperationEvent) throw new import_account_abstraction.UserOperationNotFoundError({ hash }); const transactionHash = userOperationEvent.transactionHash; const transaction = await (0, import_utils.getAction)(client, import_actions.getTransaction, "getTransaction")({ hash: transactionHash }); let op = void 0; try { const decoded = (0, import_viem.decodeFunctionData)({ abi: [import_IEntryPoint.handleOps], data: transaction.input }); const ops = decoded.args[0]; op = ops.find( (op2) => op2.sender === userOperationEvent.args.sender && op2.nonce === userOperationEvent.args.nonce ); } catch { throw new import_account_abstraction.UserOperationNotFoundError({ hash }); } if (op === void 0) { throw new import_account_abstraction.UserOperationNotFoundError({ hash }); } const userOperation = (0, import_PackedUserOperation.toUserOperationEncoded)(op); return { blockHash: transaction.blockHash, blockNumber: transaction.blockNumber, entryPoint: import_account_abstraction.entryPoint07Address, transactionHash, userOperation: (0, import_account_abstraction.formatUserOperation)(userOperation) }; }