Skip to content

Commit 18bdca1

Browse files
fab-10daniellehrner
andcommitted
Sepolia: Fix for deposit contract log decoding (#8383)
* Sepolia: Fix for deposit contract log decoding Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> * add tests Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net> --------- Signed-off-by: Fabio Di Fabio <fabio.difabio@consensys.net> Signed-off-by: Daniel Lehrner <daniel.lehrner@consensys.net> Co-authored-by: Daniel Lehrner <daniel.lehrner@consensys.net>
1 parent a7877be commit 18bdca1

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/DepositRequestProcessor.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.hyperledger.besu.ethereum.core.Request;
2020
import org.hyperledger.besu.ethereum.core.TransactionReceipt;
2121
import org.hyperledger.besu.ethereum.core.encoding.DepositLogDecoder;
22+
import org.hyperledger.besu.evm.log.Log;
23+
import org.hyperledger.besu.evm.log.LogTopic;
2224

2325
import java.util.List;
2426
import java.util.Optional;
@@ -27,6 +29,10 @@
2729
import org.apache.tuweni.bytes.Bytes;
2830

2931
public class DepositRequestProcessor implements RequestProcessor {
32+
private static final LogTopic DEPOSIT_EVENT_TOPIC =
33+
LogTopic.wrap(
34+
Bytes.fromHexString(
35+
"0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5"));
3036

3137
private final Optional<Address> depositContractAddress;
3238

@@ -49,8 +55,14 @@ Optional<Bytes> getDepositRequestData(final List<TransactionReceipt> transaction
4955
address ->
5056
transactionReceipts.stream()
5157
.flatMap(receipt -> receipt.getLogsList().stream())
52-
.filter(log -> address.equals(log.getLogger()))
58+
.filter(log -> isDepositEvent(address, log))
5359
.map(DepositLogDecoder::decodeFromLog)
5460
.reduce(Bytes::concatenate));
5561
}
62+
63+
private boolean isDepositEvent(final Address depositContractAddress, final Log log) {
64+
return depositContractAddress.equals(log.getLogger())
65+
&& !log.getTopics().isEmpty()
66+
&& log.getTopics().getFirst().equals(DEPOSIT_EVENT_TOPIC);
67+
}
5668
}

ethereum/core/src/test/java/org/hyperledger/besu/ethereum/core/encoding/DepositLogDecoderTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,25 @@ void shouldDecodeDepositFromLog() {
4747

4848
assertThat(requestData).isEqualTo(expectedDepositRequestData);
4949
}
50+
51+
@Test
52+
void shouldDecodeSepoliaDepositFromLog() {
53+
final Address logger = Address.fromHexString("0x00000000219ab540356cbb839cbe05303d7705fa");
54+
final List<LogTopic> topics =
55+
List.of(
56+
LogTopic.fromHexString(
57+
"0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5"));
58+
final Bytes data =
59+
Bytes.fromHexString(
60+
"0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000c3d5d53aa01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000");
61+
62+
final Log log = new Log(logger, data, topics);
63+
final Bytes requestData = DepositLogDecoder.decodeFromLog(log);
64+
65+
final Bytes expectedDepositRequestData =
66+
Bytes.fromHexString(
67+
"0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000c3d5d53aa010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000");
68+
69+
assertThat(requestData).isEqualTo(expectedDepositRequestData);
70+
}
5071
}

0 commit comments

Comments
 (0)