UNPKG

@ethereumjs/evm

Version:
262 lines 9.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RustBN254 = exports.ripemdPrecompileAddress = exports.precompiles = exports.precompileEntries = exports.NobleBN254 = exports.NobleBLS = exports.MCLBLS = exports.PrecompileAvailabilityCheck = void 0; exports.getActivePrecompiles = getActivePrecompiles; exports.getPrecompileName = getPrecompileName; const common_1 = require("@ethereumjs/common"); const util_1 = require("@ethereumjs/util"); const _0a_kzg_point_evaluation_ts_1 = require("./0a-kzg-point-evaluation.js"); const _0b_bls12_g1add_ts_1 = require("./0b-bls12-g1add.js"); const _0c_bls12_g1msm_ts_1 = require("./0c-bls12-g1msm.js"); const _0d_bls12_g2add_ts_1 = require("./0d-bls12-g2add.js"); const _0e_bls12_g2msm_ts_1 = require("./0e-bls12-g2msm.js"); const _0f_bls12_pairing_ts_1 = require("./0f-bls12-pairing.js"); const _01_ecrecover_ts_1 = require("./01-ecrecover.js"); const _02_sha256_ts_1 = require("./02-sha256.js"); const _03_ripemd160_ts_1 = require("./03-ripemd160.js"); const _04_identity_ts_1 = require("./04-identity.js"); const _05_modexp_ts_1 = require("./05-modexp.js"); const _06_bn254_add_ts_1 = require("./06-bn254-add.js"); const _07_bn254_mul_ts_1 = require("./07-bn254-mul.js"); const _08_bn254_pairing_ts_1 = require("./08-bn254-pairing.js"); const _09_blake2f_ts_1 = require("./09-blake2f.js"); const _10_bls12_map_fp_to_g1_ts_1 = require("./10-bls12-map-fp-to-g1.js"); const _11_bls12_map_fp2_to_g2_ts_1 = require("./11-bls12-map-fp2-to-g2.js"); const _100_p256verify_ts_1 = require("./100-p256verify.js"); const index_ts_1 = require("./bls12_381/index.js"); Object.defineProperty(exports, "MCLBLS", { enumerable: true, get: function () { return index_ts_1.MCLBLS; } }); Object.defineProperty(exports, "NobleBLS", { enumerable: true, get: function () { return index_ts_1.NobleBLS; } }); const index_ts_2 = require("./bn254/index.js"); Object.defineProperty(exports, "NobleBN254", { enumerable: true, get: function () { return index_ts_2.NobleBN254; } }); Object.defineProperty(exports, "RustBN254", { enumerable: true, get: function () { return index_ts_2.RustBN254; } }); exports.PrecompileAvailabilityCheck = { EIP: 'eip', Hardfork: 'hardfork', }; const BYTES_19 = '00000000000000000000000000000000000000'; const ripemdPrecompileAddress = BYTES_19 + '03'; exports.ripemdPrecompileAddress = ripemdPrecompileAddress; const precompileEntries = [ { address: BYTES_19 + '01', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Chainstart, }, precompile: _01_ecrecover_ts_1.precompile01, name: 'ECRECOVER (0x01)', }, { address: BYTES_19 + '02', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Chainstart, }, precompile: _02_sha256_ts_1.precompile02, name: 'SHA256 (0x02)', }, { address: BYTES_19 + '03', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Chainstart, }, precompile: _03_ripemd160_ts_1.precompile03, name: 'RIPEMD160 (0x03)', }, { address: BYTES_19 + '04', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Chainstart, }, precompile: _04_identity_ts_1.precompile04, name: 'IDENTITY (0x04)', }, { address: BYTES_19 + '05', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Byzantium, }, precompile: _05_modexp_ts_1.precompile05, name: 'MODEXP (0x05)', }, { address: BYTES_19 + '06', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Byzantium, }, precompile: _06_bn254_add_ts_1.precompile06, name: 'BN254_ADD (0x06)', }, { address: BYTES_19 + '07', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Byzantium, }, precompile: _07_bn254_mul_ts_1.precompile07, name: 'BN254_MUL (0x07)', }, { address: BYTES_19 + '08', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Byzantium, }, precompile: _08_bn254_pairing_ts_1.precompile08, name: 'BN254_PAIRING (0x08)', }, { address: BYTES_19 + '09', check: { type: exports.PrecompileAvailabilityCheck.Hardfork, param: common_1.Hardfork.Istanbul, }, precompile: _09_blake2f_ts_1.precompile09, name: 'BLAKE2f (0x09)', }, { address: BYTES_19 + '0a', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 4844, }, precompile: _0a_kzg_point_evaluation_ts_1.precompile0a, name: 'KZG_POINT_EVALUATION (0x0a)', }, { address: BYTES_19 + '0b', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _0b_bls12_g1add_ts_1.precompile0b, name: 'BLS12_G1ADD (0x0b)', }, { address: BYTES_19 + '0c', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _0c_bls12_g1msm_ts_1.precompile0c, name: 'BLS12_G1MSM (0x0c)', }, { address: BYTES_19 + '0d', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _0d_bls12_g2add_ts_1.precompile0d, name: 'BLS12_G2ADD (0x0d)', }, { address: BYTES_19 + '0e', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _0e_bls12_g2msm_ts_1.precompile0e, name: 'BLS12_G2MSM (0x0e)', }, { address: BYTES_19 + '0f', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _0f_bls12_pairing_ts_1.precompile0f, name: 'BLS12_PAIRING (0x0f)', }, { address: BYTES_19 + '10', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _10_bls12_map_fp_to_g1_ts_1.precompile10, name: 'BLS12_MAP_FP_TO_G1 (0x10)', }, { address: BYTES_19 + '11', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 2537, }, precompile: _11_bls12_map_fp2_to_g2_ts_1.precompile11, name: 'BLS12_MAP_FP_TO_G2 (0x11)', }, { address: '0000000000000000000000000000000000000100', check: { type: exports.PrecompileAvailabilityCheck.EIP, param: 7951, }, precompile: _100_p256verify_ts_1.precompile100, name: 'P256VERIFY (0x100)', }, ]; exports.precompileEntries = precompileEntries; const precompiles = { [BYTES_19 + '01']: _01_ecrecover_ts_1.precompile01, [BYTES_19 + '02']: _02_sha256_ts_1.precompile02, [ripemdPrecompileAddress]: _03_ripemd160_ts_1.precompile03, [BYTES_19 + '04']: _04_identity_ts_1.precompile04, [BYTES_19 + '05']: _05_modexp_ts_1.precompile05, [BYTES_19 + '06']: _06_bn254_add_ts_1.precompile06, [BYTES_19 + '07']: _07_bn254_mul_ts_1.precompile07, [BYTES_19 + '08']: _08_bn254_pairing_ts_1.precompile08, [BYTES_19 + '09']: _09_blake2f_ts_1.precompile09, [BYTES_19 + '0a']: _0a_kzg_point_evaluation_ts_1.precompile0a, [BYTES_19 + '0b']: _0b_bls12_g1add_ts_1.precompile0b, [BYTES_19 + '0c']: _0c_bls12_g1msm_ts_1.precompile0c, [BYTES_19 + '0d']: _0d_bls12_g2add_ts_1.precompile0d, [BYTES_19 + '0e']: _0e_bls12_g2msm_ts_1.precompile0e, [BYTES_19 + '0f']: _0f_bls12_pairing_ts_1.precompile0f, [BYTES_19 + '10']: _10_bls12_map_fp_to_g1_ts_1.precompile10, [BYTES_19 + '11']: _11_bls12_map_fp2_to_g2_ts_1.precompile11, '0000000000000000000000000000000000000100': _100_p256verify_ts_1.precompile100, }; exports.precompiles = precompiles; function resolvePrecompileAddress(address) { if (typeof address === 'string') { return address.slice(2).padStart(40, '0').toLowerCase(); } return (0, util_1.bytesToUnprefixedHex)(address.bytes); } function getActivePrecompiles(common, customPrecompiles) { const precompileMap = new Map(); if (customPrecompiles) { for (const precompile of customPrecompiles) { precompileMap.set(resolvePrecompileAddress(precompile.address), 'function' in precompile ? precompile.function : undefined); } } for (const entry of precompileEntries) { if (precompileMap.has(entry.address)) { continue; } const type = entry.check.type; if ((type === exports.PrecompileAvailabilityCheck.Hardfork && common.gteHardfork(entry.check.param)) || (entry.check.type === exports.PrecompileAvailabilityCheck.EIP && common.isActivatedEIP(entry.check.param))) { precompileMap.set(entry.address, entry.precompile); } } return precompileMap; } function getPrecompileName(addressUnprefixedStr) { if (addressUnprefixedStr.length < 40) { addressUnprefixedStr = addressUnprefixedStr.padStart(40, '0'); } for (const entry of precompileEntries) { if (entry.address === addressUnprefixedStr) { return entry.name; } } return ''; } //# sourceMappingURL=index.js.map