From 1fe99ca25bded1c26910d9be0fc442054efa0a43 Mon Sep 17 00:00:00 2001 From: Pelle <78560773+PelleKrab@users.noreply.github.com> Date: Tue, 14 Oct 2025 20:31:04 +0000 Subject: [PATCH 01/10] Added: EIP-7805 FOCIL test cases --- tests/amsterdam/test_cases.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 tests/amsterdam/test_cases.md diff --git a/tests/amsterdam/test_cases.md b/tests/amsterdam/test_cases.md new file mode 100644 index 00000000000..775f6023d65 --- /dev/null +++ b/tests/amsterdam/test_cases.md @@ -0,0 +1,17 @@ +# EIP-7805 FOCIL Test Cases (Revised Structure) + +| Function Name | Goal | Setup | Expectation | Status | +|---------------|------|-------|-------------|--------| +| **Inclusion List Building** | +| `test_il_builder_creates_valid_list_from_txs` | Ensure the IL builder can take a set of transactions and correctly format them into a valid `InclusionList` structure. | Provide the builder with a list of raw signed transactions and their intended beneficiaries. | The builder MUST produce a structurally valid `InclusionList` where each transaction is correctly paired with its beneficiary. The list must be properly encoded. | 🟡 Planned | +| `test_il_builder_respects_size_limit` | Ensure the IL builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an `InclusionList` that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | +| **Block Validation** | +| `test_block_validation_accepts_empty_il` | Verify the EL correctly validates a block derived from a payload with an empty Inclusion List. | The EL receives a payload with an empty `inclusion_list` and its corresponding block. | The block and payload MUST be considered valid. | 🟡 Planned | +| `test_block_validation_accepts_full_il` | Verify the EL validates a block correctly including transactions from a maximally sized IL. | The EL receives a payload with an `inclusion_list` filled to the `MAX_BYTES_PER_INCLUSION_LIST` * Inclusion List Committee Size limit. All valid IL txs are included. | The block and payload MUST be considered valid. | 🟡 Planned | +| `test_block_validation_ignores_invalid_txs_in_il` | Ensure the EL validates a block that correctly omits invalid transactions found in the IL. | The EL receives a payload where the IL contains entries with invalid transactions (bad nonce, etc.). These are correctly *not* included in the block body. | The block and payload MUST be considered valid. | 🟡 Planned | +| `test_block_validation_fails_if_valid_il_tx_is_omitted` | Verify a block is invalid if it fails to include a summarily valid transaction from the IL. | A payload's IL contains a transaction that is valid against the parent block's state. The block body, however, omits this transaction. | The block MUST be rejected as invalid. | 🟡 Planned | +| `test_block_validation_succeeds_with_interdependent_il_txs` | Verify a block is valid when it includes a sequence of IL txs where later ones depend on earlier ones. | IL is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. Both are included in the correct order. | The block MUST be considered valid. | 🟡 Planned | +| **Block Building** | +| `test_builder_includes_valid_il_txs` | Ensure `produce_execution_payload` includes all summarily valid transactions from the provided Inclusion List. | The EL is asked to build a block with an IL containing several valid transactions. The mempool also has transactions. | The produced block's transaction list MUST contain all the summarily valid transactions from the IL. | 🟡 Planned || `test_builder_ignores_invalid_il_txs` | Ensure `produce_execution_payload` does not include IL transactions that are invalid against the parent state. | The EL is asked to build a block with an IL containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid IL transactions in the prefix and MUST NOT include the invalid ones. | 🟡 Planned | +| `test_builder_handles_empty_il` | Ensure `produce_execution_payload` builds a correct block when the IL is empty. | The EL is asked to build a block with an empty IL. | The builder MUST produce a valid block, likely filled with transactions from the local mempool. | 🟡 Planned | +| `test_builder_handles_il_tx_becoming_invalid` | Ensure builder correctly omits an IL transaction that becomes invalid due to a preceding IL transaction. | The IL is `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | From fbe6195d003904f273920495e2449854c5729a31 Mon Sep 17 00:00:00 2001 From: Pelle <78560773+PelleKrab@users.noreply.github.com> Date: Tue, 14 Oct 2025 21:53:42 +0000 Subject: [PATCH 02/10] Revise EIP-7805 FOCIL test cases for clairity --- tests/amsterdam/test_cases.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/amsterdam/test_cases.md b/tests/amsterdam/test_cases.md index 775f6023d65..e8fb4307d1b 100644 --- a/tests/amsterdam/test_cases.md +++ b/tests/amsterdam/test_cases.md @@ -1,17 +1,17 @@ -# EIP-7805 FOCIL Test Cases (Revised Structure) +# EIP-7805 FOCIL Test Cases | Function Name | Goal | Setup | Expectation | Status | |---------------|------|-------|-------------|--------| | **Inclusion List Building** | -| `test_il_builder_creates_valid_list_from_txs` | Ensure the IL builder can take a set of transactions and correctly format them into a valid `InclusionList` structure. | Provide the builder with a list of raw signed transactions and their intended beneficiaries. | The builder MUST produce a structurally valid `InclusionList` where each transaction is correctly paired with its beneficiary. The list must be properly encoded. | 🟡 Planned | +| `test_il_builder_creates_valid_list_from_txs` | Ensure the IL builder can build a valid `InclusionList` from the mempool. | Alice and Bob sumbit valid transactions to the mempool | The builder MUST produce a structurally valid `InclusionList`. The list must be properly encoded. | 🟡 Planned | | `test_il_builder_respects_size_limit` | Ensure the IL builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an `InclusionList` that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | | **Block Validation** | -| `test_block_validation_accepts_empty_il` | Verify the EL correctly validates a block derived from a payload with an empty Inclusion List. | The EL receives a payload with an empty `inclusion_list` and its corresponding block. | The block and payload MUST be considered valid. | 🟡 Planned | -| `test_block_validation_accepts_full_il` | Verify the EL validates a block correctly including transactions from a maximally sized IL. | The EL receives a payload with an `inclusion_list` filled to the `MAX_BYTES_PER_INCLUSION_LIST` * Inclusion List Committee Size limit. All valid IL txs are included. | The block and payload MUST be considered valid. | 🟡 Planned | -| `test_block_validation_ignores_invalid_txs_in_il` | Ensure the EL validates a block that correctly omits invalid transactions found in the IL. | The EL receives a payload where the IL contains entries with invalid transactions (bad nonce, etc.). These are correctly *not* included in the block body. | The block and payload MUST be considered valid. | 🟡 Planned | -| `test_block_validation_fails_if_valid_il_tx_is_omitted` | Verify a block is invalid if it fails to include a summarily valid transaction from the IL. | A payload's IL contains a transaction that is valid against the parent block's state. The block body, however, omits this transaction. | The block MUST be rejected as invalid. | 🟡 Planned | +| `test_block_validation_accepts_empty_il` | Verify the EL correctly validates a payload with an empty Inclusion List. | The EL receives a payload with an empty `inclusion_list`. | The payload MUST be considered valid. | 🟡 Planned | +| `test_block_validation_accepts_full_il` | Verify the EL validates a payload correctly including transactions from a maximally sized IL. | The EL receives a payload with an `inclusion_list` filled to the `MAX_BYTES_PER_INCLUSION_LIST` * Inclusion List Committee Size limit. All valid IL txs are included. | The payload MUST be considered valid. | 🟡 Planned | +| `test_block_validation_ignores_invalid_txs_in_il` | Ensure the EL validates a block that correctly omits invalid transactions found in the IL. | The EL receives a payload where the IL contains entries with invalid transactions (bad nonce, etc.). These are correctly *not* included in the block body. | The payload MUST be considered valid. | 🟡 Planned | +| `test_block_validation_fails_if_valid_il_tx_is_omitted` | Verify a block is invalid if it fails to include a valid transaction from the IL. | A payload's IL contains a transaction that is valid against the parent block's state. The block body, however, omits this transaction. | The block MUST be rejected as invalid. | 🟡 Planned | | `test_block_validation_succeeds_with_interdependent_il_txs` | Verify a block is valid when it includes a sequence of IL txs where later ones depend on earlier ones. | IL is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. Both are included in the correct order. | The block MUST be considered valid. | 🟡 Planned | | **Block Building** | -| `test_builder_includes_valid_il_txs` | Ensure `produce_execution_payload` includes all summarily valid transactions from the provided Inclusion List. | The EL is asked to build a block with an IL containing several valid transactions. The mempool also has transactions. | The produced block's transaction list MUST contain all the summarily valid transactions from the IL. | 🟡 Planned || `test_builder_ignores_invalid_il_txs` | Ensure `produce_execution_payload` does not include IL transactions that are invalid against the parent state. | The EL is asked to build a block with an IL containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid IL transactions in the prefix and MUST NOT include the invalid ones. | 🟡 Planned | -| `test_builder_handles_empty_il` | Ensure `produce_execution_payload` builds a correct block when the IL is empty. | The EL is asked to build a block with an empty IL. | The builder MUST produce a valid block, likely filled with transactions from the local mempool. | 🟡 Planned | +| `test_builder_includes_valid_il_txs` | Ensure the produced block includes all valid transactions from the provided Inclusion List. | The EL is asked to build a block with an IL containing several valid transactions. The mempool also has transactions. | The produced block's transaction list MUST contain all the valid transactions from the IL. | 🟡 Planned || `test_builder_ignores_invalid_il_txs` | Ensure `produce_execution_payload` does not include IL transactions that are invalid against the parent state. | The EL is asked to build a block with an IL containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid IL transactions in the prefix and MUST NOT include the invalid ones. | 🟡 Planned | +| `test_builder_handles_empty_il` | Ensure a correct block is built when the IL is empty. | The EL is asked to build a block with an empty IL. | The builder MUST produce a valid block. | 🟡 Planned | | `test_builder_handles_il_tx_becoming_invalid` | Ensure builder correctly omits an IL transaction that becomes invalid due to a preceding IL transaction. | The IL is `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | From e33ef18c095f03383f2bfc7a42904123331876c0 Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Wed, 15 Oct 2025 11:12:51 -0600 Subject: [PATCH 03/10] initial spec test checklist --- .../test_cases.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/amsterdam/{ => eip7805_forkchoice_enforced_inclusion_lists}/test_cases.md (100%) diff --git a/tests/amsterdam/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md similarity index 100% rename from tests/amsterdam/test_cases.md rename to tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md From f685a61111810b91bf345fd78d07b82f4f0454b6 Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Wed, 15 Oct 2025 12:15:20 -0600 Subject: [PATCH 04/10] fix(FOCIL): typos --- .../eip7805_forkchoice_enforced_inclusion_lists/test_cases.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index e8fb4307d1b..8b5008a5ca2 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -3,7 +3,7 @@ | Function Name | Goal | Setup | Expectation | Status | |---------------|------|-------|-------------|--------| | **Inclusion List Building** | -| `test_il_builder_creates_valid_list_from_txs` | Ensure the IL builder can build a valid `InclusionList` from the mempool. | Alice and Bob sumbit valid transactions to the mempool | The builder MUST produce a structurally valid `InclusionList`. The list must be properly encoded. | 🟡 Planned | +| `test_il_builder_creates_valid_list_from_txs` | Ensure the IL builder can build a valid `InclusionList` from the mempool. | Alice and Bob submit valid transactions to the mempool | The builder MUST produce a structurally valid `InclusionList`. The list must be properly encoded. | 🟡 Planned | | `test_il_builder_respects_size_limit` | Ensure the IL builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an `InclusionList` that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | | **Block Validation** | | `test_block_validation_accepts_empty_il` | Verify the EL correctly validates a payload with an empty Inclusion List. | The EL receives a payload with an empty `inclusion_list`. | The payload MUST be considered valid. | 🟡 Planned | From 3592dde0b60a8e9e40672e76e2e036f99d077e50 Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Sat, 18 Oct 2025 15:02:36 -0600 Subject: [PATCH 05/10] Fixed wording and removed unneeded tests --- .../test_cases.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index 8b5008a5ca2..27bf435b730 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -2,16 +2,16 @@ | Function Name | Goal | Setup | Expectation | Status | |---------------|------|-------|-------------|--------| -| **Inclusion List Building** | -| `test_il_builder_creates_valid_list_from_txs` | Ensure the IL builder can build a valid `InclusionList` from the mempool. | Alice and Bob submit valid transactions to the mempool | The builder MUST produce a structurally valid `InclusionList`. The list must be properly encoded. | 🟡 Planned | -| `test_il_builder_respects_size_limit` | Ensure the IL builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an `InclusionList` that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | +| **Inclusion list Building** | +| `test_focil_inclusion_list_builder_respects_size_limit` | Ensure the inclusion list builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | | **Block Validation** | -| `test_block_validation_accepts_empty_il` | Verify the EL correctly validates a payload with an empty Inclusion List. | The EL receives a payload with an empty `inclusion_list`. | The payload MUST be considered valid. | 🟡 Planned | -| `test_block_validation_accepts_full_il` | Verify the EL validates a payload correctly including transactions from a maximally sized IL. | The EL receives a payload with an `inclusion_list` filled to the `MAX_BYTES_PER_INCLUSION_LIST` * Inclusion List Committee Size limit. All valid IL txs are included. | The payload MUST be considered valid. | 🟡 Planned | -| `test_block_validation_ignores_invalid_txs_in_il` | Ensure the EL validates a block that correctly omits invalid transactions found in the IL. | The EL receives a payload where the IL contains entries with invalid transactions (bad nonce, etc.). These are correctly *not* included in the block body. | The payload MUST be considered valid. | 🟡 Planned | -| `test_block_validation_fails_if_valid_il_tx_is_omitted` | Verify a block is invalid if it fails to include a valid transaction from the IL. | A payload's IL contains a transaction that is valid against the parent block's state. The block body, however, omits this transaction. | The block MUST be rejected as invalid. | 🟡 Planned | -| `test_block_validation_succeeds_with_interdependent_il_txs` | Verify a block is valid when it includes a sequence of IL txs where later ones depend on earlier ones. | IL is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. Both are included in the correct order. | The block MUST be considered valid. | 🟡 Planned | +| `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with an empty inclusion list. | The EL receives a payload and an empty inclusion list. | The payload MUST be considered valid. | 🟡 Planned | +| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly including transactions from a maximally sized inclusion list. | The EL receives a payload and an inclusion list filled to the `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list Committee Size limit. All valid inclusion list txs are included. | The payload MUST include all txs. | 🟡 Planned | +| `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the inclusion list. | The EL receives a payload and an inclusion list which contains entries with invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 txs, etc.). | These invalid txs MUST *not* be included in the block body. | 🟡 Planned | +| `test_focil_block_validation_reorgs_if_valid_inclusion_list_tx_is_omitted` | Verify a block is reorged if it omits a transaction that is valid against the current state and referenced by corresponding inclusion list for that slot. | The inclusion list references a transaction valid against the current state, but the block body omits it. | The block MUST be reorged. | 🟡 Planned | +| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that when an inclusion list contains txs where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both txs MUST be included. | 🟡 Planned | | **Block Building** | -| `test_builder_includes_valid_il_txs` | Ensure the produced block includes all valid transactions from the provided Inclusion List. | The EL is asked to build a block with an IL containing several valid transactions. The mempool also has transactions. | The produced block's transaction list MUST contain all the valid transactions from the IL. | 🟡 Planned || `test_builder_ignores_invalid_il_txs` | Ensure `produce_execution_payload` does not include IL transactions that are invalid against the parent state. | The EL is asked to build a block with an IL containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid IL transactions in the prefix and MUST NOT include the invalid ones. | 🟡 Planned | -| `test_builder_handles_empty_il` | Ensure a correct block is built when the IL is empty. | The EL is asked to build a block with an empty IL. | The builder MUST produce a valid block. | 🟡 Planned | -| `test_builder_handles_il_tx_becoming_invalid` | Ensure builder correctly omits an IL transaction that becomes invalid due to a preceding IL transaction. | The IL is `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | +| `test_focil_builder_includes_valid_inclusion_list_txs` | Ensure the produced block includes all valid transactions from the provided inclusion list. | The EL is asked to build a block with an inclusion list containing several valid transactions. | The produced block MUST contain all the valid transactions from the inclusion list. | 🟡 Planned | +| `test_focil_builder_ignores_invalid_inclusion_list_txs` | Ensure `produce_execution_payload` does not include inclusion list transactions that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid inclusion list transactions and MUST NOT include the invalid ones. | 🟡 Planned | +| `test_focil_builder_handles_empty_inclusion_list` | Ensure a valid block is built when the inclusion list is empty. | The EL is asked to build a block with an empty inclusion list. | The builder MUST produce a valid block. | 🟡 Planned | +| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The inclusion list is `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | \ No newline at end of file From 60db8d2c93fc53b3f7bd85469d53bf80682754f9 Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Sat, 18 Oct 2025 15:22:54 -0600 Subject: [PATCH 06/10] specified IL builder as IL committee member --- .../eip7805_forkchoice_enforced_inclusion_lists/test_cases.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index 27bf435b730..c4f36c34552 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -3,8 +3,8 @@ | Function Name | Goal | Setup | Expectation | Status | |---------------|------|-------|-------------|--------| | **Inclusion list Building** | -| `test_focil_inclusion_list_builder_respects_size_limit` | Ensure the inclusion list builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | -| **Block Validation** | +| `test_focil_inclusion_list_committee_member_respects_size_limit` | Ensure the inclusion list builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | +| **Block Inclusion List Validation** | | `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with an empty inclusion list. | The EL receives a payload and an empty inclusion list. | The payload MUST be considered valid. | 🟡 Planned | | `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly including transactions from a maximally sized inclusion list. | The EL receives a payload and an inclusion list filled to the `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list Committee Size limit. All valid inclusion list txs are included. | The payload MUST include all txs. | 🟡 Planned | | `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the inclusion list. | The EL receives a payload and an inclusion list which contains entries with invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 txs, etc.). | These invalid txs MUST *not* be included in the block body. | 🟡 Planned | From 998048633bd9ba2465b3d0f0653f4547c0be290f Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Sun, 19 Oct 2025 21:40:51 -0600 Subject: [PATCH 07/10] Added test_focil_block_validation_accepts_two_independent_inclusion_list_txs and fixed grammar mistakes --- .../test_cases.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index c4f36c34552..e52a6328a79 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -3,15 +3,16 @@ | Function Name | Goal | Setup | Expectation | Status | |---------------|------|-------|-------------|--------| | **Inclusion list Building** | -| `test_focil_inclusion_list_committee_member_respects_size_limit` | Ensure the inclusion list builder does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the builder with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | +| `test_focil_inclusion_list_committee_member_respects_size_limit` | Ensure the inclusion list committee member does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the committee member with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | | **Block Inclusion List Validation** | | `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with an empty inclusion list. | The EL receives a payload and an empty inclusion list. | The payload MUST be considered valid. | 🟡 Planned | -| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly including transactions from a maximally sized inclusion list. | The EL receives a payload and an inclusion list filled to the `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list Committee Size limit. All valid inclusion list txs are included. | The payload MUST include all txs. | 🟡 Planned | -| `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the inclusion list. | The EL receives a payload and an inclusion list which contains entries with invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 txs, etc.). | These invalid txs MUST *not* be included in the block body. | 🟡 Planned | +| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly including transactions from a maximally sized inclusion list. | The EL receives a payload and an inclusion list filled of size `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list committee size limit. | The payload MUST include all transactions. | 🟡 Planned | +| `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the inclusion list. | The EL receives a payload and an inclusion list which contains entries with invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 transactions, etc.). | These invalid transactions MUST *not* be included in the block body. | 🟡 Planned | | `test_focil_block_validation_reorgs_if_valid_inclusion_list_tx_is_omitted` | Verify a block is reorged if it omits a transaction that is valid against the current state and referenced by corresponding inclusion list for that slot. | The inclusion list references a transaction valid against the current state, but the block body omits it. | The block MUST be reorged. | 🟡 Planned | -| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that when an inclusion list contains txs where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both txs MUST be included. | 🟡 Planned | +| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that the EL correctly processes an inclusion list that contains transactions where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both transactions MUST be included. | 🟡 Planned | +| `test_focil_block_validation_accepts_two_independent_inclusion_list_txs` | Verify the EL validates a payload correctly including transactions from an inclusion list with two transactions. | The EL receives a payload and an inclusion list containing two independent valid transactions. | The payload MUST include both transactions, order is irrelevant. | 🟡 Planned | | **Block Building** | | `test_focil_builder_includes_valid_inclusion_list_txs` | Ensure the produced block includes all valid transactions from the provided inclusion list. | The EL is asked to build a block with an inclusion list containing several valid transactions. | The produced block MUST contain all the valid transactions from the inclusion list. | 🟡 Planned | -| `test_focil_builder_ignores_invalid_inclusion_list_txs` | Ensure `produce_execution_payload` does not include inclusion list transactions that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid inclusion list transactions and MUST NOT include the invalid ones. | 🟡 Planned | -| `test_focil_builder_handles_empty_inclusion_list` | Ensure a valid block is built when the inclusion list is empty. | The EL is asked to build a block with an empty inclusion list. | The builder MUST produce a valid block. | 🟡 Planned | +| `test_focil_builder_ignores_invalid_inclusion_list_transactions` | Ensure `produce_execution_payload` does not include inclusion list transactions that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid inclusion list transactions and MUST NOT include the invalid ones. | 🟡 Planned | +| `test_focil_block_builder_handles_empty_inclusion_list` | Ensure a valid block is built when the inclusion list is empty. | The EL is asked to build a block with an empty inclusion list. | The builder MUST produce a valid block. | 🟡 Planned | | `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The inclusion list is `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | \ No newline at end of file From 82531a29ce2a4921475058eb89ecb542fc76f820 Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Tue, 21 Oct 2025 10:54:52 -0600 Subject: [PATCH 08/10] fixed ambiguous language --- .../test_cases.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index e52a6328a79..229ee4ced5b 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -5,14 +5,14 @@ | **Inclusion list Building** | | `test_focil_inclusion_list_committee_member_respects_size_limit` | Ensure the inclusion list committee member does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the committee member with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | | **Block Inclusion List Validation** | -| `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with an empty inclusion list. | The EL receives a payload and an empty inclusion list. | The payload MUST be considered valid. | 🟡 Planned | -| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly including transactions from a maximally sized inclusion list. | The EL receives a payload and an inclusion list filled of size `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list committee size limit. | The payload MUST include all transactions. | 🟡 Planned | -| `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the inclusion list. | The EL receives a payload and an inclusion list which contains entries with invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 transactions, etc.). | These invalid transactions MUST *not* be included in the block body. | 🟡 Planned | -| `test_focil_block_validation_reorgs_if_valid_inclusion_list_tx_is_omitted` | Verify a block is reorged if it omits a transaction that is valid against the current state and referenced by corresponding inclusion list for that slot. | The inclusion list references a transaction valid against the current state, but the block body omits it. | The block MUST be reorged. | 🟡 Planned | -| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that the EL correctly processes an inclusion list that contains transactions where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both transactions MUST be included. | 🟡 Planned | -| `test_focil_block_validation_accepts_two_independent_inclusion_list_txs` | Verify the EL validates a payload correctly including transactions from an inclusion list with two transactions. | The EL receives a payload and an inclusion list containing two independent valid transactions. | The payload MUST include both transactions, order is irrelevant. | 🟡 Planned | +| `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with a 0 `inclusionListTransactions`. | The EL receives a payload and a 0 `inclusionListTransactions`. | The payload MUST be considered valid. | 🟡 Planned | +| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly includes the maximum number of `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` whose size is equal to `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list committee size limit. | The payload MUST include all transactions. | 🟡 Planned | +| `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` which contains invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 transactions, etc.). | These invalid transactions MUST *not* be included in the block body. | 🟡 Planned | +| `test_focil_block_validation_returns_error_when_inclusion_list_tx_is_omitted` | Verify block validation returns `INCLUSION_LIST_UNSATISFIED` if it omits a transaction that is valid against the current state and referenced by corresponding `inclusionListTransactions` for that slot. | The `inclusionListTransactions` references a transaction valid against the current state, but the block body omits it. | The EL MUST return an 'INCLUSION_LIST_UNSATISFIED` error. | 🟡 Planned | +| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that the EL correctly processes `inclusionListTransactions` that contain transactions where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both transactions MUST be included. | 🟡 Planned | +| `test_focil_block_validation_accepts_two_independent_inclusion_list_txs` | Verify the EL validates a payload correctly including transactions from `inclusionListTransactions` with two transactions. | The EL receives a payload and `inclusionListTransactions` containing two independent valid transactions. | The payload MUST include both transactions, order is irrelevant. | 🟡 Planned | | **Block Building** | -| `test_focil_builder_includes_valid_inclusion_list_txs` | Ensure the produced block includes all valid transactions from the provided inclusion list. | The EL is asked to build a block with an inclusion list containing several valid transactions. | The produced block MUST contain all the valid transactions from the inclusion list. | 🟡 Planned | -| `test_focil_builder_ignores_invalid_inclusion_list_transactions` | Ensure `produce_execution_payload` does not include inclusion list transactions that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid inclusion list transactions and MUST NOT include the invalid ones. | 🟡 Planned | -| `test_focil_block_builder_handles_empty_inclusion_list` | Ensure a valid block is built when the inclusion list is empty. | The EL is asked to build a block with an empty inclusion list. | The builder MUST produce a valid block. | 🟡 Planned | -| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The inclusion list is `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | \ No newline at end of file +| `test_focil_builder_includes_valid_inclusion_list_txs` | Ensure the produced block includes all valid transactions from the provided `inclusionListTransactions`. | The EL is asked to build a block with `inclusionListTransactions` containing several valid transactions. | The produced block MUST contain all the valid transactions from the `inclusionListTransactions`. | 🟡 Planned | +| `test_focil_builder_ignores_invalid_inclusion_list_transactions` | Ensure `produce_execution_payload` does not include `inclusionListTransactions` that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid `inclusionListTransactions` and MUST NOT include the invalid ones. | 🟡 Planned | +| `test_focil_block_builder_handles_empty_inclusion_list` | Ensure a valid block is built with 0 `inclusionListTransactions`. | The EL is asked to build a block with 0 `inclusionListTransactions`. | The builder MUST produce a valid block. | 🟡 Planned | +| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | \ No newline at end of file From ac5dee139e15340df615ef8f41ff3b30951f2b6f Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Tue, 21 Oct 2025 11:31:27 -0600 Subject: [PATCH 09/10] Added 3 builder tests, testing tx interplay validity --- .../test_cases.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index 229ee4ced5b..7621ef7bf7c 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -5,8 +5,8 @@ | **Inclusion list Building** | | `test_focil_inclusion_list_committee_member_respects_size_limit` | Ensure the inclusion list committee member does not create a list that exceeds the `MAX_BYTES_PER_INCLUSION_LIST` limit. | Provide the committee member with more transactions than can fit within the size limit. | The builder MUST create an inclusion list that is less than or equal to the size limit. It MUST NOT produce an oversized list. | 🟡 Planned | | **Block Inclusion List Validation** | -| `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with a 0 `inclusionListTransactions`. | The EL receives a payload and a 0 `inclusionListTransactions`. | The payload MUST be considered valid. | 🟡 Planned | -| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly includes the maximum number of `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` whose size is equal to `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list committee size limit. | The payload MUST include all transactions. | 🟡 Planned | +| `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with zero `inclusionListTransactions`. | The EL receives a payload and zero `inclusionListTransactions`. | The payload MUST be considered valid. | 🟡 Planned | +| `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly includes the maximum number of `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` whose size is equals `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list committee size limit. | The payload MUST include all transactions. | 🟡 Planned | | `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` which contains invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 transactions, etc.). | These invalid transactions MUST *not* be included in the block body. | 🟡 Planned | | `test_focil_block_validation_returns_error_when_inclusion_list_tx_is_omitted` | Verify block validation returns `INCLUSION_LIST_UNSATISFIED` if it omits a transaction that is valid against the current state and referenced by corresponding `inclusionListTransactions` for that slot. | The `inclusionListTransactions` references a transaction valid against the current state, but the block body omits it. | The EL MUST return an 'INCLUSION_LIST_UNSATISFIED` error. | 🟡 Planned | | `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that the EL correctly processes `inclusionListTransactions` that contain transactions where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both transactions MUST be included. | 🟡 Planned | @@ -14,5 +14,8 @@ | **Block Building** | | `test_focil_builder_includes_valid_inclusion_list_txs` | Ensure the produced block includes all valid transactions from the provided `inclusionListTransactions`. | The EL is asked to build a block with `inclusionListTransactions` containing several valid transactions. | The produced block MUST contain all the valid transactions from the `inclusionListTransactions`. | 🟡 Planned | | `test_focil_builder_ignores_invalid_inclusion_list_transactions` | Ensure `produce_execution_payload` does not include `inclusionListTransactions` that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid `inclusionListTransactions` and MUST NOT include the invalid ones. | 🟡 Planned | -| `test_focil_block_builder_handles_empty_inclusion_list` | Ensure a valid block is built with 0 `inclusionListTransactions`. | The EL is asked to build a block with 0 `inclusionListTransactions`. | The builder MUST produce a valid block. | 🟡 Planned | -| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | \ No newline at end of file +| `test_focil_block_builder_handles_empty_inclusion_list` | Ensure a valid block is built with zero `inclusionListTransactions`. | The EL is asked to build a block with zero `inclusionListTransactions`. | The builder MUST produce a valid block. | 🟡 Planned | +| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | +| `test_focil_builder_handles_same_sender_insufficient_funds_after_first_tx` | Ensure builder correctly omits a transaction that becomes unaffordable after a preceding transaction from the same sender executes. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with sequential nonces (0, 1). Both valid against parent state. `tx_A` transfers most funds away, leaving insufficient balance for `tx_B`'s gas. | The builder MUST include `tx_A`. `tx_B` becomes unaffordable after `tx_A` and MUST be omitted from the block. | 🟡 Planned | +| `test_focil_builder_handles_full_block_with_partial_inclusion_list` | Ensure builder correctly handles when block gas limit is reached and not all `inclusionListTransactions` can fit. | The `inclusionListTransactions` contain valid independent transactions whose total gas exceeds the block gas limit. | The builder MUST include as many transactions from `inclusionListTransactions` as fit within the block gas limit. Remaining transactions are omitted (block full). | 🟡 Planned | +| `test_focil_builder_handles_same_sender_wrong_nonce_order` | Ensure builder correctly handles `inclusionListTransactions` with transactions from the same EOA in wrong nonce order. | The `inclusionListTransactions` are `[tx_B, tx_A]` where `tx_A` has nonce 0 and `tx_B` has nonce 1. Both are from the same EOA. When processed in order, `tx_B` is invalid (nonce too high). | The builder MUST include `tx_A` first, and then include `tx_B` rechecking its validity. | 🟡 Planned | \ No newline at end of file From 5f440c14cf0bc4c553460a7d0cadba5add769c88 Mon Sep 17 00:00:00 2001 From: pellekrab <78560773+PelleKrab@users.noreply.github.com> Date: Wed, 22 Oct 2025 12:34:26 -0600 Subject: [PATCH 10/10] Removed extraneous test and nits --- .../test_cases.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md index 7621ef7bf7c..e49c545f121 100644 --- a/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md +++ b/tests/amsterdam/eip7805_forkchoice_enforced_inclusion_lists/test_cases.md @@ -7,15 +7,14 @@ | **Block Inclusion List Validation** | | `test_focil_block_validation_accepts_empty_inclusion_list` | Verify the EL correctly validates a payload with zero `inclusionListTransactions`. | The EL receives a payload and zero `inclusionListTransactions`. | The payload MUST be considered valid. | 🟡 Planned | | `test_focil_block_validation_accepts_full_inclusion_list` | Verify the EL validates a payload correctly includes the maximum number of `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` whose size is equals `MAX_BYTES_PER_INCLUSION_LIST` * inclusion list committee size limit. | The payload MUST include all transactions. | 🟡 Planned | -| `test_focil_block_validation_ignores_invalid_txs_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` which contains invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 transactions, etc.). | These invalid transactions MUST *not* be included in the block body. | 🟡 Planned | -| `test_focil_block_validation_returns_error_when_inclusion_list_tx_is_omitted` | Verify block validation returns `INCLUSION_LIST_UNSATISFIED` if it omits a transaction that is valid against the current state and referenced by corresponding `inclusionListTransactions` for that slot. | The `inclusionListTransactions` references a transaction valid against the current state, but the block body omits it. | The EL MUST return an 'INCLUSION_LIST_UNSATISFIED` error. | 🟡 Planned | -| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_txs` | Verify that the EL correctly processes `inclusionListTransactions` that contain transactions where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both transactions MUST be included. | 🟡 Planned | -| `test_focil_block_validation_accepts_two_independent_inclusion_list_txs` | Verify the EL validates a payload correctly including transactions from `inclusionListTransactions` with two transactions. | The EL receives a payload and `inclusionListTransactions` containing two independent valid transactions. | The payload MUST include both transactions, order is irrelevant. | 🟡 Planned | +| `test_focil_block_validation_ignores_invalid_transactions_in_inclusion_list` | Ensure the EL validates a block that correctly omits invalid transactions found in the `inclusionListTransactions`. | The EL receives a payload and `inclusionListTransactions` which contains invalid transactions (intrinsically invalid, bad nonce, sender cannot afford the gas, bad encoding, eip-4844 transactions, etc.). | These invalid transactions MUST *not* be included in the block body. | 🟡 Planned | +| `test_focil_block_validation_returns_error_when_inclusion_list_tx_is_omitted` | Verify block validation returns `INCLUSION_LIST_UNSATISFIED` if it omits a transaction that is valid against the current state and referenced by corresponding `inclusionListTransactions` for that slot. | The `inclusionListTransactions` references a transaction valid against the current state, but the block body omits it. | The EL MUST return an `INCLUSION_LIST_UNSATISFIED` error. | 🟡 Planned | +| `test_focil_block_validation_succeeds_with_interdependent_inclusion_list_transactions` | Verify that the EL correctly processes `inclusionListTransactions` that contain transactions where later ones depend on earlier ones. | Inclusion list is `[tx_A, tx_B]`. `tx_A` funds a new account. `tx_B` is a transaction sent from that new account. | Both transactions MUST be included. | 🟡 Planned | +| `test_focil_block_validation_accepts_two_independent_inclusion_list_transactions` | Verify the EL validates a payload correctly including transactions from `inclusionListTransactions` with two transactions. | The EL receives a payload and `inclusionListTransactions` containing two independent valid transactions. | The payload MUST include both transactions, order is irrelevant. | 🟡 Planned | | **Block Building** | -| `test_focil_builder_includes_valid_inclusion_list_txs` | Ensure the produced block includes all valid transactions from the provided `inclusionListTransactions`. | The EL is asked to build a block with `inclusionListTransactions` containing several valid transactions. | The produced block MUST contain all the valid transactions from the `inclusionListTransactions`. | 🟡 Planned | +| `test_focil_builder_includes_valid_inclusion_list_transactions` | Ensure the produced block includes all valid transactions from the provided `inclusionListTransactions`. | The EL is asked to build a block with `inclusionListTransactions` containing several valid transactions. | The produced block MUST contain all the valid transactions from the `inclusionListTransactions`. | 🟡 Planned | | `test_focil_builder_ignores_invalid_inclusion_list_transactions` | Ensure `produce_execution_payload` does not include `inclusionListTransactions` that are invalid against the parent state. | The EL is asked to build a block with an inclusion list containing a mix of valid and invalid (e.g., bad nonce) transactions. | The produced block MUST include the valid `inclusionListTransactions` and MUST NOT include the invalid ones. | 🟡 Planned | | `test_focil_block_builder_handles_empty_inclusion_list` | Ensure a valid block is built with zero `inclusionListTransactions`. | The EL is asked to build a block with zero `inclusionListTransactions`. | The builder MUST produce a valid block. | 🟡 Planned | -| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A`. `tx_B` (with nonce `N`) becomes invalid and MUST be omitted from the block. | 🟡 Planned | +| `test_focil_builder_handles_inclusion_list_tx_becoming_invalid` | Ensure builder correctly omits an inclusion list transaction that becomes invalid due to a preceding inclusion list transaction. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with nonce `N`. Both are valid against the parent state. | The builder MUST include `tx_A` or `tx_B` (with nonce `N`). The transaction that is not included becomes invalid and MUST be omitted from the block. | 🟡 Planned | | `test_focil_builder_handles_same_sender_insufficient_funds_after_first_tx` | Ensure builder correctly omits a transaction that becomes unaffordable after a preceding transaction from the same sender executes. | The `inclusionListTransactions` are `[tx_A, tx_B]`. Both are from the same EOA with sequential nonces (0, 1). Both valid against parent state. `tx_A` transfers most funds away, leaving insufficient balance for `tx_B`'s gas. | The builder MUST include `tx_A`. `tx_B` becomes unaffordable after `tx_A` and MUST be omitted from the block. | 🟡 Planned | -| `test_focil_builder_handles_full_block_with_partial_inclusion_list` | Ensure builder correctly handles when block gas limit is reached and not all `inclusionListTransactions` can fit. | The `inclusionListTransactions` contain valid independent transactions whose total gas exceeds the block gas limit. | The builder MUST include as many transactions from `inclusionListTransactions` as fit within the block gas limit. Remaining transactions are omitted (block full). | 🟡 Planned | -| `test_focil_builder_handles_same_sender_wrong_nonce_order` | Ensure builder correctly handles `inclusionListTransactions` with transactions from the same EOA in wrong nonce order. | The `inclusionListTransactions` are `[tx_B, tx_A]` where `tx_A` has nonce 0 and `tx_B` has nonce 1. Both are from the same EOA. When processed in order, `tx_B` is invalid (nonce too high). | The builder MUST include `tx_A` first, and then include `tx_B` rechecking its validity. | 🟡 Planned | \ No newline at end of file +| `test_focil_builder_handles_full_block_with_partial_inclusion_list` | Ensure builder correctly handles when block gas limit is reached and not all `inclusionListTransactions` can fit. | The `inclusionListTransactions` contain valid independent transactions whose total gas exceeds the block gas limit. | The builder MUST include as many transactions from `inclusionListTransactions` as fit within the block gas limit. Remaining transactions are omitted (block full). | 🟡 Planned | \ No newline at end of file