change check logic

This commit is contained in:
maskpp
2023-02-14 10:56:59 +08:00
parent 714343c2b8
commit 6aa02874c0
4 changed files with 56 additions and 55 deletions

View File

@@ -9,7 +9,6 @@ import (
"github.com/scroll-tech/go-ethereum/accounts/abi"
"github.com/scroll-tech/go-ethereum/common"
"github.com/scroll-tech/go-ethereum/common/math"
"github.com/scroll-tech/go-ethereum/crypto"
"github.com/scroll-tech/go-ethereum/log"
"modernc.org/mathutil"
@@ -75,12 +74,12 @@ func NewLayer1Relayer(ctx context.Context, db orm.L1MessageOrm, cfg *config.Rela
}
func (r *Layer1Relayer) checkSubmittedMessages() error {
var blockNumber uint64 = math.MaxUint64
var blockNumber uint64
BEGIN:
msgs, err := r.db.GetL1Messages(
map[string]interface{}{"status": orm.MsgSubmitted},
fmt.Sprintf("AND height < %d", blockNumber),
fmt.Sprintf("ORDER BY height DESC LIMIT %d", 100),
fmt.Sprintf("AND height > %d", blockNumber),
fmt.Sprintf("ORDER BY height ASC LIMIT %d", 100),
)
if err != nil || len(msgs) == 0 {
return err
@@ -95,9 +94,9 @@ BEGIN:
}
msg, msgs = msgs[0], msgs[1:]
blockNumber = mathutil.MinUint64(blockNumber, msg.Height)
blockNumber = mathutil.MaxUint64(blockNumber, msg.Height)
data, err := r.packMessage(msg)
data, err := r.packRelayMessage(msg)
if err != nil {
continue
}
@@ -162,7 +161,7 @@ func (r *Layer1Relayer) packRelayMessage(msg *orm.L1Message) ([]byte, error) {
}
func (r *Layer1Relayer) processSavedEvent(msg *orm.L1Message) error {
data, err := r.packMessage(msg)
data, err := r.packRelayMessage(msg)
if err != nil {
return err
}

View File

@@ -7,7 +7,6 @@ import (
"time"
"github.com/scroll-tech/go-ethereum/common"
"github.com/scroll-tech/go-ethereum/common/math"
"github.com/scroll-tech/go-ethereum/log"
"modernc.org/mathutil"
@@ -18,12 +17,12 @@ import (
)
func (r *Layer2Relayer) checkCommittingBatches() error {
var blockNumber uint64 = math.MaxUint64
var blockNumber uint64
BEGIN:
batches, err := r.db.GetBlockBatches(
map[string]interface{}{"rollup_status": orm.RollupCommitting},
fmt.Sprintf("AND end_block_number < %d", blockNumber),
fmt.Sprintf("ORDER BY end_block_number DESC LIMIT %d", 10),
fmt.Sprintf("AND end_block_number > %d", blockNumber),
fmt.Sprintf("ORDER BY end_block_number ASC LIMIT %d", 10),
)
if err != nil || len(batches) == 0 {
return err
@@ -39,7 +38,7 @@ BEGIN:
batch, batches = batches[0], batches[1:]
id := batch.ID
blockNumber = mathutil.MinUint64(blockNumber, batch.EndBlockNumber)
blockNumber = mathutil.MaxUint64(blockNumber, batch.EndBlockNumber)
txStr, err := r.db.GetCommitTxHash(id)
if err != nil {

View File

@@ -3,7 +3,6 @@ package l2
import (
"errors"
"fmt"
"math"
"math/big"
"time"
@@ -20,14 +19,14 @@ import (
func (r *Layer2Relayer) checkFinalizingBatches() error {
var (
batchLimit = 10
blockNumber uint64 = math.MaxUint64
batchLimit = 10
blockNumber uint64
)
BEGIN:
batches, err := r.db.GetBlockBatches(
map[string]interface{}{"rollup_status": orm.RollupFinalizing},
fmt.Sprintf("AND end_block_number < %d", blockNumber),
fmt.Sprintf("ORDER BY end_block_number DESC LIMIT %d", batchLimit),
fmt.Sprintf("AND end_block_number > %d", blockNumber),
fmt.Sprintf("ORDER BY end_block_number ASC LIMIT %d", batchLimit),
)
if err != nil || len(batches) == 0 {
return err
@@ -43,7 +42,7 @@ BEGIN:
batch, batches = batches[0], batches[1:]
id := batch.ID
blockNumber = mathutil.MinUint64(blockNumber, batch.EndBlockNumber)
blockNumber = mathutil.MaxUint64(blockNumber, batch.EndBlockNumber)
txStr, err := r.db.GetFinalizeTxHash(id)
if err != nil {

View File

@@ -30,47 +30,51 @@ func (r *Layer2Relayer) checkSubmittedMessages() error {
return nil
}
blockNumber := batch.EndBlockNumber
BEGIN:
// msgs are sorted by nonce in increasing order
msgs, err := r.db.GetL2Messages(
map[string]interface{}{"status": orm.MsgSubmitted},
fmt.Sprintf("AND height < %d", blockNumber),
fmt.Sprintf("ORDER BY height DESC LIMIT %d", r.messageSender.PendingLimit()),
)
if err != nil || len(msgs) == 0 {
return err
}
for msg := msgs[0]; len(msgs) > 0; { //nolint:staticcheck
// If pending txs pool is full, wait a while and retry.
if r.messageSender.IsFull() {
log.Warn("layer2 message tx sender is full")
time.Sleep(time.Millisecond * 500)
continue
var batchLimit uint64 = 10
for start, end := batch.StartBlockNumber, batch.StartBlockNumber; start <= batch.EndBlockNumber; start = end + 1 {
if end += batchLimit; end > batch.EndBlockNumber {
end = batch.EndBlockNumber
}
msg, msgs = msgs[0], msgs[1:]
blockNumber = mathutil.MinUint64(blockNumber, msg.Height)
data, err := r.packRelayMessage(msg, batch.Index)
if err != nil {
continue
}
err = r.messageSender.LoadOrSendTx(
common.HexToHash(msg.Layer1Hash),
msg.MsgHash,
&r.cfg.MessengerContractAddress,
big.NewInt(0),
data,
// msgs are sorted by nonce in increasing order
msgs, err := r.db.GetL2Messages(
map[string]interface{}{"status": orm.MsgSubmitted},
fmt.Sprintf("AND height >= %d AND height <= %d", start, end),
"ORDER BY height ASC",
)
if err != nil {
log.Error("failed to load or send l2 submitted tx", "batch id", batch.ID, "msg hash", msg.MsgHash, "err", err)
} else {
r.processingMessage.Store(msg.MsgHash, msg.MsgHash)
if err != nil || len(msgs) == 0 {
return err
}
for msg := msgs[0]; len(msgs) > 0; { //nolint:staticcheck
// If pending txs pool is full, wait a while and retry.
if r.messageSender.IsFull() {
log.Warn("layer2 message tx sender is full")
time.Sleep(time.Millisecond * 500)
continue
}
msg, msgs = msgs[0], msgs[1:]
data, err := r.packRelayMessage(msg, batch.Index)
if err != nil {
continue
}
err = r.messageSender.LoadOrSendTx(
common.HexToHash(msg.Layer1Hash),
msg.MsgHash,
&r.cfg.MessengerContractAddress,
big.NewInt(0),
data,
)
if err != nil {
log.Error("failed to load or send l2 submitted tx", "batch id", batch.ID, "msg hash", msg.MsgHash, "err", err)
} else {
r.processingMessage.Store(msg.MsgHash, msg.MsgHash)
}
}
}
goto BEGIN
return nil
}
// ProcessSavedEvents relays saved un-processed cross-domain transactions to desired blockchain