@etherspot/prime-sdk
Version:
Etherspot Prime (Account Abstraction) SDK
25 lines (24 loc) • 1.16 kB
JavaScript
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;
;