Skip to content

Meta: Archive ethereum/tests and ethereum/legacytests #2556

Open

Description

@spencer-tb

ethereum/tests -> EELS

🔴 AI Helped Issue Dump. Needs fully checked over. Sharing for collab.

Goal: Archive ethereum/tests and ethereum/legacytests by porting all remaining
test fillers into EELS, making EELS the single source of truth. After migration, EELS
must be able to fill all tests for all forks and publish releases from this repo alone.

Action Plan

Phase 0: Triage the legacy Constantinople corpus

Before porting anything, decide what to do with the ~10,000 Constantinople-era files.

  • 0.1 Diff Constantinople GeneralStateTests/ (9,549 files) against the Cancun
    GeneralStateTestsFiller/ (~1,100 files) to determine overlap. The Cancun version
    consolidated many per-vector files into single parametrized fillers — most
    Constantinople files are likely redundant.
  • 0.2 Diff Constantinople VMTestsFiller/ (613 files) against EELS existing
    tests/static/state_tests/VMTests/ (6 files). Determine which VM tests add unique
    coverage vs. what's already tested through state tests.
  • 0.3 Decide: port only net-new coverage from Constantinople, or bulk-import
    everything and let the filler deduplicate at fill time.
  • 0.4 For auto-generated test suites (stBadOpcode/*DiffPlaces*,
    stZeroKnowledge*, stSelfBalance/diffPlaces), decide whether to port the
    generators from ethereum/tests src/Templates/ rather than the 375+ output files.

Phase 1: Port missing GeneralStateTestsFiller files (~507 files)

Static state filler infrastructure already exists (specs/static_state/,
filler/static_filler plugin, --fill-static-tests). This phase is mechanical copy
work.

  • 1.1 Copy the ~507 missing filler files from ethereum/tests pinned commit
    7dc757ec src/GeneralStateTestsFiller/ into tests/static/state_tests/.
    See Appendix A for the full list.
  • 1.2 Add the missing stExpectSection/ directory.
  • 1.3 Verify all copied files parse and fill correctly:
    fill --fill-static-tests -k "stExtCodeHash or stZeroKnowledge" --until Cancun
  • 1.4 Update amsterdam_skip_list.txt if any new files fail under Amsterdam
    due to EIP-8037 gas model changes.
  • 1.5 Remove the empty tests/ported_static/ stub directories (they contain
    only __pycache__ — no actual test files).

Phase 2: Add BlockchainTestsFiller support (~400 files)

EELS has BlockchainTest spec and BlockchainFixture format but no static blockchain
filler infrastructure.

  • 2.1 Create tests/static/blockchain_tests/ directory structure mirroring
    src/BlockchainTestsFiller/ layout (InvalidBlocks/, ValidBlocks/).
  • 2.2 Implement specs/static_blockchain/ module — analogous to
    specs/static_state/ but producing BlockchainFixture output.
    Key differences from state fillers:
    • Multi-block test sequences
    • Invalid block rejection tests
    • Uncle/ommer validation
    • Withdrawal tests
  • 2.3 Update the filler/static_filler pytest plugin to discover and dispatch
    blockchain test fillers (currently only handles state fillers).
  • 2.4 Copy the ~361 filler files from ethereum/tests develop
    src/BlockchainTestsFiller/. See Appendix B.
  • 2.5 Copy the ~56 additional legacy-only files from ethereum/legacytests
    Cancun/BlockchainTestsFiller/ not present on develop.
  • 2.6 Port the 21 TransitionTests fillers from ethereum/legacytests
    Cancun/BlockchainTestsFiller/TransitionTests/.
    See Appendix B.
  • 2.7 Verify: fill --fill-static-tests -k "blockchain" --until Cancun

Phase 3: Add TransactionTestsFiller support (~210 files)

EELS has TransactionTest spec and TransactionFixture format but no static
transaction filler infrastructure.

  • 3.1 Create tests/static/transaction_tests/ directory structure mirroring
    src/TransactionTestsFiller/ layout (tt*/ subdirectories).
  • 3.2 Implement specs/static_transaction/ module — analogous to
    specs/static_state/ but producing TransactionFixture output.
    Key differences from state fillers:
    • Tests transaction validity/invalidity (not state transitions)
    • RLP encoding edge cases
    • Signature validation
    • No post-state, just accept/reject
  • 3.3 Update the filler/static_filler plugin to discover transaction fillers.
  • 3.4 Copy the 210 filler files from ethereum/tests develop
    src/TransactionTestsFiller/.
    See Appendix C.
  • 3.5 Verify: fill --fill-static-tests -k "transaction" --until Cancun

Phase 4: Add InvalidRLP support (~20 files)

  • 4.1 Create tests/static/invalid_rlp/ directory.
  • 4.2 Determine if InvalidRLP fillers can reuse the blockchain filler
    infrastructure (they produce invalid blockchain test fixtures) or need a dedicated
    handler.
  • 4.3 Copy the 20 files from ethereum/tests develop src/InvalidRLP/.
    See Appendix D.
  • 4.4 Verify filling works.

Phase 5: Port legacy-only tests (conditional on Phase 0 triage)

  • 5.1 If Phase 0 determines Constantinople GeneralStateTests/ adds unique
    coverage: port the net-new files into tests/static/state_tests/.
  • 5.2 If Phase 0 determines Constantinople VMTestsFiller/ adds unique
    coverage: create tests/static/vm_tests/ and implement a VM test filler, or
    fold into state test infrastructure.
  • 5.3 Port any additional blockchain test fillers from
    Constantinople/BlockchainTestsFiller/ that aren't already covered by Phase 2.

Phase 6: Update fill pipeline for full fork coverage

  • 6.1 Ensure --fill-static-tests flag covers all new test types (blockchain,
    transaction, InvalidRLP) — not just state tests.
  • 6.2 Verify filling works across the full fork range: Frontier through
    Amsterdam (and beyond). Each filler specifies its applicable fork range, but the
    infrastructure must support dispatching to any fork.
  • 6.3 Update tox.ini py3 environment to include new test types in the
    default fill command.
  • 6.4 Run a full fill and compare output against the last ethereum/tests
    release fixtures to verify parity.

Phase 7: Update release pipeline

  • 7.1 Update .github/configs/feature.yaml release configs:
    • stable fill-params: add blockchain + transaction fixture generation
    • develop fill-params: same
    • Ensure --fill-static-tests now covers all fixture types
  • 7.2 Update .github/workflows/release_fixture_full.yaml if needed to handle
    new artifact types (blockchain fixtures, transaction fixtures).
  • 7.3 Publish a test release and verify fixture output matches what
    ethereum/tests previously produced.
  • 7.4 Update ethereum/execution-spec-tests release notes / README to indicate
    EELS is now the canonical source.

Phase 8: Deprecate upstream repos

  • 8.1 Confirm fixture parity: EELS release fixtures are a superset of the last
    ethereum/tests v13 release.
  • 8.2 Archive ethereum/tests (mark as deprecated, point README to EELS).
  • 8.3 Archive ethereum/legacytests (same).
  • 8.4 Remove the pinned commit reference in
    tests/static/state_tests/README.md — EELS is now the source of truth.

Appendix A: Missing GeneralStateTestsFiller files

Source: ethereum/tests pinned commit 7dc757ec src/GeneralStateTestsFiller/

These filler files exist at the pinned commit but are missing from
tests/static/state_tests/.

stExpectSection/ (entire directory missing)

All files in this directory.

stBadOpcode/ (116 missing of 120)

  • All *DiffPlacesFiller variants (~115 files: opc0C-opc0F, opc1E-opc1F, opc21-opc2F,
    opc49-opc4F, opc5C-opc5F, opcA5-opcAF, opcB0-opcBF, opcC0-opcCF, opcD0-opcDF,
    opcE0-opcEF, opcF6-opcF9, opcFB-opcFC, opcFE, invalidDiffPlaces)
  • undefinedOpcodeFirstByteFiller

stZeroKnowledge2/ (130 missing of 130 — entirely empty)

All ecadd_* and ecmul_* files.

stZeroKnowledge/ (129 missing of 134)

All ecmul_1-2_*, ecmul_1-3_*, ecmul_7827-6598_*, and ecpairing_* files.

stExtCodeHash/ (34 missing of 36)

  • callToNonExistentFiller
  • callToSuicideThenExtcodehashFiller
  • createEmptyThenExtcodehashFiller
  • dynamicAccountOverwriteEmpty_ParisFiller
  • extCodeCopyBoundsFiller
  • extCodeHashAccountWithoutCodeFiller
  • extCodeHashCALLCODEFiller
  • extCodeHashCALLFiller
  • extCodeHashChangedAccountFiller
  • extCodeHashCreatedAndDeletedAccountCallFiller
  • extCodeHashCreatedAndDeletedAccountFiller
  • extCodeHashCreatedAndDeletedAccountStaticCallFiller
  • extCodeHashDELEGATECALLFiller
  • extCodeHashDeletedAccount1CancunFiller
  • extCodeHashDeletedAccount1Filler
  • extCodeHashDeletedAccount2CancunFiller
  • extCodeHashDeletedAccount2Filler
  • extCodeHashDeletedAccount3Filler
  • extCodeHashDeletedAccount4Filler
  • extCodeHashDeletedAccountCancunFiller
  • extCodeHashDeletedAccountFiller
  • extCodeHashDynamicArgumentFiller
  • extcodehashEmpty_ParisFiller
  • extCodeHashInInitCodeFiller
  • extCodeHashMaxCodeSizeFiller
  • extCodeHashNewAccountFiller
  • extCodeHashNonExistingAccountFiller
  • extCodeHashPrecompilesFiller
  • extCodeHashSelfFiller
  • extCodeHashSelfInInitFiller
  • extCodeHashSTATICCALLFiller
  • extCodeHashSubcallOOGFiller
  • extCodeHashSubcallSuicideCancunFiller
  • extCodeHashSubcallSuicideFiller

stPreCompiledContracts2/ (20 missing of 100)

  • CALLCODEIdentitiy_0Filler
  • CALLCODEIdentitiy_1Filler
  • CALLCODEIdentity_1_nonzeroValueFiller
  • CALLCODEIdentity_2Filler
  • CALLCODEIdentity_3Filler
  • CALLCODEIdentity_4_gas17Filler
  • CALLCODEIdentity_4_gas18Filler
  • CALLCODEIdentity_4Filler
  • CALLCODEIdentity_5Filler
  • CallIdentitiy_0Filler
  • CallIdentitiy_1Filler
  • CallIdentity_1_nonzeroValueFiller
  • CallIdentity_2Filler
  • CallIdentity_3Filler
  • CallIdentity_4_gas17Filler
  • CallIdentity_4_gas18Filler
  • CallIdentity_4Filler
  • CallIdentity_5Filler
  • CallIdentity_6_inputShorterThanOutputFiller
  • CallRipemd160_0Filler

Cancun/stEIP4844_blobtransactions/ (8 missing of 13)

  • blobhashListBounds3Filler
  • blobhashListBounds4Filler
  • blobhashListBounds5Filler
  • blobhashListBounds6Filler
  • blobhashListBounds7Filler
  • blobhashListBounds8Filler
  • blobhashListBounds9Filler
  • blobhashListBounds10Filler

stStaticFlagEnabled/ (7 missing of 13)

  • CallWithNOTZeroValueToPrecompileFromCalledContractFiller
  • CallWithNOTZeroValueToPrecompileFromContractInitializationFiller
  • CallWithNOTZeroValueToPrecompileFromTransactionFiller
  • CallWithZeroValueToPrecompileFromCalledContractFiller
  • CallWithZeroValueToPrecompileFromContractInitializationFiller
  • CallWithZeroValueToPrecompileFromTransactionFiller
  • StaticcallForPrecompilesIssue683Filler

stCreateTest/ (7 missing of 47)

  • CREATE_AcreateB_BSuicide_BStoreFiller
  • CREATE_ContractSuicideDuringInit_ThenStoreThenReturnFiller
  • CREATE_ContractSuicideDuringInit_WithValueFiller
  • CREATE_ContractSuicideDuringInit_WithValueToItselfFiller
  • CREATE_ContractSuicideDuringInitFiller
  • CREATE_FirstByte_loopFiller
  • CreateOOGFromEOARefundsFiller

Cancun/stEIP1153_transientStorage/ (4 missing of 8)

  • 15_tstoreCannotBeDosdFiller
  • 17_tstoreGasFiller
  • 19_oogUndoesTransientStoreFiller
  • 21_tstoreCannotBeDosdOOOFiller

stEIP1559/ (3 missing of 14)

  • intrinsicCancunFiller
  • intrinsicGenCancun
  • typeTwoBerlinFiller

stCreate2/ (2 missing of 51)

  • create2collisionStorageParisFiller
  • RevertInCreateInInitCreate2ParisFiller

stPreCompiledContracts/ (2 missing of 6)

  • identity_to_biggerFiller
  • identity_to_smallerFiller

stSStoreTest/ (2 missing of 28)

  • InitCollisionNonZeroNonceFiller
  • InitCollisionParisFiller

stTimeConsuming/ (2 missing of 14)

  • CALLBlake2f_MaxRoundsFiller
  • static_Call50000_sha256Filler

stExample/ (2 missing of 12)

  • accessListExampleFiller
  • solidityExampleFiller

stRevertTest/ (1 missing of 46)

  • RevertRemoteSubCallStorageOOGFiller

stSelfBalance/ (1 missing of 6)

  • diffPlacesFiller

stShift/ (1 missing of 43)

  • shiftCombinationsFiller

stSolidityTest/ (1 missing of 18)

  • SelfDestructFiller

VMTests/ (1 missing of 6)

  • vmPerformance

Appendix B: BlockchainTestsFiller files

Source: ethereum/tests develop src/BlockchainTestsFiller/
Also in: ethereum/legacytests src/LegacyTests/Cancun/BlockchainTestsFiller/
(superset, includes TransitionTests)

InvalidBlocks/

bc4895-withdrawals/ (15 files)

  • accountInteractionsFiller.json
  • amountIs0Filler.json
  • amountIs0TouchAccountAndTransactionFiller.json
  • amountIs0TouchAccountFiller.json
  • differentValidatorToTheSameAddressFiller.json
  • incorrectWithdrawalsRootFiller.json
  • shanghaiWithoutWithdrawalsRLPFiller.json
  • staticcallFiller.json
  • twoIdenticalIndexDifferentValidatorFiller.json
  • twoIdenticalIndexFiller.json
  • warmupFiller.yml
  • withdrawalsAddressBoundsFiller.json
  • withdrawalsAmountBoundsFiller.json
  • withdrawalsIndexBoundsFiller.json
  • withdrawalsValidatorIndexBoundsFiller.json

bcBlockGasLimitTest/ (2 files)

  • GasUsedHigherThanBlockGasLimitButNotWithRefundsSuicideFirstFiller.json
  • GasUsedHigherThanBlockGasLimitButNotWithRefundsSuicideLastFiller.json

bcEIP1559/ (9 files on develop, 10 in legacytests)

  • badBlocksFiller.yml
  • badUnclesFiller.yml
  • baseFeeFiller.yml
  • checkGasLimitFiller.yml
  • feeCapFiller.yml
  • gasLimit20mFiller.yml
  • gasLimit40mFiller.yml
  • transFailFiller.yml
  • valCausesOOFFiller.yml
  • intrinsicOrFailFiller.yml (legacytests only)

bcEIP3675/ (1 file)

  • timestampPerBlockFiller.yml

bcExpectSection/ (15 files, develop only)

  • filling_missingExpectedAccountFiller.json
  • filling_unexpectedExceptionFiller.json
  • filling_wrongAccountFiller.json
  • filling_wrongStorage2Filler.json
  • filling_wrongStorageFiller.json
  • lastblockhashExceptionCopier.json
  • result_CancunEnvConvertionFiller.json
  • result_MergeEnvConvertionFiller.json
  • result_ShanghaiEnvConvertionFiller.json
  • result_eip1559EnvConvertionFiller.json
  • result_legacyEnvConvertionFiller.json
  • unexpectedAccountCopier.json
  • wrongAccountCopier.json
  • wrongRLPGenesisCopier.json
  • wrongStorageCopier.json

bcInvalidHeaderTest/ (22 files)

  • DifferentExtraData1025Filler.json
  • DifficultyIsZeroFiller.json
  • ExtraData1024Filler.json
  • ExtraData33Filler.json
  • GasLimitHigherThan2p63m1Filler.json
  • GasLimitIsZeroFiller.json
  • badTimestampFiller.yml
  • log1_wrongBlockNumberFiller.json
  • log1_wrongBloomFiller.json
  • timeDiff0Filler.json
  • wrongCoinbaseFiller.json
  • wrongDifficultyFiller.json
  • wrongGasLimitFiller.json
  • wrongGasUsedFiller.json
  • wrongNumberFiller.json
  • wrongParentHash2Filler.json
  • wrongParentHashFiller.json
  • wrongReceiptTrieFiller.json
  • wrongStateRootFiller.json
  • wrongTimestampFiller.json
  • wrongTransactionsTrieFiller.json
  • wrongUncleHashFiller.json

bcMultiChainTest/ (1 on develop, 2 in legacytests)

  • UncleFromSideChainFiller.json
  • lotsOfLeafsFiller.json (legacytests only)

bcStateTests/ (24 on develop, 30 in legacytests)

  • CreateTransactionRevertedFiller.json
  • EmptyTransactionFiller.json
  • NotEnoughCashContractCreationFiller.json
  • RefundOverflow2Filler.json
  • RefundOverflowFiller.json
  • TransactionFromCoinbaseNotEnoughFoundsFiller.json
  • TransactionNonceCheck2Filler.json
  • TransactionNonceCheckFiller.json
  • UserTransactionGasLimitIsTooLowWhenZeroCostFiller.json
  • ZeroValue_TransactionCALL_OOGRevertFiller.json
  • ZeroValue_TransactionCALL_ToEmpty_OOGRevert_ParisFiller.json
  • ZeroValue_TransactionCALL_ToNonZeroBalance_OOGRevertFiller.json
  • ZeroValue_TransactionCALL_ToOneStorageKey_OOGRevertFiller.json
  • ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert_Istanbul_ParisFiller.json
  • ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert_Istanbul_ParisFiller.json
  • callcodeOutput2Filler.json
  • createNameRegistratorPerTxsNotEnoughGasAfterFiller.json
  • createNameRegistratorPerTxsNotEnoughGasAtFiller.json
  • createNameRegistratorPerTxsNotEnoughGasBeforeFiller.json
  • createRevertFiller.json
  • dataTxFiller.json
  • gasLimitTooHighFiller.json
  • transactionFromSelfDestructedContractFiller.yml
  • txCost-sec73Filler.json
  • TransactionToItselfNotEnoughFoundsFiller.json (legacytests only)
  • ZeroValue_TransactionCALL_ToEmpty_OOGRevertFiller.json (legacytests only)
  • ZeroValue_TransactionCALL_ToOneStorageKey_OOGRevert_ParisFiller.json (legacytests only)
  • ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert_IstanbulFiller.json (legacytests only)
  • ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert_IstanbulFiller.json (legacytests only)
  • transactionFromNotExistingAccountFiller.json (legacytests only)

bcUncleHeaderValidity/ (25 files)

  • correctFiller.json
  • diffTooHighFiller.json
  • diffTooLow2Filler.json
  • diffTooLowFiller.json
  • gasLimitLTGasUsageUncleFiller.json
  • gasLimitTooHighExactBoundFiller.json
  • gasLimitTooHighFiller.json
  • gasLimitTooLowExactBound2Filler.json
  • gasLimitTooLowExactBoundFiller.json
  • gasLimitTooLowExactBoundLondonFiller.json
  • gasLimitTooLowFiller.json
  • incorrectUncleNumber0Filler.json
  • incorrectUncleNumber1Filler.json
  • incorrectUncleNumber500Filler.json
  • incorrectUncleTimestamp2Filler.json
  • incorrectUncleTimestamp3Filler.json
  • incorrectUncleTimestamp4Filler.json
  • incorrectUncleTimestamp5Filler.json
  • incorrectUncleTimestampFiller.json
  • pastUncleTimestampFiller.json
  • timestampTooHighFiller.json
  • timestampTooLowFiller.json
  • unknownUncleParentHashFiller.json
  • wrongParentHashFiller.json
  • wrongStateRootFiller.json

bcUncleSpecialTests/ (9 files)

  • futureUncleTimestamp2Filler.json
  • futureUncleTimestamp3Filler.json
  • futureUncleTimestampDifficultyDrop2Filler.json
  • futureUncleTimestampDifficultyDrop3Filler.json
  • futureUncleTimestampDifficultyDrop4Filler.json
  • futureUncleTimestampDifficultyDropFiller.json
  • uncleBloomNot0Filler.json
  • uncleBloomNot0_2Filler.json
  • uncleBloomNot0_3Filler.json

bcUncleTest/ (22 on develop, 23 in legacytests)

  • EqualUncleInTwoDifferentBlocks2Filler.json
  • InChainUncleFatherFiller.json
  • InChainUncleFiller.json
  • InChainUncleGrandPaFiller.json
  • InChainUncleGreatGrandPaFiller.json
  • InChainUncleGreatGreatGrandPaFiller.json
  • InChainUncleGreatGreatGreatGrandPaFiller.json
  • InChainUncleGreatGreatGreatGreatGrandPaFiller.json
  • UncleIsBrotherFiller.json
  • oneUncleFiller.json
  • oneUncleGeneration2Filler.json
  • oneUncleGeneration3Filler.json
  • oneUncleGeneration4Filler.json
  • oneUncleGeneration5Filler.json
  • oneUncleGeneration6Filler.json
  • oneUncleGeneration7Filler.json
  • threeUncleFiller.json
  • twoEqualUncleFiller.json
  • twoUncleFiller.json
  • uncleHeaderAtBlock2Filler.json
  • uncleHeaderWithGeneration0Filler.json
  • uncleWithSameBlockNumberFiller.json
  • EqualUncleInTwoDifferentBlocksFiller.json (legacytests only)

ValidBlocks/

bcBlockGasLimitTest/ (4 files)

  • BlockGasLimit2p63m1Filler.json
  • SuicideTransactionFiller.json
  • TransactionGasHigherThanLimit2p63m1Filler.json
  • TransactionGasHigherThanLimit2p63m1_2Filler.json

bcEIP1153-transientStorage/ (3 files)

  • tloadDoesNotPersistAcrossBlocksFiller.yml
  • tloadDoesNotPersistCrossTxnFiller.yml
  • transStorageBlockchainFiller.yml

bcEIP1559/ (7 on develop, 11 in legacytests)

  • besuBaseFeeBugFiller.json
  • burnVerifyFiller.yml
  • highDemandFiller.yml
  • lowDemandFiller.yml
  • medDemandFiller.yml
  • tipsFiller.yml
  • transTypeFiller.yml
  • burnVerifyLondonFiller.yml (legacytests only)
  • intrinsicFiller.yml (legacytests only)
  • intrinsicTipFiller.yml (legacytests only)
  • tipsLondonFiller.yml (legacytests only)

bcEIP3675/ (1 file)

  • tipInsideBlockFiller.yml

bcEIP4844-blobtransactions/ (1 file)

  • blockWithAllTransactionTypesFiller.yml

bcExample/ (4 files)

  • basefeeExampleFiller.json
  • mergeExampleFiller.json
  • optionsTestFiller.json
  • shanghaiExampleFiller.json

bcExploitTest/ (4 files)

  • DelegateCallSpamFiller.json
  • ShanghaiLoveFiller.json
  • StrangeContractCreationFiller.json
  • SuicideIssueFiller.json

bcForkStressTest/ (1 on develop, 2 in legacytests)

  • AmIOnEIP150Filler.json
  • ForkStressTestFiller.json (legacytests only)

bcGasPricerTest/ (2 on develop, 3 in legacytests)

  • highGasUsageFiller.json
  • notxsFiller.json
  • RPC_API_TestFiller.json (legacytests only)

bcMultiChainTest/ (legacytests only, 7 files)

  • CallContractFromNotBestBlockFiller.json
  • ChainAtoChainBCallContractFormAFiller.json
  • ChainAtoChainBFiller.json
  • ChainAtoChainB_BlockHashFiller.json
  • ChainAtoChainB_difficultyBFiller.json
  • ChainAtoChainBtoChainAFiller.json
  • ChainAtoChainBtoChainAtoChainBFiller.json

bcRandomBlockhashTest/ (~105 files)

  • 201503110226PYTHON_DUP6BCFiller.json
  • randomStatetest{various}BCFiller.json (100+ files)

bcStateTests/ (63 on develop, 66 in legacytests)

  • BLOCKHASH_BoundsFiller.json
  • BadStateRootTxBCFiller.json
  • OOGStateCopyContainingDeletedContractFiller.json
  • OverflowGasRequireFiller.json
  • SuicidesMixingCoinbase2Filler.json
  • SuicidesMixingCoinbaseFiller.json
  • TransactionFromCoinbaseHittingBlockGasLimit1Filler.json
  • ZeroValue_TransactionCALLwithData_OOGRevertFiller.json
  • ZeroValue_TransactionCALLwithData_ToEmpty_OOGRevert_ParisFiller.json
  • ZeroValue_TransactionCALLwithData_ToNonZeroBalance_OOGRevertFiller.json
  • ZeroValue_TransactionCALLwithData_ToOneStorageKey_OOGRevert_ParisFiller.json
  • blockhashNonConstArgFiller.json
  • blockhashTestsFiller.json
  • callcodeOutput3partialFiller.json
  • create2collisionwithSelfdestructSameBlockFiller.json
  • extCodeHashOfDeletedAccountDynamicFiller.json
  • extCodeHashOfDeletedAccountFiller.json
  • extcodehashEmptySuicideFiller.yml
  • logRevertFiller.yml
  • multimpleBalanceInstructionFiller.json
  • randomFiller.yml
  • randomStatetest{various}Filler.json (17 files)
  • refundResetFiller.yml
  • selfdestructBalanceFiller.yml
  • simpleSuicideFiller.json
  • suicideCoinbaseFiller.json
  • suicideCoinbaseStateFiller.json
  • suicideStorageCheckFiller.json
  • suicideStorageCheckVCreate2Filler.json
  • suicideStorageCheckVCreateFiller.json
  • suicideThenCheckBalanceFiller.json
  • testOpcode_00Filler.yml through testOpcode_f0Filler.yml (15 files)

bcTotalDifficultyTest/ (legacytests only, 10 files)

  • lotsOfBranchesOverrideAtTheEndFiller.json
  • lotsOfBranchesOverrideAtTheMiddleFiller.json
  • newChainFrom4BlockFiller.json
  • newChainFrom5BlockFiller.json
  • newChainFrom6BlockFiller.json
  • sideChainWithMoreTransactions2Filler.json
  • sideChainWithMoreTransactionsFiller.json
  • sideChainWithNewMaxDifficultyStartingFromBlock3AfterBlock4Filler.json
  • uncleBlockAtBlock3AfterBlock3Filler.json
  • uncleBlockAtBlock3afterBlock4Filler.json

bcUncleSpecialTests/ (legacytests only, 8 files)

  • futureUncleTimestamp2Filler.json
  • futureUncleTimestampDifficultyDrop2Filler.json
  • futureUncleTimestampDifficultyDrop3Filler.json
  • futureUncleTimestampDifficultyDrop4Filler.json
  • futureUncleTimestampDifficultyDropFiller.json
  • uncleBloomNot0Filler.json
  • uncleBloomNot0_2Filler.json
  • uncleBloomNot0_3Filler.json

bcUncleTest/ (legacytests only, 8 files)

  • oneUncleFiller.json
  • oneUncleGeneration2Filler.json
  • oneUncleGeneration3Filler.json
  • oneUncleGeneration4Filler.json
  • oneUncleGeneration5Filler.json
  • oneUncleGeneration6Filler.json
  • twoUncleFiller.json
  • uncleHeaderAtBlock2Filler.json

bcValidBlockTest/ (16 on develop, 17 in legacytests)

  • ExtraData32Filler.json
  • RecallSuicidedContractFiller.json
  • RecallSuicidedContractInOneBlockFiller.json
  • SimpleTx3LowSFiller.json
  • SimpleTxFiller.json
  • callRevertFiller.json
  • dataTx2Filler.json
  • diff1024Filler.json
  • eip2930Filler.yml
  • emptyPostTransferFiller.yml
  • gasLimitTooHigh2Filler.json
  • log1_correctFiller.json
  • reentrencySuicideFiller.yml
  • timeDiff12Filler.json
  • timeDiff13Filler.json
  • timeDiff14Filler.json
  • gasPrice0Filler.json (legacytests only)

bcWalletTest/ (5 files)

  • wallet2outOf3txs2Filler.json
  • wallet2outOf3txsFiller.json
  • wallet2outOf3txsRevokeAndConfirmAgainFiller.json
  • wallet2outOf3txsRevokeFiller.json
  • walletReorganizeOwnersFiller.json

TransitionTests/ (legacytests only, 21 files)

bcArrowGlacierToParis/ (3 files)

  • difficultyFormulaFiller.yml
  • powToPosBlockRejectionFiller.json
  • powToPosTestFiller.json

bcBerlinToLondon/ (3 files)

  • BerlinToLondonTransitionFiller.json
  • initialValFiller.yml
  • londonUnclesFiller.json

bcByzantiumToConstantinopleFix/ (1 file)

  • ConstantinopleFixTransitionFiller.json

bcEIP158ToByzantium/ (1 file)

  • ByzantiumTransitionFiller.json

bcFrontierToHomestead/ (7 files)

  • CallContractThatCreateContractBeforeAndAfterSwitchoverFiller.json
  • ContractCreationFailsOnHomesteadFiller.json
  • HomesteadOverrideFrontierFiller.json
  • UncleFromFrontierInHomesteadFiller.json
  • UnclePopulationFiller.json
  • blockChainFrontierWithLargerTDvsHomesteadBlockchain2Filler.json
  • blockChainFrontierWithLargerTDvsHomesteadBlockchainFiller.json

bcHomesteadToDao/ (4 files)

  • DaoTransactionsFiller.json
  • DaoTransactions_EmptyTransactionAndForkBlocksAheadFiller.json
  • DaoTransactions_UncleExtradataFiller.json
  • DaoTransactions_XBlockm1Filler.json

bcHomesteadToEIP150/ (1 file)

  • EIP150TransitionFiller.json

bcMergeToShanghai/ (1 file)

  • shanghaiBeforeTransitionFiller.json

Appendix C: TransactionTestsFiller files

Source: ethereum/tests develop src/TransactionTestsFiller/

ttAddress/ (4 files)

  • AddressLessThan20Filler.json
  • AddressLessThan20Prefixed0Filler.json
  • AddressMoreThan20Filler.json
  • AddressMoreThan20PrefixedBy0Filler.json

ttData/ (9 files)

  • DataTestEnoughGASFiller.json
  • DataTestFirstZeroBytesFiller.json
  • DataTestLastZeroBytesFiller.json
  • DataTestNotEnoughGASFiller.json
  • DataTestZeroBytesFiller.json
  • String10MbDataFiller.json
  • String10MbDataNotEnoughGASFiller.json
  • dataTx_bcValidBlockTestFiller.json
  • dataTx_bcValidBlockTestFrontierFiller.json

ttEIP1559/ (9 files)

  • GasLimitPriceProductOverflowFiller.json
  • GasLimitPriceProductOverflowtMinusOneFiller.json
  • GasLimitPriceProductPlusOneOverflowFiller.json
  • maxFeePerGas00prefixFiller.json
  • maxFeePerGas32BytesValueFiller.json
  • maxFeePerGasOverflowFiller.json
  • maxPriorityFeePerGas00prefixFiller.json
  • maxPriorityFeePerGasOverflowFiller.json
  • maxPriorityFeePerGass32BytesValueFiller.json

ttEIP2028/ (2 files)

  • DataTestInsufficientGas2028Filler.json
  • DataTestSufficientGas2028Filler.json

ttEIP2930/ (7 files)

  • accessListAddressGreaterThan20Filler.json
  • accessListAddressLessThan20Filler.json
  • accessListAddressPrefix00Filler.json
  • accessListStorage0x0001Filler.json
  • accessListStorage32BytesFiller.json
  • accessListStorageOver32BytesFiller.json
  • accessListStoragePrefix00Filler.json

ttEIP3860/ (4 files)

  • DataTestEnoughGasInitCodeFiller.yml
  • DataTestInitCodeLimitFiller.yml
  • DataTestInitCodeTooBigFiller.yml
  • DataTestNotEnoughGasInitCodeFiller.yml

ttGasLimit/ (10 files)

  • NotEnoughGasLimitFiller.json
  • TransactionWithGasLimitOverflow256Filler.json
  • TransactionWithGasLimitOverflow64Filler.json
  • TransactionWithGasLimitOverflowZeros64Filler.json
  • TransactionWithGasLimitxPriceOverflowFiller.json
  • TransactionWithHighGasLimit63Filler.json
  • TransactionWithHighGasLimit63Minus1Filler.json
  • TransactionWithHighGasLimit63Plus1Filler.json
  • TransactionWithHighGasLimit64Minus1Filler.json
  • TransactionWithLeadingZerosGasLimitFiller.json

ttGasPrice/ (4 files)

  • TransactionWithGasPriceOverflowFiller.json
  • TransactionWithHighGasPrice2Filler.json
  • TransactionWithHighGasPriceFiller.json
  • TransactionWithLeadingZerosGasPriceFiller.json

ttNonce/ (10 files)

  • TransactionWithEmptyBigIntFiller.json
  • TransactionWithHighNonce256Filler.json
  • TransactionWithHighNonce32Filler.json
  • TransactionWithHighNonce64Filler.json
  • TransactionWithHighNonce64Minus1Filler.json
  • TransactionWithHighNonce64Minus2Filler.json
  • TransactionWithHighNonce64Plus1Filler.json
  • TransactionWithLeadingZerosNonceFiller.json
  • TransactionWithNonceOverflowFiller.json
  • TransactionWithZerosBigIntFiller.json

ttRSValue/ (29 files)

  • RightVRSTestF0000000aFiller.json
  • RightVRSTestF0000000bFiller.json
  • RightVRSTestF0000000cFiller.json
  • RightVRSTestF0000000dFiller.json
  • RightVRSTestF0000000eFiller.json
  • RightVRSTestF0000000fFiller.json
  • RightVRSTestVPrefixedBy0Filler.json
  • RightVRSTestVPrefixedBy0_2Filler.json
  • RightVRSTestVPrefixedBy0_3Filler.json
  • TransactionWithRSvalue0Filler.json
  • TransactionWithRSvalue1Filler.json
  • TransactionWithRvalue0Filler.json
  • TransactionWithRvalue1Filler.json
  • TransactionWithRvalueHighFiller.json
  • TransactionWithRvalueOverflowFiller.json
  • TransactionWithRvaluePrefixed00BigIntFiller.json
  • TransactionWithRvaluePrefixed00Filler.json
  • TransactionWithRvalueTooHighFiller.json
  • TransactionWithSvalue0Filler.json
  • TransactionWithSvalue1Filler.json
  • TransactionWithSvalueEqual_c_secp256k1n_x05Filler.json
  • TransactionWithSvalueHighFiller.json
  • TransactionWithSvalueLargerThan_c_secp256k1n_x05Filler.json
  • TransactionWithSvalueLessThan_c_secp256k1n_x05Filler.json
  • TransactionWithSvalueOverflowFiller.json
  • TransactionWithSvaluePrefixed00BigIntFiller.json
  • TransactionWithSvaluePrefixed00Filler.json
  • TransactionWithSvalueTooHighFiller.json
  • unpadedRValueFiller.json

ttSignature/ (34 files)

  • EmptyTransactionFiller.json
  • PointAtInfinityFiller.json
  • RSsecp256k1Filler.json
  • RightVRSTestFiller.json
  • SenderTestFiller.json
  • TransactionWithTooFewRLPElementsCopier.json
  • TransactionWithTooManyRLPElementsCopier.json
  • Vitalik_1Filler.json through Vitalik_17Filler.json (17 files)
  • WrongVRSTestIncorrectSizeFiller.json
  • WrongVRSTestVOverflowFiller.json
  • ZeroSigTransaction2Filler.json
  • ZeroSigTransaction3Filler.json
  • ZeroSigTransaction4Filler.json
  • ZeroSigTransaction5Filler.json
  • ZeroSigTransaction6Filler.json
  • ZeroSigTransactionFiller.json
  • invalidSignatureFiller.json
  • libsecp256k1testFiller.json

ttValue/ (3 files)

  • TransactionWithHighValueFiller.json
  • TransactionWithHighValueOverflowFiller.json
  • TransactionWithLeadingZerosValueFiller.json

ttVValue/ (28 files)

  • InvalidChainID0ValidV0Filler.json
  • InvalidChainID0ValidV1Filler.json
  • V_equals37Filler.json
  • V_equals38Filler.json
  • V_overflow32bitFiller.json
  • V_overflow32bitSignedFiller.json
  • V_overflow64bitPlus27Filler.json
  • V_overflow64bitPlus28Filler.json
  • V_overflow64bitSignedFiller.json
  • V_wrongvalue_101Filler.json
  • V_wrongvalue_121Filler.json
  • V_wrongvalue_122Filler.json
  • V_wrongvalue_123Filler.json
  • V_wrongvalue_124Filler.json
  • V_wrongvalue_ffFiller.json
  • V_wrongvalue_ffffFiller.json
  • ValidChainID1InvalidV00Filler.json
  • ValidChainID1InvalidV01Filler.json
  • ValidChainID1InvalidV0Filler.json
  • ValidChainID1InvalidV1Filler.json
  • ValidChainID1ValidV0Filler.json
  • ValidChainID1ValidV1Filler.json
  • WrongVRSTestVEqual26Filler.json
  • WrongVRSTestVEqual29Filler.json
  • WrongVRSTestVEqual31Filler.json
  • WrongVRSTestVEqual36Filler.json
  • WrongVRSTestVEqual39Filler.json
  • WrongVRSTestVEqual41Filler.json

ttWrongRLP/ (59 files)

  • RLPAddressWithFirstZerosCopier.json
  • RLPAddressWrongSizeCopier.json
  • RLPArrayLengthWithFirstZerosCopier.json
  • RLPElementIsListWhenItShouldntBe2Copier.json
  • RLPElementIsListWhenItShouldntBeCopier.json
  • RLPExtraRandomByteAtTheEndCopier.json
  • RLPHeaderSizeOverflowInt32Copier.json
  • RLPIncorrectByteEncoding00Copier.json
  • RLPIncorrectByteEncoding01Copier.json
  • RLPIncorrectByteEncoding127Copier.json
  • RLPListLengthWithFirstZerosCopier.json
  • RLPNonceWithFirstZerosCopier.json
  • RLPTransactionGivenAsArrayCopier.json
  • RLPValueWithFirstZerosCopier.json
  • RLP_04_maxFeePerGas32BytesValueCopier.json
  • RLP_09_maxFeePerGas32BytesValueCopier.json
  • RLPgasLimitWithFirstZerosCopier.json
  • RLPgasPriceWithFirstZerosCopier.json
  • TRANSCT_HeaderGivenAsArray_0Copier.json
  • TRANSCT_HeaderLargerThanRLP_0Copier.json
  • TRANSCT__RandomByteAtRLP_0Copier.json through _9Copier.json (10 files)
  • TRANSCT__RandomByteAtTheEndCopier.json
  • TRANSCT__ZeroByteAtRLP_0Copier.json through _9Copier.json (10 files)
  • TRANSCT_data_GivenAsListCopier.json
  • TRANSCT_gasLimit_GivenAsListCopier.json
  • TRANSCT_gasLimit_Prefixed0000Copier.json
  • TRANSCT_gasLimit_TooLargeCopier.json
  • TRANSCT_rvalue_GivenAsListCopier.json
  • TRANSCT_rvalue_Prefixed0000Copier.json
  • TRANSCT_rvalue_TooLargeCopier.json
  • TRANSCT_rvalue_TooShortCopier.json
  • TRANSCT_svalue_GivenAsListCopier.json
  • TRANSCT_svalue_Prefixed0000Copier.json
  • TRANSCT_svalue_TooLargeCopier.json
  • TRANSCT_to_GivenAsListCopier.json
  • TRANSCT_to_Prefixed0000Copier.json
  • TRANSCT_to_TooLargeCopier.json
  • TRANSCT_to_TooShortCopier.json
  • aCrashingRLPCopier.json
  • aMaliciousRLPCopier.json
  • tr201506052141PYTHONCopier.json

Appendix D: InvalidRLP files

Source: ethereum/tests develop src/InvalidRLP/

Root level (7 filler files + 2 non-test)

  • withdrawalsAddressBoundsFiller.json
  • withdrawalsAmountBoundsFiller.json
  • withdrawalsIndexBoundsFiller.json
  • withdrawalsRLPlessElementsFiller.json
  • withdrawalsRLPmoreElementsFiller.json
  • withdrawalsRLPnotAListFiller.json
  • withdrawalsValidatorIndexBoundsFiller.json
  • ConvertThisTestValueOverflowParis.txt (non-test)
  • README.md (non-test)

bcForgedTest/ (11 files)

  • bcBlockRLPAsListFiller.json
  • bcBlockRLPPrefixed0000Filler.json
  • bcBlockRLPRandomByteFiller.json
  • bcBlockRLPTooLargeFiller.json
  • bcBlockRLPZeroByteFiller.json
  • bcForkBlockTestFiller.json
  • bcInvalidRLPTest_BLOCKFiller.json
  • bcInvalidRLPTest_TRANSACTFiller.json
  • bcTransactRLPRandomByteFiller.json
  • bcTransactRLPTooLargeFiller.json
  • bcTransactRLPZeroByteFiller.json

Appendix E: Legacy-only extras (ethereum/legacytests)

These exist only in ethereum/legacytests and are NOT in ethereum/tests develop.
Inclusion depends on Phase 0 triage.

Constantinople/VMTestsFiller/ (613 files)

  • vmArithmeticTest/ (196 files)
  • vmBitwiseLogicOperation/ (61 files)
  • vmBlockInfoTest/ (5 files)
  • vmEnvironmentalInfo/ (33 files)
  • vmIOandFlowOperations/ (144 files)
  • vmLogTest/ (46 files)
  • vmPerformance/ (18 files)
  • vmPushDupSwapTest/ (74 files)
  • vmRandomTest/ (6 files)
  • vmSha3Test/ (18 files)
  • vmSystemOperations/ (7 files)
  • vmTests/ (1 file)

Constantinople/GeneralStateTests/ (9,549 files)

Older pre-refactoring version with significantly more test files per directory:

  • stTimeConsuming/ (5,189 files)
  • stZeroKnowledge/ (804 files)
  • stZeroKnowledge2/ (519 files)
  • stPreCompiledContracts/ (519 files)
  • stSStoreTest/ (465 files)
  • stStaticCall/ (493 files)
  • stRandom/ (313 files)
  • stRandom2/ (223 files)
  • stRevertTest/ (211 files)
  • stStackTests/ (207 files)
  • stTransactionTest/ (156 files)
  • (plus ~40 more directories with smaller counts)

Activity

  1. github-actions commented on May 26, 2026

    @github-actions
    Contributor

    This issue has had no recent activity and has been marked as stale.

  2. added
    staleThe Issue/PR has not had any activity for 60 days. PRs will be automatically closed.
    on May 26, 2026
  3. leolara commented on Jun 8, 2026

    @leolara
    Contributor

    Phase 0.1 — Constantinople GeneralStateTests triage

    Re-filled all 2,394 GeneralStateTests (legacytests Constantinople snapshot) under
    EELS in-process t8n and compared to each fixture's historical stateRoot + logsHash.

    • 2,394 / 2,394 (100%) reproduced — zero anchor mismatches.
    • Provenance: 2,013 already ported, 381 port-candidates (149 generator-family →
      port the generators not outputs per 0.4; 232 individual).

    Manifest attached (phase0_1_constantinople_gst.json.gz, 1.2 MB, schema 1.1). Each
    port_candidate carries a port_payload. Generated by scripts/legacy_migration/phase0/
    (PR #TBD). Cancun snapshot + VMTests are out of scope here (0.2 separate).

    phase0_1_constantinople_gst.json.gz

  4. chfast commented on Jun 8, 2026

    @chfast
    Member

    Does EELS/EEST have support for Constantinople, Spurious Dragon and Tangerine Whistle? Otherwise this comparison is incomplete.

  5. leolara commented on Jun 8, 2026

    @leolara
    Contributor

    Does EELS/EEST have support for Constantinople, Spurious Dragon and Tangerine Whistle? Otherwise this comparison is incomplete.

    A quick look give me that there is some support, but not sure how complete it is. Please ask in our discord if you need it :-)

  6. chfast commented on Jun 8, 2026

    @chfast
    Member

    You are claiming "2,394 / 2,394 (100%) reproduced", but you are missing 3 forks here. Even if you introduce them later, you loose guarantee that every test was ported correctly.

  7. leolara commented on Jun 8, 2026

    @leolara
    Contributor

    You are claiming "2,394 / 2,394 (100%) reproduced", but you are missing 3 forks here. Even if you introduce them later, you loose guarantee that every test was ported correctly.

    Sorry — I read your question as general rather than about this case specifically.

    What we did: for every filled test in https://github.com/ethereum/legacytests/tree/master/Constantinople/GeneralStateTests (the Constantinople directory/snapshot — not the fork), we re-ran its transaction on https://github.com/ethereum/execution-specs at every fork that test declares a post for, and compared the resulting
    state root + logs hash to the expected ones. (These are filled fixtures, not fillers — the fillers are in ethereum/tests; each fixture's _info.source links back to its filler.)

    Across the forks we can run, all 20,714 expected post-states matched, 0 mismatches:

    • ConstantinopleFix 10,569 · Byzantium 4,802 · Homestead 2,002 · EIP158 1,221 · EIP150 1,096 · Frontier 1,023 · Istanbul 1

    We skip exactly one fork: the Constantinople label in legacytests (10,577 post-states). That is Constantinople with EIP-1283, which was reverted before mainnet — execution-specs only implements the post-revert ruleset (it names it constantinople, but it is ConstantinopleFix/Petersburg, without EIP-1283), so those expected
    results can't be reproduced. (Note: what legacytests calls ConstantinopleFix is what execution-specs calls constantinople.)

    Separately, on porting status: 2,013 of the 2,394 tests are referenced by a ported_from marker in execution-specs (matched by filler name) → already ported; 381 are not and likely need porting. That match is by name, so 381 is an upper bound, some may be covered by renamed or unmarked modern tests.

  8. chfast commented on Jun 8, 2026

    @chfast
    Member

    It's fine then.

  9. leolara commented on Jun 9, 2026

    @leolara
    Contributor

    Phase 0.2: legacy VMTests (ethereum/legacytests, Constantinople/VMTests, 609 tests).

    Method. The name-based ported_from link reaches only 2 of 609, since VMTests were retired upstream (PR #680) and re-ported under different names. So I compared by bytecode. Each VMTest exec.code is reduced to an opcode skeleton, with PUSH immediates masked, and compared by whole-code similarity against the same skeletons from the modern ported tests (tests/ported_static, filled to state tests).

    Results.

    • matching (100%, exact opcode skeleton): 284
    • almost (90 to 99%): 21
    • not_matching (below 90%): 304

    Each entry in the attached manifest records the similarity percent, the modern test that produced it, and the ported_from marker when one exists.

    Caveat. EVM test bytecode is mostly shared plumbing (PUSH, MSTORE, SSTORE, STOP, RETURN), so a similarity below 100 can come from boilerplate. For that reason only an exact skeleton counts as matching. not_matching means the code is structurally different. It does not prove the case is net-new, since the same opcodes can appear through a different code shape.

    phase0_2_constantinople_vmtests.json

  10. leolara commented on Jun 9, 2026

    @leolara
    Contributor

    Phase 0.3: port net-new coverage. By net-new I mean the legacy tests that the modern suite does not already cover, the ones that have no equivalent in execution-specs.

    0.3 asks whether to port only this net-new coverage or to bulk-import everything and deduplicate at fill time. With the 0.1 and 0.2 results, the choice is to port net-new, and the triage manifests are the deduplication.

    Reasons.

    • Most of the corpus is already covered. 0.1: 2,013 of 2,394 GeneralStateTests carry a ported_from link. 0.2: 284 of 609 VMTests match modern bytecode exactly, plus 21 in the 90 to 99 band.
    • Bulk-import relies on the static-fill engine we are removing. "Deduplicate at fill time" has no mechanism, since nothing drops an overlapping legacy fixture during a fill.

    Worklist.

    • GeneralStateTests: 381 with no ported_from (upper bound, name-based). 149 are generator-family, so port the few source generators (0.4). 232 individual, confirm then port with filler_to_python where the filler allows, and hand-port the rest.
    • VMTests: the 284 exact matches get a ported_from backlink on the matched modern test, no re-port. The 21 in the 90 to 99 band get a manual review. The 304 below 90 stay unported by default, since they add no opcode-level coverage and the format is deprecated.

    Tooling. filler_to_python (state filler to EEST Python) handles the GST individuals, fed from the ethereum/tests fillers at pin 7dc757ec. It does not handle VMTests, which are filled single-frame fixtures and whose fillers were retired upstream. So the VMTests rely on the ported_from backlinks above.

    Both net-new counts are upper bounds and get a short confirmation pass before the final port list.

  11. leolara commented on Jun 9, 2026

    @leolara
    Contributor

    Phase 0.4: generated precompile families (ecmul, ecadd, ecpairing).

    Method. For these auto-generated families I compared the legacy input vectors against the modern parametrized precompile tests, to see whether porting the generator adds coverage. The legacy filenames encode the input (point, scalar, gas, input length), so I matched those against the parametrization in tests/byzantium/eip196_ec_add_mul/.

    Result.

    • The modern suite already has parametrized tests for these: test_ecmul.py, test_ecadd.py, test_gas.py, and test_ecpairing.py. They cover the families and are broader than the legacy set, since they add the group-order boundary scalars.
    • Legacy Constantinople tests with no ported_from marker: ecmul 147, ecadd 2, ecpairing 0. They did not match by name because the modern ported_from points at the Cancun fillers, not the Constantinople ones.
    • Comparing input vectors, the modern tests cover all the legacy points, the structured scalars, the input lengths, and the gas boundary (the gas boundary more precisely, through test_gas.py). The genuine gaps are small: 5 arbitrary scalars (616, 1456, 5616, 5617, 9935) on the generator point, a length-64 input, and the 2 ecadd vectors.

    Decision. Do not port the output files. Add the missing input vectors as parametrizations to the existing tests, and add the Constantinople fillers to their ported_from lists. No new test files are needed. Most gaps are mechanical: invalid points expect empty output, infinity inputs return infinity, and covered scalars at a new length reuse a known result. The 5 valid-multiplication results are already in the legacy fixtures, so read them from there.

  12. removed
    staleThe Issue/PR has not had any activity for 60 days. PRs will be automatically closed.
    on Jun 10, 2026
  13. leolara commented on Jun 10, 2026

    @leolara
    Contributor

    Phase 0.1 extension: compare against ethereum/tests as well.

    The first pass of 0.1 compared the legacytests Constantinople GeneralStateTests against the modern execution-specs suite, through the ported_from markers. That answers whether execution-specs already covers a test. It does not answer whether the test still exists upstream. The issue's 0.1 also asks for a comparison against the current ethereum/tests fillers, so I am adding that second axis.

    Method. Match each Constantinople test against the ethereum/tests fillers at pin 7dc757ec (src/GeneralStateTestsFiller/), keyed on the filler's subdirectory and name. Each test then has two signals: whether execution-specs already covers it, and whether a live filler exists upstream.

    Result (2,394 tests).

    • Already in execution-specs (a ported_from marker cites it): 2,013.
    • Not in execution-specs, but a live filler exists at the pin: 179. These are the real port targets.
    • Not in execution-specs and no filler at the pin: 202. Consolidated or removed upstream.

    The 179 port targets split into 34 individual fillers, portable with filler_to_python, and 145 from the generated families, handled by extending the parametrized precompile tests. The 202 are dominated by stPreCompiledContracts (90, modexp and identity), which the modern parametrized precompile tests likely already cover.

    Effect on Phase 1. The real filler_to_python worklist is about 34, well below the 381 that the execution-specs comparison gives on its own. The rest is either a generated family or a consolidated upstream test, so it needs a coverage check rather than a per-file port.

  14. leolara commented on Jun 16, 2026

    @leolara
    Contributor

    Phase 0 consolidated output.

    The Phase 0 triage now produces one JSON that the later phases consume, phase0_consolidated.json (attached, gzipped). It merges every Phase 0 signal so a porter can act on each test without reopening the source manifests or the clones.

    Scope. legacytests Constantinople GeneralStateTests (2,394) and VMTests (609), compared against two references: the modern execution-specs suite through the ported_from markers, and the ethereum/tests fillers at pin 7dc757ec.

    Shape. Three populations linked on a (subdir, basename) key, plus a families block and a self-describing meta block (scope, provenance, a port_method legend, and caveats):

    • pin_fillers (2,642): the ethereum/tests GeneralStateTestsFiller, the forward-looking archive set.
    • legacy_gst (2,394): the legacytests Constantinople GeneralStateTests.
    • legacy_vmtests (609): the legacytests Constantinople VMTests.

    Every unit carries a port_method that says what to do with it. Each legacy_gst row that still needs porting also carries the resolved filler path, the fork range, and a port_payload (pre, env, transaction, and the EELS-computed result per fork), so the port needs nothing else.

    Routing (the worklist).

    • pin_fillers: 2,340 already ported, 248 parametrize, 40 filler_to_python, 14 review_native.
    • legacy_gst: 2,011 already ported, 182 backlink, 145 parametrize, 34 filler_to_python, 22 decide.
    • legacy_vmtests: 301 backlink, 240 drop, 68 decide.
    • Family parametrization with missing vectors: ecmul (133) and DiffPlaces (115). The other precompile families (ecadd, ecpairing, modexp, identity, ecrecover) have none.

    port_method values: already_ported, filler_to_python (render the filler to a Python test), parametrize (extend the family's modern test, add a ported_from), backlink (add a ported_from on the covering test), decide_port_or_drop, drop_default, review_native.

    Correctness. The per-fork expected_by_fork values were cross-checked against the historical fixtures: 7,492 cells with a legacy oracle matched the recorded stateRoot and logs, with zero mismatches.

    Caveats. The name-based matches are upper bounds, so a filler_to_python row may already be ported under a renamed test. A backlink rests on the subdir having some ported test, so verify the covering test before writing the marker. The 68 dynamic-jump VMTests are decide_port_or_drop, since the modern jump tests do not cover runtime-computed destinations, so they need a ruling rather than a drop.

    The builder (consolidate.py) regenerates the file from the per-subphase manifests, the pin fillers, and a fresh ported_from, against the current spec commit. The full field reference is in this PR at scripts/legacy_migration/phase0/phase0-consolidated-json-schema.md.

    phase0_consolidated.json.gz

  15. github-actions commented on Aug 16, 2026

    @github-actions
    Contributor

    This issue has had no recent activity and has been marked as stale.

  16. added
    staleThe Issue/PR has not had any activity for 60 days. PRs will be automatically closed.
    on Aug 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    staleThe Issue/PR has not had any activity for 60 days. PRs will be automatically closed.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions