UNPKG

@owlprotocol/contracts-account-abstraction

Version:

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

45 lines (37 loc) 1.39 kB
import * as chains from "viem/chains"; import { UserOperation } from "viem/account-abstraction"; /** * Use executionResult of EntryPointSimulations to compute `verificationGas` * and `callGasLimit` * @param userOperation * @param executionResult * @param chainId * @param callDataResult * @returns `verificationGas` and `callGasLimit` */ export function calcVerificationGasAndCallGasLimit( userOperation: UserOperation<"0.7">, executionResult: { preOpGas: bigint; paid: bigint; }, chainId: number, callDataResult?: { gasUsed: bigint; }, ) { const verificationGasLimit = ((executionResult.preOpGas - userOperation.preVerificationGas) * 3n) / 2n; let gasPrice: bigint; if (userOperation.maxPriorityFeePerGas === userOperation.maxFeePerGas) { gasPrice = userOperation.maxFeePerGas; } else { gasPrice = userOperation.maxFeePerGas; } const calculatedCallGasLimit = callDataResult?.gasUsed ?? executionResult.paid / gasPrice - executionResult.preOpGas; let callGasLimit = (calculatedCallGasLimit > 9000n ? calculatedCallGasLimit : 9000n) + 21000n + 50000n; if (chainId === chains.baseGoerli.id || chainId === chains.baseSepolia.id || chainId === chains.base.id) { callGasLimit = (110n * callGasLimit) / 100n; } return { verificationGasLimit, callGasLimit }; }