Open
Description
Summary
The Nethermind team is currently working on benchmark tests to support raising the gas limit. This issue serves as a tracker for porting tests from this PR.
If the test case already exists in EEST, there’s no need to port it from Nethermind, please provide a link to the relevant EEST code snippet. If the test needs to be added, kindly share the PR link.
Category
block
- Warmup
- Warmup - Done, Discussion
- ETH transfers: Link
- ETH transfers - feat(zkevm): create pure ether transfer worst case #1742
- Transactions: Link
- Tx with big zero data
Opcode
Arithmetic
Cryptographic
- KECCAK256 (
0x20
): Link - Done, Discussion- Keccak256 from 1 byte
- Keccak256 from 8 bytes
- Keccak256 from 32 bytes
Stateful Opcodes
- SELFBALANCE (
0x47
) - refactor(tests): updateMSIZE
andSELFBALANCE
benchmark test #1771- SimpleInstructionTwoContracts (Endlessly pushing self balance to stack (1000 per 1 contract))
Termination
Environment
- CALLER (
0x33
)- SimpleInstructionTwoContracts (Endlessly pushing caller address to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- SimpleInstructionSingleContract (Endlessly pushing caller address to stack, then popping it) -> Discussion
- ADDRESS (
0x30
)- SimpleInstructionTwoContracts (Endlessly pushing account address to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- ORIGIN (
0x32
)- SimpleInstructionTwoContracts (Endlessly pushing execution origination address to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- TIMESTAMP (
0x42
)- SimpleInstructionTwoContracts (Endlessly pushing current block's timestamp to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- NUMBER (
0x43
)- SimpleInstructionTwoContracts (Endlessly pushing current block's number to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- PREVRANDAO (
0x44
)- SimpleInstructionTwoContracts (Endlessly pushing previous block's randao mix to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- GASLIMIT (
0x45
)- SimpleInstructionTwoContracts (Endlessly pushing current block's gas limit to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- CHAINID (
0x46
)- SimpleInstructionTwoContracts (Endlessly pushing chain ID to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- BASEFEE (
0x48
)- SimpleInstructionTwoContracts (Endlessly pushing current base fee to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
- CODECOPY (
0x39
): Link- CODECOPY
Block & Chain Info
- COINBASE (
0x41
)- SimpleInstructionTwoContracts (Endlessly pushing current block's coinbase to stack (1000 per 1 contract)) - refactor(zkevm): optimize the zero param opcode case #1737
Blobs
- BLOBBASEFEE - refactor(zkevm): optimize the zero param opcode case #1737
- SimpleInstructionTwoContracts (Endlessly pushing current blob base fee to stack (1000 per 1 contract))
- BLOBHASH
- SimpleInstructionTwoContracts (Endlessly pushing zero as index and BlobHash opcode to stack when there were no blobs (1000 per 1 contract))
Stack & Memory
- PUSH0 (
0x5f
)- SimpleInstructionSingleContract (Endlessly pushing zeros to stack, then popping it) - Discussion
- SimpleInstructionTwoContracts (Endlessly pushing zeros to stack (1000 per 1 contract)) - feat(tests): add worst case tests for PUSH opcodes #1762
- GAS (
0x5a
)- SimpleInstructionSingleContract (Endlessly pushing amount of remaining gas to stack (1000 per 1 contract)) -> Discussion
- SimpleInstructionTwoContracts (Endlessly pushing amount of remaining gas to stack, then popping it) - refactor(zkevm): optimize the zero param opcode case #1737
- MSIZE (
0x59
) - refactor(tests): updateMSIZE
andSELFBALANCE
benchmark test #1771- MSize
- MSTORE (
0x52
): Link - Done, Discussion- MStore - zero
- MStore - random
- TSTORE (
0x5c
) - Done, Discussion- TStore - one storage key, repeating zero value
- TStore - one storage key, repeating constant value
- TStore - one storage key, repeating random values
- SSTORE (
0x55
): Link1, Link2, Link3.- SStore - one storage key, repeating zero value
- SStore - one storage key, repeating constant value
- SStore - one storage key, repeating random values
- SStore - one storage key, repeating two values, zero and non-zero
- SStore - many accounts, consecutive storage keys, random values
- SStore - many accounts, random storage keys, random values
- SStore - many accounts, consecutive storage keys, zero values
- SStore - many accounts, random storage keys, zero values
Control Flow
- JUMPDEST (
0x5b
)- SimpleInstructionSingleContract (Block full of JumpDest opcode only) -> refactor: optimize jumpdest test case #1732
Precompiled Contracts
- EcRecover (
0x01
): Link- EcRecover precompile -> Done, Discussion
- SHA-2 (
0x02
) - Done, Discussion- SHA-2 precompile from 1 byte
- SHA-2 precompile from 8 bytes
- SHA-2 precompile from 32 bytes
- SHA-2 precompile from 128 bytes
- SHA-2 precompile from 1024 bytes
- SHA-2 precompile from 16k bytes
- Ripemd-160 (
0x03
) - Done, Discussion- Ripemd-160 precompile from 1 byte
- Ripemd-160 precompile from 8 bytes
- Ripemd-160 precompile from 32 bytes
- Ripemd-160 precompile from 128 bytes
- Ripemd-160 precompile from 1024 bytes
- Ripemd-160 precompile from 16k bytes
- Identity (
0x04
) - Done, Discussion- Identity precompile from 1 byte
- Identity precompile from 8 bytes
- Identity precompile from 32 bytes
- Identity precompile from 128 bytes
- Identity precompile from 1024 bytes
- Identity precompile from 16k bytes
- Modexp (
0x05
): Link1, Link2- Modexp min gas, base heavy
- Modexp min gas, exp heavy
- Modexp min gas, balanced
- Modexp 208 gas, balanced
- Modexp 215 gas, exp heavy
- Modexp 298 gas, exp heavy
- Modexp Pawel 2
- Modexp Pawel 3
- Modexp Pawel 4
- Modexp 408 gas, base heavy
- Modexp 400 gas, exp heavy
- Modexp 408 gas, balanced
- Modexp 616 gas, base heavy
- Modexp 600 gas, exp heavy
- Modexp 600 gas, balanced
- Modexp 800 gas, base heavy
- Modexp 800 gas, exp heavy
- Modexp 767 gas, balanced
- Modexp 852 gas, exp heavy
- Modexp 867 gas, base heavy
- Modexp 996 gas, balanced
- Modexp 1045 gas, base heavy
- Modexp 677 gas, balanced
- Modexp 765 gas, balanced
- Modexp 1360 gas, balanced
- Modexp "eip_example1"
- Modexp "eip_example2"
- Modexp "nagydani-1-square"
- Modexp "nagydani-1-qube"
- Modexp "nagydani-1-pow0x10001"
- Modexp "nagydani-2-square"
- Modexp "nagydani-2-qube"
- Modexp "nagydani-2-pow0x10001"
- Modexp "nagydani-3-square"
- Modexp "nagydani-3-qube"
- Modexp "nagydani-3-pow0x10001"
- Modexp "nagydani-4-square"
- Modexp "nagydani-4-qube"
- Modexp "nagydani-4-pow0x10001"
- Modexp "nagydani-5-square"
- Modexp "nagydani-5-qube"
- Modexp "nagydani-5-pow0x10001"
- Modexp "marius-1-even"
- Modexp "guido-1-even"
- Modexp "guido-2-even"
- Modexp "guido-3-even"
- Modexp "guido-4-even"
- Modexp "pawel-1-exp-heavy"
- Modexp "pawel-2-exp-heavy"
- Modexp "pawel-3-exp-heavy"
- Modexp "pawel-4-exp-heavy"
- Modexp common 1360 1
- Modexp common 1360 2
- Modexp common 1349 1
- Modexp common 1152 1
- Modexp common 200 1
- Modexp common 200 2
- Modexp common 200 3
- EcAdd (
0x06
): Link- EcAdd with (0, 0)
- EcAdd with (1, 2)
- EcAdd with 32-byte coordinates
- EcMul (
0x07
): Link- EcMul with (0, 0) and scalar 2
- EcMul with (0, 0) and 32-byte scalar
- EcMul with (1, 2) and scalar 2
- EcMul with (1, 2) and 32-byte scalar
- EcMul with 32-byte coordinates and scalar 2
- EcMul with 32-byte coordinates and 32-byte scalar
- EcPairing (
0x08
): Link- EcPairing with empty input
- EcPairing with 2 sets of data
- Blake2f (
0x09
): Link- Blake2f 1 round
- Blake2f 1k rounds
- Blake2f 1M rounds
- Blake2f 10M rounds
- Point Evaluation (
0x0a
): Link - Done, Discussion- Point evaluation - one data
- Secp256r1 (
0x0b
): Link- Secp256r1 precompile, valid signature - feat(zkevm): add p256verify to worst compute tests #1744
Performance
Please start with the operation that has the lowest performance.
- besu - EcAddMarius1:
27.8
- besu - EmptyPayload:
28.8
- besu - EcAdd32ByteCoordinatesCACHABLE:
30.6
- besu - EcAdd12CACHABLE:
31.3
- reth - EmptyPayload:
33.4
- besu - Number:
33.4
- nethermind - EmptyPayload:
35.6
- reth - EcAddMarius1:
37.7
- besu - Keccak256From32Bytes:
38.5
- besu - EcRecoverUNCACHABLE:
40.0
- besu - Keccak256From8Bytes:
41.8
- nethermind - EcAddMarius1:
42.1
- besu - EcRecoverUNCACHABLE2:
45.3
- besu - Keccak256From1Byte:
46.2
- besu - Blake1KRoundsCACHABLE:
47.0
- besu - EcRecoverCACHABLE:
47.2
- besu - GasLimit:
49.8
- besu - Timestamp:
51.7
- besu - Origin:
52.4
- besu - Blake1MRoundsCACHABLE:
54.3
- besu - Gas:
56.0
- nethermind - EcRecoverUNCACHABLE:
56.7
- geth - EcRecoverUNCACHABLE:
56.9
- besu - MSize:
58.1
- nethermind - EcRecoverUNCACHABLE2:
58.4
- besu - Caller:
59.2
- besu - IdentityFrom1ByteCACHABLE:
59.6
- besu - PrevRandao:
59.9