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;