Skip to content

Commit aca6ae4

Browse files
authored
Backward compatible trielog format for shomei (#62)
* do not export zkTracer comparison metadata when exporting to shomei, so trielogs are backward compatible with older shomei instances * bump minor version to reflect trielog format difference Signed-off-by: garyschulte <[email protected]>
1 parent 5dec50e commit aca6ae4

File tree

4 files changed

+21
-9
lines changed

4 files changed

+21
-9
lines changed

gradle.properties

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
releaseVersion=0.7.8-SNAPSHOT
2-
besuVersion=25.10.0-RC1-linea2
3-
arithmetizationVersion=beta-v4.0-rc18
1+
releaseVersion=0.8.0-SNAPSHOT
2+
besuVersion=25.10.0-linea3
3+
arithmetizationVersion=beta-v4.0-rc20

src/main/java/net/consensys/shomei/rpc/methods/ShomeiGetTrieLog.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public Object execute(PluginRpcRequest rpcRequest) {
4545
return ctx.getTrieLogService()
4646
.getTrieLogProvider()
4747
.getTrieLogLayer(blockNumber)
48-
.map(t -> Bytes.wrap(ctx.getZkTrieLogFactory().serialize(t)).toHexString())
48+
.map(t -> Bytes.wrap(ctx.getZkTrieLogFactory().serializeWithoutMetadata(t)).toHexString())
4949
.orElse("");
5050
}
5151
}

src/main/java/net/consensys/shomei/rpc/response/TrieLogJson.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@
2323
import org.hyperledger.besu.datatypes.Hash;
2424
import org.hyperledger.besu.plugin.services.trielogs.TrieLogProvider;
2525

26+
/**
27+
* JSON response object for TrieLog data. Note: This class serializes TrieLogs WITHOUT zktracer
28+
* comparison feature metadata.
29+
*/
2630
public class TrieLogJson {
2731

2832
@JsonProperty("blockHash")
@@ -39,7 +43,8 @@ public TrieLogJson(
3943
final TrieLogProvider.TrieLogRangeTuple tuple, final ZkTrieLogFactory trieLogFactory) {
4044
this.blockHash = tuple.blockHash();
4145
this.blockNumber = tuple.blockNumber();
42-
this.trieLog = Bytes.wrap(trieLogFactory.serialize(tuple.trieLog())).toHexString();
46+
this.trieLog =
47+
Bytes.wrap(trieLogFactory.serializeWithoutMetadata(tuple.trieLog())).toHexString();
4348
}
4449

4550
public TrieLogJson(Hash blockHash, long blockNumber, String trieLog) {

src/main/java/net/consensys/shomei/trielog/ZkTrieLogFactory.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -266,11 +266,18 @@ static Map<Address, Map<StorageSlotKey, LogTuple<UInt256>>> decorateStorage(
266266
@Override
267267
public byte[] serialize(final TrieLog layer) {
268268
final BytesValueRLPOutput rlpLog = new BytesValueRLPOutput();
269-
writeTo(layer, rlpLog);
269+
writeTo(layer, rlpLog, true);
270270
return rlpLog.encoded().toArrayUnsafe();
271271
}
272272

273-
public static void writeTo(final TrieLog layer, final RLPOutput output) {
273+
public byte[] serializeWithoutMetadata(final TrieLog layer) {
274+
final BytesValueRLPOutput rlpLog = new BytesValueRLPOutput();
275+
writeTo(layer, rlpLog, false);
276+
return rlpLog.encoded().toArrayUnsafe();
277+
}
278+
279+
private static void writeTo(
280+
final TrieLog layer, final RLPOutput output, final boolean includeMetadata) {
274281
layer.freeze();
275282

276283
final Set<Address> addresses = new TreeSet<>();
@@ -328,7 +335,7 @@ public static void writeTo(final TrieLog layer, final RLPOutput output) {
328335
}
329336

330337
// optionally write zkTraceComparisonFeature
331-
if (layer instanceof PluginTrieLogLayer pluginLayer) {
338+
if (includeMetadata && layer instanceof PluginTrieLogLayer pluginLayer) {
332339
pluginLayer.zkTraceComparisonFeature().ifPresent(output::writeInt);
333340
}
334341
output.endList(); // container
@@ -361,7 +368,7 @@ public static PluginTrieLogLayer readFrom(final RLPInput input) {
361368
.filter(isPresent -> isPresent)
362369
.map(__ -> input.readLongScalar());
363370

364-
while (!input.isEndOfCurrentList()) {
371+
while (!input.isEndOfCurrentList() && input.nextIsList()) {
365372
input.enterList();
366373
final Address address = Address.readFrom(input);
367374

0 commit comments

Comments
 (0)