From 4c4c5b38944da778b1e000cfc7d460a4d41fc868 Mon Sep 17 00:00:00 2001 From: smartprogrammer Date: Wed, 16 Aug 2023 13:02:07 +0300 Subject: [PATCH 1/5] 2) The --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 31c5abc35e5..2735edd2941 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -342,7 +342,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl currentState = _stateStack.Pop(); currentState.IsContinuation = true; currentState.GasAvailable += previousState.GasAvailable; - bool previousStateSucceeded = true; + bool previousStateSucceeded = true; if (!callResult.ShouldRevert) { @@ -2365,7 +2365,8 @@ private bool InstructionSelfDestruct(EvmState vmState, ref EvmStack Date: Wed, 16 Aug 2023 13:23:49 +0300 Subject: [PATCH 2/5] Fix 2) The --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 2735edd2941..f18a181aa39 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2365,8 +2365,10 @@ private bool InstructionSelfDestruct(EvmState vmState, ref EvmStack Date: Wed, 16 Aug 2023 13:28:57 +0300 Subject: [PATCH 3/5] clarification comment --- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index f18a181aa39..503072bd415 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -2340,7 +2340,8 @@ private bool InstructionSelfDestruct(EvmState vmState, ref EvmStack(EvmState vmState, ref EvmStack Date: Wed, 16 Aug 2023 16:09:56 +0300 Subject: [PATCH 4/5] add tests --- .../Nethermind.Evm.Test/Eip6780Tests.cs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs index f658845557b..e36bd888d8a 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs @@ -82,6 +82,40 @@ public void self_destruct_not_in_same_transaction(ulong timestamp, bool onlyOnSa else AssertDestroyed(); } + + [TestCase(0ul, false)] + [TestCase(MainnetSpecProvider.CancunBlockTimestamp, true)] + public void self_destruct_not_in_same_transaction_should_not_burn(ulong timestamp, bool onlyOnSameTransaction) + { + _selfDestructCode = Prepare.EvmCode + .SELFDESTRUCT(_contractAddress) + .Done; + _initCode = Prepare.EvmCode + .ForInitOf(_selfDestructCode) + .Done; + byte[] contractCall = Prepare.EvmCode + .Call(_contractAddress, 100000) + .Op(Instruction.STOP).Done; + Transaction initTx = Build.A.Transaction.WithCode(_initCode).WithValue(99.Ether()).WithGasLimit(_gasLimit).SignedAndResolved(_ecdsa, TestItem.PrivateKeyA).TestObject; + Transaction tx1 = Build.A.Transaction.WithCode(contractCall).WithGasLimit(_gasLimit).WithNonce(1).SignedAndResolved(_ecdsa, TestItem.PrivateKeyA).TestObject; + Block block = Build.A.Block.WithNumber(BlockNumber) + .WithTimestamp(timestamp) + .WithTransactions(initTx, tx1).WithGasLimit(2 * _gasLimit).TestObject; + + _processor.Execute(initTx, block.Header, NullTxTracer.Instance); + UInt256 contractBalanceAfterInit = TestState.GetBalance(_contractAddress); + _processor.Execute(tx1, block.Header, NullTxTracer.Instance); + + contractBalanceAfterInit.Should().Be(99.Ether()); + if (onlyOnSameTransaction) + TestState.GetBalance(_contractAddress).Should().Be(99.Ether()); // not burnt + else + TestState.GetBalance(_contractAddress).Should().Be(0); // burnt + if (onlyOnSameTransaction) + AssertNotDestroyed(); + else + AssertDestroyed(); + } [Test] public void self_destruct_in_same_transaction() From 9ca8f7ec77a83439b602a67b95b7718cca8424f6 Mon Sep 17 00:00:00 2001 From: smartprogrammer Date: Wed, 16 Aug 2023 16:28:19 +0300 Subject: [PATCH 5/5] format --- src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs | 4 ++-- src/Nethermind/Nethermind.Evm/VirtualMachine.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs b/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs index e36bd888d8a..95fa9e54b16 100644 --- a/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs +++ b/src/Nethermind/Nethermind.Evm.Test/Eip6780Tests.cs @@ -82,12 +82,12 @@ public void self_destruct_not_in_same_transaction(ulong timestamp, bool onlyOnSa else AssertDestroyed(); } - + [TestCase(0ul, false)] [TestCase(MainnetSpecProvider.CancunBlockTimestamp, true)] public void self_destruct_not_in_same_transaction_should_not_burn(ulong timestamp, bool onlyOnSameTransaction) { - _selfDestructCode = Prepare.EvmCode + _selfDestructCode = Prepare.EvmCode .SELFDESTRUCT(_contractAddress) .Done; _initCode = Prepare.EvmCode diff --git a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs index 503072bd415..b0236578ddc 100644 --- a/src/Nethermind/Nethermind.Evm/VirtualMachine.cs +++ b/src/Nethermind/Nethermind.Evm/VirtualMachine.cs @@ -342,7 +342,7 @@ public TransactionSubstate Run(EvmState state, IWorldState worl currentState = _stateStack.Pop(); currentState.IsContinuation = true; currentState.GasAvailable += previousState.GasAvailable; - bool previousStateSucceeded = true; + bool previousStateSucceeded = true; if (!callResult.ShouldRevert) {