Skip to content

Commit 723fea6

Browse files
authored
Update modexp precompile costs (EIP-7883) (#1268)
Update the [EIP-7883 "ModExp Gas Cost Increase"](https://eips.ethereum.org/EIPS/eip-7883) to the latest revision: - ethereum/EIPs#9855 - ethereum/EIPs#9969
1 parent 9de4e48 commit 723fea6

File tree

2 files changed

+4
-5
lines changed

2 files changed

+4
-5
lines changed

circle.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -423,13 +423,13 @@ jobs:
423423
working_directory: ~/build
424424
command: >
425425
bin/evmone-statetest ~/spec-tests/fixtures/state_tests/
426-
--gtest_filter='-byzantium/eip198_modexp_precompile/modexp.modexp:cancun/eip4844_blobs/blob_txs.invalid_tx_blob_count:frontier/precompiles/precompiles.precompiles:osaka/eip7594_peerdas/max_blob_per_tx.invalid_max_blobs_per_tx:osaka/eip7825_transaction_gas_limit_cap/tx_gas_limit.transaction_gas_limit_cap:osaka/eip7883_modexp_gas_increase/modexp_thresholds.vectors_from_file:osaka/eip7939_count_leading_zeros/*.*:osaka/eip7951_p256verify_precompiles/*.*:prague/eip7702_set_code_tx/set_code_txs.set_code_to_precompile'
426+
--gtest_filter='-cancun/eip4844_blobs/blob_txs.invalid_tx_blob_count:frontier/precompiles/precompiles.precompiles:osaka/eip7594_peerdas/max_blob_per_tx.invalid_max_blobs_per_tx:osaka/eip7825_transaction_gas_limit_cap/tx_gas_limit.transaction_gas_limit_cap:osaka/eip7939_count_leading_zeros/*.*:osaka/eip7951_p256verify_precompiles/*.*:prague/eip7702_set_code_tx/set_code_txs.set_code_to_precompile'
427427
- run:
428428
name: "Fusaka pre-release execution spec tests (blockchain_tests)"
429429
working_directory: ~/build
430430
command: >
431431
bin/evmone-blockchaintest ~/spec-tests/fixtures/blockchain_tests/
432-
--gtest_filter='-byzantium/eip198_modexp_precompile/modexp.modexp:cancun/eip4844_blobs/blob_txs.valid_blob_tx_combinations:frontier/precompiles/precompiles.precompiles:osaka/eip7594_peerdas/max_blob_per_tx.max_blobs_per_tx_fork_transition:osaka/eip7825_transaction_gas_limit_cap/tx_gas_limit.transaction_gas_limit_cap_at_transition:osaka/eip7883_modexp_gas_increase/modexp_thresholds.vectors_from_file:osaka/eip7918_blob_reserve_price/*.*:osaka/eip7934_block_rlp_limit/max_block_rlp_size.block_at_rlp_size_limit_boundary:osaka/eip7939_count_leading_zeros/*.*:osaka/eip7951_p256verify_precompiles/*.*:prague/eip7702_set_code_tx/set_code_txs.set_code_to_precompile'
432+
--gtest_filter='-cancun/eip4844_blobs/blob_txs.valid_blob_tx_combinations:frontier/precompiles/precompiles.precompiles:osaka/eip7594_peerdas/max_blob_per_tx.max_blobs_per_tx_fork_transition:osaka/eip7825_transaction_gas_limit_cap/tx_gas_limit.transaction_gas_limit_cap_at_transition:osaka/eip7918_blob_reserve_price/*.*:osaka/eip7934_block_rlp_limit/max_block_rlp_size.block_at_rlp_size_limit_boundary:osaka/eip7939_count_leading_zeros/*.*:osaka/eip7951_p256verify_precompiles/*.*:prague/eip7702_set_code_tx/set_code_txs.set_code_to_precompile'
433433
- collect_coverage_gcc
434434
- upload_coverage:
435435
flags: fusaka_execution_spec_tests

test/state/precompiles.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,7 @@ PrecompileAnalysis expmod_analyze(bytes_view input, evmc_revision rev) noexcept
127127
// With EIP-7823 the computation never overflows.
128128
assert(max_len <= MODEXP_LEN_LIMIT_EIP7823);
129129
const auto num_words = (max_len + 7) / 8;
130-
const auto num_words_squared = num_words * num_words;
131-
const auto mult_complexity = max_len <= 32 ? num_words_squared : num_words_squared * 2;
130+
const auto mult_complexity = max_len <= 32 ? 16 : num_words * num_words * 2;
132131
return uint64_t{mult_complexity};
133132
};
134133
static constexpr auto calc_mult_complexity_eip2565 = [](uint32_t max_len) noexcept {
@@ -153,7 +152,7 @@ PrecompileAnalysis expmod_analyze(bytes_view input, evmc_revision rev) noexcept
153152
};
154153
const auto& [min_gas, final_divisor, calc_mult_complexity] = [rev]() noexcept -> Params {
155154
if (rev >= EVMC_OSAKA)
156-
return {500, 3, calc_mult_complexity_eip7883};
155+
return {500, 1, calc_mult_complexity_eip7883};
157156
else if (rev >= EVMC_BERLIN)
158157
return {200, 3, calc_mult_complexity_eip2565};
159158
else // Byzantium

0 commit comments

Comments
 (0)