Skip to content

Commit 8a46c04

Browse files
authored
Merge branch 'develop' into fix/scroll-chain-abi
2 parents a53725b + 6954c73 commit 8a46c04

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

params/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
const (
2525
VersionMajor = 5 // Major version component of the current release
2626
VersionMinor = 8 // Minor version component of the current release
27-
VersionPatch = 20 // Patch version component of the current release
27+
VersionPatch = 21 // Patch version component of the current release
2828
VersionMeta = "mainnet" // Version metadata to append to the version string
2929
)
3030

rollup/sync_service/sync_service.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package sync_service
22

33
import (
4+
"bytes"
45
"context"
56
"fmt"
67
"reflect"
@@ -15,6 +16,7 @@ import (
1516
"github.com/scroll-tech/go-ethereum/metrics"
1617
"github.com/scroll-tech/go-ethereum/node"
1718
"github.com/scroll-tech/go-ethereum/params"
19+
"github.com/scroll-tech/go-ethereum/rlp"
1820
)
1921

2022
const (
@@ -272,19 +274,43 @@ func (s *SyncService) fetchMessages() {
272274

273275
if len(msgs) > 0 {
274276
log.Debug("Received new L1 events", "fromBlock", from, "toBlock", to, "count", len(msgs))
275-
rawdb.WriteL1Messages(batchWriter, msgs) // collect messages in memory
276-
numMsgsCollected += len(msgs)
277277
}
278278

279279
for _, msg := range msgs {
280280
if msg.QueueIndex > 0 {
281281
queueIndex++
282282
}
283+
283284
// check if received queue index matches expected queue index
284-
if msg.QueueIndex != queueIndex {
285+
if msg.QueueIndex > queueIndex {
285286
log.Error("Unexpected queue index in SyncService", "expected", queueIndex, "got", msg.QueueIndex, "msg", msg)
286287
return // do not flush inconsistent data to disk
287288
}
289+
290+
// compare with stored message in database, abort if not equal, ignore if already exists
291+
if msg.QueueIndex < queueIndex {
292+
log.Warn("Duplicate queue index in SyncService", "expected", queueIndex, "got", msg.QueueIndex)
293+
294+
receivedMsgBytes, err := rlp.EncodeToBytes(msg)
295+
if err != nil {
296+
log.Error("Failed to encode message", "err", err)
297+
return
298+
}
299+
storedMsgBytes := rawdb.ReadL1MessageRLP(s.db, msg.QueueIndex)
300+
if !bytes.Equal(storedMsgBytes, receivedMsgBytes) {
301+
storedL1Message := rawdb.ReadL1Message(s.db, msg.QueueIndex)
302+
log.Error("Stored message at same queue index does not match received message", "queueIndex", msg.QueueIndex, "expected", storedL1Message, "got", msg)
303+
return
304+
}
305+
306+
// already exists, ignore
307+
queueIndex--
308+
continue
309+
}
310+
311+
// store message to database (collected in memory and flushed periodically)
312+
rawdb.WriteL1Message(batchWriter, msg)
313+
numMsgsCollected++
288314
}
289315

290316
numBlocksPendingDbWrite += to - from + 1

0 commit comments

Comments
 (0)