From 9b54e11c93991d53d860ede0fbc0968585b5b2e5 Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Thu, 8 May 2025 10:56:14 +0300 Subject: [PATCH 1/7] refactor requests root generation --- kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md | 6 +++--- kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md | 11 +++++------ 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md index 6d3b725789..83580d9722 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md @@ -196,7 +196,7 @@ In the comments next to each cell, we've marked which component of the YellowPap - .List + .Bytes //other request types come here @@ -735,7 +735,7 @@ While processing a block, multiple requests objects with different `request_type SCHED LOGS DRQSTS - _ => #computeRequestsHash(DRQSTS) + _ => #computeRequestsHash(ListItem(DEPOSIT_REQUEST_TYPE +Bytes DRQSTS)) requires Ghasrequests << SCHED >> andBool IDX >=Int size(LOGS) rule #filterLogs IDX @@ -755,7 +755,7 @@ Rules for parsing Deposit Requests according to EIP-6110. syntax KItem ::= "#parseDepositRequest" SubstateLogEntry [symbol(#parseDepositRequest)] // --------------------------------------------------------------------------------------- rule #parseDepositRequest { ADDR | TOPICS | DATA } => .K ... - RS => RS ListItem(Int2Bytes(1, DEPOSIT_REQUEST_TYPE, BE) +Bytes #extractDepositData(DATA)) + DEPOSIT_REQUESTS => DEPOSIT_REQUESTS +Bytes #extractDepositData(DATA) requires ADDR ==K DEPOSIT_CONTRACT_ADDRESS andBool size(TOPICS) >Int 0 andBool {TOPICS[0]}:>Int ==Int DEPOSIT_EVENT_SIGNATURE_HASH diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md index 6a2bdf5ee2..97b790c800 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md @@ -16,9 +16,6 @@ requests = request_type ++ request_data ``` Each request type will define its own requests object with its own `request_data` format. -In order to compute the commitment, an intermediate hash list is first built by hashing all non-empty requests elements of the block requests list. -Items with empty `request_data` are excluded, i.e. the intermediate list skips requests items which contain only the `request_type` (1 byte) and nothing else. - ```k syntax Int ::= #computeRequestsHash(List) [function, symbol(#computeRequestsHash)] // ---------------------------------------------------------------------------------- @@ -33,6 +30,10 @@ Items with empty `request_data` are excluded, i.e. the intermediate list skips r requires lengthBytes(R) <=Int 1 rule #computeRequestsHashIntermediate(ListItem(R) RS, ACC) => #computeRequestsHashIntermediate(RS, ACC +Bytes Sha256raw(R)) requires lengthBytes(R) >Int 1 + + syntax Bytes ::= "DEPOSIT_REQUEST_TYPE" [macro] + // ----------------------------------------------- + rule DEPOSIT_REQUEST_TYPE => b"\x00" ``` Deposit Requests @@ -46,12 +47,10 @@ The structure denoting the new deposit request consists of the following fields: 5. `index: uint64` ```k - syntax Int ::= "DEPOSIT_REQUEST_TYPE" [macro] - | "DEPOSIT_EVENT_LENGTH" [macro] + syntax Int ::= "DEPOSIT_EVENT_LENGTH" [macro] | "DEPOSIT_CONTRACT_ADDRESS" [alias] | "DEPOSIT_EVENT_SIGNATURE_HASH" [alias] // ----------------------------------------------------- - rule DEPOSIT_REQUEST_TYPE => 0 rule DEPOSIT_CONTRACT_ADDRESS => #parseAddr("0x00000000219ab540356cbb839cbe05303d7705fa") rule DEPOSIT_EVENT_SIGNATURE_HASH => #parseWord("0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5") rule DEPOSIT_EVENT_LENGTH => 576 From 01724b9f367eca92f83abbf3443b9d2a17961a2a Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Thu, 8 May 2025 12:00:37 +0300 Subject: [PATCH 2/7] update expected output --- tests/failing/ContractCreationSpam_d0g0v0.json.expected | 2 +- ...ic_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/failing/ContractCreationSpam_d0g0v0.json.expected b/tests/failing/ContractCreationSpam_d0g0v0.json.expected index 2166b31441..a339be6ce7 100644 --- a/tests/failing/ContractCreationSpam_d0g0v0.json.expected +++ b/tests/failing/ContractCreationSpam_d0g0v0.json.expected @@ -350,7 +350,7 @@ - .List + b"" diff --git a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected b/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected index d4aa7e29a6..e37923678d 100644 --- a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected +++ b/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected @@ -396,7 +396,7 @@ - .List + b"" From 9bb5c2f3d025818b2c3628bea2b4f85624bcccb1 Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Thu, 8 May 2025 12:24:49 +0300 Subject: [PATCH 3/7] replace Bytes2Int with #asWord wrapper --- .../kevm_pyk/kproj/evm-semantics/requests.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md index 97b790c800..327ac57217 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md @@ -93,16 +93,16 @@ The structure denoting the new deposit request consists of the following fields: // ------------------------------------------------------------------------------------------------------ rule #isValidDepositEventData(DATA) => true requires lengthBytes(DATA) ==Int DEPOSIT_EVENT_LENGTH - andBool Bytes2Int(substrBytes(DATA, 0, 32), BE, Unsigned) ==Int PUBKEY_OFFSET - andBool Bytes2Int(substrBytes(DATA, 32, 64), BE, Unsigned) ==Int WITHDRAWAL_CREDENTIALS_OFFSET - andBool Bytes2Int(substrBytes(DATA, 64, 96), BE, Unsigned) ==Int AMOUNT_OFFSET - andBool Bytes2Int(substrBytes(DATA, 96, 128), BE, Unsigned) ==Int SIGNATURE_OFFSET - andBool Bytes2Int(substrBytes(DATA, 128, 160), BE, Unsigned) ==Int INDEX_OFFSET - andBool Bytes2Int(substrBytes(DATA, PUBKEY_OFFSET, PUBKEY_OFFSET +Int 32), BE, Unsigned) ==Int PUBKEY_SIZE - andBool Bytes2Int(substrBytes(DATA, WITHDRAWAL_CREDENTIALS_OFFSET, WITHDRAWAL_CREDENTIALS_OFFSET +Int 32), BE, Unsigned) ==Int WITHDRAWAL_CREDENTIALS_SIZE - andBool Bytes2Int(substrBytes(DATA, AMOUNT_OFFSET, AMOUNT_OFFSET +Int 32), BE, Unsigned) ==Int AMOUNT_SIZE - andBool Bytes2Int(substrBytes(DATA, SIGNATURE_OFFSET, SIGNATURE_OFFSET +Int 32), BE, Unsigned) ==Int SIGNATURE_SIZE - andBool Bytes2Int(substrBytes(DATA, INDEX_OFFSET, INDEX_OFFSET +Int 32), BE, Unsigned) ==Int INDEX_SIZE + andBool #asWord(substrBytes(DATA, 0, 32)) ==Int PUBKEY_OFFSET + andBool #asWord(substrBytes(DATA, 32, 64)) ==Int WITHDRAWAL_CREDENTIALS_OFFSET + andBool #asWord(substrBytes(DATA, 64, 96)) ==Int AMOUNT_OFFSET + andBool #asWord(substrBytes(DATA, 96, 128)) ==Int SIGNATURE_OFFSET + andBool #asWord(substrBytes(DATA, 128, 160)) ==Int INDEX_OFFSET + andBool #asWord(substrBytes(DATA, PUBKEY_OFFSET, PUBKEY_OFFSET +Int 32)) ==Int PUBKEY_SIZE + andBool #asWord(substrBytes(DATA, WITHDRAWAL_CREDENTIALS_OFFSET, WITHDRAWAL_CREDENTIALS_OFFSET +Int 32)) ==Int WITHDRAWAL_CREDENTIALS_SIZE + andBool #asWord(substrBytes(DATA, AMOUNT_OFFSET, AMOUNT_OFFSET +Int 32)) ==Int AMOUNT_SIZE + andBool #asWord(substrBytes(DATA, SIGNATURE_OFFSET, SIGNATURE_OFFSET +Int 32)) ==Int SIGNATURE_SIZE + andBool #asWord(substrBytes(DATA, INDEX_OFFSET, INDEX_OFFSET +Int 32)) ==Int INDEX_SIZE rule #isValidDepositEventData(_) => false [owise] ``` From a22a28f5e63550ff08bebbdeb9fa69f2631b72f2 Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Thu, 8 May 2025 16:46:19 +0300 Subject: [PATCH 4/7] update execution-spec-tests/failing.llvm --- tests/execution-spec-tests/failing.llvm | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/tests/execution-spec-tests/failing.llvm b/tests/execution-spec-tests/failing.llvm index faaf4259e5..43a2b55aaa 100644 --- a/tests/execution-spec-tests/failing.llvm +++ b/tests/execution-spec-tests/failing.llvm @@ -1693,18 +1693,7 @@ blockchain_tests/prague/eip2537_bls_12_381_precompiles/bls12_variable_length_inp blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history_at_transition.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,* -blockchain_tests/prague/eip6110_deposits/deposits/deposit_negative.json,* -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-many_deposits_from_contract] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_different_eoa] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_high_count] blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposits_from_contract] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_between_eoa_deposits] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_contract_single_deposit_from_eoa] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_between_contract_deposits] -blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-single_deposit_from_eoa_single_deposit_from_contract] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/contract_deployment/system_contract_deployment.json,* blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-1_withdrawal_request] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-15_withdrawal_requests] From d7a099a878c147202e196ee38adefd4a2259590f Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Fri, 9 May 2025 13:47:33 +0300 Subject: [PATCH 5/7] update execution-spec-tests/failing.llvm --- tests/execution-spec-tests/failing.llvm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/execution-spec-tests/failing.llvm b/tests/execution-spec-tests/failing.llvm index 43a2b55aaa..4d4c81216f 100644 --- a/tests/execution-spec-tests/failing.llvm +++ b/tests/execution-spec-tests/failing.llvm @@ -1693,6 +1693,8 @@ blockchain_tests/prague/eip2537_bls_12_381_precompiles/bls12_variable_length_inp blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history_at_transition.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,* +blockchain_tests/prague/eip6110_deposits/deposits/deposit_negative.json,* +blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts] blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/contract_deployment/system_contract_deployment.json,* blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-1_withdrawal_request] From 16a0142b3596dbf831fbb59e6c6c1d142c8172a0 Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Mon, 12 May 2025 15:44:03 +0300 Subject: [PATCH 6/7] implement system calls to withdrawal and consolidation contracts --- .../src/kevm_pyk/kproj/evm-semantics/evm.md | 150 +++++++++++++++--- .../kevm_pyk/kproj/evm-semantics/requests.md | 31 +++- .../kproj/evm-semantics/state-utils.md | 4 + tests/execution-spec-tests/failing.llvm | 72 +-------- .../ContractCreationSpam_d0g0v0.json.expected | 6 + ...ecall_110_OOGMAfter_2_d0g0v0.json.expected | 6 + 6 files changed, 172 insertions(+), 97 deletions(-) diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md index 0d193b12e6..b65b593e2e 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/evm.md @@ -197,7 +197,8 @@ In the comments next to each cell, we've marked which component of the YellowPap .Bytes - //other request types come here + .Bytes + .Bytes @@ -724,29 +725,21 @@ After executing a transaction, it's necessary to have the effect of the substate ### Fetching requests from event logs -While processing a block, multiple requests objects with different `request_types` will be produced by the system, and accumulated in the block requests list. +While processing a block, multiple deposit requests objects with will be produced by the system. +`#parseDepositRequest` function parses each log item produced in the block and fetches deposit requests. ```k syntax KItem ::= "#filterLogs" Int [symbol(#filterLogs)] // -------------------------------------------------------- - rule #filterLogs _ => .K ... SCHED requires notBool Ghasrequests << SCHED >> - - rule #filterLogs IDX => .K ... - SCHED - LOGS - DRQSTS - _ => #computeRequestsHash(ListItem(DEPOSIT_REQUEST_TYPE +Bytes DRQSTS)) - requires Ghasrequests << SCHED >> andBool IDX >=Int size(LOGS) - - rule #filterLogs IDX - => #parseDepositRequest {LOGS[IDX]}:>SubstateLogEntry - // parse other request types - ~> #filterLogs IDX +Int 1 - ... - + rule #filterLogs IDX => #parseDepositRequest {LOGS[IDX]}:>SubstateLogEntry ~> #filterLogs IDX +Int 1 ... + SC LOGS SCHED requires IDX > + andBool notBool SC ==K EVMC_INVALID_BLOCK + + rule #filterLogs _ => .K ... [owise] + rule #halt ~> #filterLogs _ => .K ... ``` Rules for parsing Deposit Requests according to EIP-6110. @@ -769,6 +762,52 @@ Rules for parsing Deposit Requests according to EIP-6110. rule #parseDepositRequest _ => .K ... [owise] ``` + +Retrieving requests from the output of a system call. +`#getRequests WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS` fetches the output of a system call and stores the output in the `` cell. +`#getRequests CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS` fetches the output of a system call and stores the output in the `` cell. + +```k + syntax KItem ::= "#getRequests" Int [symbol(#getRequests)] + // ---------------------------------------------------------- + rule #halt ~> #getRequests WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS => #popCallStack ~> #dropWorldState ~> #finalizeStorage(ListItem(WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS)) ... + WRQSTS + _ => WRQSTS + + rule #halt ~> #getRequests CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS => #popCallStack ~> #dropWorldState ~> #finalizeStorage(ListItem(CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS)) ... + CRQSTS + _ => CRQSTS + + syntax KItem ::= "#checkRequestsRoot" Int [symbol(#checkRequestsRoot)] + | "#validateRequestsRoot" [symbol(#validateRequestsRoot)] + // ------------------------------------------------------------------------ + rule #validateRequestsRoot => #checkRequestsRoot #computeRequestsHash(ListItem(DEPOSIT_REQUEST_TYPE +Bytes DRQSTS) ListItem(WITHDRAWAL_REQUEST_TYPE +Bytes WRQSTS) ListItem(CONSOLIDATION_REQUEST_TYPE +Bytes CRQSTS)) ... + DRQSTS + WRQSTS + CRQSTS + + rule #checkRequestsRoot REQUESTS_ROOT => .K ... HEADER_REQUESTS_ROOT requires REQUESTS_ROOT ==K HEADER_REQUESTS_ROOT + rule #checkRequestsRoot REQUESTS_ROOT => .K ... HEADER_REQUESTS_ROOT + _ => EVMC_INVALID_BLOCK + requires notBool REQUESTS_ROOT ==K HEADER_REQUESTS_ROOT + + syntax KItem ::= "#processGeneralPurposeRequests" [symbol(#processGeneralPurposeRequests)] + // ------------------------------------------------------------------------------------------ + rule #processGeneralPurposeRequests + => #filterLogs 0 + ~> #systemCall WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS .Bytes ~> #getRequests WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS + ~> #systemCall CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS .Bytes ~> #getRequests CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS + ~> #validateRequestsRoot + ... + + SC + SCHED + requires Ghasrequests << SCHED >> + andBool SC in (SetItem(EVMC_SUCCESS) SetItem(EVMC_REVERT) SetItem(.StatusCode)) + + rule #processGeneralPurposeRequests => .K ... [owise] +``` + ### Blobs - `#validateBlockBlobs COUNT TXIDS`: Iterates through the transactions of the current block in order, counting up total versioned hashes (blob commitments) in the block. @@ -848,7 +887,7 @@ Terminates validation successfully when all conditions are met or when blob vali rule #finalizeBlock => #if Ghaswithdrawals << SCHED >> #then #finalizeWithdrawals #else .K #fi ~> #rewardOmmers(OMMERS) - ~> #filterLogs 0 + ~> #processGeneralPurposeRequests ~> #finalizeBlockBlobs ... @@ -923,14 +962,14 @@ where `HISTORY_BUFFER_LENGTH == 8191`. Read more about EIP-4788 here [https://eips.ethereum.org/EIPS/eip-4788](https://eips.ethereum.org/EIPS/eip-4788). ```k - syntax EthereumCommand ::= "#executeBeaconRoots" [symbol(#executeBeaconRoots)] - // ------------------------------------------------------------------------------ + syntax InternalOp ::= "#executeBeaconRoots" [symbol(#executeBeaconRoots)] + // ------------------------------------------------------------------------- rule #executeBeaconRoots => .K ... SCHED TS BR - 339909022928299415537769066420252604268194818 + BEACON_ROOTS_ADDRESS M:Map => M [(TS modInt 8191) <- TS] [(TS modInt 8191 +Int 8191) <- BR] ... @@ -947,14 +986,14 @@ where `HISTORY_SERVE_WINDOW == 8191`. Read more about EIP-2935 here [https://eips.ethereum.org/EIPS/eip-2935](https://eips.ethereum.org/EIPS/eip-2935). ```k - syntax EthereumCommand ::= "#executeBlockHashHistory" [symbol(#executeBlockHashHistory)] - // ---------------------------------------------------------------------------------------- + syntax InternalOp ::= "#executeBlockHashHistory" [symbol(#executeBlockHashHistory)] + // ----------------------------------------------------------------------------------- rule #executeBlockHashHistory => .K ... SCHED HP BN - 21693734551179282564423033930679318143314229 + HISTORY_STORAGE_ADDRESS M:Map => M [((BN -Int 1) modInt 8191) <- HP] ... @@ -1695,6 +1734,69 @@ The various `CALL*` (and other inter-contract control flow) operations will be d rule #computeValidJumpDestsWithinBound(PGM, I, RESULT) => #computeValidJumpDests(PGM, I +Int #widthOpCode(PGM [ I ]), RESULT) requires notBool PGM [ I ] ==Int 91 ``` +System Calls +------------ +Address Constants +- `SYSTEM_ADDRESS (0xfffffffffffffffffffffffffffffffffffffffe)`: Special address used for system operations +- `BEACON_ROOTS_ADDRESS (0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02)`: Address for beacon chain root storage +- `HISTORY_STORAGE_ADDRESS (0x0000F90827F1C53a10cb7A02335B175320002935)`: Address for historical data storage + +System Transaction Configuration +- `SYSTEMTXGAS (30000000)`: Special gas limit for system transactions +- Gas not counted against block gas limit +- No fee burn semantics apply to system transactions + +## System Call Operations +- `#systemCall`: Top-level operation that initiates a system call + - Preserves execution context by pushing to call stack + - Preserves world state before making the call +- `#mkSystemCall`: Implementation operation that constructs the actual call + - Always sets caller to `SYSTEM_ADDRESS` + - Uses the system gas limit instead of standard call gas + - Performs call with zero value transfer + +```k + syntax Int ::= "SYSTEM_ADDRESS" [alias] + | "BEACON_ROOTS_ADDRESS" [alias] + | "HISTORY_STORAGE_ADDRESS" [alias] + | "SYSTEMTXGAS" [macro] + // ------------------------------------ + rule SYSTEM_ADDRESS => 1461501637330902918203684832716283019655932542974 + rule BEACON_ROOTS_ADDRESS => 339909022928299415537769066420252604268194818 + rule HISTORY_STORAGE_ADDRESS => 21693734551179282564423033930679318143314229 + rule SYSTEMTXGAS => 30000000 + + syntax InternalOp ::= "#systemCall" Int Bytes [symbol(#systemCall)] + | "#mkSystemCall" Int Bytes [symbol(#mkSystemCall)] + // ----------------------------------------------------------------------- + rule #systemCall ACCTTO ARGS => #pushCallStack ~> #pushWorldState ~> #mkSystemCall ACCTTO ARGS ... + + rule #mkSystemCall ACCTTO ARGS => #loadProgram CODE ~> #initVM ~> #execute ... + USEGAS:Bool + CD => CD +Int 1 + _ => ARGS + _ => 0 + _ => ACCTTO + GAVAIL:Gas => #if USEGAS #then SYSTEMTXGAS:Gas #else GAVAIL:Gas #fi + GCALL:Gas => #if USEGAS #then 0:Gas #else GCALL:Gas #fi + _ => SYSTEM_ADDRESS + _ => false + + ACCTTO + CODE + ... + + + // rule #mkSystemCall ACCTTO ARGS => #mkCall SYSTEM_ADDRESS ACCTTO ACCTTO CODE 0 ARGS false ... + // USEGAS + // GCALL => #if USEGAS #then SYSTEMTXGAS #else GCALL #fi + // + // ACCTTO + // CODE + // ... + // +``` + ```k syntax Int ::= #widthOpCode(Int) [symbol(#widthOpCode), function] // ----------------------------------------------------------------- diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md index 327ac57217..0517d9e82c 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/requests.md @@ -16,6 +16,11 @@ requests = request_type ++ request_data ``` Each request type will define its own requests object with its own `request_data` format. +Address constants: +- `DEPOSIT_CONTRACT_ADDRESS (0x00000000219ab540356cbb839cbe05303d7705fa)` : Predeployed contract for deposits. +- `WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS (0x00000961Ef480Eb55e80D19ad83579A64c007002)`: Predeployed contract for validator withdrawal requests (EIP-7002) +- `CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS (0x0000BBdDc7CE488642fb579f8B00f3a590007251)`: Predeployed contract for stake consolidation requests + ```k syntax Int ::= #computeRequestsHash(List) [function, symbol(#computeRequestsHash)] // ---------------------------------------------------------------------------------- @@ -31,9 +36,21 @@ Each request type will define its own requests object with its own `request_data rule #computeRequestsHashIntermediate(ListItem(R) RS, ACC) => #computeRequestsHashIntermediate(RS, ACC +Bytes Sha256raw(R)) requires lengthBytes(R) >Int 1 - syntax Bytes ::= "DEPOSIT_REQUEST_TYPE" [macro] - // ----------------------------------------------- + syntax Int ::= "DEPOSIT_EVENT_SIGNATURE_HASH" [alias] + | "WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS" [alias] + | "CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS" [alias] + // ---------------------------------------------------------------- + rule DEPOSIT_CONTRACT_ADDRESS => 44667813780391404145283579356374304250 + rule WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS => 817336022611862939366240017674853872070658 + rule CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS => 16365465459783978374881923886502306505585233 + + syntax Bytes ::= "DEPOSIT_REQUEST_TYPE" [macro] + | "WITHDRAWAL_REQUEST_TYPE" [macro] + | "CONSOLIDATION_REQUEST_TYPE" [macro] + // ----------------------------------------------------- rule DEPOSIT_REQUEST_TYPE => b"\x00" + rule WITHDRAWAL_REQUEST_TYPE => b"\x01" + rule CONSOLIDATION_REQUEST_TYPE => b"\x02" ``` Deposit Requests @@ -47,12 +64,10 @@ The structure denoting the new deposit request consists of the following fields: 5. `index: uint64` ```k - syntax Int ::= "DEPOSIT_EVENT_LENGTH" [macro] - | "DEPOSIT_CONTRACT_ADDRESS" [alias] - | "DEPOSIT_EVENT_SIGNATURE_HASH" [alias] - // ----------------------------------------------------- - rule DEPOSIT_CONTRACT_ADDRESS => #parseAddr("0x00000000219ab540356cbb839cbe05303d7705fa") - rule DEPOSIT_EVENT_SIGNATURE_HASH => #parseWord("0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5") + syntax Int ::= "DEPOSIT_EVENT_LENGTH" [macro] + | "DEPOSIT_CONTRACT_ADDRESS" [alias] + // ------------------------------------------------- + rule DEPOSIT_EVENT_SIGNATURE_HASH => 45506446345753628416285423056165511379837572639148407563471291220684748896453 rule DEPOSIT_EVENT_LENGTH => 576 syntax Int ::= "PUBKEY_OFFSET" [macro] diff --git a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/state-utils.md b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/state-utils.md index 667a9ebc51..36ee06dd45 100644 --- a/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/state-utils.md +++ b/kevm-pyk/src/kevm_pyk/kproj/evm-semantics/state-utils.md @@ -78,6 +78,9 @@ module STATE-UTILS _ => 0 _ => 0 _ => 0 + _ => .Bytes + _ => .Bytes + _ => .Bytes syntax EthereumCommand ::= "clearNETWORK" // ----------------------------------------- @@ -193,6 +196,7 @@ The `"network"` key allows setting the fee schedule inside the test. rule #asScheduleString("Cancun") => CANCUN rule #asScheduleString("ShanghaiToCancunAtTime15k") => CANCUN rule #asScheduleString("Prague") => PRAGUE + rule #asScheduleString("CancunToPragueAtTime15k") => PRAGUE ``` - `#parseJSONs2List` parse a JSON object with string values into a list of value. diff --git a/tests/execution-spec-tests/failing.llvm b/tests/execution-spec-tests/failing.llvm index 935058a89e..d1596ff3c2 100644 --- a/tests/execution-spec-tests/failing.llvm +++ b/tests/execution-spec-tests/failing.llvm @@ -1637,53 +1637,21 @@ blockchain_tests/prague/eip2537_bls_12_381_precompiles/bls12_g2mul/invalid.json, blockchain_tests/prague/eip2537_bls_12_381_precompiles/bls12_precompiles_before_fork/precompile_before_fork.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history_at_transition.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history.json,* -blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,* -blockchain_tests/prague/eip6110_deposits/deposits/deposit_negative.json,* +blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,tests/prague/eip2935_historical_block_hashes_from_state/test_contract_deployment.py::test_system_contract_deployment[fork_CancunToPragueAtTime15k-blockchain_test-deploy_after_fork-nonzero_balance] +blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,tests/prague/eip2935_historical_block_hashes_from_state/test_contract_deployment.py::test_system_contract_deployment[fork_CancunToPragueAtTime15k-blockchain_test-deploy_before_fork-nonzero_balance] +blockchain_tests/prague/eip6110_deposits/deposits/deposit_negative.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit_negative[fork_Prague-blockchain_test-no_deposits_non_empty_requests_list] blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts] blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/contract_deployment/system_contract_deployment.json,* blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-1_withdrawal_request] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-15_withdrawal_requests] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-16_withdrawal_requests] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-17_withdrawal_requests] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-18_withdrawal_requests] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests_during_fork/withdrawal_requests_during_fork.json,* -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests_negative.json,* -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_above_max_withdrawal_requests_from_eoa] +blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests_negative.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests_negative[fork_Prague-blockchain_test-no_withdrawals_non_empty_requests_list] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_fee_increments] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_max_withdrawal_requests_from_eoa] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_first_oog] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_first_reverts] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_from_different_eoa] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_from_same_eoa] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_oog] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_reverts] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_first_oog] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_first_reverts] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_last_oog] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract_last_reverts] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_requests_from_contract] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_contract] -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_single_withdrawal_request_from_eoa] blockchain_tests/prague/eip7251_consolidations/consolidations_during_fork/consolidation_requests_during_fork.json,* -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests_negative.json,* -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-multiple_block_above_max_consolidation_requests_from_eoa] +blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests_negative.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests_negative[fork_Prague-blockchain_test-no_consolidations_non_empty_requests_list] blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-multiple_block_fee_increments] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_first_oog] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_first_reverts] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_from_different_eoa] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_from_same_eoa] blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_oog] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_reverts] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_first_oog] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_first_reverts] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_last_oog] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract_last_reverts] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_requests_from_contract] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_contract] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_equal_pubkeys] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa_max_pubkeys] -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_single_consolidation_request_from_eoa] blockchain_tests/prague/eip7251_consolidations/contract_deployment/system_contract_deployment.json,* blockchain_tests/prague/eip7623_increase_calldata_cost/execution_gas/full_gas_consumption.json,tests/prague/eip7623_increase_calldata_cost/test_execution_gas.py::TestGasConsumption::test_full_gas_consumption[fork_Prague-blockchain_test_from_state_test-exact_gas-type_4] blockchain_tests/prague/eip7623_increase_calldata_cost/execution_gas/full_gas_consumption.json,tests/prague/eip7623_increase_calldata_cost/test_execution_gas.py::TestGasConsumption::test_full_gas_consumption[fork_Prague-blockchain_test_from_state_test-extra_gas-type_4] @@ -1786,34 +1754,8 @@ blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/tran blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/transaction_validity_type_3.json,tests/prague/eip7623_increase_calldata_cost/test_transaction_validity.py::test_transaction_validity_type_3[fork_Prague-blockchain_test_from_state_test-type_3-single_blob-single_access_list_single_storage_key-extra_gas-floor_gas_greater_than_intrinsic_gas] blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/transaction_validity_type_3.json,tests/prague/eip7623_increase_calldata_cost/test_transaction_validity.py::test_transaction_validity_type_3[fork_Prague-blockchain_test_from_state_test-type_3-single_blob-single_access_list_single_storage_key-insufficient_gas-floor_gas_greater_than_intrinsic_gas] blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/transaction_validity_type_4.json,* -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/invalid_deposit_withdrawal_consolidation_requests.json,* -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_request_from_same_tx.json,* -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_contract+deposit_from_contract+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_contract+withdrawal_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+consolidation_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+consolidation_from_contract+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+deposit_from_eoa+withdrawal_from_eoa] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+withdrawal_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-consolidation_from_eoa+withdrawal_from_eoa+deposit_from_eoa] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_contract+consolidation_from_contract+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_contract+withdrawal_from_contract+consolidation_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_contract+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+consolidation_from_eoa+withdrawal_from_eoa] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+consolidation_from_eoa] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-deposit_from_eoa+withdrawal_from_eoa+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-max_withdrawals_per_slot+max_consolidations_per_slot+unlimited_deposits_per_slot] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_contract+consolidation_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_contract+deposit_from_contract+consolidation_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_contract+deposit_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_contract+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_eoa+deposit_from_eoa] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+consolidation_from_eoa+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+consolidation_from_eoa] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+deposit_from_eoa+withdrawal_from_contract] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/valid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_valid_deposit_withdrawal_consolidation_requests[fork_Prague-blockchain_test-withdrawal_from_eoa+withdrawal_from_contract+deposit_from_contract] +blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/invalid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-no_requests_and_invalid_hash_calculation_method_2-blockchain_test] +blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/invalid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-no_requests_and_invalid_hash_calculation_method-blockchain_test] blockchain_tests/prague/eip7702_set_code_tx/gas/account_warming.json,* blockchain_tests/prague/eip7702_set_code_tx/gas/gas_cost.json,* blockchain_tests/prague/eip7702_set_code_tx/gas/intrinsic_gas_cost.json,* diff --git a/tests/failing/ContractCreationSpam_d0g0v0.json.expected b/tests/failing/ContractCreationSpam_d0g0v0.json.expected index a339be6ce7..71a0856636 100644 --- a/tests/failing/ContractCreationSpam_d0g0v0.json.expected +++ b/tests/failing/ContractCreationSpam_d0g0v0.json.expected @@ -352,6 +352,12 @@ b"" + + b"" + + + b"" + diff --git a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected b/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected index e37923678d..a828f3a6fb 100644 --- a/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected +++ b/tests/failing/static_callcodecallcodecall_110_OOGMAfter_2_d0g0v0.json.expected @@ -398,6 +398,12 @@ b"" + + b"" + + + b"" + From 2f081a6946e5954c0ef172901e4475b6ef9b6cd4 Mon Sep 17 00:00:00 2001 From: Andrei <16517508+anvacaru@users.noreply.github.com> Date: Mon, 12 May 2025 16:04:34 +0300 Subject: [PATCH 7/7] update execution-spec-tests/failing.llvm --- tests/execution-spec-tests/failing.llvm | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/execution-spec-tests/failing.llvm b/tests/execution-spec-tests/failing.llvm index d1596ff3c2..733620bc6a 100644 --- a/tests/execution-spec-tests/failing.llvm +++ b/tests/execution-spec-tests/failing.llvm @@ -1639,17 +1639,14 @@ blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/ blockchain_tests/prague/eip2935_historical_block_hashes_from_state/block_hashes/block_hashes_history.json,* blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,tests/prague/eip2935_historical_block_hashes_from_state/test_contract_deployment.py::test_system_contract_deployment[fork_CancunToPragueAtTime15k-blockchain_test-deploy_after_fork-nonzero_balance] blockchain_tests/prague/eip2935_historical_block_hashes_from_state/contract_deployment/system_contract_deployment.json,tests/prague/eip2935_historical_block_hashes_from_state/test_contract_deployment.py::test_system_contract_deployment[fork_CancunToPragueAtTime15k-blockchain_test-deploy_before_fork-nonzero_balance] -blockchain_tests/prague/eip6110_deposits/deposits/deposit_negative.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit_negative[fork_Prague-blockchain_test-no_deposits_non_empty_requests_list] blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_first_reverts] blockchain_tests/prague/eip6110_deposits/deposits/deposit.json,tests/prague/eip6110_deposits/test_deposits.py::test_deposit[fork_Prague-blockchain_test-multiple_deposit_from_same_eoa_last_reverts] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/contract_deployment/system_contract_deployment.json,* blockchain_tests/prague/eip7002_el_triggerable_withdrawals/modified_withdrawal_contract/extra_withdrawals_pseudo_contract.json,tests/prague/eip7002_el_triggerable_withdrawals/test_modified_withdrawal_contract.py::test_extra_withdrawals_pseudo_contract[fork_Prague-blockchain_test-1_withdrawal_request] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests_during_fork/withdrawal_requests_during_fork.json,* -blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests_negative.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests_negative[fork_Prague-blockchain_test-no_withdrawals_non_empty_requests_list] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-multiple_block_fee_increments] blockchain_tests/prague/eip7002_el_triggerable_withdrawals/withdrawal_requests/withdrawal_requests.json,tests/prague/eip7002_el_triggerable_withdrawals/test_withdrawal_requests.py::test_withdrawal_requests[fork_Prague-blockchain_test-single_block_multiple_withdrawal_request_last_oog] blockchain_tests/prague/eip7251_consolidations/consolidations_during_fork/consolidation_requests_during_fork.json,* -blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests_negative.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests_negative[fork_Prague-blockchain_test-no_consolidations_non_empty_requests_list] blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-multiple_block_fee_increments] blockchain_tests/prague/eip7251_consolidations/consolidations/consolidation_requests.json,tests/prague/eip7251_consolidations/test_consolidations.py::test_consolidation_requests[fork_Prague-blockchain_test-single_block_multiple_consolidation_request_last_oog] blockchain_tests/prague/eip7251_consolidations/contract_deployment/system_contract_deployment.json,* @@ -1754,8 +1751,6 @@ blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/tran blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/transaction_validity_type_3.json,tests/prague/eip7623_increase_calldata_cost/test_transaction_validity.py::test_transaction_validity_type_3[fork_Prague-blockchain_test_from_state_test-type_3-single_blob-single_access_list_single_storage_key-extra_gas-floor_gas_greater_than_intrinsic_gas] blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/transaction_validity_type_3.json,tests/prague/eip7623_increase_calldata_cost/test_transaction_validity.py::test_transaction_validity_type_3[fork_Prague-blockchain_test_from_state_test-type_3-single_blob-single_access_list_single_storage_key-insufficient_gas-floor_gas_greater_than_intrinsic_gas] blockchain_tests/prague/eip7623_increase_calldata_cost/transaction_validity/transaction_validity_type_4.json,* -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/invalid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-no_requests_and_invalid_hash_calculation_method_2-blockchain_test] -blockchain_tests/prague/eip7685_general_purpose_el_requests/multi_type_requests/invalid_deposit_withdrawal_consolidation_requests.json,tests/prague/eip7685_general_purpose_el_requests/test_multi_type_requests.py::test_invalid_deposit_withdrawal_consolidation_requests[fork_Prague-no_requests_and_invalid_hash_calculation_method-blockchain_test] blockchain_tests/prague/eip7702_set_code_tx/gas/account_warming.json,* blockchain_tests/prague/eip7702_set_code_tx/gas/gas_cost.json,* blockchain_tests/prague/eip7702_set_code_tx/gas/intrinsic_gas_cost.json,*