Skip to content

Commit da35aa8

Browse files
authored
fix trielog decoding issue (#156)
* fix trielog decoding issue
1 parent e027b9b commit da35aa8

File tree

6 files changed

+121
-15
lines changed

6 files changed

+121
-15
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
groupVal=io.consensys.protocols.shomei
33
besuVersion=26.1.0-linea1.0
44
shomeiPluginVersion=0.8.5
5-
version=2.5.1
5+
version=2.5.2
66

77
org.gradle.welcome=never
88

services/rpc/common/build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,16 @@ tasks.named('jar') {
1616
dependencies {
1717

1818
implementation project(':core')
19+
implementation project(':trie')
1920
implementation 'com.fasterxml.jackson.core:jackson-databind'
2021
implementation 'org.hyperledger.besu:besu-datatypes'
2122
implementation 'io.consensys.tuweni:tuweni-bytes'
23+
24+
testImplementation 'org.junit.jupiter:junit-jupiter-api'
25+
testImplementation 'org.assertj:assertj-core'
26+
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
2227
}
2328

2429
test {
25-
useJUnitPlatform()
30+
useJUnitPlatform()
2631
}

services/rpc/common/src/main/java/net/consensys/shomei/rpc/model/TrieLogElement.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
package net.consensys.shomei.rpc.model;
1515

1616
import net.consensys.shomei.observer.TrieLogObserver.TrieLogIdentifier;
17+
import net.consensys.shomei.trie.json.JsonTraceParser;
1718

1819
import com.fasterxml.jackson.annotation.JsonCreator;
1920
import com.fasterxml.jackson.annotation.JsonProperty;
21+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
2022
import org.apache.tuweni.bytes.Bytes32;
2123

2224
public class TrieLogElement {
@@ -31,7 +33,9 @@ public TrieLogElement() {}
3133
@JsonCreator
3234
public TrieLogElement(
3335
@JsonProperty("blockNumber") final Long blockNumber,
34-
@JsonProperty("blockHash") final Bytes32 blockHash,
36+
@JsonProperty("blockHash")
37+
@JsonDeserialize(using = JsonTraceParser.Bytes32Deserializer.class)
38+
final Bytes32 blockHash,
3539
@JsonProperty("trieLog") final String trieLog) {
3640
this.blockNumber = blockNumber;
3741
this.blockHash = blockHash;
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
* Copyright ConsenSys Software Inc., 2025
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+
14+
package net.consensys.shomei.rpc.model;
15+
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
18+
import java.util.LinkedHashMap;
19+
import java.util.Map;
20+
21+
import com.fasterxml.jackson.databind.ObjectMapper;
22+
import org.apache.tuweni.bytes.Bytes32;
23+
import org.junit.jupiter.api.Test;
24+
25+
class TrieLogElementTest {
26+
27+
private static final ObjectMapper MAPPER = new ObjectMapper();
28+
29+
@Test
30+
void deserializeFromJson() throws Exception {
31+
String json =
32+
"{\"blockNumber\":29524257,"
33+
+ "\"blockHash\":\"0x2ff25b3771a2d67c2cf9237972c0f182ff60971ff979447fd7c80815d62b7f5d\","
34+
+ "\"trieLog\":\"0xdeadbeef\"}";
35+
36+
TrieLogElement element = MAPPER.readValue(json, TrieLogElement.class);
37+
38+
assertThat(element.blockNumber()).isEqualTo(29524257L);
39+
assertThat(element.blockHash())
40+
.isEqualTo(
41+
Bytes32.fromHexString(
42+
"0x2ff25b3771a2d67c2cf9237972c0f182ff60971ff979447fd7c80815d62b7f5d"));
43+
assertThat(element.trieLog()).isEqualTo("0xdeadbeef");
44+
}
45+
46+
@Test
47+
void deserializeViaConvertValue() throws Exception {
48+
Map<String, Object> map = new LinkedHashMap<>();
49+
map.put("blockNumber", 29524257);
50+
map.put(
51+
"blockHash",
52+
"0x2ff25b3771a2d67c2cf9237972c0f182ff60971ff979447fd7c80815d62b7f5d");
53+
map.put("trieLog", "0xdeadbeef");
54+
55+
TrieLogElement element = MAPPER.convertValue(map, TrieLogElement.class);
56+
57+
assertThat(element.blockNumber()).isEqualTo(29524257L);
58+
assertThat(element.blockHash())
59+
.isEqualTo(
60+
Bytes32.fromHexString(
61+
"0x2ff25b3771a2d67c2cf9237972c0f182ff60971ff979447fd7c80815d62b7f5d"));
62+
assertThat(element.trieLog()).isEqualTo("0xdeadbeef");
63+
}
64+
65+
@Test
66+
void trieLogIdentifierHasCorrectValues() throws Exception {
67+
String json =
68+
"{\"blockNumber\":100,"
69+
+ "\"blockHash\":\"0x0000000000000000000000000000000000000000000000000000000000000001\","
70+
+ "\"trieLog\":\"0x\"}";
71+
72+
TrieLogElement element = MAPPER.readValue(json, TrieLogElement.class);
73+
var identifier = element.getTrieLogIdentifier();
74+
75+
assertThat(identifier.blockNumber()).isEqualTo(100L);
76+
assertThat(identifier.blockHash())
77+
.isEqualTo(
78+
Bytes32.fromHexString(
79+
"0x0000000000000000000000000000000000000000000000000000000000000001"));
80+
}
81+
}

services/rpc/server/src/main/java/net/consensys/shomei/rpc/server/model/RollupForkChoiceUpdatedParameter.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313

1414
package net.consensys.shomei.rpc.server.model;
1515

16+
import net.consensys.shomei.trie.json.JsonTraceParser;
17+
1618
import com.fasterxml.jackson.annotation.JsonCreator;
1719
import com.fasterxml.jackson.annotation.JsonProperty;
20+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1821
import org.apache.tuweni.bytes.Bytes32;
1922

2023
public class RollupForkChoiceUpdatedParameter {
@@ -27,7 +30,9 @@ public class RollupForkChoiceUpdatedParameter {
2730
public RollupForkChoiceUpdatedParameter(
2831
@JsonProperty(required = true, value = "finalizedBlockNumber")
2932
final String finalizedBlockNumber,
30-
@JsonProperty(required = true, value = "finalizedBlockHash") final Bytes32 finalizedBlockHash) {
33+
@JsonProperty(required = true, value = "finalizedBlockHash")
34+
@JsonDeserialize(using = JsonTraceParser.Bytes32Deserializer.class)
35+
final Bytes32 finalizedBlockHash) {
3136
this.finalizedBlockNumber = finalizedBlockNumber;
3237
this.finalizedBlockHash = finalizedBlockHash;
3338
}

trie/src/main/java/net/consensys/shomei/trie/json/JsonTraceParser.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
import java.util.Optional;
1818

1919
import com.fasterxml.jackson.core.JsonGenerator;
20+
import com.fasterxml.jackson.core.JsonParser;
21+
import com.fasterxml.jackson.databind.DeserializationContext;
22+
import com.fasterxml.jackson.databind.JsonDeserializer;
2023
import com.fasterxml.jackson.databind.JsonSerializer;
2124
import com.fasterxml.jackson.databind.Module;
2225
import com.fasterxml.jackson.databind.SerializerProvider;
@@ -30,6 +33,13 @@
3033
@SuppressWarnings("rawtypes")
3134
public class JsonTraceParser {
3235

36+
public static class Bytes32Deserializer extends JsonDeserializer<Bytes32> {
37+
@Override
38+
public Bytes32 deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
39+
return Bytes32.fromHexString(p.getText());
40+
}
41+
}
42+
3343
public static Module[] modules =
3444
new Module[] {
3545
new SimpleModule()
@@ -65,17 +75,18 @@ public void serialize(
6575
jsonGen.writeString(node.toHexString());
6676
}
6777
}),
68-
new SimpleModule()
69-
.addSerializer(
70-
Bytes32.class,
71-
new JsonSerializer<>() {
72-
@Override
73-
public void serialize(
74-
Bytes32 node, JsonGenerator jsonGen, SerializerProvider serProv)
75-
throws IOException {
76-
jsonGen.writeString(node.toHexString());
77-
}
78-
}),
78+
new SimpleModule()
79+
.addSerializer(
80+
Bytes32.class,
81+
new JsonSerializer<>() {
82+
@Override
83+
public void serialize(
84+
Bytes32 node, JsonGenerator jsonGen, SerializerProvider serProv)
85+
throws IOException {
86+
jsonGen.writeString(node.toHexString());
87+
}
88+
})
89+
.addDeserializer(Bytes32.class, new Bytes32Deserializer()),
7990
new SimpleModule()
8091
.addSerializer(
8192
Optional.class,

0 commit comments

Comments
 (0)