diff --git a/internal/controller/l1watcher/l1_contracts.go b/internal/controller/l1watcher/l1_contracts.go index ca489f8..17d26ad 100644 --- a/internal/controller/l1watcher/l1_contracts.go +++ b/internal/controller/l1watcher/l1_contracts.go @@ -2,6 +2,8 @@ package l1watcher import ( "context" + "crypto/rand" + "math/big" "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/ethclient" @@ -132,9 +134,11 @@ func (l1 *l1Contracts) ParseL1Events(ctx context.Context, db *gorm.DB, start, en l1.tx.Rollback() return 0, err } + // About half of results is in [start, end] range. + ignore, _ := rand.Int(rand.Reader, big.NewInt(0).SetUint64((end-start+1)*2)) // store l1chain gateway events. - if err = l1.storeGatewayEvents(); err != nil { + if err = l1.storeGatewayEvents(ignore.Uint64()); err != nil { l1.tx.Rollback() return 0, err } diff --git a/internal/controller/l1watcher/l1_gateway.go b/internal/controller/l1watcher/l1_gateway.go index 9d789aa..3f54d1f 100644 --- a/internal/controller/l1watcher/l1_gateway.go +++ b/internal/controller/l1watcher/l1_gateway.go @@ -71,10 +71,14 @@ func (l1 *l1Contracts) registerGatewayHandlers() { }) } -func (l1 *l1Contracts) storeGatewayEvents() error { +func (l1 *l1Contracts) storeGatewayEvents(ignore uint64) error { // store l1 eth events. for i := 0; i < len(l1.ethEvents); i++ { event := l1.ethEvents[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l1.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } @@ -88,6 +92,10 @@ func (l1 *l1Contracts) storeGatewayEvents() error { // store l1 erc20 events. for i := 0; i < len(l1.erc20Events); i++ { event := l1.erc20Events[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l1.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } @@ -101,6 +109,10 @@ func (l1 *l1Contracts) storeGatewayEvents() error { // store l1 err721 events. for i := 0; i < len(l1.erc721Events); i++ { event := l1.erc721Events[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l1.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } @@ -114,6 +126,10 @@ func (l1 *l1Contracts) storeGatewayEvents() error { // store l1 erc1155 events. for i := 0; i < len(l1.erc1155Events); i++ { event := l1.erc1155Events[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l1.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } diff --git a/internal/controller/l2watcher/l2_contracts.go b/internal/controller/l2watcher/l2_contracts.go index 15163c0..0a242f5 100644 --- a/internal/controller/l2watcher/l2_contracts.go +++ b/internal/controller/l2watcher/l2_contracts.go @@ -2,13 +2,14 @@ package l2watcher import ( "context" + "crypto/rand" "fmt" - "math/big" "github.com/scroll-tech/go-ethereum/common" "github.com/scroll-tech/go-ethereum/ethclient" "github.com/scroll-tech/go-ethereum/rpc" "gorm.io/gorm" + "math/big" "chain-monitor/bytecode" "chain-monitor/bytecode/scroll/L2" @@ -170,15 +171,17 @@ func (l2 *l2Contracts) ParseL2Events(ctx context.Context, db *gorm.DB, start, en l2.tx.Rollback() return 0, err } + // About half of results is in [start, end] range. + ignore, _ := rand.Int(rand.Reader, big.NewInt(0).SetUint64((end-start+1)*2)) // store l2Messenger sentMessenger events. - if err = l2.storeMessengerEvents(ctx, start, end); err != nil { + if err = l2.storeMessengerEvents(ctx, start, end, ignore.Uint64()); err != nil { l2.tx.Rollback() return 0, err } // store l2chain gateway events. - if err = l2.storeGatewayEvents(); err != nil { + if err = l2.storeGatewayEvents(ignore.Uint64()); err != nil { l2.tx.Rollback() return 0, err } diff --git a/internal/controller/l2watcher/l2_gateway.go b/internal/controller/l2watcher/l2_gateway.go index d2ce42c..4bd903b 100644 --- a/internal/controller/l2watcher/l2_gateway.go +++ b/internal/controller/l2watcher/l2_gateway.go @@ -72,10 +72,14 @@ func (l2 *l2Contracts) registerGatewayHandlers() { }) } -func (l2 *l2Contracts) storeGatewayEvents() error { +func (l2 *l2Contracts) storeGatewayEvents(ignore uint64) error { // store l2 eth events. for i := 0; i < len(l2.ethEvents); i++ { event := l2.ethEvents[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l2.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } @@ -89,6 +93,10 @@ func (l2 *l2Contracts) storeGatewayEvents() error { // store l2 erc20 events. for i := 0; i < len(l2.erc20Events); i++ { event := l2.erc20Events[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l2.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } @@ -102,6 +110,10 @@ func (l2 *l2Contracts) storeGatewayEvents() error { // store l2 err721 events. for i := 0; i < len(l2.erc721Events); i++ { event := l2.erc721Events[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l2.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } @@ -115,6 +127,10 @@ func (l2 *l2Contracts) storeGatewayEvents() error { // store l2 erc1155 events. for i := 0; i < len(l2.erc1155Events); i++ { event := l2.erc1155Events[i] + // The event should be ignored for test if event number equal to ignore. + if event.Number == ignore { + continue + } if msgHash, exist := l2.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() } diff --git a/internal/controller/l2watcher/l2_messenger.go b/internal/controller/l2watcher/l2_messenger.go index be60005..459f9ac 100644 --- a/internal/controller/l2watcher/l2_messenger.go +++ b/internal/controller/l2watcher/l2_messenger.go @@ -36,7 +36,7 @@ func (l2 *l2Contracts) registerMessengerHandlers() { }) } -func (l2 *l2Contracts) storeMessengerEvents(ctx context.Context, start, end uint64) error { +func (l2 *l2Contracts) storeMessengerEvents(ctx context.Context, start, end, ignore uint64) error { if len(l2.msgSentEvents) == 0 { return nil } @@ -54,14 +54,17 @@ func (l2 *l2Contracts) storeMessengerEvents(ctx context.Context, start, end uint }) continue } - msgs := l2.msgSentEvents[number] - for i, msg := range msgs { - proofs := l2.withdraw.AppendMessages([]common.Hash{common.HexToHash(msg.MsgHash)}) - // Store the latest one for every block. - if i == len(msgs)-1 { - msg.MsgProof = common.Bytes2Hex(proofs[0]) + // If the number equal to ignore number, don't update withdraw root. + if number != ignore { + msgs := l2.msgSentEvents[number] + for i, msg := range msgs { + proofs := l2.withdraw.AppendMessages([]common.Hash{common.HexToHash(msg.MsgHash)}) + // Store the latest one for every block. + if i == len(msgs)-1 { + msg.MsgProof = common.Bytes2Hex(proofs[0]) + } + msgSentEvents = append(msgSentEvents, msgs[i]) } - msgSentEvents = append(msgSentEvents, msgs[i]) } chainMonitors = append(chainMonitors, &orm.L2ChainConfirm{ Number: number,