diff --git a/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs b/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs index b77cc017fa4..8ee151d0343 100644 --- a/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs +++ b/src/Nethermind/Nethermind.Benchmark/Evm/JumpDestinationsBenchmark.cs @@ -29,7 +29,7 @@ public void Setup() [Benchmark] public bool Current() { - return _codeInfo.ValidateJump(0, false); + return _codeInfo.ValidateJump(0); } } } diff --git a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs index 22232309ee7..c34e6933f53 100644 --- a/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Core/Specs/IReleaseSpec.cs @@ -176,11 +176,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec /// bool IsEip2200Enabled { get; } - /// - /// Berlin subroutines -> https://github.com/ethereum/EIPs/issues/2315 - /// - bool IsEip2315Enabled { get; } - /// /// Berlin BLS crypto precompiles /// @@ -336,8 +331,6 @@ public interface IReleaseSpec : IEip1559Spec, IReceiptSpec public bool ShiftOpcodesEnabled => IsEip145Enabled; - public bool SubroutinesEnabled => IsEip2315Enabled; - public bool RevertOpcodeEnabled => IsEip140Enabled; public bool ExtCodeHashOpcodeEnabled => IsEip1052Enabled; diff --git a/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs b/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs index a76c67e2eb6..67490a397e1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/CodeAnalysis/CodeInfoTests.cs @@ -28,23 +28,7 @@ public void Validates_when_only_jump_dest_present(int destination, bool isValid) CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(destination, false).Should().Be(isValid); - } - - [TestCase(-1, false)] - [TestCase(0, true)] - [TestCase(1, false)] - public void Validates_when_only_begin_sub_present(int destination, bool isValid) - { - byte[] code = - { - (byte)Instruction.BEGINSUB - }; - - CodeInfo codeInfo = new(code); - - - codeInfo.ValidateJump(destination, true).Should().Be(isValid); + codeInfo.ValidateJump(destination).Should().Be(isValid); } [Test] @@ -58,23 +42,7 @@ public void Validates_when_push_with_data_like_jump_dest() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(1, true).Should().BeFalse(); - codeInfo.ValidateJump(1, false).Should().BeFalse(); - } - - [Test] - public void Validates_when_push_with_data_like_begin_sub() - { - byte[] code = - { - (byte)Instruction.PUSH1, - (byte)Instruction.BEGINSUB - }; - - CodeInfo codeInfo = new(code); - - codeInfo.ValidateJump(1, true).Should().BeFalse(); - codeInfo.ValidateJump(1, false).Should().BeFalse(); + codeInfo.ValidateJump(1).Should().BeFalse(); } [Test] @@ -89,7 +57,7 @@ public void Validate_CodeBitmap_With_Push10() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(11, false).Should().BeTrue(); + codeInfo.ValidateJump(11).Should().BeTrue(); } [Test] @@ -104,7 +72,7 @@ public void Validate_CodeBitmap_With_Push30() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(31, false).Should().BeTrue(); + codeInfo.ValidateJump(31).Should().BeTrue(); } [Test] @@ -117,7 +85,7 @@ public void Small_Jumpdest() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeTrue(); + codeInfo.ValidateJump(10).Should().BeTrue(); } [Test] @@ -130,7 +98,7 @@ public void Small_Push1() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeFalse(); + codeInfo.ValidateJump(10).Should().BeFalse(); } [Test] @@ -140,7 +108,7 @@ public void Jumpdest_Over10k() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeTrue(); + codeInfo.ValidateJump(10).Should().BeTrue(); } [Test] @@ -150,7 +118,7 @@ public void Push1_Over10k() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeFalse(); + codeInfo.ValidateJump(10).Should().BeFalse(); } [Test] @@ -164,8 +132,8 @@ public void Push1Jumpdest_Over10k() CodeInfo codeInfo = new(code); - codeInfo.ValidateJump(10, false).Should().BeFalse(); - codeInfo.ValidateJump(11, false).Should().BeFalse(); // 0x5b but not JUMPDEST but data + codeInfo.ValidateJump(10).Should().BeFalse(); + codeInfo.ValidateJump(11).Should().BeFalse(); // 0x5b but not JUMPDEST but data } [TestCase(1)] @@ -231,15 +199,15 @@ public void PushNJumpdest_Over10k(int n) for (i = 0; i < Vector256.Count * 2 + Vector128.Count; i++) { - codeInfo.ValidateJump(i, false).Should().BeTrue(); + codeInfo.ValidateJump(i).Should().BeTrue(); } for (; i < Vector256.Count * 3; i++) { - codeInfo.ValidateJump(i, false).Should().BeFalse(); + codeInfo.ValidateJump(i).Should().BeFalse(); } for (; i < code.Length; i++) { - codeInfo.ValidateJump(i, false).Should().BeFalse(); // Are 0x5b but not JUMPDEST but data + codeInfo.ValidateJump(i).Should().BeFalse(); // Are 0x5b but not JUMPDEST but data } } } diff --git a/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs b/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs index 2a9f1677613..74ea7de35c1 100644 --- a/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/InstructionTests.cs @@ -20,42 +20,5 @@ public void Return_prevrandao_name_for_prevrandao_opcode_for_post_merge() { Instruction.PREVRANDAO.GetName(true, Cancun.Instance).Should().Be("PREVRANDAO"); } - - [Test] - public void Return_tload_name_for_beginsub_opcode_for_eip1153() - { - Instruction.BEGINSUB.GetName(true, Cancun.Instance).Should().Be("TLOAD"); - } - - [Test] - public void Return_beginsub_name_for_beginsub_opcode_for_eip1153() - { - Instruction.BEGINSUB.GetName(true, Shanghai.Instance).Should().Be("BEGINSUB"); - } - - [Test] - public void Return_returnsub_name_for_returnsub_opcode_for_eip1153() - { - Instruction.RETURNSUB.GetName(true, Shanghai.Instance).Should().Be("RETURNSUB"); - } - - [Test] - public void Return_tstore_name_for_returnsub_opcode_for_eip1153() - { - Instruction.RETURNSUB.GetName(true, Cancun.Instance).Should().Be("TSTORE"); - } - - - [Test] - public void Return_mcopy_name_for_mcopy_opcode_post_eip_5656() - { - Instruction.MCOPY.GetName(true, Cancun.Instance).Should().Be("MCOPY"); - } - - [Test] - public void Return_jumpsub_name_for_mcopy_opcode_pre_eip_5656() - { - Instruction.MCOPY.GetName(true, Shanghai.Instance).Should().Be("JUMPSUB"); - } } } diff --git a/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs b/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs index 8ceccf331af..b94b33475f3 100644 --- a/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs +++ b/src/Nethermind/Nethermind.Evm/ByteCodeBuilderExtensions.cs @@ -101,10 +101,6 @@ public static Prepare SWAPx(this Prepare @this, byte i) => @this.Op(Instruction.SWAP1 + i - 1); public static Prepare DUPx(this Prepare @this, byte i) => @this.Op(Instruction.DUP1 + i - 1); - public static Prepare BEGINSUB(this Prepare @this) - => @this.Op(Instruction.BEGINSUB); - public static Prepare RETURNSUB(this Prepare @this) - => @this.Op(Instruction.RETURNSUB); public static Prepare INVALID(this Prepare @this) => @this.Op(Instruction.INVALID); #endregion @@ -116,9 +112,6 @@ public static Prepare SELFDESTRUCT(this Prepare @this, Address? address = null) public static Prepare EXTCODEHASH(this Prepare @this, Address? address = null) => @this.PushSingle(address) .Op(Instruction.EXTCODEHASH); - public static Prepare JUMPSUB(this Prepare @this, UInt256? pos = null) - => @this.PushSingle(pos) - .Op(Instruction.JUMPSUB); public static Prepare PUSHx(this Prepare @this, byte[] args) => @this.PushData(args); public static Prepare MLOAD(this Prepare @this, UInt256? pos = null) diff --git a/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs b/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs index 6d167abac09..6dec8cbd5a4 100644 --- a/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs +++ b/src/Nethermind/Nethermind.Evm/CodeAnalysis/CodeInfo.cs @@ -37,9 +37,9 @@ public CodeInfo(IPrecompile precompile) _analyzer = _emptyAnalyzer; } - public bool ValidateJump(int destination, bool isSubroutine) + public bool ValidateJump(int destination) { - return _analyzer.ValidateJump(destination, isSubroutine); + return _analyzer.ValidateJump(destination); } void IThreadPoolWorkItem.Execute() diff --git a/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs b/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs index 8e944c18101..1aa9c500511 100644 --- a/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs +++ b/src/Nethermind/Nethermind.Evm/CodeAnalysis/JumpDestinationAnalyzer.cs @@ -11,10 +11,9 @@ namespace Nethermind.Evm.CodeAnalysis { public sealed class JumpDestinationAnalyzer(ReadOnlyMemory code) { - private const int PUSH1 = 0x60; + private const int PUSH1 = (int)Instruction.PUSH1; private const int PUSHx = PUSH1 - 1; - private const int JUMPDEST = 0x5b; - private const int BEGINSUB = 0x5c; + private const int JUMPDEST = (int)Instruction.JUMPDEST; private const int BitShiftPerInt64 = 6; private static readonly long[]? _emptyJumpDestinationBitmap = new long[1]; @@ -22,23 +21,15 @@ public sealed class JumpDestinationAnalyzer(ReadOnlyMemory code) private ReadOnlyMemory MachineCode { get; } = code; - public bool ValidateJump(int destination, bool isSubroutine) + public bool ValidateJump(int destination) { ReadOnlySpan machineCode = MachineCode.Span; _jumpDestinationBitmap ??= CreateJumpDestinationBitmap(machineCode); - var result = false; // Cast to uint to change negative numbers to very int high numbers // Then do length check, this both reduces check by 1 and eliminates the bounds // check from accessing the span. - if ((uint)destination < (uint)machineCode.Length && IsJumpDestination(_jumpDestinationBitmap, destination)) - { - // Store byte to int, as less expensive operations at word size - int codeByte = machineCode[destination]; - result = isSubroutine ? codeByte == BEGINSUB : codeByte == JUMPDEST; - } - - return result; + return (uint)destination < (uint)machineCode.Length && IsJumpDestination(_jumpDestinationBitmap, destination); } /// @@ -90,12 +81,8 @@ private static long[] CreateJumpDestinationBitmap(ReadOnlySpan code) { // Check the bytes for any JUMPDESTs. Vector128 dest = Sse2.CompareEqual(data, Vector128.Create((sbyte)JUMPDEST)); - // Check the bytes for any BEGINSUBs. - Vector128 sub = Sse2.CompareEqual(data, Vector128.Create((sbyte)BEGINSUB)); - // Merge the two results. - Vector128 combined = Sse2.Or(dest, sub); // Extract the checks as a set of int flags. - int flags = Sse2.MoveMask(combined); + int flags = Sse2.MoveMask(dest); // Shift up flags by depending which side of long we are on, and merge to current set. currentFlags |= (long)flags << (programCounter & (32 + 16)); // Forward programCounter by Vector128 stride. @@ -110,7 +97,7 @@ private static long[] CreateJumpDestinationBitmap(ReadOnlySpan code) // access here. int op = Unsafe.Add(ref MemoryMarshal.GetReference(code), programCounter); - if ((uint)op - JUMPDEST <= BEGINSUB - JUMPDEST) + if (op == JUMPDEST) { // Accumulate Jump Destinations to register, shift will wrap and single bit // so can shift by the whole programCounter. diff --git a/src/Nethermind/Nethermind.Evm/Instruction.cs b/src/Nethermind/Nethermind.Evm/Instruction.cs index ab43e5c3888..96fcf3f3595 100644 --- a/src/Nethermind/Nethermind.Evm/Instruction.cs +++ b/src/Nethermind/Nethermind.Evm/Instruction.cs @@ -81,9 +81,6 @@ public enum Instruction : byte MSIZE = 0x59, GAS = 0x5a, JUMPDEST = 0x5b, - BEGINSUB = 0x5c, - RETURNSUB = 0x5d, - JUMPSUB = 0x5e, MCOPY = 0x5e, PUSH0 = 0x5f, // EIP-3855 @@ -182,9 +179,6 @@ public static class InstructionExtensions instruction switch { Instruction.PREVRANDAO when !isPostMerge => "DIFFICULTY", - Instruction.TLOAD or Instruction.BEGINSUB => spec?.TransientStorageEnabled == true ? "TLOAD" : "BEGINSUB", - Instruction.TSTORE or Instruction.RETURNSUB => spec?.TransientStorageEnabled == true ? "TSTORE" : "RETURNSUB", - Instruction.JUMPSUB or Instruction.MCOPY => spec?.IsEip5656Enabled == true ? "MCOPY" : "JUMPSUB", _ => FastEnum.IsDefined(instruction) ? FastEnum.GetName(instruction) : null }; } diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index a058b6a4ac3..24cba4cee90 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -1993,41 +1993,30 @@ private CallResult ExecuteCode value = _state.GetTransientState(in storageCell); - stack.PushBytes(value); + if (!stack.PopUInt256(out result)) goto StackUnderflow; + storageCell = new(env.ExecutingAccount, result); - if (typeof(TTracingStorage) == typeof(IsTracing)) - { - if (gasAvailable < 0) goto OutOfGas; - _txTracer.LoadOperationTransientStorage(storageCell.Address, result, value); - } + ReadOnlySpan value = _state.GetTransientState(in storageCell); + stack.PushBytes(value); - break; - } - else + if (typeof(TTracingStorage) == typeof(IsTracing)) { - if (!spec.SubroutinesEnabled) goto InvalidInstruction; - - // why do we even need the cost of it? - gasAvailable -= GasCostOf.Base; - - goto InvalidSubroutineEntry; + if (gasAvailable < 0) goto OutOfGas; + _txTracer.LoadOperationTransientStorage(storageCell.Address, result, value); } + break; } - case Instruction.RETURNSUB | Instruction.TSTORE: + case Instruction.TSTORE: { - if (spec.TransientStorageEnabled) + if (!spec.TransientStorageEnabled) goto InvalidInstruction; { Metrics.TstoreOpcode++; @@ -2050,24 +2039,10 @@ private CallResult ExecuteCode int.MaxValue) { @@ -2827,7 +2777,7 @@ private static bool Jump(in UInt256 jumpDest, ref int programCounter, in Executi } int jumpDestInt = (int)jumpDest; - if (!env.CodeInfo.ValidateJump(jumpDestInt, isSubroutine)) + if (!env.CodeInfo.ValidateJump(jumpDestInt)) { // https://github.com/NethermindEth/nethermind/issues/140 // TODO: add a test, validating inside the condition was not covered by existing tests and fails on 61363 Ropsten diff --git a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs index cd9ef67b946..734b84f298f 100644 --- a/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/ChainSpecStyle/ChainSpecBasedSpecProviderTests.cs @@ -771,7 +771,7 @@ void TestTransitions(ForkActivation activation, Action changes) TestTransitions((ForkActivation)20280L, r => { r.IsEip2028Enabled = true; }); TestTransitions((ForkActivation)22000L, r => { r.IsEip2200Enabled = true; }); TestTransitions((ForkActivation)23000L, r => { r.IsEip1283Enabled = r.IsEip1344Enabled = true; }); - TestTransitions((ForkActivation)24000L, r => { r.IsEip2315Enabled = r.ValidateChainId = r.ValidateReceipts = true; }); + TestTransitions((ForkActivation)24000L, r => { r.ValidateChainId = r.ValidateReceipts = true; }); TestTransitions((ForkActivation)29290L, r => { r.IsEip2929Enabled = r.IsEip2565Enabled = true; }); TestTransitions((ForkActivation)29300L, r => { r.IsEip2930Enabled = true; }); TestTransitions((ForkActivation)31980L, r => { r.IsEip3198Enabled = true; }); diff --git a/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs index 29af41d1b07..31414ad9405 100644 --- a/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/GoerliSpecProviderTests.cs @@ -16,7 +16,6 @@ public class GoerliSpecProviderTests [TestCase(4_460_644, true)] public void Berlin_eips(long blockNumber, bool isEnabled) { - _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2315Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2537Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2565Enabled.Should().Be(isEnabled); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2929Enabled.Should().Be(isEnabled); diff --git a/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs b/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs index 9809cdb69fa..20b6fbb1f51 100644 --- a/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs +++ b/src/Nethermind/Nethermind.Specs.Test/MainnetSpecProviderTests.cs @@ -17,7 +17,6 @@ public class MainnetSpecProviderTests [TestCase(12_244_000, true)] public void Berlin_eips(long blockNumber, bool isEnabled) { - _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2315Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2537Enabled.Should().Be(false); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2565Enabled.Should().Be(isEnabled); _specProvider.GetSpec((ForkActivation)blockNumber).IsEip2929Enabled.Should().Be(isEnabled); diff --git a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs index 13de7306664..f6d4bacf1a6 100644 --- a/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs.Test/OverridableReleaseSpec.cs @@ -97,9 +97,7 @@ public OverridableReleaseSpec(IReleaseSpec spec) public bool IsEip2200Enabled => _spec.IsEip2200Enabled; - public bool IsEip2315Enabled => _spec.IsEip2315Enabled; - - public bool IsEip2537Enabled => _spec.IsEip2315Enabled; + public bool IsEip2537Enabled => _spec.IsEip2537Enabled; public bool IsEip2565Enabled => _spec.IsEip2565Enabled; diff --git a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs index f2b2a6fbce8..860e48b8814 100644 --- a/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs +++ b/src/Nethermind/Nethermind.Specs/ChainSpecStyle/ChainSpecBasedSpecProvider.cs @@ -194,7 +194,6 @@ private static ReleaseSpec CreateReleaseSpec(ChainSpec chainSpec, long releaseSt releaseSpec.IsEip2200Enabled = (chainSpec.Parameters.Eip2200Transition ?? long.MaxValue) <= releaseStartBlock || (chainSpec.Parameters.Eip1706Transition ?? long.MaxValue) <= releaseStartBlock && releaseSpec.IsEip1283Enabled; releaseSpec.IsEip1559Enabled = (chainSpec.Parameters.Eip1559Transition ?? long.MaxValue) <= releaseStartBlock; releaseSpec.Eip1559TransitionBlock = chainSpec.Parameters.Eip1559Transition ?? long.MaxValue; - releaseSpec.IsEip2315Enabled = (chainSpec.Parameters.Eip2315Transition ?? long.MaxValue) <= releaseStartBlock; releaseSpec.IsEip2537Enabled = (chainSpec.Parameters.Eip2537Transition ?? long.MaxValue) <= releaseStartBlock || (chainSpec.Parameters.Eip2537TransitionTimestamp ?? ulong.MaxValue) <= releaseStartTimestamp; releaseSpec.IsEip2565Enabled = (chainSpec.Parameters.Eip2565Transition ?? long.MaxValue) <= releaseStartBlock; diff --git a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs index fb2cbffea91..c3615a05a13 100644 --- a/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/ReleaseSpec.cs @@ -47,7 +47,6 @@ public class ReleaseSpec : IReleaseSpec public bool IsEip1108Enabled { get; set; } public bool IsEip1884Enabled { get; set; } public bool IsEip2200Enabled { get; set; } - public bool IsEip2315Enabled { get; set; } public bool IsEip2537Enabled { get; set; } public bool IsEip2565Enabled { get; set; } public bool IsEip2929Enabled { get; set; } diff --git a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs index 9226f4af9db..cc9f87ffa7a 100644 --- a/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs +++ b/src/Nethermind/Nethermind.Specs/SystemTransactionReleaseSpec.cs @@ -93,9 +93,7 @@ public SystemTransactionReleaseSpec(IReleaseSpec spec) public bool IsEip2200Enabled => _spec.IsEip2200Enabled; - public bool IsEip2315Enabled => _spec.IsEip2315Enabled; - - public bool IsEip2537Enabled => _spec.IsEip2315Enabled; + public bool IsEip2537Enabled => _spec.IsEip2537Enabled; public bool IsEip2565Enabled => _spec.IsEip2565Enabled;