filter L1 sentMessage in QueueTransaction

This commit is contained in:
colinlyguo
2023-12-18 18:17:20 +08:00
parent 842e25684f
commit 652687862a
3 changed files with 18 additions and 11 deletions

View File

@@ -217,7 +217,12 @@ func (e *L1EventParser) ParseL1BatchEventLogs(ctx context.Context, logs []types.
}
// ParseL1MessageQueueEventLogs parses L1 watched message queue events.
func (e *L1EventParser) ParseL1MessageQueueEventLogs(logs []types.Log) ([]*orm.MessageQueueEvent, error) {
func (e *L1EventParser) ParseL1MessageQueueEventLogs(logs []types.Log, l1DepositMessages []*orm.CrossMessage) ([]*orm.MessageQueueEvent, error) {
messageHashes := make(map[common.Hash]struct{})
for _, msg := range l1DepositMessages {
messageHashes[common.HexToHash(msg.MessageHash)] = struct{}{}
}
var l1MessageQueueEvents []*orm.MessageQueueEvent
for _, vlog := range logs {
switch vlog.Topics[0] {
@@ -227,14 +232,16 @@ func (e *L1EventParser) ParseL1MessageQueueEventLogs(logs []types.Log) ([]*orm.M
log.Warn("Failed to unpack QueueTransaction event", "err", err)
return nil, err
}
l1MessageQueueEvents = append(l1MessageQueueEvents, &orm.MessageQueueEvent{
EventType: orm.MessageQueueEventTypeQueueTransaction,
QueueIndex: event.QueueIndex,
// To update replayMessage's tx hash.
MessageHash: common.BytesToHash(crypto.Keccak256(event.Data)),
TxHash: vlog.TxHash,
})
messageHash := common.BytesToHash(crypto.Keccak256(event.Data))
// If the message hash is not found in the map, it's not a replayMessage or enforced tx (omitted); add it to the events.
if _, exists := messageHashes[messageHash]; !exists {
l1MessageQueueEvents = append(l1MessageQueueEvents, &orm.MessageQueueEvent{
EventType: orm.MessageQueueEventTypeQueueTransaction,
QueueIndex: event.QueueIndex,
MessageHash: messageHash,
TxHash: vlog.TxHash,
})
}
case backendabi.L1DequeueTransactionEventSig:
event := backendabi.L1DequeueTransactionEvent{}
if err := utils.UnpackLog(backendabi.IL1MessageQueueABI, &event, "DequeueTransaction", vlog); err != nil {

View File

@@ -193,7 +193,7 @@ func (f *L1FetcherLogic) L1Fetcher(ctx context.Context, from, to uint64) (*L1Fil
return nil, err
}
l1MessageQueueEvents, err := f.parser.ParseL1MessageQueueEventLogs(eventLogs)
l1MessageQueueEvents, err := f.parser.ParseL1MessageQueueEventLogs(eventLogs, l1DepositMessages)
if err != nil {
log.Error("failed to parse L1 message queue event logs", "from", from, "to", to, "err", err)
return nil, err

View File

@@ -245,7 +245,7 @@ func (c *CrossMessage) UpdateL1MessageQueueEventsInfo(ctx context.Context, l1Mes
switch l1MessageQueueEvent.EventType {
case MessageQueueEventTypeQueueTransaction:
// Update l1_tx_hash if the user calls replayMessage, cannot use queue index here.
// ref: https://github.com/scroll-tech/scroll/blob/v4.3.44/contracts/src/L1/L1ScrollMessenger.sol#L187-L190
// Ref: https://github.com/scroll-tech/scroll/blob/v4.3.44/contracts/src/L1/L1ScrollMessenger.sol#L187-L190
db = db.Where("message_hash = ?", l1MessageQueueEvent.MessageHash.String())
updateFields["l1_tx_hash"] = l1MessageQueueEvent.TxHash.String()
case MessageQueueEventTypeDequeueTransaction: