2025-04-19 15:38:48 +08:00

662 lines
22 KiB
JavaScript

import { Hardfork } from './enums.js';
var Status;
(function (Status) {
Status["Stagnant"] = "stagnant";
Status["Draft"] = "draft";
Status["Review"] = "review";
Status["Final"] = "final";
})(Status || (Status = {}));
export const EIPs = {
1153: {
comment: 'Transient storage opcodes',
url: 'https://eips.ethereum.org/EIPS/eip-1153',
status: Status.Review,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
gasPrices: {
tstore: {
v: 100,
d: 'Base fee of the TSTORE opcode',
},
tload: {
v: 100,
d: 'Base fee of the TLOAD opcode',
},
},
},
1559: {
comment: 'Fee market change for ETH 1.0 chain',
url: 'https://eips.ethereum.org/EIPS/eip-1559',
status: Status.Final,
minimumHardfork: Hardfork.Berlin,
requiredEIPs: [2930],
gasConfig: {
baseFeeMaxChangeDenominator: {
v: 8,
d: 'Maximum base fee change denominator',
},
elasticityMultiplier: {
v: 2,
d: 'Maximum block gas target elasticity',
},
initialBaseFee: {
v: 1000000000,
d: 'Initial base fee on first EIP1559 block',
},
},
},
2565: {
comment: 'ModExp gas cost',
url: 'https://eips.ethereum.org/EIPS/eip-2565',
status: Status.Final,
minimumHardfork: Hardfork.Byzantium,
requiredEIPs: [],
gasPrices: {
modexpGquaddivisor: {
v: 3,
d: 'Gquaddivisor from modexp precompile for gas calculation',
},
},
},
2537: {
comment: 'BLS12-381 precompiles',
url: 'https://eips.ethereum.org/EIPS/eip-2537',
status: 'Draft',
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
gasConfig: {},
gasPrices: {
Bls12381G1AddGas: {
v: 500,
d: 'Gas cost of a single BLS12-381 G1 addition precompile-call',
},
Bls12381G1MulGas: {
v: 12000,
d: 'Gas cost of a single BLS12-381 G1 multiplication precompile-call',
},
Bls12381G2AddGas: {
v: 800,
d: 'Gas cost of a single BLS12-381 G2 addition precompile-call',
},
Bls12381G2MulGas: {
v: 45000,
d: 'Gas cost of a single BLS12-381 G2 multiplication precompile-call',
},
Bls12381PairingBaseGas: {
v: 65000,
d: 'Base gas cost of BLS12-381 pairing check',
},
Bls12381PairingPerPairGas: {
v: 43000,
d: 'Per-pair gas cost of BLS12-381 pairing check',
},
Bls12381MapG1Gas: {
v: 5500,
d: 'Gas cost of BLS12-381 map field element to G1',
},
Bls12381MapG2Gas: {
v: 75000,
d: 'Gas cost of BLS12-381 map field element to G2',
},
},
vm: {},
pow: {},
},
2718: {
comment: 'Typed Transaction Envelope',
url: 'https://eips.ethereum.org/EIPS/eip-2718',
status: Status.Final,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
},
2929: {
comment: 'Gas cost increases for state access opcodes',
url: 'https://eips.ethereum.org/EIPS/eip-2929',
status: Status.Final,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
gasPrices: {
coldsload: {
v: 2100,
d: 'Gas cost of the first read of storage from a given location (per transaction)',
},
coldaccountaccess: {
v: 2600,
d: 'Gas cost of the first read of a given address (per transaction)',
},
warmstorageread: {
v: 100,
d: "Gas cost of reading storage locations which have already loaded 'cold'",
},
sstoreCleanGasEIP2200: {
v: 2900,
d: 'Once per SSTORE operation from clean non-zero to something else',
},
sstoreNoopGasEIP2200: {
v: 100,
d: "Once per SSTORE operation if the value doesn't change",
},
sstoreDirtyGasEIP2200: {
v: 100,
d: 'Once per SSTORE operation if a dirty value is changed',
},
sstoreInitRefundEIP2200: {
v: 19900,
d: 'Once per SSTORE operation for resetting to the original zero value',
},
sstoreCleanRefundEIP2200: {
v: 4900,
d: 'Once per SSTORE operation for resetting to the original non-zero value',
},
call: {
v: 0,
d: 'Base fee of the CALL opcode',
},
callcode: {
v: 0,
d: 'Base fee of the CALLCODE opcode',
},
delegatecall: {
v: 0,
d: 'Base fee of the DELEGATECALL opcode',
},
staticcall: {
v: 0,
d: 'Base fee of the STATICCALL opcode',
},
balance: {
v: 0,
d: 'Base fee of the BALANCE opcode',
},
extcodesize: {
v: 0,
d: 'Base fee of the EXTCODESIZE opcode',
},
extcodecopy: {
v: 0,
d: 'Base fee of the EXTCODECOPY opcode',
},
extcodehash: {
v: 0,
d: 'Base fee of the EXTCODEHASH opcode',
},
sload: {
v: 0,
d: 'Base fee of the SLOAD opcode',
},
sstore: {
v: 0,
d: 'Base fee of the SSTORE opcode',
},
},
},
2930: {
comment: 'Optional access lists',
url: 'https://eips.ethereum.org/EIPS/eip-2930',
status: Status.Final,
minimumHardfork: Hardfork.Istanbul,
requiredEIPs: [2718, 2929],
gasPrices: {
accessListStorageKeyCost: {
v: 1900,
d: 'Gas cost per storage key in an Access List transaction',
},
accessListAddressCost: {
v: 2400,
d: 'Gas cost per storage key in an Access List transaction',
},
},
},
2935: {
comment: 'Save historical block hashes in state (Verkle related usage, UNSTABLE)',
url: 'https://github.com/gballet/EIPs/pull/3/commits/2e9ac09a142b0d9fb4db0b8d4609f92e5d9990c5',
status: Status.Draft,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
vm: {
historyStorageAddress: {
v: BigInt('0x0aae40965e6800cd9b1f4b05ff21581047e3f91e'),
d: 'The address where the historical blockhashes are stored',
},
historyServeWindow: {
v: BigInt(8192),
d: 'The amount of blocks to be served by the historical blockhash contract',
},
},
},
3074: {
comment: 'AUTH and AUTHCALL opcodes',
url: 'https://github.com/ethereum/EIPs/commit/eca4416ff3c025fcb6ec8cd4eac481e74e108481',
status: Status.Review,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
gasPrices: {
auth: {
v: 3100,
d: 'Gas cost of the AUTH opcode',
},
authcall: {
v: 0,
d: 'Gas cost of the AUTHCALL opcode',
},
authcallValueTransfer: {
v: 6700,
d: 'Paid for CALL when the value transfer is non-zero',
},
},
},
3198: {
comment: 'BASEFEE opcode',
url: 'https://eips.ethereum.org/EIPS/eip-3198',
status: Status.Final,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
gasPrices: {
basefee: {
v: 2,
d: 'Gas cost of the BASEFEE opcode',
},
},
},
3529: {
comment: 'Reduction in refunds',
url: 'https://eips.ethereum.org/EIPS/eip-3529',
status: Status.Final,
minimumHardfork: Hardfork.Berlin,
requiredEIPs: [2929],
gasConfig: {
maxRefundQuotient: {
v: 5,
d: 'Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)',
},
},
gasPrices: {
selfdestructRefund: {
v: 0,
d: 'Refunded following a selfdestruct operation',
},
sstoreClearRefundEIP2200: {
v: 4800,
d: 'Once per SSTORE operation for clearing an originally existing storage slot',
},
},
},
3540: {
comment: 'EVM Object Format (EOF) v1',
url: 'https://eips.ethereum.org/EIPS/eip-3540',
status: Status.Review,
minimumHardfork: Hardfork.London,
requiredEIPs: [3541],
},
3541: {
comment: 'Reject new contracts starting with the 0xEF byte',
url: 'https://eips.ethereum.org/EIPS/eip-3541',
status: Status.Final,
minimumHardfork: Hardfork.Berlin,
requiredEIPs: [],
},
3554: {
comment: 'Difficulty Bomb Delay to December 1st 2021',
url: 'https://eips.ethereum.org/EIPS/eip-3554',
status: Status.Final,
minimumHardfork: Hardfork.MuirGlacier,
requiredEIPs: [],
pow: {
difficultyBombDelay: {
v: 9500000,
d: 'the amount of blocks to delay the difficulty bomb with',
},
},
},
3607: {
comment: 'Reject transactions from senders with deployed code',
url: 'https://eips.ethereum.org/EIPS/eip-3607',
status: Status.Final,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
},
3651: {
comment: 'Warm COINBASE',
url: 'https://eips.ethereum.org/EIPS/eip-3651',
status: Status.Review,
minimumHardfork: Hardfork.London,
requiredEIPs: [2929],
},
3670: {
comment: 'EOF - Code Validation',
url: 'https://eips.ethereum.org/EIPS/eip-3670',
status: 'Review',
minimumHardfork: Hardfork.London,
requiredEIPs: [3540],
gasConfig: {},
gasPrices: {},
vm: {},
pow: {},
},
3675: {
comment: 'Upgrade consensus to Proof-of-Stake',
url: 'https://eips.ethereum.org/EIPS/eip-3675',
status: Status.Final,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
},
3855: {
comment: 'PUSH0 instruction',
url: 'https://eips.ethereum.org/EIPS/eip-3855',
status: Status.Review,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [],
gasPrices: {
push0: {
v: 2,
d: 'Base fee of the PUSH0 opcode',
},
},
},
3860: {
comment: 'Limit and meter initcode',
url: 'https://eips.ethereum.org/EIPS/eip-3860',
status: Status.Review,
minimumHardfork: Hardfork.SpuriousDragon,
requiredEIPs: [],
gasPrices: {
initCodeWordCost: {
v: 2,
d: 'Gas to pay for each word (32 bytes) of initcode when creating a contract',
},
},
vm: {
maxInitCodeSize: {
v: 49152,
d: 'Maximum length of initialization code when creating a contract',
},
},
},
4345: {
comment: 'Difficulty Bomb Delay to June 2022',
url: 'https://eips.ethereum.org/EIPS/eip-4345',
status: Status.Final,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
pow: {
difficultyBombDelay: {
v: 10700000,
d: 'the amount of blocks to delay the difficulty bomb with',
},
},
},
4399: {
comment: 'Supplant DIFFICULTY opcode with PREVRANDAO',
url: 'https://eips.ethereum.org/EIPS/eip-4399',
status: Status.Review,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
gasPrices: {
prevrandao: {
v: 2,
d: 'Base fee of the PREVRANDAO opcode (previously DIFFICULTY)',
},
},
},
4788: {
comment: 'Beacon block root in the EVM',
url: 'https://eips.ethereum.org/EIPS/eip-4788',
status: Status.Draft,
minimumHardfork: Hardfork.Cancun,
requiredEIPs: [],
gasPrices: {},
vm: {
historicalRootsLength: {
v: 8191,
d: 'The modulo parameter of the beaconroot ring buffer in the beaconroot statefull precompile',
},
},
},
4844: {
comment: 'Shard Blob Transactions',
url: 'https://eips.ethereum.org/EIPS/eip-4844',
status: Status.Draft,
minimumHardfork: Hardfork.Paris,
requiredEIPs: [1559, 2718, 2930, 4895],
gasConfig: {
blobGasPerBlob: {
v: 131072,
d: 'The base fee for blob gas per blob',
},
targetBlobGasPerBlock: {
v: 393216,
d: 'The target blob gas consumed per block',
},
maxblobGasPerBlock: {
v: 786432,
d: 'The max blob gas allowable per block',
},
blobGasPriceUpdateFraction: {
v: 3338477,
d: 'The denominator used in the exponential when calculating a blob gas price',
},
},
gasPrices: {
simpleGasPerBlob: {
v: 12000,
d: 'The basic gas fee for each blob',
},
minBlobGasPrice: {
v: 1,
d: 'The minimum fee per blob gas',
},
kzgPointEvaluationGasPrecompilePrice: {
v: 50000,
d: 'The fee associated with the point evaluation precompile',
},
blobhash: {
v: 3,
d: 'Base fee of the BLOBHASH opcode',
},
},
sharding: {
blobCommitmentVersionKzg: {
v: 1,
d: 'The number indicated a versioned hash is a KZG commitment',
},
fieldElementsPerBlob: {
v: 4096,
d: 'The number of field elements allowed per blob',
},
},
},
4895: {
comment: 'Beacon chain push withdrawals as operations',
url: 'https://eips.ethereum.org/EIPS/eip-4895',
status: Status.Review,
minimumHardfork: Hardfork.Paris,
requiredEIPs: [],
},
5133: {
comment: 'Delaying Difficulty Bomb to mid-September 2022',
url: 'https://eips.ethereum.org/EIPS/eip-5133',
status: Status.Draft,
minimumHardfork: Hardfork.GrayGlacier,
requiredEIPs: [],
pow: {
difficultyBombDelay: {
v: 11400000,
d: 'the amount of blocks to delay the difficulty bomb with',
},
},
},
5656: {
comment: 'MCOPY - Memory copying instruction',
url: 'https://eips.ethereum.org/EIPS/eip-5656',
status: Status.Draft,
minimumHardfork: Hardfork.Shanghai,
requiredEIPs: [],
gasPrices: {
mcopy: {
v: 3,
d: 'Base fee of the MCOPY opcode',
},
},
},
6110: {
comment: 'Supply validator deposits on chain',
url: 'https://eips.ethereum.org/EIPS/eip-6110',
status: Status.Draft,
minimumHardfork: Hardfork.Cancun,
requiredEIPs: [7685],
},
6780: {
comment: 'SELFDESTRUCT only in same transaction',
url: 'https://eips.ethereum.org/EIPS/eip-6780',
status: Status.Draft,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
},
6800: {
comment: 'Ethereum state using a unified verkle tree (experimental)',
url: 'https://github.com/ethereum/EIPs/pull/6800',
status: Status.Draft,
minimumHardfork: Hardfork.London,
requiredEIPs: [],
gasPrices: {
create: {
v: 1000,
d: 'Base fee of the CREATE opcode',
},
coldsload: {
v: 0,
d: 'Gas cost of the first read of storage from a given location (per transaction)',
},
},
vm: {
// kaustinen 6 current uses this address, however this will be updated to correct address
// in next iteration
historyStorageAddress: {
v: BigInt('0xfffffffffffffffffffffffffffffffffffffffe'),
d: 'The address where the historical blockhashes are stored',
},
},
},
7002: {
comment: 'Execution layer triggerable withdrawals (experimental)',
url: 'https://github.com/ethereum/EIPs/blob/3b5fcad6b35782f8aaeba7d4ac26004e8fbd720f/EIPS/eip-7002.md',
status: Status.Draft,
minimumHardfork: Hardfork.Paris,
requiredEIPs: [7685],
vm: {
withdrawalRequestType: {
v: BigInt(0x01),
d: 'The withdrawal request type for EIP-7685',
},
excessWithdrawalsRequestStorageSlot: {
v: BigInt(0),
d: 'The storage slot of the excess withdrawals',
},
withdrawalsRequestCountStorage: {
v: BigInt(1),
d: 'The storage slot of the withdrawal request count',
},
withdrawalsRequestQueueHeadStorageSlot: {
v: BigInt(2),
d: 'The storage slot of the withdrawal request head of the queue',
},
withdrawalsRequestTailHeadStorageSlot: {
v: BigInt(3),
d: 'The storage slot of the withdrawal request tail of the queue',
},
withdrawalsRequestQueueStorageOffset: {
v: BigInt(4),
d: 'The storage slot of the withdrawal request queue offset',
},
maxWithdrawalRequestsPerBlock: {
v: BigInt(16),
d: 'The max withdrawal requests per block',
},
targetWithdrawalRequestsPerBlock: {
v: BigInt(2),
d: 'The target withdrawal requests per block',
},
minWithdrawalRequestFee: {
v: BigInt(1),
d: 'The minimum withdrawal request fee (in wei)',
},
withdrawalRequestFeeUpdateFraction: {
v: BigInt(17),
d: 'The withdrawal request fee update fraction (used in the fake exponential)',
},
systemAddress: {
v: BigInt('0xfffffffffffffffffffffffffffffffffffffffe'),
d: 'The system address to perform operations on the withdrawal requests predeploy address',
},
withdrawalRequestPredeployAddress: {
v: BigInt('0x00A3ca265EBcb825B45F985A16CEFB49958cE017'),
d: 'Address of the validator excess address',
},
},
},
7251: {
comment: 'Execution layer triggered consolidations (experimental)',
url: 'https://eips.ethereum.org/EIPS/eip-7251',
status: Status.Draft,
minimumHardfork: Hardfork.Paris,
requiredEIPs: [7685],
vm: {
consolidationRequestType: {
v: BigInt(0x02),
d: 'The withdrawal request type for EIP-7685',
},
systemAddress: {
v: BigInt('0xfffffffffffffffffffffffffffffffffffffffe'),
d: 'The system address to perform operations on the consolidation requests predeploy address',
},
consolidationRequestPredeployAddress: {
v: BigInt('0x00b42dbF2194e931E80326D950320f7d9Dbeac02'),
d: 'Address of the consolidations contract',
},
},
},
7516: {
comment: 'BLOBBASEFEE opcode',
url: 'https://eips.ethereum.org/EIPS/eip-7516',
status: Status.Draft,
minimumHardfork: Hardfork.Paris,
requiredEIPs: [4844],
gasPrices: {
blobbasefee: {
v: 2,
d: 'Gas cost of the BLOBBASEFEE opcode',
},
},
},
7685: {
comment: 'General purpose execution layer requests',
url: 'https://eips.ethereum.org/EIPS/eip-7685',
status: Status.Draft,
// TODO: Set correct minimum hardfork
minimumHardfork: Hardfork.Cancun,
requiredEIPs: [3675],
gasPrices: {},
},
7702: {
comment: 'Set EOA account code for one transaction',
url: 'https://github.com/ethereum/EIPs/blob/62419ca3f45375db00b04a368ea37c0bfb05386a/EIPS/eip-7702.md',
status: Status.Review,
// TODO: Set correct minimum hardfork
minimumHardfork: Hardfork.Cancun,
requiredEIPs: [2718, 2929, 2930],
gasPrices: {
perAuthBaseCost: {
v: 2500,
d: 'Gas cost of each authority item',
},
},
},
7709: {
comment: 'Use historical block hashes saved in state for BLOCKHASH',
url: 'https://eips.ethereum.org/EIPS/eip-7709',
status: Status.Draft,
minimumHardfork: Hardfork.Chainstart,
requiredEIPs: [2935],
},
};
//# sourceMappingURL=eips.js.map