From b206f8adde163da0db857e414f50b7f02cbcd240 Mon Sep 17 00:00:00 2001 From: DavePearce Date: Sat, 17 Aug 2024 20:04:28 +0100 Subject: [PATCH] fix: Use correct CHAINID in EVM This updates the `ToyExecutionEnvironment` to use the correct CHAINID when constructing the EVM. Previously, this was not done correctly and meant that the `CHAINID` bytecode was returning an invalid value, which in turn mean that storage addresses were being computed incorrectly (i.e. because they incorporated the CHAINID into the hash). --- .../consensys/linea/testing/ToyExecutionEnvironment.java | 6 ++++-- .../linea/testing/ToyExecutionEnvironmentV2.java | 9 ++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironment.java b/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironment.java index 558047aa9e..a536ad081c 100644 --- a/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironment.java +++ b/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironment.java @@ -84,7 +84,7 @@ public class ToyExecutionEnvironment { Hash.fromHexStringLenient("0xdeadbeef123123666dead666dead666"); private final ToyWorld toyWorld; - private final EVM evm = MainnetEVMs.london(EvmConfiguration.DEFAULT); + @Builder.Default private BigInteger chainId = CHAIN_ID; @Singular private final List transactions; @@ -217,7 +217,9 @@ private void execute() { } private MainnetTransactionProcessor getMainnetTransactionProcessor() { - + // Construct EVM for executing transactions. + final EVM evm = MainnetEVMs.london(this.chainId, EvmConfiguration.DEFAULT); + // PrecompileContractRegistry precompileContractRegistry = new PrecompileContractRegistry(); MainnetPrecompiledContracts.populateForIstanbul( diff --git a/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironmentV2.java b/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironmentV2.java index e2e767a0c9..7307d2cc50 100644 --- a/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironmentV2.java +++ b/testing/src/main/java/net/consensys/linea/testing/ToyExecutionEnvironmentV2.java @@ -63,7 +63,6 @@ public class ToyExecutionEnvironmentV2 { private static final long DEFAULT_TIME_STAMP = 1347310; private static final Hash DEFAULT_HASH = Hash.fromHexStringLenient("0xdeadbeef123123666dead666dead666"); - private static final EVM evm = MainnetEVMs.london(EvmConfiguration.DEFAULT); private static final FeeMarket feeMarket = FeeMarket.london(-1); @Builder.Default private BigInteger chainId = CHAIN_ID; @@ -71,11 +70,12 @@ public class ToyExecutionEnvironmentV2 { @Singular private final List transactions; public void run() { + final EVM evm = MainnetEVMs.london(this.chainId, EvmConfiguration.DEFAULT); GeneralStateReferenceTestTools.executeTest( - this.buildGeneralStateTestCaseSpec(), getMainnetTransactionProcessor(), feeMarket); + this.buildGeneralStateTestCaseSpec(evm), getMainnetTransactionProcessor(evm), feeMarket); } - public GeneralStateTestCaseEipSpec buildGeneralStateTestCaseSpec() { + public GeneralStateTestCaseEipSpec buildGeneralStateTestCaseSpec(EVM evm) { Map accountMockMap = toyWorld.getAddressAccountMap().entrySet().stream() .collect( @@ -113,8 +113,7 @@ public GeneralStateTestCaseEipSpec buildGeneralStateTestCaseSpec() { /*expectException*/ null); } - private MainnetTransactionProcessor getMainnetTransactionProcessor() { - + private MainnetTransactionProcessor getMainnetTransactionProcessor(EVM evm) { PrecompileContractRegistry precompileContractRegistry = new PrecompileContractRegistry(); MainnetPrecompiledContracts.populateForIstanbul(