diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/DepositRequestProcessor.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/DepositRequestProcessor.java index 816fb4bcabb..10a69494594 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/DepositRequestProcessor.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/DepositRequestProcessor.java @@ -19,6 +19,8 @@ import org.hyperledger.besu.ethereum.core.Request; import org.hyperledger.besu.ethereum.core.TransactionReceipt; import org.hyperledger.besu.ethereum.core.encoding.DepositLogDecoder; +import org.hyperledger.besu.evm.log.Log; +import org.hyperledger.besu.evm.log.LogTopic; import java.util.List; import java.util.Optional; @@ -27,6 +29,10 @@ import org.apache.tuweni.bytes.Bytes; public class DepositRequestProcessor implements RequestProcessor { + private static final LogTopic DEPOSIT_EVENT_TOPIC = + LogTopic.wrap( + Bytes.fromHexString( + "0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5")); private final Optional
depositContractAddress; @@ -49,8 +55,14 @@ Optional getDepositRequestData(final List transaction address -> transactionReceipts.stream() .flatMap(receipt -> receipt.getLogsList().stream()) - .filter(log -> address.equals(log.getLogger())) + .filter(log -> isDepositEvent(address, log)) .map(DepositLogDecoder::decodeFromLog) .reduce(Bytes::concatenate)); } + + private boolean isDepositEvent(final Address depositContractAddress, final Log log) { + return depositContractAddress.equals(log.getLogger()) + && !log.getTopics().isEmpty() + && log.getTopics().getFirst().equals(DEPOSIT_EVENT_TOPIC); + } } diff --git a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/core/encoding/DepositLogDecoderTest.java b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/core/encoding/DepositLogDecoderTest.java index 14166553e62..d24d6ff3c3f 100644 --- a/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/core/encoding/DepositLogDecoderTest.java +++ b/ethereum/core/src/test/java/org/hyperledger/besu/ethereum/core/encoding/DepositLogDecoderTest.java @@ -47,4 +47,25 @@ void shouldDecodeDepositFromLog() { assertThat(requestData).isEqualTo(expectedDepositRequestData); } + + @Test + void shouldDecodeSepoliaDepositFromLog() { + final Address logger = Address.fromHexString("0x00000000219ab540356cbb839cbe05303d7705fa"); + final List topics = + List.of( + LogTopic.fromHexString( + "0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5")); + final Bytes data = + Bytes.fromHexString( + "0x00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000c3d5d53aa01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000"); + + final Log log = new Log(logger, data, topics); + final Bytes requestData = DepositLogDecoder.decodeFromLog(log); + + final Bytes expectedDepositRequestData = + Bytes.fromHexString( + "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000c3d5d53aa010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030000000000000000"); + + assertThat(requestData).isEqualTo(expectedDepositRequestData); + } }