@ethereumjs/evm
Version:
JavaScript Ethereum Virtual Machine (EVM) implementation
262 lines • 9.84 kB
JavaScript
"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