Skip to content

Commit 81d7743

Browse files
authored
feat(rpc-params): rename RPC endpoints and modify their params representations (#770)
Resolves: #769 Signed-off-by: Tsvetan Dimitrov <[email protected]>
1 parent 6b17704 commit 81d7743

File tree

12 files changed

+105
-496
lines changed

12 files changed

+105
-496
lines changed

tracer/arithmetization/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ dependencies {
5858
implementation 'io.tmio:tuweni-bytes'
5959
implementation 'io.tmio:tuweni-units'
6060
implementation 'io.tmio:tuweni-toml'
61-
6261
implementation 'org.bouncycastle:bcprov-jdk18on'
6362
implementation 'org.hibernate.validator:hibernate-validator'
6463

tracer/arithmetization/src/main/java/net/consensys/linea/rpc/counters/CountersEndpointServicePlugin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
*
2727
* <p>The CountersEndpointServicePlugin registers an RPC endpoint named
2828
* 'getTracesCountersByBlockNumberV0' under the 'rollup' namespace. When this endpoint is called,
29-
* returns trace counters based on the provided request parameters. See {@link GenerateCountersV0}
29+
* returns trace counters based on the provided request parameters. See {@link GenerateCountersV2}
3030
*/
3131
@AutoService(BesuPlugin.class)
3232
public class CountersEndpointServicePlugin extends AbstractLineaSharedOptionsPlugin {
@@ -54,7 +54,7 @@ public void register(final BesuContext context) {
5454
@Override
5555
public void beforeExternalServices() {
5656
super.beforeExternalServices();
57-
GenerateCountersV0 method = new GenerateCountersV0(besuContext);
57+
GenerateCountersV2 method = new GenerateCountersV2(besuContext);
5858
createAndRegister(method, rpcEndpointService);
5959
}
6060

@@ -65,7 +65,7 @@ public void beforeExternalServices() {
6565
* @param rpcEndpointService the RpcEndpointService to be registered.
6666
*/
6767
private void createAndRegister(
68-
final GenerateCountersV0 method, final RpcEndpointService rpcEndpointService) {
68+
final GenerateCountersV2 method, final RpcEndpointService rpcEndpointService) {
6969
rpcEndpointService.registerRPCEndpoint(
7070
method.getNamespace(), method.getName(), method::execute);
7171
}

tracer/arithmetization/src/main/java/net/consensys/linea/rpc/counters/CountersRequestParams.java

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,34 +20,14 @@
2020
import net.consensys.linea.zktracer.ZkTracer;
2121

2222
/** Holds needed parameters for sending an execution trace generation request. */
23-
@SuppressWarnings("unused")
24-
public record CountersRequestParams(long blockNumber, String runtimeVersion) {
25-
private static final int EXPECTED_PARAMS_SIZE = 2;
26-
27-
/**
28-
* Parses a list of params to a {@link CountersRequestParams} object.
29-
*
30-
* @param params an array of parameters.
31-
* @return a parsed {@link CountersRequestParams} object..
32-
*/
33-
public static CountersRequestParams createTraceParams(final Object[] params) {
34-
// validate params size
35-
if (params.length != EXPECTED_PARAMS_SIZE) {
36-
throw new InvalidParameterException(
37-
String.format("Expected %d parameters but got %d", EXPECTED_PARAMS_SIZE, params.length));
38-
}
39-
40-
long blockNumber = Long.parseLong(params[0].toString());
41-
String version = params[1].toString();
42-
43-
if (!version.equals(getTracerRuntime())) {
23+
public record CountersRequestParams(long blockNumber, String expectedTracesEngineVersion) {
24+
public void validateTracerVersion() {
25+
if (!expectedTracesEngineVersion.equals(getTracerRuntime())) {
4426
throw new InvalidParameterException(
4527
String.format(
4628
"INVALID_TRACES_VERSION: Runtime version is %s, requesting version %s",
47-
getTracerRuntime(), version));
29+
getTracerRuntime(), expectedTracesEngineVersion));
4830
}
49-
50-
return new CountersRequestParams(blockNumber, version);
5131
}
5232

5333
private static String getTracerRuntime() {

tracer/arithmetization/src/main/java/net/consensys/linea/rpc/counters/GenerateCountersV0.java renamed to tracer/arithmetization/src/main/java/net/consensys/linea/rpc/counters/GenerateCountersV2.java

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515

1616
package net.consensys.linea.rpc.counters;
1717

18+
import java.security.InvalidParameterException;
1819
import java.util.Map;
1920

2021
import com.google.common.base.Stopwatch;
2122
import com.google.common.cache.Cache;
2223
import com.google.common.cache.CacheBuilder;
24+
import lombok.RequiredArgsConstructor;
2325
import lombok.extern.slf4j.Slf4j;
2426
import net.consensys.linea.zktracer.ZkTracer;
27+
import net.consensys.linea.zktracer.json.JsonConverter;
2528
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType;
2629
import org.hyperledger.besu.plugin.BesuContext;
2730
import org.hyperledger.besu.plugin.services.TraceService;
@@ -30,29 +33,22 @@
3033

3134
/** This class is used to generate trace counters. */
3235
@Slf4j
33-
public class GenerateCountersV0 {
36+
@RequiredArgsConstructor
37+
public class GenerateCountersV2 {
38+
private static final JsonConverter CONVERTER = JsonConverter.builder().build();
3439
private static final int CACHE_SIZE = 10_000;
35-
static final Cache<Long, Map<String, Integer>> cache =
40+
private static final Cache<Long, Map<String, Integer>> CACHE =
3641
CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).build();
3742

3843
private final BesuContext besuContext;
3944
private TraceService traceService;
4045

41-
/**
42-
* Constructor for RollupGenerateCountersV0.
43-
*
44-
* @param besuContext the BesuContext to be used.
45-
*/
46-
public GenerateCountersV0(final BesuContext besuContext) {
47-
this.besuContext = besuContext;
48-
}
49-
5046
public String getNamespace() {
5147
return "rollup";
5248
}
5349

5450
public String getName() {
55-
return "getTracesCountersByBlockNumberV0";
51+
return "getBlockTracesCountersV2";
5652
}
5753

5854
/**
@@ -72,15 +68,28 @@ public Counters execute(final PluginRpcRequest request) {
7268

7369
try {
7470
final Stopwatch sw = Stopwatch.createStarted();
71+
72+
final Object[] rawParams = request.getParams();
73+
74+
// validate params size
75+
if (rawParams.length != 1) {
76+
throw new InvalidParameterException(
77+
"Expected a single params object in the params array but got %d"
78+
.formatted(rawParams.length));
79+
}
80+
7581
final CountersRequestParams params =
76-
CountersRequestParams.createTraceParams(request.getParams());
82+
CONVERTER.fromJson(CONVERTER.toJson(rawParams[0]), CountersRequestParams.class);
83+
84+
params.validateTracerVersion();
85+
7786
final long requestedBlockNumber = params.blockNumber();
7887

7988
final Counters r =
8089
new Counters(
81-
params.runtimeVersion(),
90+
params.expectedTracesEngineVersion(),
8291
requestedBlockNumber,
83-
cache
92+
CACHE
8493
.asMap()
8594
.computeIfAbsent(
8695
requestedBlockNumber,
@@ -95,7 +104,7 @@ public Counters execute(final PluginRpcRequest request) {
95104

96105
return tracer.getModulesLineCount();
97106
}));
98-
log.info("counters for {} returned in {}", requestedBlockNumber, sw);
107+
log.info("Line count for {} returned in {}", requestedBlockNumber, sw);
99108
return r;
100109
} catch (Exception ex) {
101110
throw new PluginRpcEndpointException(RpcErrorType.PLUGIN_INTERNAL_ERROR, ex.getMessage());

tracer/arithmetization/src/main/java/net/consensys/linea/rpc/tracegeneration/GenerateConflatedTracesV0.java renamed to tracer/arithmetization/src/main/java/net/consensys/linea/rpc/tracegeneration/GenerateConflatedTracesV2.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@
1818
import java.nio.file.Files;
1919
import java.nio.file.Path;
2020
import java.nio.file.Paths;
21+
import java.security.InvalidParameterException;
2122

2223
import com.google.common.base.Stopwatch;
24+
import lombok.RequiredArgsConstructor;
2325
import lombok.extern.slf4j.Slf4j;
2426
import net.consensys.linea.zktracer.ZkTracer;
27+
import net.consensys.linea.zktracer.json.JsonConverter;
2528
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.RpcErrorType;
2629
import org.hyperledger.besu.plugin.BesuContext;
2730
import org.hyperledger.besu.plugin.services.BesuConfiguration;
@@ -36,21 +39,20 @@
3639
* based on the provided request parameters and writes them to a file.
3740
*/
3841
@Slf4j
39-
public class GenerateConflatedTracesV0 {
42+
@RequiredArgsConstructor
43+
public class GenerateConflatedTracesV2 {
44+
private static final JsonConverter CONVERTER = JsonConverter.builder().build();
45+
4046
private final BesuContext besuContext;
4147
private Path tracesPath;
4248
private TraceService traceService;
4349

44-
public GenerateConflatedTracesV0(final BesuContext besuContext) {
45-
this.besuContext = besuContext;
46-
}
47-
4850
public String getNamespace() {
4951
return "rollup";
5052
}
5153

5254
public String getName() {
53-
return "generateConflatedTracesToFileV0";
55+
return "generateConflatedTracesToFileV2";
5456
}
5557

5658
/**
@@ -68,11 +70,23 @@ public TraceFile execute(final PluginRpcRequest request) {
6870
this.tracesPath = getTracesPath();
6971
}
7072

73+
final Object[] rawParams = request.getParams();
74+
75+
// validate params size
76+
if (rawParams.length != 1) {
77+
throw new InvalidParameterException(
78+
"Expected a single params object in the params array but got %d"
79+
.formatted(rawParams.length));
80+
}
81+
7182
try {
72-
TraceRequestParams params = TraceRequestParams.createTraceParams(request.getParams());
83+
TraceRequestParams params =
84+
CONVERTER.fromJson(CONVERTER.toJson(rawParams[0]), TraceRequestParams.class);
85+
86+
params.validateTracerVersion();
7387

74-
final long fromBlock = params.fromBlock();
75-
final long toBlock = params.toBlock();
88+
final long fromBlock = params.startBlockNumber();
89+
final long toBlock = params.endBlockNumber();
7690
final ZkTracer tracer = new ZkTracer();
7791
traceService.trace(
7892
fromBlock,
@@ -82,9 +96,9 @@ public TraceFile execute(final PluginRpcRequest request) {
8296
tracer);
8397
log.info("[TRACING] trace for {}-{} computed in {}", fromBlock, toBlock, sw);
8498
sw.reset().start();
85-
final String path = writeTraceToFile(tracer, params.runtimeVersion());
99+
final String path = writeTraceToFile(tracer, params.expectedTracesEngineVersion());
86100
log.info("[TRACING] trace for {}-{} serialized to {} in {}", path, toBlock, fromBlock, sw);
87-
return new TraceFile(params.runtimeVersion(), path);
101+
return new TraceFile(params.expectedTracesEngineVersion(), path);
88102
} catch (Exception ex) {
89103
throw new PluginRpcEndpointException(RpcErrorType.PLUGIN_INTERNAL_ERROR, ex.getMessage());
90104
}

tracer/arithmetization/src/main/java/net/consensys/linea/rpc/tracegeneration/TraceFile.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@
2020
/** FileTrace represents an execution trace. */
2121
public record TraceFile(
2222
@JsonProperty("tracesEngineVersion") String tracesEngineVersion,
23-
@JsonProperty("traceFileName") String traceFileName) {}
23+
@JsonProperty("conflatedTracesFileName") String conflatedTracesFileName) {}

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

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -20,35 +20,16 @@
2020
import net.consensys.linea.zktracer.ZkTracer;
2121

2222
/** Holds needed parameters for sending an execution trace generation request. */
23-
@SuppressWarnings("unused")
24-
public record TraceRequestParams(long fromBlock, long toBlock, String runtimeVersion) {
25-
private static final int EXPECTED_PARAMS_SIZE = 3;
23+
public record TraceRequestParams(
24+
long startBlockNumber, long endBlockNumber, String expectedTracesEngineVersion) {
2625

27-
/**
28-
* Parses a list of params to a {@link TraceRequestParams} object.
29-
*
30-
* @param params an array of parameters.
31-
* @return a parsed {@link TraceRequestParams} object..
32-
*/
33-
public static TraceRequestParams createTraceParams(final Object[] params) {
34-
// validate params size
35-
if (params.length != EXPECTED_PARAMS_SIZE) {
36-
throw new InvalidParameterException(
37-
String.format("Expected %d parameters but got %d", EXPECTED_PARAMS_SIZE, params.length));
38-
}
39-
40-
long fromBlock = Long.parseLong(params[0].toString());
41-
long toBlock = Long.parseLong(params[1].toString());
42-
String version = params[2].toString();
43-
44-
if (!version.equals(getTracerRuntime())) {
26+
public void validateTracerVersion() {
27+
if (!expectedTracesEngineVersion.equals(getTracerRuntime())) {
4528
throw new InvalidParameterException(
4629
String.format(
4730
"INVALID_TRACES_VERSION: Runtime version is %s, requesting version %s",
48-
getTracerRuntime(), version));
31+
getTracerRuntime(), expectedTracesEngineVersion));
4932
}
50-
51-
return new TraceRequestParams(fromBlock, toBlock, version);
5233
}
5334

5435
private static String getTracerRuntime() {

tracer/arithmetization/src/main/java/net/consensys/linea/rpc/tracegeneration/TracesEndpointServicePlugin.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
/**
2626
* Registers RPC endpoints .This class provides an RPC endpoint named
2727
* 'generateConflatedTracesToFileV0' under the 'rollup' namespace. It uses {@link
28-
* GenerateConflatedTracesV0} to generate conflated file traces. This class provides an RPC endpoint
28+
* GenerateConflatedTracesV2} to generate conflated file traces. This class provides an RPC endpoint
2929
* named 'generateConflatedTracesToFileV0' under the 'rollup' namespace.
3030
*/
3131
@AutoService(BesuPlugin.class)
@@ -55,7 +55,7 @@ public void register(final BesuContext context) {
5555
@Override
5656
public void beforeExternalServices() {
5757
super.beforeExternalServices();
58-
GenerateConflatedTracesV0 method = new GenerateConflatedTracesV0(besuContext);
58+
GenerateConflatedTracesV2 method = new GenerateConflatedTracesV2(besuContext);
5959

6060
createAndRegister(method, rpcEndpointService);
6161
}
@@ -67,7 +67,7 @@ public void beforeExternalServices() {
6767
* @param rpcEndpointService the RpcEndpointService to be registered.
6868
*/
6969
private void createAndRegister(
70-
final GenerateConflatedTracesV0 method, final RpcEndpointService rpcEndpointService) {
70+
final GenerateConflatedTracesV2 method, final RpcEndpointService rpcEndpointService) {
7171
rpcEndpointService.registerRPCEndpoint(
7272
method.getNamespace(), method.getName(), method::execute);
7373
}

tracer/arithmetization/src/main/java/net/consensys/linea/zktracer/json/JsonConverter.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,13 @@
1616
package net.consensys.linea.zktracer.json;
1717

1818
import com.fasterxml.jackson.core.JsonProcessingException;
19+
import com.fasterxml.jackson.core.type.TypeReference;
1920
import com.fasterxml.jackson.databind.JsonSerializer;
2021
import com.fasterxml.jackson.databind.ObjectMapper;
2122
import com.fasterxml.jackson.databind.module.SimpleModule;
2223
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
2324
import lombok.Getter;
25+
import lombok.SneakyThrows;
2426

2527
/** A wrapper class handling Jackson's {@link ObjectMapper} configuration. */
2628
public class JsonConverter {
@@ -39,9 +41,9 @@ private JsonConverter(Builder builder) {
3941
*
4042
* @param object the object to be serialized
4143
* @return a JSON string representing the object's data
42-
* @throws JsonProcessingException n case of a serialization failure
4344
*/
44-
public String toJson(Object object) throws JsonProcessingException {
45+
@SneakyThrows(JsonProcessingException.class)
46+
public String toJson(Object object) {
4547
if (prettyPrintEnabled) {
4648
return objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(object);
4749
}
@@ -56,12 +58,25 @@ public String toJson(Object object) throws JsonProcessingException {
5658
* @param clazz class type of the type for deserialization
5759
* @param <T> the deserialization type
5860
* @return an instance of the deserialized type
59-
* @throws JsonProcessingException in case of a deserialization failure
6061
*/
61-
public <T> T fromJson(String jsonString, Class<T> clazz) throws JsonProcessingException {
62+
@SneakyThrows(JsonProcessingException.class)
63+
public <T> T fromJson(String jsonString, Class<T> clazz) {
6264
return objectMapper.readValue(jsonString, clazz);
6365
}
6466

67+
/**
68+
* Deserializes a JSON string to a specified type.
69+
*
70+
* @param jsonString JSON string to be deserialized
71+
* @param clazz class type of the type for deserialization
72+
* @param <T> the deserialization type
73+
* @return an instance of the deserialized type
74+
*/
75+
@SneakyThrows(JsonProcessingException.class)
76+
public <T> T fromJson(String jsonString) {
77+
return objectMapper.readValue(jsonString, new TypeReference<>() {});
78+
}
79+
6580
/**
6681
* A factory for the {@link Builder} instance.
6782
*

0 commit comments

Comments
 (0)