Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Eof Execution EIP-7692 (EIP-663, EIP-3540, EIP-3670, EIP-4200, EIP-4750, EIP-5450, EIP-6206, EIP-7069, EIP-7480, EIP-7620, EIP-7698, EIP-7756) #8176

Open
wants to merge 326 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
326 commits
Select commit Hold shift + click to select a range
529ea09
some refactor
Demuirgos Jul 2, 2024
e5e88e1
Formatting
benaadams Jul 2, 2024
10ce03b
Fix enablement bracketing logic
benaadams Jul 2, 2024
b628386
Clean up, fix if bracketing
benaadams Jul 2, 2024
b26fb9a
Return 1 for non-eof contract don't charge call gas
benaadams Jul 2, 2024
961609a
Only available in EOF
benaadams Jul 3, 2024
1d57470
Return statuscode should continue
benaadams Jul 3, 2024
a815169
Check stack returns
benaadams Jul 3, 2024
486e619
Handle ArrayPool arrays more safely
benaadams Jul 3, 2024
b4f1475
Fix out of bounds vector access
benaadams Jul 3, 2024
b037ba8
Added comments, and fixed bugs
Demuirgos Jul 3, 2024
2765ac0
fix unreachable code check
Demuirgos Jul 3, 2024
68cfba3
Add more validation rules for EOFCREATE and RETURNCONTRACT
Demuirgos Jul 4, 2024
bdbb912
Formatting
benaadams Jul 4, 2024
259711b
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 4, 2024
151398f
- some EofCreate/ReturnContract fixes
Demuirgos Jul 5, 2024
e684eff
some refactors to CodeInfo and EofCodeInfo
Demuirgos Jul 8, 2024
3aba7de
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 8, 2024
103f834
formatting
benaadams Jul 9, 2024
8c81d45
Merge branch 'master' into feature/evm/eof
benaadams Jul 9, 2024
e4b2ca6
Increment Nonce before snapshot
benaadams Jul 9, 2024
c6ff84f
Comment out new tests
benaadams Jul 9, 2024
1864710
Revert "Comment out new tests"
benaadams Jul 9, 2024
051c786
fix exchange failing tests in pyspec
Demuirgos Jul 9, 2024
5ad754a
* fix Create2 in Eof
Demuirgos Jul 10, 2024
d97d653
Fomratting
benaadams Jul 10, 2024
4737cdd
Fix All_tx_should_pass_before_3541
benaadams Jul 10, 2024
e676f62
Output differences
benaadams Jul 10, 2024
37fc94f
extcodehash is Keccak not Sha256
benaadams Jul 10, 2024
d690c27
Fix extcodecopy_out_of_bounds
benaadams Jul 10, 2024
4c3f815
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 10, 2024
e73a606
Merge branch 'master' into feature/evm/eof
benaadams Jul 10, 2024
0c2250d
Lookup code once
benaadams Jul 11, 2024
07beadb
Use correct static flag
benaadams Jul 11, 2024
f0667bd
Invert failure for EOF
benaadams Jul 11, 2024
3c203f3
Tidy up
benaadams Jul 11, 2024
0d99150
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 11, 2024
207a05b
fix EXTDELEGATECALL
benaadams Jul 11, 2024
adf2c78
* minor refactor
Demuirgos Jul 12, 2024
617c30e
* fix index out of range in EOFCREATE
Demuirgos Jul 12, 2024
58c2168
formatting
benaadams Jul 12, 2024
af36d4e
Fix address extension checks
benaadams Jul 13, 2024
a539c17
Fix returndatacopy
benaadams Jul 13, 2024
f3b32ed
Update tests versions
benaadams Jul 15, 2024
71891af
Include code for tx creates
benaadams Jul 15, 2024
becbade
Use bytecode
benaadams Jul 15, 2024
6b8926d
* fix RETURNCONTRACT data section handling
Demuirgos Jul 15, 2024
34cf80a
formatting
benaadams Jul 15, 2024
4104ebe
* Fix to RETURNCONTRACT targeting wrong container
Demuirgos Jul 15, 2024
9aedcbc
Merge branch 'feature/evm/eof' of https://github.com/NethermindEth/ne…
Demuirgos Jul 15, 2024
d49a80c
* Fix overflow and underflow check in RETURNCONTRACT
Demuirgos Jul 15, 2024
a81e2b6
* Aligned TxCreate with EOFCREATE
Demuirgos Jul 16, 2024
ebf4a82
* fix failing build test
Demuirgos Jul 16, 2024
241f095
* fix CREATETX deploy gas value
Demuirgos Jul 16, 2024
ead0ebc
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 16, 2024
bbf305e
* Add EofBlockChainTests
Demuirgos Jul 17, 2024
744bf19
Include more detail in logs
benaadams Jul 17, 2024
cbdbea7
Fix DATACOPY gas
benaadams Jul 17, 2024
f9aa9c5
better fix
benaadams Jul 17, 2024
0f43515
* remove unnecessary validation
Demuirgos Jul 17, 2024
91063aa
* perform datasize overflow and underflow in ReturnContract regardles…
Demuirgos Jul 17, 2024
a3b2292
Max container size is MAX_INITCODE_SIZE
benaadams Jul 17, 2024
d9ed010
* fix maxCodeSize check
Demuirgos Jul 17, 2024
ed7eddd
Merge branch 'feature/evm/eof' of https://github.com/NethermindEth/ne…
Demuirgos Jul 17, 2024
794b1dc
Use section max size
benaadams Jul 17, 2024
5f3d9c3
* Added Eip3860 check and cost
Demuirgos Jul 17, 2024
2817f1e
Merge branch 'feature/evm/eof' of https://github.com/NethermindEth/ne…
Demuirgos Jul 17, 2024
a9985d0
* remove Eip3860 check
Demuirgos Jul 17, 2024
7547caa
Tidy up
benaadams Jul 17, 2024
38f378f
Add new tests
benaadams Jul 18, 2024
e19be65
Fix initcode failure states
benaadams Jul 18, 2024
584cc43
Fix Evm tests
benaadams Jul 18, 2024
49f3b8e
Update current state for RETURNCONTRACT
benaadams Jul 18, 2024
72a8919
Merge branch 'master' into feature/evm/eof
benaadams Jul 18, 2024
ad5edf7
Mark test as incorrect
benaadams Jul 18, 2024
ece6ba8
Tidy up usings
benaadams Jul 18, 2024
dd347e0
Update tests to v1.0.7
benaadams Jul 20, 2024
5745549
Merge branch 'master' into feature/evm/eof
benaadams Jul 20, 2024
c31667b
Spelling
benaadams Jul 20, 2024
a501030
Simpler if
benaadams Jul 20, 2024
99e934d
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 22, 2024
f63a833
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Jul 26, 2024
b3aec67
Merge branch 'master' into feature/evm/eof
benaadams Aug 14, 2024
333daed
Merge branch 'master' into feature/evm/eof
benaadams Aug 15, 2024
b5d5dd6
Update tests
benaadams Aug 15, 2024
b48ed47
add missing opcodes from metadata dictionary
Demuirgos Aug 20, 2024
871be2f
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Aug 20, 2024
b65bab4
* refactor nested containers validations
Demuirgos Aug 26, 2024
95ee042
Merge remote-tracking branch 'origin/master' into feature/evm/eof
Demuirgos Aug 26, 2024
d9c16c4
* index out of range fix
Demuirgos Aug 26, 2024
e098dcb
* remove unnecessary double check
Demuirgos Aug 26, 2024
c5080f7
* fix wrong boundary check
Demuirgos Aug 26, 2024
0f115b4
* Added EOFCREATE / RETURNCONTRACT null checks
Demuirgos Aug 26, 2024
43559a9
Add new EOF tests format for Pyspec tests (#7344)
Demuirgos Sep 3, 2024
b8f160b
Merge branch 'master' into feature/evm/eof
benaadams Sep 3, 2024
6f762b8
Add EOFTest CLI Support (#7383)
benaadams Sep 3, 2024
19d35ec
Merge branch 'master' into feature/evm/eof
benaadams Sep 3, 2024
ae9201a
Merge branch 'master' into feature/evm/eof
benaadams Sep 5, 2024
56377ea
Fix stackoverflow in tests
benaadams Sep 5, 2024
39c6c7e
Fix subsection init
benaadams Sep 5, 2024
970a4f3
Update tests
benaadams Sep 9, 2024
35d724e
ssert tests
shemnon Sep 9, 2024
42f502a
Eof/valdiation fixes (#7405)
shemnon Sep 10, 2024
ba5f05e
Merge branch 'master' into feature/evm/eof
benaadams Sep 16, 2024
8ee4221
Merge branch 'master' into feature/evm/eof
benaadams Sep 16, 2024
d4980f4
Break tests up
benaadams Sep 17, 2024
b02e797
Formatting
benaadams Sep 17, 2024
4d8ac02
Clarify tests
benaadams Sep 18, 2024
1b7df28
Fix bitmaps
benaadams Sep 18, 2024
d8f954e
Merge branch 'master' into feature/evm/eof
benaadams Sep 18, 2024
3d24a08
Containers start at 1
benaadams Sep 18, 2024
42199a2
Handle push0 properly
benaadams Sep 18, 2024
150855e
Update tests
benaadams Sep 23, 2024
74925fe
Merge branch 'master' into feature/evm/eof
benaadams Sep 23, 2024
09de61c
Merge conflict
benaadams Sep 23, 2024
86645b9
Output more info for failing tests
benaadams Sep 24, 2024
74a21df
Merge branch 'master' into feature/evm/eof
benaadams Sep 26, 2024
8627577
Merge conflict
benaadams Sep 26, 2024
f8ee255
Update tests
benaadams Sep 26, 2024
370c2c3
Fix remaining EOF validation issues (#7556)
shemnon Oct 5, 2024
6cc5616
Merge branch 'master' into eof-merge
benaadams Oct 9, 2024
7940272
Merge conflicts
benaadams Oct 9, 2024
e8a39ea
Merge branch 'master' into feature/evm/eof
benaadams Oct 10, 2024
84237e6
Merge branch 'master' into feature/evm/eof
benaadams Oct 10, 2024
7076d32
Merge branch 'master' into feature/evm/eof
benaadams Oct 14, 2024
d5b7fb1
Merge conflict
benaadams Oct 15, 2024
a747bd4
Merge branch 'master' into feature/evm/eof
benaadams Oct 15, 2024
4fc4b70
Merge branch 'master' into feature/evm/eof
benaadams Oct 23, 2024
6a477c2
Merge branch 'master' into feature/evm/eof
benaadams Oct 24, 2024
d9dd09e
Adaot to EEST Osaka Activation (#7657)
shemnon Oct 26, 2024
39733d2
Merge branch 'master' into feature/evm/eof
benaadams Jan 28, 2025
c850168
Merge branch 'master' into feature/evm/eof
benaadams Jan 28, 2025
17dd735
Formatting & missing ref
benaadams Jan 28, 2025
c33fa89
Fix test
benaadams Jan 28, 2025
022f9ab
csproj
benaadams Jan 28, 2025
2b19f4c
Fix create gas
benaadams Jan 28, 2025
cff2a83
Merge branch 'master' into feature/evm/eof
benaadams Jan 28, 2025
3910982
fix build
benaadams Jan 28, 2025
50955b8
Fix Evm tests
benaadams Jan 28, 2025
e60f58b
Merge branch 'master' into feature/evm/eof
benaadams Jan 28, 2025
7415eea
Use correct stack
benaadams Jan 28, 2025
4a22a1c
Compile error
benaadams Jan 28, 2025
0e61f6e
Update Eof tests
benaadams Jan 28, 2025
50e1220
Update Eof tests
benaadams Jan 28, 2025
4dca7a4
Categorize tests better
benaadams Jan 28, 2025
d578bb3
Fix test discovery
benaadams Jan 28, 2025
b8f4e44
naming
benaadams Jan 29, 2025
920f66c
Merge branch 'master' into feature/evm/eof
benaadams Jan 29, 2025
57d0c28
Make non devnet-6 tests explicit
benaadams Jan 29, 2025
d0617c8
Add EOF tracing fields (#8127)
shemnon Jan 30, 2025
b36cdb5
Merge branch 'master' into feature/evm/eof
benaadams Jan 30, 2025
616505e
Merge branch 'master' into feature/evm/eof
benaadams Jan 31, 2025
4d3ba97
Refactor Evm
benaadams Jul 22, 2024
d316e73
Less indirection
benaadams Jan 31, 2025
a9949bf
Fixes
benaadams Jan 31, 2025
5c795bd
Clean up
benaadams Jan 31, 2025
dd36155
Tidy up
benaadams Jan 31, 2025
5cda52b
Try up
benaadams Jan 31, 2025
6d1617f
Spec changes
benaadams Jan 31, 2025
cbd8358
Reapply fixes
benaadams Jan 31, 2025
a7267a5
formating
benaadams Jan 31, 2025
665c79d
tweak
benaadams Feb 1, 2025
df9ffff
Merge conflicts
benaadams Feb 1, 2025
fac0832
Fix tracing
benaadams Feb 1, 2025
60ebed1
Fix gas
benaadams Feb 1, 2025
d986b2f
Merge branch 'master' into feature/evm/eof
benaadams Feb 1, 2025
7f6e239
Fix benchmarks
benaadams Feb 1, 2025
e563274
Add EofCall tracing
benaadams Feb 1, 2025
c1fcddf
InstructionReturnDataCopy
benaadams Feb 1, 2025
9846294
Fix static
benaadams Feb 1, 2025
3a512c7
Tidy up
benaadams Feb 1, 2025
a5dde38
Optimize
benaadams Feb 1, 2025
84c16ed
Data copy fix
benaadams Feb 1, 2025
f77e996
Fix stack underflow check
benaadams Feb 1, 2025
a0cf43a
Fix EofCall
benaadams Feb 1, 2025
00410ee
Fix EofCreate
benaadams Feb 1, 2025
f5853be
Fix gas for failed EOF validation
benaadams Feb 2, 2025
740d515
Trailing bytes
benaadams Feb 2, 2025
f7617ba
Optimize
benaadams Feb 2, 2025
fac8a61
Optimize
benaadams Feb 2, 2025
524fe8c
Optimize
benaadams Feb 2, 2025
9cef3ef
Optimize
benaadams Feb 2, 2025
6f4987a
Optimization
benaadams Feb 2, 2025
6846c13
Optimize
benaadams Feb 3, 2025
d14ea29
Optimize
benaadams Feb 3, 2025
4ee95fd
Add comment
benaadams Feb 3, 2025
20cfe69
Optimize
benaadams Feb 3, 2025
5fbc8cc
Optimize
benaadams Feb 3, 2025
ac05b5a
Optimize
benaadams Feb 3, 2025
b206a45
Merge branch 'master' into feature/evm/eof
benaadams Feb 3, 2025
575b899
Optimize
benaadams Feb 3, 2025
67153f3
Fix failing tests
benaadams Feb 3, 2025
5edcbed
Use KeccakCache
benaadams Feb 3, 2025
c4f211f
Optimize
benaadams Feb 4, 2025
05c0851
Tidy up
benaadams Feb 4, 2025
dbcc231
Add comments
benaadams Feb 4, 2025
8315efd
Add comments
benaadams Feb 4, 2025
b17f392
Comments
benaadams Feb 4, 2025
e1a46cf
Comments
benaadams Feb 4, 2025
a934244
Comments
benaadams Feb 4, 2025
f4a6372
Add comments
benaadams Feb 4, 2025
d1eacde
Comments
benaadams Feb 4, 2025
9bc1317
Add comments
benaadams Feb 4, 2025
8e7c6ad
Add comments
benaadams Feb 4, 2025
4a1ff05
Add comments
benaadams Feb 4, 2025
0011aed
Add comments
benaadams Feb 4, 2025
bd9a5b9
Add comments
benaadams Feb 4, 2025
47638b5
Tidy
benaadams Feb 4, 2025
a050765
Refactor
benaadams Feb 4, 2025
624b098
Merge branch 'master' into feature/evm/eof
benaadams Feb 4, 2025
e7aeb84
merge conflict
benaadams Feb 4, 2025
990f049
merge conflict
benaadams Feb 4, 2025
222cb44
Tidy up
benaadams Feb 5, 2025
19dd6f2
Refactor
benaadams Feb 5, 2025
dfae489
Removed unneeded parameter
benaadams Feb 5, 2025
2136999
Tidy up
benaadams Feb 5, 2025
f2dd20a
fix
benaadams Feb 5, 2025
8e6edad
fix
benaadams Feb 5, 2025
e013ad1
Merge branch 'master' into feature/evm/eof
benaadams Feb 5, 2025
5283990
Refactor
benaadams Feb 5, 2025
3b264bf
Add comments
benaadams Feb 5, 2025
e9a5b4e
Comments
benaadams Feb 5, 2025
edfa1c0
Merge branch 'master' into feature/evm/eof
benaadams Feb 5, 2025
9c277fb
Dial back test logging
benaadams Feb 5, 2025
d693d90
Tidy up
benaadams Feb 5, 2025
b24e37c
Tidy up
benaadams Feb 5, 2025
2a956fd
Dial back state test loggin
benaadams Feb 5, 2025
0910445
Improve code creation
benaadams Feb 5, 2025
b14808e
Improve
benaadams Feb 5, 2025
9cd3b37
More lazy
benaadams Feb 5, 2025
758d101
Others
benaadams Feb 5, 2025
e9fcdb1
Refatcor
benaadams Feb 5, 2025
aef435b
Tidy up
benaadams Feb 6, 2025
025506f
Refactor
benaadams Feb 6, 2025
36fb787
Tidy up
benaadams Feb 6, 2025
a0fac5a
tidy up
benaadams Feb 6, 2025
df45003
Refactor
benaadams Feb 6, 2025
97b4d08
readonly struct
benaadams Feb 6, 2025
20da4b1
Tidy up
benaadams Feb 6, 2025
6d2415b
Merge branch 'master' into feature/evm/eof
benaadams Feb 6, 2025
f987ef9
Merge branch 'master' into feature/evm/eof
benaadams Feb 6, 2025
daa6a76
Optimize
benaadams Feb 8, 2025
cd7a4ea
Merge branch 'master' into feature/evm/eof
benaadams Feb 11, 2025
e1e375c
Legacy should not be able to deploy eof
benaadams Feb 12, 2025
86f39c5
Merge branch 'master' into feature/evm/eof
benaadams Feb 14, 2025
d931e5b
merge conflict
benaadams Feb 15, 2025
2772f42
Merge branch 'master' into feature/evm/eof
benaadams Feb 15, 2025
bb96661
Merge branch 'master' into feature/evm/eof
benaadams Feb 15, 2025
6350b85
Address eof-devnet-0 valdation errors (#8213)
shemnon Feb 16, 2025
0258716
Merge branch 'master' into feature/evm/eof
benaadams Feb 17, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/Nethermind/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<PackageVersion Include="BouncyCastle.Cryptography" Version="2.5.0" />
<PackageVersion Include="Ckzg.Bindings" Version="2.0.1.1258" />
<PackageVersion Include="Colorful.Console" Version="1.2.15" />
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is redundant. We already use the same CLI parser for everything else.

<PackageVersion Include="CommunityToolkit.HighPerformance" Version="8.3.2" />
<PackageVersion Include="ConcurrentHashSet" Version="1.3.0" />
<PackageVersion Include="coverlet.collector" Version="6.0.3" />
Expand Down
1 change: 0 additions & 1 deletion src/Nethermind/Ethereum.Basic.Test/TransactionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
using System.IO;
using System.Linq;
using System.Numerics;
using System.Text.Json.Serialization;

using Ethereum.Test.Base;
using Nethermind.Core;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="coverlet.collector">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NUnit" />
<PackageReference Include="NUnit.Analyzers">
<PrivateAssets>all</PrivateAssets>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ namespace Ethereum.Blockchain.Pyspec.Test;

public class LoadPyspecTestsStrategy : ITestLoadStrategy
{
private enum TestType
{
Blockchain,
GeneralState,
Eof
}
public string ArchiveVersion { get; init; } = Constants.DEFAULT_ARCHIVE_VERSION;
public string ArchiveName { get; init; } = Constants.DEFAULT_ARCHIVE_NAME;

Expand All @@ -23,11 +29,16 @@ public IEnumerable<IEthereumTest> Load(string testsDir, string wildcard = null)
string testsDirectoryName = Path.Combine(AppContext.BaseDirectory, "PyTests", ArchiveVersion, ArchiveName.Split('.')[0]);
if (!Directory.Exists(testsDirectoryName)) // Prevent redownloading the fixtures if they already exists with this version and archive name
DownloadAndExtract(ArchiveVersion, ArchiveName, testsDirectoryName);
bool isStateTest = testsDir.Contains("state_tests", StringComparison.InvariantCultureIgnoreCase);
TestType testType = testsDir.Contains("state_tests", StringComparison.InvariantCultureIgnoreCase)
? TestType.GeneralState
: testsDir.Contains("eof_tests", StringComparison.InvariantCultureIgnoreCase)
? TestType.Eof
: TestType.Blockchain;
Comment on lines +32 to +36
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change TestType to { State, EoF, Blockchain } and base the test type detenction on a loop with condition testsDir.Contains($"{testType}_tests", StringComparison.InvariantCultureIgnoreCase)


IEnumerable<string> testDirs = !string.IsNullOrEmpty(testsDir)
? Directory.EnumerateDirectories(Path.Combine(testsDirectoryName, testsDir), "*", new EnumerationOptions { RecurseSubdirectories = true })
: Directory.EnumerateDirectories(testsDirectoryName, "*", new EnumerationOptions { RecurseSubdirectories = true });
return testDirs.SelectMany(td => LoadTestsFromDirectory(td, wildcard, isStateTest));
return testDirs.SelectMany(td => LoadTestsFromDirectory(td, wildcard, testType));
}

private void DownloadAndExtract(string archiveVersion, string archiveName, string testsDirectoryName)
Expand All @@ -44,7 +55,7 @@ private void DownloadAndExtract(string archiveVersion, string archiveName, strin
TarFile.ExtractToDirectory(gzStream, testsDirectoryName, true);
}

private IEnumerable<IEthereumTest> LoadTestsFromDirectory(string testDir, string wildcard, bool isStateTest)
private IEnumerable<IEthereumTest> LoadTestsFromDirectory(string testDir, string wildcard, TestType testType)
{
List<IEthereumTest> testsByName = new();
IEnumerable<string> testFiles = Directory.EnumerateFiles(testDir);
Expand All @@ -54,20 +65,28 @@ private IEnumerable<IEthereumTest> LoadTestsFromDirectory(string testDir, string
FileTestsSource fileTestsSource = new(testFile, wildcard);
try
{
IEnumerable<IEthereumTest> tests = isStateTest
? fileTestsSource.LoadGeneralStateTests()
: fileTestsSource.LoadBlockchainTests();
IEnumerable<IEthereumTest> tests = testType switch
{
TestType.Eof => fileTestsSource.LoadEofTests(),
TestType.GeneralState => fileTestsSource.LoadGeneralStateTests(),
_ => fileTestsSource.LoadBlockchainTests()
};
Comment on lines +68 to +73
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we do it in OO way?


foreach (IEthereumTest test in tests)
{
test.Category = testDir;
test.Category ??= testDir;
}
testsByName.AddRange(tests);
}
catch (Exception e)
{
IEthereumTest failedTest = isStateTest
? new GeneralStateTest()
: new BlockchainTest();
IEthereumTest failedTest = testType switch
{
TestType.Eof => new EofTest(),
TestType.GeneralState => new GeneralStateTest(),
_ => new BlockchainTest()
};

Comment on lines +83 to +89
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here

failedTest.Name = testDir;
failedTest.LoadFailure = $"Failed to load: {e}";
testsByName.Add(failedTest);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Ethereum.Test.Base;
using NUnit.Framework;

namespace Ethereum.Blockchain.Pyspec.Test;

[TestFixture]
[Parallelizable(ParallelScope.All)]
[Explicit("These tests are not yet updated to devnet-6")]
public class OsakaBlockChainTests : BlockchainTestBase
{
[TestCaseSource(nameof(LoadTests))]
public async Task Test(BlockchainTest test) => await RunTest(test);

private static IEnumerable<TestCaseData> LoadTests()
{
TestsSourceLoader loader = new(new LoadPyspecTestsStrategy()
{
ArchiveName = "fixtures_eip7692.tar.gz",
ArchiveVersion = "[email protected]"
}, $"fixtures/blockchain_tests/osaka");
return loader.LoadTests().OfType<BlockchainTest>().Select(t => new TestCaseData(t)
.SetName(t.Name)
.SetCategory(t.Category));
}
}
29 changes: 29 additions & 0 deletions src/Nethermind/Ethereum.Blockchain.Pyspec.Test/OsakaEofTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System.Collections.Generic;
using System.Linq;
using Ethereum.Test.Base;
using NUnit.Framework;

namespace Ethereum.Blockchain.Pyspec.Test;

[TestFixture]
[Parallelizable(ParallelScope.All)]
public class OsakaEofTests : EofTestBase
{
[TestCaseSource(nameof(LoadTests))]
public void Test(EofTest test) => RunCITest(test);

private static IEnumerable<TestCaseData> LoadTests()
{
TestsSourceLoader loader = new(new LoadPyspecTestsStrategy()
{
ArchiveName = "fixtures_eip7692.tar.gz",
ArchiveVersion = "[email protected]"
}, $"fixtures/eof_tests/osaka");
return loader.LoadTests().Cast<EofTest>().Select(t => new TestCaseData(t)
.SetName(t.Name)
.SetCategory(t.Category));
Comment on lines +25 to +27
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this part is very similar in all types with only the difference of the generic type, maybe we can abstract that to base types and or generics on type?

}
}
30 changes: 30 additions & 0 deletions src/Nethermind/Ethereum.Blockchain.Pyspec.Test/OsakaStateTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
// SPDX-FileCopyrightText: 2023 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System.Collections.Generic;
using System.Linq;
using Ethereum.Test.Base;
using FluentAssertions;
using NUnit.Framework;

namespace Ethereum.Blockchain.Pyspec.Test;

[TestFixture]
[Parallelizable(ParallelScope.All)]
public class OsakaStateTests : GeneralStateTestBase
{
[TestCaseSource(nameof(LoadTests))]
public void Test(GeneralStateTest test) => RunTest(test).Pass.Should().BeTrue();

private static IEnumerable<TestCaseData> LoadTests()
{
TestsSourceLoader loader = new(new LoadPyspecTestsStrategy()
{
ArchiveName = "fixtures_eip7692.tar.gz",
ArchiveVersion = "[email protected]"
}, $"fixtures/state_tests/osaka");
return loader.LoadTests().Cast<GeneralStateTest>().Select(t => new TestCaseData(t)
.SetName(t.Name)
.SetCategory(t.Category));
}
}
22 changes: 0 additions & 22 deletions src/Nethermind/Ethereum.Blockchain.Pyspec.Test/PragueStateTests.cs

This file was deleted.

1 change: 0 additions & 1 deletion src/Nethermind/Ethereum.Blockchain.Test/BadOpcodeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// SPDX-License-Identifier: LGPL-3.0-only

using System.Collections.Generic;
using System.Linq;
using Ethereum.Test.Base;
using NUnit.Framework;

Expand Down
27 changes: 18 additions & 9 deletions src/Nethermind/Ethereum.Blockchain.Test/EofTests.cs
Original file line number Diff line number Diff line change
@@ -1,27 +1,36 @@
// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System;
using System.Collections.Generic;
using System.Linq;
using Ethereum.Test.Base;
using NUnit.Framework;

namespace Ethereum.Blockchain.Test;

[TestFixture]
[Parallelizable(ParallelScope.All)]
[Explicit("Legacy ethereum/tests EOF tests currently are based on a Prague spec, which lacks EOF.")]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So this is temporary? Maybe add TODO

public class EOFTests : GeneralStateTestBase
{
// Uncomment when EOF tests are merged

// [TestCaseSource(nameof(LoadTests))]
// public void Test(GeneralStateTest test)
// {
// Assert.That(RunTest(test).Pass, Is.True);
// }
[TestCaseSource(nameof(LoadTests))]
public void Test(GeneralStateTest test)
{
// Legacy ethereum/tests EOF tests currently are based on a Prague spec, which lacks EOF.
// All EOF tests are now a part of EEST
//Assert.That(RunTest(test).Pass, Is.True);
}

public static IEnumerable<GeneralStateTest> LoadTests()
{
var loader = new TestsSourceLoader(new LoadEipTestsStrategy(), "stEOF");
return (IEnumerable<GeneralStateTest>)loader.LoadTests();
return [];

//var eip3540Loader = (IEnumerable<GeneralStateTest>)(new TestsSourceLoader(new LoadEofTestsStrategy(), "stEIP3540").LoadTests());
//var eip3670Loader = (IEnumerable<GeneralStateTest>)(new TestsSourceLoader(new LoadEofTestsStrategy(), "stEIP3670").LoadTests());
//var eip4200Loader = (IEnumerable<GeneralStateTest>)(new TestsSourceLoader(new LoadEofTestsStrategy(), "stEIP4200").LoadTests());
//var eip4750Loader = (IEnumerable<GeneralStateTest>)(new TestsSourceLoader(new LoadEofTestsStrategy(), "stEIP4750").LoadTests());
//var eip5450Loader = (IEnumerable<GeneralStateTest>)(new TestsSourceLoader(new LoadEofTestsStrategy(), "stEIP5450").LoadTests());
//return eip3540Loader.Concat(eip3670Loader).Concat(eip4200Loader).Concat(eip4750Loader).Concat(eip5450Loader);
}
}
3 changes: 1 addition & 2 deletions src/Nethermind/Ethereum.Test.Base/BlockchainTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@ namespace Ethereum.Test.Base;

public abstract class BlockchainTestBase
{
private static InterfaceLogger _logger = new NUnitLogger(LogLevel.Trace);
// private static ILogManager _logManager = new OneLoggerLogManager(_logger);
private static InterfaceLogger _logger = new NUnitLogger(LogLevel.Info);
private static ILogManager _logManager = LimboLogs.Instance;
private static ISealValidator Sealer { get; }
private static DifficultyCalculatorWrapper DifficultyCalculator { get; }
Expand Down
31 changes: 31 additions & 0 deletions src/Nethermind/Ethereum.Test.Base/EofTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// SPDX-FileCopyrightText: 2024 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using Ethereum.Test.Base.Interfaces;
using Nethermind.Evm.EvmObjectFormat;

namespace Ethereum.Test.Base;
public class Result
{
public string Fork { get; set; }
public bool Success { get; set; }
public string? Error { get; set; }
}

public class VectorTest
{
public byte[] Code { get; set; }
public ValidationStrategy ContainerKind { get; set; }
}

public class EofTest : IEthereumTest
{
public string Name { get; set; }
public VectorTest Vector { get; set; }
public string? Category { get; set; }
public string? LoadFailure { get; set; }
public Result Result { get; internal set; }
public string? Description { get; set; }
public string? Url { get; set; }
public string? Spec { get; set; }
}
77 changes: 77 additions & 0 deletions src/Nethermind/Ethereum.Test.Base/EofTestBase.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
// SPDX-FileCopyrightText: 2022 Demerzel Solutions Limited
// SPDX-License-Identifier: LGPL-3.0-only

using System;
using Nethermind.Evm;
using Nethermind.Evm.Tracing;
using Nethermind.Logging;
using NUnit.Framework;
using Nethermind.Evm.EvmObjectFormat;

namespace Ethereum.Test.Base
{
public abstract class EofTestBase
{
private static ILogger _logger = new(TextContextLogger.Instance);
private static ILogManager _logManager = new TestLogManager(LogLevel.Warn);

[SetUp]
public void Setup()
{
EofValidator.Logger = _logger;
}

protected static void Setup(ILogManager logManager)
{
_logManager = logManager ?? LimboLogs.Instance;
_logger = _logManager.GetClassLogger();
}

protected void RunCITest(EofTest test)
{
var result = RunTest(test, NullTxTracer.Instance);

if (result != test.Result.Success)
{
_logger.Info($"Spec: {test.Spec}");
_logger.Info(test.Description);
_logger.Info($"Url: {test.Url}");
}

Assert.That(result, Is.EqualTo(test.Result.Success));
}

protected bool RunTest(EofTest test)
{
return RunTest(test, NullTxTracer.Instance) == test.Result.Success;
}

protected bool RunTest(EofTest test, ITxTracer txTracer)
{
TestContext.Out.WriteLine($"Running {test.Name} at {DateTime.UtcNow:HH:mm:ss.ffffff}");
Assert.That(test.LoadFailure, Is.Null, "test data loading failure");

var vector = test.Vector;
var code = vector.Code;
var strategy = vector.ContainerKind;
var fork = test.Result.Fork switch
{
"Osaka" => Nethermind.Specs.Forks.Osaka.Instance,
"Prague" => Nethermind.Specs.Forks.Prague.Instance,
"Berlin" => Nethermind.Specs.Forks.Berlin.Instance,
"London" => Nethermind.Specs.Forks.London.Instance,
"Shanghai" => Nethermind.Specs.Forks.Shanghai.Instance,
"Constantinople" => Nethermind.Specs.Forks.Constantinople.Instance,
"Byzantium" => Nethermind.Specs.Forks.Byzantium.Instance,
"SpuriousDragon" => Nethermind.Specs.Forks.SpuriousDragon.Instance,
"TangerineWhistle" => Nethermind.Specs.Forks.TangerineWhistle.Instance,
"Homestead" => Nethermind.Specs.Forks.Homestead.Instance,
"Frontier" => Nethermind.Specs.Forks.Frontier.Instance,
_ => throw new NotSupportedException($"Fork {test.Result.Fork} is not supported")
};

bool result = CodeDepositHandler.IsValidWithEofRules(fork, code, 1, strategy);
return result;
}
}
}
Loading