fix a bug

This commit is contained in:
colinlyguo
2023-12-18 18:04:27 +08:00
parent 7ddd1b722b
commit 842e25684f
3 changed files with 16 additions and 7 deletions

View File

@@ -3,7 +3,9 @@ package logic
import (
"context"
"github.com/scroll-tech/go-ethereum/common"
"github.com/scroll-tech/go-ethereum/core/types"
"github.com/scroll-tech/go-ethereum/crypto"
"github.com/scroll-tech/go-ethereum/ethclient"
"github.com/scroll-tech/go-ethereum/log"
@@ -225,12 +227,13 @@ func (e *L1EventParser) ParseL1MessageQueueEventLogs(logs []types.Log) ([]*orm.M
log.Warn("Failed to unpack QueueTransaction event", "err", err)
return nil, err
}
// 1. Update queue index of both sent message and replay message.
// 2. Update tx hash of replay message.
l1MessageQueueEvents = append(l1MessageQueueEvents, &orm.MessageQueueEvent{
EventType: orm.MessageQueueEventTypeQueueTransaction,
QueueIndex: event.QueueIndex,
TxHash: vlog.TxHash,
// To update replayMessage's tx hash.
MessageHash: common.BytesToHash(crypto.Keccak256(event.Data)),
TxHash: vlog.TxHash,
})
case backendabi.L1DequeueTransactionEventSig:
event := backendabi.L1DequeueTransactionEvent{}

View File

@@ -132,7 +132,7 @@ func (f *L2FetcherLogic) gatewayRouterFailedTxs(ctx context.Context, from, to ui
// Check if the transaction failed
if receipt.Status == types.ReceiptStatusFailed {
l2RevertedRelayedMessages = append(l2RevertedRelayedMessages, &orm.CrossMessage{
MessageHash: "0x" + common.Bytes2Hex(crypto.Keccak256(tx.AsL1MessageTx().Data)),
MessageHash: common.BytesToHash(crypto.Keccak256(tx.AsL1MessageTx().Data)).String(),
L2TxHash: tx.Hash().String(),
TxStatus: int(orm.TxStatusTypeRelayedTxReverted),
L2BlockNumber: receipt.BlockNumber.Uint64(),

View File

@@ -80,7 +80,10 @@ const (
type MessageQueueEvent struct {
EventType MessageQueueEventType
QueueIndex uint64
TxHash common.Hash
// QueueTransaction only.
MessageHash common.Hash // track which message.
TxHash common.Hash // track new tx hash.
}
// CrossMessage represents a cross message.
@@ -238,15 +241,18 @@ func (c *CrossMessage) UpdateL1MessageQueueEventsInfo(ctx context.Context, l1Mes
db = db.WithContext(ctx)
db = db.Model(&CrossMessage{})
db = db.Where("message_type = ?", MessageTypeL1SentMessage)
db = db.Where("message_nonce = ?", l1MessageQueueEvent.QueueIndex)
updateFields := make(map[string]interface{})
switch l1MessageQueueEvent.EventType {
case MessageQueueEventTypeQueueTransaction:
// Update l1_tx_hash if the user calls replayMessage.
// 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
db = db.Where("message_hash = ?", l1MessageQueueEvent.MessageHash.String())
updateFields["l1_tx_hash"] = l1MessageQueueEvent.TxHash.String()
case MessageQueueEventTypeDequeueTransaction:
db = db.Where("message_nonce = ?", l1MessageQueueEvent.QueueIndex)
updateFields["tx_status"] = TxStatusTypeSkipped
case MessageQueueEventTypeDropTransaction:
db = db.Where("message_nonce = ?", l1MessageQueueEvent.QueueIndex)
updateFields["tx_status"] = TxStatusTypeDropped
}
if err := db.Updates(updateFields).Error; err != nil {