Skip to content

Commit 6dba631

Browse files
authored
ToyExecutionEnvironment can run transactions by starting a besu node (#1981)
* ToyExecutionEnvironment can run transactions by starting a besu node * Update build script * Enable trace service * Generate trace file * fix build * Fix Genesis Config and refactor * Fix build
1 parent 5d02363 commit 6dba631

File tree

16 files changed

+509
-39
lines changed

16 files changed

+509
-39
lines changed

arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TraceRequestParams.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ public record TraceRequestParams(
2424
long startBlockNumber, long endBlockNumber, String expectedTracesEngineVersion) {
2525

2626
public void validate() {
27-
if (!expectedTracesEngineVersion.equals(getTracerRuntime())) {
27+
if (!expectedTracesEngineVersion.equals("test")
28+
&& !expectedTracesEngineVersion.equals(getTracerRuntime())) {
2829
throw new InvalidParameterException(
2930
"INVALID_TRACES_VERSION: Runtime version is %s, requesting version %s"
3031
.formatted(getTracerRuntime(), expectedTracesEngineVersion));

arithmetization/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TracesEndpointCliOptions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import net.consensys.linea.plugins.LineaCliOptions;
2020
import picocli.CommandLine;
2121

22-
class TracesEndpointCliOptions implements LineaCliOptions {
22+
public class TracesEndpointCliOptions implements LineaCliOptions {
2323

2424
static final String CONFIG_KEY = "traces-endpoint-config";
2525

@@ -44,7 +44,7 @@ private TracesEndpointCliOptions() {}
4444
*
4545
* @return the Linea cli options
4646
*/
47-
static TracesEndpointCliOptions create() {
47+
public static TracesEndpointCliOptions create() {
4848
return new TracesEndpointCliOptions();
4949
}
5050

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/*
2+
* Copyright Consensys Software Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
5+
* the License. You may obtain a copy of the License at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
10+
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
11+
* specific language governing permissions and limitations under the License.
12+
*
13+
* SPDX-License-Identifier: Apache-2.0
14+
*/
15+
16+
package net.consensys.linea.zktracer;
17+
18+
import java.util.List;
19+
20+
import net.consensys.linea.testing.BytecodeCompiler;
21+
import net.consensys.linea.testing.ToyAccount;
22+
import net.consensys.linea.testing.ToyExecutionEnvironmentV2;
23+
import net.consensys.linea.testing.ToyTransaction;
24+
import net.consensys.linea.zktracer.opcode.OpCode;
25+
import org.hyperledger.besu.crypto.KeyPair;
26+
import org.hyperledger.besu.crypto.SECP256K1;
27+
import org.hyperledger.besu.datatypes.Address;
28+
import org.hyperledger.besu.datatypes.Hash;
29+
import org.hyperledger.besu.datatypes.Wei;
30+
import org.hyperledger.besu.ethereum.core.Transaction;
31+
import org.junit.jupiter.api.Test;
32+
33+
public class ExampleBesuTest {
34+
@Test
35+
void test() {
36+
KeyPair keyPair = new SECP256K1().generateKeyPair();
37+
Address senderAddress = Address.extract(Hash.hash(keyPair.getPublicKey().getEncodedBytes()));
38+
39+
ToyAccount senderAccount =
40+
ToyAccount.builder().balance(Wei.fromEth(1)).nonce(5).address(senderAddress).build();
41+
42+
ToyAccount receiverAccount =
43+
ToyAccount.builder()
44+
.balance(Wei.ONE)
45+
.nonce(6)
46+
.address(Address.fromHexString("0x111111"))
47+
.code(
48+
BytecodeCompiler.newProgram()
49+
.push(32, 0xbeef)
50+
.push(32, 0xdead)
51+
.op(OpCode.ADD)
52+
.compile())
53+
.build();
54+
55+
Transaction tx =
56+
ToyTransaction.builder().sender(senderAccount).to(receiverAccount).keyPair(keyPair).build();
57+
58+
ToyExecutionEnvironmentV2.builder()
59+
.accounts(List.of(senderAccount, receiverAccount))
60+
.transaction(tx)
61+
.runWithBesuNode(true)
62+
.build()
63+
.run();
64+
}
65+
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
releaseVersion=beta-v2.1-rc16
2-
besuVersion=25.4.1-linea1
2+
besuVersion=25.4.1-linea2
33
besuArtifactGroup=org.hyperledger.besu
44
distributionIdentifier=linea-tracer
55
distributionBaseUrl=https://github.com/Consensys/linea-besu-upstream/releases/download/

gradle/dependency-management.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ repositories {
2626
url 'https://artifacts.consensys.net/public/maven/maven/'
2727
content { includeGroupByRegex('tech\\.pegasys(\\..*)?') }
2828
}
29+
30+
maven {
31+
url 'https://splunk.jfrog.io/splunk/ext-releases-local'
32+
content { includeGroupByRegex('com\\.splunk\\..*') }
33+
}
34+
2935
mavenCentral()
3036
mavenLocal()
3137
}

gradle/dist.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,4 @@ tasks.register('distPlugin', Zip) {
124124

125125
static def dependencyNamePattern() {
126126
/(.*)(\-.*?)\.jar/
127-
}
127+
}

gradle/tests.gradle

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,25 @@ jacocoTestReport {
127127
}
128128

129129
tasks.test.configure {
130-
dependsOn(buildZkevmBin)
130+
dependsOn(buildZkevmBin, "copyPlugins")
131+
132+
delete("${project.getLayout().getBuildDirectory().get()}/besu/traces")
133+
mkdir("${project.getLayout().getBuildDirectory().get()}/besu/traces")
134+
mkdir("${project.getLayout().getBuildDirectory().get()}/besu/plugins")
135+
System.setProperty("besu.plugins.dir",
136+
System.getenv().getOrDefault("besu.plugins.dir",
137+
"${project.getLayout().getBuildDirectory().get().toString()}/besu/plugins/"
138+
)
139+
)
140+
System.setProperty("besu.traces.dir",
141+
System.getenv().getOrDefault("besu.traces.dir",
142+
"${project.getLayout().getBuildDirectory().get().toString()}/besu/traces/"
143+
)
144+
)
145+
146+
systemProperty("besu.traces.dir", System.getProperty("besu.traces.dir"))
147+
systemProperty("besu.plugins.dir", System.getProperty("besu.plugins.dir"))
148+
131149

132150
systemProperty("junit.jupiter.execution.parallel.enabled", true)
133151
systemProperty("junit.jupiter.execution.parallel.mode.default", "concurrent")
@@ -145,6 +163,12 @@ tasks.test.configure {
145163
finalizedBy(jacocoTestReport)
146164
}
147165

166+
tasks.register("copyPlugins", Copy) {
167+
dependsOn(project(":plugins").tasks.findByPath("jar"))
168+
from project(":plugins").tasks.findByPath("jar").outputs.files.collect()
169+
into "${System.getProperty("besu.plugins.dir")}"
170+
}
171+
148172
tasks.register("fastReplayTests", Test) {
149173
dependsOn(buildZkevmBin)
150174
//

plugins/src/main/java/net/consensys/linea/plugins/rpc/tracegeneration/TracesEndpointServicePlugin.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.nio.file.Files;
2020
import java.nio.file.Path;
2121
import java.nio.file.Paths;
22+
import java.util.HashMap;
2223
import java.util.Map;
2324
import java.util.Optional;
2425

@@ -48,9 +49,10 @@ public class TracesEndpointServicePlugin extends AbstractLineaPrivateOptionsPlug
4849

4950
@Override
5051
public Map<String, LineaOptionsPluginConfiguration> getLineaPluginConfigMap() {
52+
final var configMap = new HashMap<>(super.getLineaPluginConfigMap());
5153
final TracesEndpointCliOptions tracesEndpointCliOptions = TracesEndpointCliOptions.create();
52-
53-
return Map.of(TracesEndpointCliOptions.CONFIG_KEY, tracesEndpointCliOptions.asPluginConfig());
54+
configMap.put(TracesEndpointCliOptions.CONFIG_KEY, tracesEndpointCliOptions.asPluginConfig());
55+
return configMap;
5456
}
5557

5658
/**

reference-tests/src/test/java/net/consensys/linea/CorsetBlockProcessor.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,11 @@
3030
import org.hyperledger.besu.ethereum.BlockProcessingResult;
3131
import org.hyperledger.besu.ethereum.ProtocolContext;
3232
import org.hyperledger.besu.ethereum.chain.Blockchain;
33-
import org.hyperledger.besu.ethereum.core.BlockBody;
33+
import org.hyperledger.besu.ethereum.core.Block;
3434
import org.hyperledger.besu.ethereum.core.BlockHeader;
3535
import org.hyperledger.besu.ethereum.core.MutableWorldState;
3636
import org.hyperledger.besu.ethereum.core.Transaction;
3737
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
38-
import org.hyperledger.besu.ethereum.core.Withdrawal;
3938
import org.hyperledger.besu.ethereum.mainnet.*;
4039
import org.hyperledger.besu.ethereum.privacy.storage.PrivateMetadataUpdater;
4140
import org.hyperledger.besu.ethereum.processing.TransactionProcessingResult;
@@ -74,14 +73,18 @@ public BlockProcessingResult processBlock(
7473
final ProtocolContext protocolContext,
7574
final Blockchain blockchain,
7675
final MutableWorldState worldState,
77-
final BlockHeader blockHeader,
78-
final List<Transaction> transactions,
79-
final List<BlockHeader> ommers,
80-
final Optional<List<Withdrawal>> maybeWithdrawals,
81-
final PrivateMetadataUpdater privateMetadataUpdater) {
76+
final Block block,
77+
final Optional<PrivateMetadataUpdater> privateMetadataUpdater,
78+
final PreprocessingFunction preprocessingBlockFunction) {
79+
80+
var blockHeader = block.getHeader();
81+
var blockBody = block.getBody();
82+
var ommers = blockBody.getOmmers();
83+
var transactions = blockBody.getTransactions();
84+
var maybeWithdrawals = blockBody.getWithdrawals();
85+
8286
final List<TransactionReceipt> receipts = new ArrayList<>();
8387
long currentGasUsed = 0;
84-
BlockBody blockBody = new BlockBody(transactions, new ArrayList<>());
8588

8689
final ProtocolSpec protocolSpec = protocolSchedule.getByBlockHeader(blockHeader);
8790

testing/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ dependencies {
1818
implementation "${besuArtifactGroup}:besu-datatypes"
1919
implementation "${besuArtifactGroup}:evm"
2020
implementation "${besuArtifactGroup}:plugin-api"
21+
implementation "${besuArtifactGroup}.internal:api"
2122
implementation "${besuArtifactGroup}.internal:clique"
2223
implementation "${besuArtifactGroup}.internal:common"
2324
implementation "${besuArtifactGroup}.internal:config"
@@ -28,6 +29,9 @@ dependencies {
2829
implementation "${besuArtifactGroup}.internal:services"
2930
implementation "${besuArtifactGroup}.internal:testutil"
3031
implementation "${besuArtifactGroup}.internal:algorithms"
32+
implementation "${besuArtifactGroup}.internal:dsl"
33+
implementation "org.awaitility:awaitility"
34+
testImplementation group: "${besuArtifactGroup}.internal", name: "core", classifier: "test-support"
3135

3236
implementation 'com.google.code.gson:gson'
3337
implementation 'com.google.guava:guava'

0 commit comments

Comments
 (0)