Releases for the tests library follow semantic versioning:
- Major number updates every time there is a backwards incompatibility for test runners, e.g.
- New fork rules
- Backwards-incompatible format changes
- Minor number updates when new tests are added that are backwards compatible
- Patch number updates if an existing test is bugfixed
Here is an example how a follow-up release line could look like:
- v6-alpha - starting to implement EIPs, but not all EIPs are finalized
- v6-beta - all EIPs finalized, but some tests still in progress
- v6.0.0 - all desired coverage for Constantinople tests to be considered "done enough"
- v6.1.0 - more coverage added
- v6.2.0 - more coverage added
- v6.2.1 - bugfix on one of the tests
- v7.0.0 - change in test format output (if backwards incompatible)
This is the last Ethereum tests release with a pre-Berlin HF state,
so it provides some stable ground to upgrade client test runners against
to be ready for a Berlin hardfork integration.
Added state tests (also as BlockchainTests) to validate the
EIP-1706/EIP-2200 out of gas condition,
specifically aimed at validating less than or equals to the stipend handling,
see GeneralStateTests/stSStoreTest/sstore_gasLeft.json
PR #649
Added state tests (also as BlockchainTests) checking DIV/SDIV/MOD/SDIV by zero,
see GeneralStateTests/stSolidityTest/ByZero.json,
PR #647
Added tests checking stack validity of SWAP,
see GeneralStateTests/stStackTests/stackOverflowSWAP.json and [..]/stacksanitySWAP.json,
PR #647
Added more EXTCODEHASH state tests (also as BlockchainTests) of nonexistent and
post suicide accounts, see GeneralStateTests/stExtCodeHash/callToNonExistent.json,
[..]/callToSuicideThenExtcodehash.json and [..]/createEmptyThenExtcodehash.json,
PR #654
Added a composite state test (also in BlockchainTests) for SELFBALANCE that
will do all the exisitng test inside of CALL, DELEGATECALL, and CALLCODE calls,
see GeneralStateTests/stSelfBalance/selfBalanceCallTypes.json,
PR #671
Introduced retesteth unitTests in
BlockchainTests/InvalidBlocks/bcExpectSection/filling_unexpectedAccount.json,
PR #676
Added difficulty tests for EIP-2384 (Muir Glacier Difficulty Bomb Delay), PR #662
Added KeyStore test based on MyCrypto file in order to ensure that the generated file is compatible with MyCrypto and Metamask, PR #665
Added RLP invalid tests for insufficient bytes, see RLPTests/invalidRLPTest.json,
PR #614
BlockChain tests up to ConstantinopleFix (aka Petersburg) now also have been
moved to the [LegacyTests/] folder, the main test folders on this release only
contain the Istanbul tests,
PR #648
VMTests have been converted to BlockchainTests and can now be found in
BlockchainTests/ValidBlocks/VMTests/,
PR #680
On some LegacyTests postState has been corrected to postStateHash, you can use
this repo search
to see which tests are affected. This might need some adoption of your test runner.
Major blockchain test refactoring, and regeneration on geth + retesteth, see
files diff
for an impression on the format changes (InvalidBlockchainTests).
PR #672
- Add Transition genesis retesteth configurations to default geth configs, PR #646
- Updated default mining reward config for transition nets in retesteth configs to avoid retesteth error when filling the state tests, PR #650
- Use additional forks in retesteth configs. Additional forks used in
TransitionTestsand not automatically used in StateTests/BlockchainTests, PR #651 - Enable Istanbul in aleth's retesteth configs, PR #656
- Fix ripemd160 precompile name in retesteth configs, PR #659
- Fix ECADD and ECMUL precompiles in Istanbul retesteth config, PR #660
- Add
ChainIDto Istanbul retesteth config, PR #661 - Remove retesteth configs, configs are now stored in retesteth repo. PR #666
- Reduce 50k bytes code in quadratic complexity tests to 20k bytes
Resolves issue ethereum#657,
see
GeneralStateTests/stQuadraticComplexityTest/Call[*]KbytesContract[*].json, PR #658 and PR #669 - Minor changes to the test filler format around field strictness, affected tests
BlockchainTests/InvalidBlocks/bcExpectSection/filling_wrongStorage2.json,GeneralStateTests/stExtCodeHash/*,GeneralStateTests/stRandom/(3),GeneralStateTests/stReturnDataTest/subcallReturnMoreThenExpected.json,GeneralStateTests/stStaticCall/static_call_value_inherit.json,GeneralStateTests/stTransactionTest/Opcodes_TransactionInit.json, PR #677 - Upgrade and regenerate invalid RLP blockchain tests, PR #673
- Fix test fillers affected by the CompareStates bug, affected tests
BlockchainTests/ValidBlocks/bcStateTests/randomStatetest377.json,GeneralStateTests/stCallCreateCallCodeTest/Call1024PreCalls.json,GeneralStateTests/stChangedEIP150/Call1024PreCalls.json,GeneralStateTests/stCreate2/create2checkFieldsInInitcode.json,GeneralStateTests/stDelegatecallTestHomestead/Call1024PreCalls.json,GeneralStateTests/stRandom/randomStatetest349.json,GeneralStateTests/stRandom2/randomStatetest578.json,GeneralStateTests/stRefundTest/*,GeneralStateTests/stStaticCall/*, PR #678 - Fixed blockgaslimit in CALLBlake2f_MaxRouds,
see
GeneralStateTests/stTimeConsuming/CALLBlake2f_MaxRounds.json, PR #679 - Removed
bcExpectSectioninBlockchainTestsfrom public tests, PR #684
This is the first Ethereum tests release with broader Istanbul support,
see the "Istanbul support" section for a list with relevant PRs.
This release also comes with some structural changes to the test folder layout,
the most important ones being the introduction of a new separate LegacyTests
test suite for state tests up to Constantinople, a new sub folder structure
for BlockchainTests and a new separate suite GeneralStateTests/stTimeConsuming/
for time consuming tests. For further details please have a look at the
"Test Format Changes" section.
- EIP-152: Blake2b
Fprecompile,CALLandCALLCODEtests added for the standard unit test vectors for Blake2bF, PR #619 - EIP-1344: ChainID opcode, state tests added in PR #627
- EIP-1884: Repricing for
trie-size-dependent opcodes,
SELFBALANCEandSLOADgas cost tests added in PR #627
- Regeneration of
BlockchainTests/GeneralStateTests(hivetests), PR #632 - Updated
TransactionTests/toIstanbul, PR #633 - Updated state tests with latest
lllc, PR #635 - Updated
GeneralStateTeststoIstanbul, PR #639
The following tests touching Constantinople/Petersburg behavior have been added or updated since the last release:
- Added
ConstantinopleFix(akaPetersburg) tests, PR #582 - Updated
ByzantiumToConstantinopletransition test toByzantiumToConstantinopleFix(seeBlockchainTests/TransitionTests), PR #583, PR #588 - New
SAR,SHL,SHRcombinations, PR #574
- New
LegacyTestssuite forBlockchainTests/GeneralStateTestsandGeneralStateTestsfor HFs up toConstantinople(so not:ConstantinopleFixakaPetersburg), PR #623 - New subfolder structure for
BlockchainTestswith added folders forInvalidBlocksandValidBlocks, PR #605 - New separate suite
GeneralStateTests/stTimeConsuming/for time consuming tests, PR #595 - Moved blockchain specific tests from
GeneralStateTeststoBlockchainTests, PR #590 - Old unmaintained RPC test scripts in
RPCTestshave been removed, PR #573
- Added
IstanbultoRetestethconfiguration, PR #638 - Updated
Retestethconfigurations, PR #634 - Default
Retestethgenesis configurations, PR #625 - Added
Retestethconfiguration forPantheonclient, PR #622 - Autokill
Geththreads instartGethThreads.sh, PR #613 - Added fork configurations to
Gethconfig, PR #602 - Fixed
BlockchainTestsRPCissues, PR #594
- More
RLPinvalid tests for non-optimal lengths (seeRLPTests/), PR #612 - More tests on touching precompiles along
REVERTusage (seeGeneralStateTests/stRevertTest/*Touch*.json), PR #580, PR #610 - New
sStoretest with non-zero nonce on collision (seeGeneralStateTests/stSStoreTest/InitCollisionNonZeroNonce.json), PR #578
- Corrected tests with a missing
expectsection, PR #624 - Refill of all
BlockchainTests/GeneralStateTests/, PR #621 - Removed post sections with no post conditions, PR #618
- Corrected huge expect sections in state tests
(see
stAttackTest/, 'stQuadraticComplexity/'), PR #617 - Compressed huge state data in
bcExploitTesttests, PR #616 - Removed ambiguous test in
BlockchainTests/ValidBlocks/bcMultiChainTest/ChainAtoChainB_blockorder2.json, PR #615 - Fixed
RevertPrecompiledTouchtest, PR #609 - Converted blockchain specific state tests into
BlockchainTests, PR #607 - Various test fixes, PR #603
- Fixes and updates to various state tests, PR #599
- Fixed
0xmissing intransaction->datainGeneralStateTests, PR #598 - Removed a test case from
badOpcodesstate tests (seeGeneralStateTests/stBadOpcode/), PR #592 - Fixed
gasLimitissue inGeneralStateTests, PR #590 - Consistently use
0xprefixes inRLPTests, PR #587 - Removed underspecified
lotsOfBranchestest (seeBlockchainTests/bcTotalDifficultyTest/lotsOfBranches.json), PR #579 - Changed
gasUsedto 0 ingenesisBlockHeaderfordataTxtests (seeBlockchainTests/bcValidBlockTest/dataTx.jsonanddataTx2.json), PR #577
-
#547 requires your integration to understand the network
ByzantiumToConstantinopleAt5, which is analogous to existing pseudo networks such asFrontierToHomesteadAt5andEIP158ToByzantiumAt5. -
#557 changes the format of the rlp tests, byte strings are now prefixed with "0x"
- #547 added a test for the difficulty changes. This adds the network
ByzantiumToConstantinopleAt5, which is analogous to existing networks such asFrontierToHomesteadAt5andEIP158ToByzantiumAt5.
- #548 Added a test for EXTCODEHASH called on an account created in the same transaction
- #549 added a few more tests for EXTCODEHASH and EXTCODESIZE on accounts created in the same transaction
- #550 Checks that changes to an account's nonce, balance, or storage do not change the result of calling EXTCODEHASH
- #552 Added another EXTCODEHASH test, what if it's run on accounts which have self-destructed?
- #563 Another spectacularly detailed test case of EXTCODEHASH involving recursive calls and oog-induced revert
- #566 checks that EXTCODEHASH returns a different result when the code changes
- #568 adds a test for EXTCODEHASH; what if the contract being hashed self destructed while in the middle of a delegate call?
- #569 calls EXTCODEHASH on an empty contract
- #551 tests for a Constantinople bug the fuzzer found in geth
- #544 adds an RLP test, courtesy of the mana team
- #557 changes the format of the rlp tests, byte strings are now prefixed with "0x"
- #561 changed some of the tests. There were some changes to
testethwhich made the previous tests impossible to regenerate. They were refactored but not in a way which should break any client. - #567 adds a Constantinople test Mana found when they failed to sync with Ropsten
- Added initial test cases for
EXTCODEHASHEIP-1052, see PR #484 - More
EXTCODEHASHtests, see PR #544 - New
SSTOREstate tests and blockchain tests where an external call is overwriting/colliding with newSSTOREgas calculation rules, see PR #535
- New tests to cover cases where the result of an EVM opcode is written to a specified memory range and the result is shorter than the specified range, see PR #538
- Added
.ideato.gitignore, see PR #546
Test generation docs have been consolidated and integrated in the central ReadTheDocs testing documentation.
We also updated outdated parts on this doc section (see PR #539), so it should in principle now be possible to follow the guide and end up with a working test creation setup. There might still be some glitches, please let us know or submit a PR on ethereum/tests to if you stumble over something.
Other changes:
- New list with clients using the library in README, see PR #537
EIP-145(Bitwise shifting): Tests forSAR,SHLandSHRin GeneralStateTests/stShift directory, blockchain tests analogueEIP-1014(CREATE2): Various cases covered in GeneralStateTests/stCreate2 directory, blockchain tests analogueEIP-1052(EXTCODEHASH): Tests not merged yet, open PR #484EIP-1283(SSTORE): Dedicated tests in GeneralStateTests/stSStoreTest directory also covering Ropsten consensus issue cases, blockchain tests analogue, generally refilled state tests with newSSTOREgas metering rules in PR #511EIP-1234(difficulty): NewdifficultyConstantinople.jsonfile and regenerateddifficultyRopsten.jsonfiles in the BasicTests directory, see PR #518
Be aware that the format of BlockchainTests recently changed with the introduction of a new field sealEngine (values: NoProof | Ethash), see related JSON Schema change or BlockchainTest format docs for reference.
This means that you can faster-execute NoProof based tests skipping block validation. These tests nevertheless doesn't provide reliable values for PoW-based block header fields any more (mixHash, nonce), so make sure that you don't rely on the correctness of these values for the tests to pass.