@tokamak-zk-evm/synthesizer
Version:
Tokamak zk-EVM Synthesizer - Processes Ethereum transactions into wire maps for Tokamak zk-SNARK proof generation
413 lines (410 loc) • 17.4 kB
text/typescript
import type { ParamsDict } from '@synthesizer-libs/common'
export const paramsEVM: ParamsDict = {
/**
* Frontier/Chainstart
*/
1: {
// gasConfig
maxRefundQuotient: 2, // Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)
// gasPrices
basefeeGas: 2, // Gas base cost, used e.g. for ChainID opcode (Istanbul)
expGas: 10, // Base fee of the EXP opcode
expByteGas: 10, // Times ceil(log256(exponent)) for the EXP instruction
keccak256Gas: 30, // Base fee of the SHA3 opcode
keccak256WordGas: 6, // Once per word of the SHA3 operation's data
sloadGas: 50, // Base fee of the SLOAD opcode
sstoreSetGas: 20000, // Once per SSTORE operation if the zeroness changes from zero
sstoreResetGas: 5000, // Once per SSTORE operation if the zeroness does not change from zero
sstoreRefundGas: 15000, // Once per SSTORE operation if the zeroness changes to zero
jumpdestGas: 1, // Base fee of the JUMPDEST opcode
logGas: 375, // Base fee of the LOG opcode
logDataGas: 8, // Per byte in a LOG* operation's data
logTopicGas: 375, // Multiplied by the * of the LOG*, per LOG transaction. e.g. LOG0 incurs 0 * c_txLogTopicGas, LOG4 incurs 4 * c_txLogTopicGas
createGas: 32000, // Base fee of the CREATE opcode
callGas: 40, // Base fee of the CALL opcode
callStipendGas: 2300, // Free gas given at beginning of call
callValueTransferGas: 9000, // Paid for CALL when the value transfer is non-zero
callNewAccountGas: 25000, // Paid for CALL when the destination address didn't exist prior
selfdestructRefundGas: 24000, // Refunded following a selfdestruct operation
memoryGas: 3, // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL
quadCoefficientDivGas: 512, // Divisor for the quadratic particle of the memory cost equation
createDataGas: 200, //
copyGas: 3, // Multiplied by the number of 32-byte words that are copied (round up) for any *COPY operation and added
ecRecoverGas: 3000,
sha256Gas: 60,
sha256WordGas: 12,
ripemd160Gas: 600,
ripemd160WordGas: 120,
identityGas: 15,
identityWordGas: 3,
stopGas: 0, // Base fee of the STOP opcode
addGas: 3, // Base fee of the ADD opcode
mulGas: 5, // Base fee of the MUL opcode
subGas: 3, // Base fee of the SUB opcode
divGas: 5, // Base fee of the DIV opcode
sdivGas: 5, // Base fee of the SDIV opcode
modGas: 5, // Base fee of the MOD opcode
smodGas: 5, // Base fee of the SMOD opcode
addmodGas: 8, // Base fee of the ADDMOD opcode
mulmodGas: 8, // Base fee of the MULMOD opcode
signextendGas: 5, // Base fee of the SIGNEXTEND opcode
ltGas: 3, // Base fee of the LT opcode
gtGas: 3, // Base fee of the GT opcode
sltGas: 3, // Base fee of the SLT opcode
sgtGas: 3, // Base fee of the SGT opcode
eqGas: 3, // Base fee of the EQ opcode
iszeroGas: 3, // Base fee of the ISZERO opcode
andGas: 3, // Base fee of the AND opcode
orGas: 3, // Base fee of the OR opcode
xorGas: 3, // Base fee of the XOR opcode
notGas: 3, // Base fee of the NOT opcode
byteGas: 3, // Base fee of the BYTE opcode
addressGas: 2, // Base fee of the ADDRESS opcode
balanceGas: 20, // Base fee of the BALANCE opcode
originGas: 2, // Base fee of the ORIGIN opcode
callerGas: 2, // Base fee of the CALLER opcode
callvalueGas: 2, // Base fee of the CALLVALUE opcode
calldataloadGas: 3, // Base fee of the CALLDATALOAD opcode
calldatasizeGas: 2, // Base fee of the CALLDATASIZE opcode
calldatacopyGas: 3, // Base fee of the CALLDATACOPY opcode
codesizeGas: 2, // Base fee of the CODESIZE opcode
codecopyGas: 3, // Base fee of the CODECOPY opcode
gaspriceGas: 2, // Base fee of the GASPRICE opcode
extcodesizeGas: 20, // Base fee of the EXTCODESIZE opcode
extcodecopyGas: 20, // Base fee of the EXTCODECOPY opcode
blockhashGas: 20, // Base fee of the BLOCKHASH opcode
coinbaseGas: 2, // Base fee of the COINBASE opcode
timestampGas: 2, // Base fee of the TIMESTAMP opcode
numberGas: 2, // Base fee of the NUMBER opcode
difficultyGas: 2, // Base fee of the DIFFICULTY opcode
gaslimitGas: 2, // Base fee of the GASLIMIT opcode
popGas: 2, // Base fee of the POP opcode
mloadGas: 3, // Base fee of the MLOAD opcode
mstoreGas: 3, // Base fee of the MSTORE opcode
mstore8Gas: 3, // Base fee of the MSTORE8 opcode
sstoreGas: 0, // Base fee of the SSTORE opcode
jumpGas: 8, // Base fee of the JUMP opcode
jumpiGas: 10, // Base fee of the JUMPI opcode
pcGas: 2, // Base fee of the PC opcode
msizeGas: 2, // Base fee of the MSIZE opcode
gasGas: 2, // Base fee of the GAS opcode
pushGas: 3, // Base fee of the PUSH opcode
dupGas: 3, // Base fee of the DUP opcode
swapGas: 3, // Base fee of the SWAP opcode
callcodeGas: 40, // Base fee of the CALLCODE opcode
returnGas: 0, // Base fee of the RETURN opcode
invalidGas: 0, // Base fee of the INVALID opcode
selfdestructGas: 0, // Base fee of the SELFDESTRUCT opcode
prevrandaoGas: 0, // TODO: these below 0-gas additions might also point to non-clean implementations in the code base
// evm
stackLimit: 1024, // Maximum size of VM stack allowed
callCreateDepth: 1024, // Maximum depth of call/create stack
},
/**
. * Homestead HF Meta EIP
. */
606: {
// gasPrices
delegatecallGas: 40, // Base fee of the DELEGATECALL opcode
},
/**
. * TangerineWhistle HF Meta EIP
. */
608: {
// gasPrices
sloadGas: 200, // Once per SLOAD operation
callGas: 700, // Once per CALL operation & message call transaction
extcodesizeGas: 700, // Base fee of the EXTCODESIZE opcode
extcodecopyGas: 700, // Base fee of the EXTCODECOPY opcode
balanceGas: 400, // Base fee of the BALANCE opcode
delegatecallGas: 700, // Base fee of the DELEGATECALL opcode
callcodeGas: 700, // Base fee of the CALLCODE opcode
selfdestructGas: 5000, // Base fee of the SELFDESTRUCT opcode
},
/**
. * Spurious Dragon HF Meta EIP
. */
607: {
// gasPrices
expByteGas: 50, // Times ceil(log256(exponent)) for the EXP instruction
// evm
maxCodeSize: 24576, // Maximum length of contract code
},
/**
. * Byzantium HF Meta EIP
. */
609: {
// gasPrices
modexpGquaddivisorGas: 20, // Gquaddivisor from modexp precompile for gas calculation
bn254AddGas: 500, // Gas costs for curve addition precompile
bn254MulGas: 40000, // Gas costs for curve multiplication precompile
bn254PairingGas: 100000, // Base gas costs for curve pairing precompile
bn254PairingWordGas: 80000, // Gas costs regarding curve pairing precompile input length
revertGas: 0, // Base fee of the REVERT opcode
staticcallGas: 700, // Base fee of the STATICCALL opcode
returndatasizeGas: 2, // Base fee of the RETURNDATASIZE opcode
returndatacopyGas: 3, // Base fee of the RETURNDATACOPY opcode
},
/**
. * Constantinople HF Meta EIP
. */
1013: {
// gasPrices
netSstoreNoopGas: 200, // Once per SSTORE operation if the value doesn't change
netSstoreInitGas: 20000, // Once per SSTORE operation from clean zero
netSstoreCleanGas: 5000, // Once per SSTORE operation from clean non-zero
netSstoreDirtyGas: 200, // Once per SSTORE operation from dirty
netSstoreClearRefundGas: 15000, // Once per SSTORE operation for clearing an originally existing storage slot
netSstoreResetRefundGas: 4800, // Once per SSTORE operation for resetting to the original non-zero value
netSstoreResetClearRefundGas: 19800, // Once per SSTORE operation for resetting to the original zero value
shlGas: 3, // Base fee of the SHL opcode
shrGas: 3, // Base fee of the SHR opcode
sarGas: 3, // Base fee of the SAR opcode
extcodehashGas: 400, // Base fee of the EXTCODEHASH opcode
create2Gas: 32000, // Base fee of the CREATE2 opcode
},
/**
. * Petersburg HF Meta EIP
. */
1716: {
// gasPrices
netSstoreNoopGas: null, // Removed along EIP-1283
netSstoreInitGas: null, // Removed along EIP-1283
netSstoreCleanGas: null, // Removed along EIP-1283
netSstoreDirtyGas: null, // Removed along EIP-1283
netSstoreClearRefundGas: null, // Removed along EIP-1283
netSstoreResetRefundGas: null, // Removed along EIP-1283
netSstoreResetClearRefundGas: null, // Removed along EIP-1283
},
/**
. * Istanbul HF Meta EIP
. */
1679: {
// gasPrices
blake2RoundGas: 1, // Gas cost per round for the Blake2 F precompile
bn254AddGas: 150, // Gas costs for curve addition precompile
bn254MulGas: 6000, // Gas costs for curve multiplication precompile
bn254PairingGas: 45000, // Base gas costs for curve pairing precompile
bn254PairingWordGas: 34000, // Gas costs regarding curve pairing precompile input length
sstoreSentryEIP2200Gas: 2300, // Minimum gas required to be present for an SSTORE call, not consumed
sstoreNoopEIP2200Gas: 800, // Once per SSTORE operation if the value doesn't change
sstoreDirtyEIP2200Gas: 800, // Once per SSTORE operation if a dirty value is changed
sstoreInitEIP2200Gas: 20000, // Once per SSTORE operation from clean zero to non-zero
sstoreInitRefundEIP2200Gas: 19200, // Once per SSTORE operation for resetting to the original zero value
sstoreCleanEIP2200Gas: 5000, // Once per SSTORE operation from clean non-zero to something else
sstoreCleanRefundEIP2200Gas: 4200, // Once per SSTORE operation for resetting to the original non-zero value
sstoreClearRefundEIP2200Gas: 15000, // Once per SSTORE operation for clearing an originally existing storage slot
balanceGas: 700, // Base fee of the BALANCE opcode
extcodehashGas: 700, // Base fee of the EXTCODEHASH opcode
chainidGas: 2, // Base fee of the CHAINID opcode
selfbalanceGas: 5, // Base fee of the SELFBALANCE opcode
sloadGas: 800, // Base fee of the SLOAD opcode
},
/**
. * SWAPN, DUPN and EXCHANGE instructions
. */
663: {
// gasPrices
dupnGas: 3, // Base fee of the DUPN opcode
swapnGas: 3, // Base fee of the SWAPN opcode
exchangeGas: 3, // Base fee of the EXCHANGE opcode
},
/**
. * Transient storage opcodes
. */
1153: {
// gasPrices
tstoreGas: 100, // Base fee of the TSTORE opcode
tloadGas: 100, // Base fee of the TLOAD opcode
},
1559: {
elasticityMultiplier: 2, // Maximum block gas target elasticity
},
/**
. * ModExp gas cost
. */
2565: {
// gasPrices
modexpGquaddivisorGas: 3, // Gquaddivisor from modexp precompile for gas calculation
},
/**
* BLS12-381 precompiles
*/
2537: {
// gasPrices
bls12381G1AddGas: 500, // Gas cost of a single BLS12-381 G1 addition precompile-call
bls12381G1MulGas: 12000, // Gas cost of a single BLS12-381 G1 multiplication precompile-call
bls12381G2AddGas: 800, // Gas cost of a single BLS12-381 G2 addition precompile-call
bls12381G2MulGas: 45000, // Gas cost of a single BLS12-381 G2 multiplication precompile-call
bls12381PairingBaseGas: 65000, // Base gas cost of BLS12-381 pairing check
bls12381PairingPerPairGas: 43000, // Per-pair gas cost of BLS12-381 pairing check
bls12381MapG1Gas: 5500, // Gas cost of BLS12-381 map field element to G1
bls12381MapG2Gas: 75000, // Gas cost of BLS12-381 map field element to G2
},
/**
. * Gas cost increases for state access opcodes
. */
2929: {
// gasPrices
coldsloadGas: 2100, // Gas cost of the first read of storage from a given location (per transaction)
coldaccountaccessGas: 2600, // Gas cost of the first read of a given address (per transaction)
warmstoragereadGas: 100, // Gas cost of reading storage locations which have already loaded 'cold'
sstoreCleanEIP2200Gas: 2900, // Once per SSTORE operation from clean non-zero to something else
sstoreNoopEIP2200Gas: 100, // Once per SSTORE operation if the value doesn't change
sstoreDirtyEIP2200Gas: 100, // Once per SSTORE operation if a dirty value is changed
sstoreInitRefundEIP2200Gas: 19900, // Once per SSTORE operation for resetting to the original zero value
sstoreCleanRefundEIP2200Gas: 4900, // Once per SSTORE operation for resetting to the original non-zero value
callGas: 0, // Base fee of the CALL opcode
callcodeGas: 0, // Base fee of the CALLCODE opcode
delegatecallGas: 0, // Base fee of the DELEGATECALL opcode
staticcallGas: 0, // Base fee of the STATICCALL opcode
balanceGas: 0, // Base fee of the BALANCE opcode
extcodesizeGas: 0, // Base fee of the EXTCODESIZE opcode
extcodecopyGas: 0, // Base fee of the EXTCODECOPY opcode
extcodehashGas: 0, // Base fee of the EXTCODEHASH opcode
sloadGas: 0, // Base fee of the SLOAD opcode
sstoreGas: 0, // Base fee of the SSTORE opcode
},
/**
* Save historical block hashes in state (Verkle related usage, UNSTABLE)
*/
2935: {
// evm
historyStorageAddress: '0x0aae40965e6800cd9b1f4b05ff21581047e3f91e', // The address where the historical blockhashes are stored
historyServeWindow: 8192, // The amount of blocks to be served by the historical blockhash contract
},
/**
. * BASEFEE opcode
. */
3198: {
// gasPrices
basefeeGas: 2, // Gas cost of the BASEFEE opcode
},
/**
. * Reduction in refunds
. */
3529: {
// gasConfig
maxRefundQuotient: 5, // Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)
// gasPrices
selfdestructRefundGas: 0, // Refunded following a selfdestruct operation
sstoreClearRefundEIP2200Gas: 4800, // Once per SSTORE operation for clearing an originally existing storage slot
},
/**
. * PUSH0 instruction
. */
3855: {
// gasPrices
push0Gas: 2, // Base fee of the PUSH0 opcode
},
/**
. * Limit and meter initcode
. */
3860: {
// gasPrices
initCodeWordGas: 2, // Gas to pay for each word (32 bytes) of initcode when creating a contract
// vm
maxInitCodeSize: 49152, // Maximum length of initialization code when creating a contract
},
/**
* EOF - Static relative jumps
*/
4200: {
// gasPrices
rjumpGas: 2, // Base fee of the RJUMP opcode
rjumpiGas: 4, // Base fee of the RJUMPI opcode
rjumpvGas: 4, // Base fee of the RJUMPV opcode
},
/**
. * Supplant DIFFICULTY opcode with PREVRANDAO
. */
4399: {
// gasPrices
prevrandaoGas: 2, // Base fee of the PREVRANDAO opcode (previously DIFFICULTY)
},
/**
* EOF - Functions
*/
4750: {
// gasPrices
callfGas: 5, // Base fee of the CALLF opcode
retfGas: 3, // Base fee of the RETF opcode
},
/**
. * Shard Blob Transactions
. */
4844: {
kzgPointEvaluationPrecompileGas: 50000, // The fee associated with the point evaluation precompile
blobhashGas: 3, // Base fee of the BLOBHASH opcode
// sharding
blobCommitmentVersionKzg: 1, // The number indicated a versioned hash is a KZG commitment
fieldElementsPerBlob: 4096, // The number of field elements allowed per blob
},
/**
* MCOPY - Memory copying instruction
*/
5656: {
// gasPrices
mcopyGas: 3, // Base fee of the MCOPY opcode
},
/**
* EOF - JUMPF and non-returning functions
*/
6206: {
// gasPrices
jumpfGas: 5, // Base fee of the JUMPF opcode
},
/**
* Ethereum state using a unified verkle tree (experimental)
*/
6800: {
// gasPrices
createGas: 1000, // Base fee of the CREATE opcode
coldsloadGas: 0, // Gas cost of the first read of storage from a given location (per transaction)
},
/**
. * Revamped CALL instructions
. */
7069: {
/* Note: per EIP these are the additionally required EIPs:
EIP 150 - This is the entire Tangerine Whistle hardfork
EIP 211 - (RETURNDATASIZE / RETURNDATACOPY) - Included in Byzantium
EIP 214 - (STATICCALL) - Included in Byzantium
*/
// gasPrices
extcallGas: 0, // Base fee of the EXTCALL opcode
extdelegatecallGas: 0, // Base fee of the EXTDELEGATECALL opcode
extstaticcallGas: 0, // Base fee of the EXTSTATICCALL opcode
returndataloadGas: 3, // Base fee of the RETURNDATALOAD opcode
minRetainedGas: 5000, // Minimum gas retained prior to executing an EXT*CALL opcode (this is the minimum gas available after performing the EXT*CALL)
minCalleeGas: 2300, //Minimum gas available to the the address called by an EXT*CALL opcode
},
/**
* EOF - Data section access instructions
*/
7480: {
// gasPrices
dataloadGas: 4, // Base fee of the DATALOAD opcode
dataloadnGas: 3, // Base fee of the DATALOADN opcode
datasizeGas: 2, // Base fee of the DATASIZE opcode
datacopyGas: 3, // Base fee of the DATACOPY opcode
},
/**
. * BLOBBASEFEE opcode
. */
7516: {
// gasPrices
blobbasefeeGas: 2, // Gas cost of the BLOBBASEFEE opcode
},
/**
. * EOF Contract Creation
. */
7620: {
/* Note: per EIP these are the additionally required EIPs:
EIP 170 - (Max contract size) - Included in Spurious Dragon
*/
// gasPrices
eofcreateGas: 32000, // Base fee of the EOFCREATE opcode (Same as CREATE/CREATE2)
returncontractGas: 0, // Base fee of the RETURNCONTRACT opcode
},
}