From c029478dc58cc71b2d871d9b95986cdd4485f373 Mon Sep 17 00:00:00 2001 From: maskpp Date: Mon, 11 Sep 2023 14:54:31 +0800 Subject: [PATCH] Chaos testing (#12) --- internal/controller/l1watcher/l1_contracts.go | 12 ++++++++++++ internal/controller/l1watcher/l1_gateway.go | 12 ++---------- internal/controller/l2watcher/l2_contracts.go | 2 +- internal/controller/l2watcher/l2_gateway.go | 12 ++---------- internal/controller/l2watcher/l2_messenger.go | 19 ++++++++----------- .../controller/monitor/deposit_confirm.go | 13 +++++++++---- 6 files changed, 34 insertions(+), 36 deletions(-) diff --git a/internal/controller/l1watcher/l1_contracts.go b/internal/controller/l1watcher/l1_contracts.go index b6386d6..7054044 100644 --- a/internal/controller/l1watcher/l1_contracts.go +++ b/internal/controller/l1watcher/l1_contracts.go @@ -143,6 +143,18 @@ func (l1 *l1Contracts) ParseL1Events(ctx context.Context, db *gorm.DB, start, en return 0, err } + // Store l1 confirm. + var l1Confirms = make([]orm.L1ChainConfirm, 0, end-start+1) + for number := start; number <= end; number++ { + l1Confirms = append(l1Confirms, orm.L1ChainConfirm{ + Number: number, + }) + } + if err = l1.tx.Save(l1Confirms).Error; err != nil { + l1.tx.Rollback() + return 0, err + } + // store the latest l1 block numbers err = l1.tx.Save(&orm.L1Block{ Number: end, diff --git a/internal/controller/l1watcher/l1_gateway.go b/internal/controller/l1watcher/l1_gateway.go index 3f54d1f..d1c3bdc 100644 --- a/internal/controller/l1watcher/l1_gateway.go +++ b/internal/controller/l1watcher/l1_gateway.go @@ -77,7 +77,7 @@ func (l1 *l1Contracts) storeGatewayEvents(ignore uint64) error { event := l1.ethEvents[i] // The event should be ignored for test if event number equal to ignore. if event.Number == ignore { - continue + event.Amount = big.NewInt(0).SetUint64(ignore) } if msgHash, exist := l1.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() @@ -94,7 +94,7 @@ func (l1 *l1Contracts) storeGatewayEvents(ignore uint64) error { event := l1.erc20Events[i] // The event should be ignored for test if event number equal to ignore. if event.Number == ignore { - continue + event.Amount = big.NewInt(0).SetUint64(ignore) } if msgHash, exist := l1.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() @@ -109,10 +109,6 @@ func (l1 *l1Contracts) storeGatewayEvents(ignore uint64) 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() } @@ -126,10 +122,6 @@ func (l1 *l1Contracts) storeGatewayEvents(ignore uint64) 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 2f23353..d48189c 100644 --- a/internal/controller/l2watcher/l2_contracts.go +++ b/internal/controller/l2watcher/l2_contracts.go @@ -175,7 +175,7 @@ func (l2 *l2Contracts) ParseL2Events(ctx context.Context, db *gorm.DB, start, en ignore, _ := rand.Int(rand.Reader, big.NewInt(0).SetUint64((end-start+1)*2)) // store l2Messenger sentMessenger events. - if err = l2.storeMessengerEvents(ctx, start, end, ignore.Uint64()+start); err != nil { + if err = l2.storeMessengerEvents(ctx, start, end); 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 4bd903b..bc131d2 100644 --- a/internal/controller/l2watcher/l2_gateway.go +++ b/internal/controller/l2watcher/l2_gateway.go @@ -78,7 +78,7 @@ func (l2 *l2Contracts) storeGatewayEvents(ignore uint64) error { event := l2.ethEvents[i] // The event should be ignored for test if event number equal to ignore. if event.Number == ignore { - continue + event.Amount = big.NewInt(0).SetUint64(ignore) } if msgHash, exist := l2.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() @@ -95,7 +95,7 @@ func (l2 *l2Contracts) storeGatewayEvents(ignore uint64) error { event := l2.erc20Events[i] // The event should be ignored for test if event number equal to ignore. if event.Number == ignore { - continue + event.Amount = big.NewInt(0).SetUint64(ignore) } if msgHash, exist := l2.txHashMsgHash[event.TxHash]; exist { event.MsgHash = msgHash.String() @@ -110,10 +110,6 @@ func (l2 *l2Contracts) storeGatewayEvents(ignore uint64) 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() } @@ -127,10 +123,6 @@ func (l2 *l2Contracts) storeGatewayEvents(ignore uint64) 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 459f9ac..be60005 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, ignore uint64) error { +func (l2 *l2Contracts) storeMessengerEvents(ctx context.Context, start, end uint64) error { if len(l2.msgSentEvents) == 0 { return nil } @@ -54,17 +54,14 @@ func (l2 *l2Contracts) storeMessengerEvents(ctx context.Context, start, end, ign }) continue } - // 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]) + 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]) } chainMonitors = append(chainMonitors, &orm.L2ChainConfirm{ Number: number, diff --git a/internal/controller/monitor/deposit_confirm.go b/internal/controller/monitor/deposit_confirm.go index bc74c21..b952e78 100644 --- a/internal/controller/monitor/deposit_confirm.go +++ b/internal/controller/monitor/deposit_confirm.go @@ -2,6 +2,7 @@ package monitor import ( "context" + "encoding/json" "fmt" "time" @@ -110,7 +111,8 @@ func (ch *ChainMonitor) confirmDepositEvents(ctx context.Context, start, end uin failedNumbers = append(failedNumbers, msg.L2Number) } // If eth msg don't match, alert it. - go ch.SlackNotify(fmt.Sprintf("deposit eth don't match, message: %v", msg)) + data, _ := json.Marshal(msg) + go ch.SlackNotify(fmt.Sprintf("deposit eth don't match, message: %s", string(data))) log.Error("the eth deposit count or amount don't match", "start", start, "end", end, "event_type", orm.L2FinalizeDepositETH, "l1_tx_hash", msg.L1TxHash, "l2_tx_hash", msg.L2TxHash) } } @@ -134,7 +136,8 @@ func (ch *ChainMonitor) confirmDepositEvents(ctx context.Context, start, end uin failedNumbers = append(failedNumbers, msg.L2Number) } // If erc20 msg don't match, alert it. - go ch.SlackNotify(fmt.Sprintf("erc20 deposit don't match, message: %v", msg)) + data, _ := json.Marshal(msg) + go ch.SlackNotify(fmt.Sprintf("erc20 deposit don't match, message: %s", string(data))) log.Error( "the erc20 deposit count or amount doesn't match", "start", start, @@ -160,7 +163,8 @@ func (ch *ChainMonitor) confirmDepositEvents(ctx context.Context, start, end uin failedNumbers = append(failedNumbers, msg.L2Number) } // If erc721 event don't match, alert it. - go ch.SlackNotify(fmt.Sprintf("erc721 event don't match, message: %v", msg)) + data, _ := json.Marshal(msg) + go ch.SlackNotify(fmt.Sprintf("erc721 event don't match, message: %s", string(data))) log.Error("the erc721 deposit count or amount doesn't match", "start", start, "end", end, "event_type", orm.L2FinalizeDepositERC721, "l1_tx_hash", msg.L1TxHash, "l2_tx_hash", msg.L2TxHash) } } @@ -179,7 +183,8 @@ func (ch *ChainMonitor) confirmDepositEvents(ctx context.Context, start, end uin failedNumbers = append(failedNumbers, msg.L2Number) } // If erc1155 event don't match, alert it. - go ch.SlackNotify(fmt.Sprintf("erc1155 event don't match, message: %v", msg)) + data, _ := json.Marshal(msg) + go ch.SlackNotify(fmt.Sprintf("erc1155 event don't match, message: %s", string(data))) log.Error("the erc1155 deposit count or amount doesn't match", "start", start, "end", end, "event_type", orm.L2FinalizeDepositERC1155, "l1_tx_hash", msg.L1TxHash, "l2_tx_hash", msg.L2TxHash) } }