UNPKG

@etherspot/prime-sdk

Version:

Etherspot Prime (Account Abstraction) SDK

25 lines (24 loc) 1.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calcPreVerificationGas = exports.DefaultGasOverheads = void 0; const common_1 = require("../common"); const utils_1 = require("ethers/lib/utils"); const buffer_1 = require("buffer"); exports.DefaultGasOverheads = { fixed: 21000, perUserOp: 18300, perUserOpWord: 4, zeroByte: 4, nonZeroByte: 16, bundleSize: 1, sigSize: 65, }; function calcPreVerificationGas(userOp, overheads) { const ov = Object.assign(Object.assign({}, exports.DefaultGasOverheads), (overheads !== null && overheads !== void 0 ? overheads : {})); const p = Object.assign({ preVerificationGas: 21000, signature: (0, utils_1.hexlify)(buffer_1.Buffer.alloc(ov.sigSize, 1)) }, userOp); const packed = (0, utils_1.arrayify)((0, common_1.packUserOp)(p, false)); const callDataCost = packed.map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte)).reduce((sum, x) => sum + x); const ret = Math.round(callDataCost + ov.fixed / ov.bundleSize + ov.perUserOp + ov.perUserOpWord * packed.length); return ret; } exports.calcPreVerificationGas = calcPreVerificationGas;