UNPKG

@polygon-hermez/vm

Version:
30 lines 1.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var ethereumjs_util_1 = require("ethereumjs-util"); var evm_1 = require("../evm"); var assert = require('assert'); var bn128 = require('rustbn.js'); function default_1(opts) { assert(opts.data); var inputData = opts.data; // no need to care about non-divisible-by-192, because bn128.pairing will properly fail in that case var inputDataSize = Math.floor(inputData.length / 192); var gasUsed = new ethereumjs_util_1.BN(opts._common.param('gasPrices', 'ecPairing') + inputDataSize * opts._common.param('gasPrices', 'ecPairingWord')); if (opts.gasLimit.lt(gasUsed)) { return (0, evm_1.OOGResult)(opts.gasLimit); } var returnData = bn128.pairing(inputData); // Reduce counters opts._VM.vcm.computeFunctionCounters('preECPairing', { inputsCount: inputDataSize }); // check ecpairing success or failure by comparing the output length if (returnData.length !== 32) { return (0, evm_1.OOGResult)(opts.gasLimit); } return { gasUsed: gasUsed, returnValue: returnData, }; } exports.default = default_1; //# sourceMappingURL=08-ecpairing.js.map