Skip to content

Commit de09af4

Browse files
committed
address review comments
1 parent 2043787 commit de09af4

File tree

3 files changed

+29
-30
lines changed

3 files changed

+29
-30
lines changed

encoding/codecv7.go

Lines changed: 25 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func (d *DACodecV7) NewDABlock(block *Block, totalL1MessagePoppedBefore uint64)
3838
if err != nil {
3939
return nil, fmt.Errorf("failed to calculate number of L1 messages: %w", err)
4040
}
41-
if totalL1MessagePoppedBefore+uint64(numL1Messages) != highestQueueIndex {
42-
return nil, fmt.Errorf("failed to sanity check L1 messages count: totalL1MessagePoppedBefore + numL1Messages != highestQueueIndex: %d + %d != %d", totalL1MessagePoppedBefore, numL1Messages, highestQueueIndex)
41+
if numL1Messages > 0 && totalL1MessagePoppedBefore+uint64(numL1Messages) != highestQueueIndex+1 {
42+
return nil, fmt.Errorf("failed to sanity check L1 messages count: totalL1MessagePoppedBefore + numL1Messages != highestQueueIndex+1: %d + %d != %d", totalL1MessagePoppedBefore, numL1Messages, highestQueueIndex+1)
4343
}
4444

4545
numL2Transactions := block.NumL2Transactions()
@@ -73,36 +73,40 @@ func (d *DACodecV7) NewDAChunk(chunk *Chunk, totalL1MessagePoppedBefore uint64)
7373
return nil, errors.New("number of blocks is 0")
7474
}
7575

76-
if len(chunk.Blocks) > math.MaxUint8 {
77-
return nil, fmt.Errorf("number of blocks (%d) exceeds maximum allowed (%d)", len(chunk.Blocks), math.MaxUint8)
76+
if len(chunk.Blocks) > math.MaxUint16 {
77+
return nil, fmt.Errorf("number of blocks (%d) exceeds maximum allowed (%d)", len(chunk.Blocks), math.MaxUint16)
7878
}
7979

80+
// sanity check: prevL1MessageQueueHash+apply(L1Messages) = postL1MessageQueueHash
81+
computedPostL1MessageQueueHash, err := MessageQueueV2ApplyL1MessagesFromBlocks(chunk.PrevL1MessageQueueHash, chunk.Blocks)
82+
if err != nil {
83+
return nil, fmt.Errorf("failed to apply L1 messages to prevL1MessageQueueHash: %w", err)
84+
}
85+
if computedPostL1MessageQueueHash != chunk.PostL1MessageQueueHash {
86+
return nil, fmt.Errorf("failed to sanity check postL1MessageQueueHash after applying all L1 messages: expected %s, got %s", computedPostL1MessageQueueHash, chunk.PostL1MessageQueueHash)
87+
}
88+
89+
if !chunk.Blocks[0].Header.Number.IsUint64() {
90+
return nil, errors.New("block number of initial block is not uint64")
91+
}
8092
initialL2BlockNumber := chunk.Blocks[0].Header.Number.Uint64()
8193
l1MessageIndex := totalL1MessagePoppedBefore
8294

8395
blocks := make([]DABlock, 0, len(chunk.Blocks))
8496
txs := make([][]*types.TransactionData, 0, len(chunk.Blocks))
8597

8698
for i, block := range chunk.Blocks {
99+
daBlock, err := d.NewDABlock(block, l1MessageIndex)
100+
if err != nil {
101+
return nil, fmt.Errorf("failed to create DABlock from block %d: %w", block.Header.Number.Uint64(), err)
102+
}
103+
l1MessageIndex += uint64(daBlock.NumL1Messages())
104+
87105
// sanity check: block numbers are contiguous
88106
if block.Header.Number.Uint64() != initialL2BlockNumber+uint64(i) {
89107
return nil, fmt.Errorf("invalid block number: expected %d but got %d", initialL2BlockNumber+uint64(i), block.Header.Number.Uint64())
90108
}
91109

92-
// sanity check (within NumL1MessagesNoSkipping): L1 message indices are contiguous within a block
93-
numL1Messages, _, highestQueueIndex, err := block.NumL1MessagesNoSkipping()
94-
if err != nil {
95-
return nil, fmt.Errorf("failed to get numL1Messages: %w", err)
96-
}
97-
// sanity check: L1 message indices are contiguous across blocks boundaries
98-
if numL1Messages > 0 {
99-
if l1MessageIndex+uint64(numL1Messages) != highestQueueIndex+1 {
100-
return nil, fmt.Errorf("failed to sanity check L1 messages count after block %d: l1MessageIndex + numL1Messages != highestQueueIndex+1: %d + %d != %d", block.Header.Number.Uint64(), l1MessageIndex, numL1Messages, highestQueueIndex+1)
101-
}
102-
l1MessageIndex += uint64(numL1Messages)
103-
}
104-
105-
daBlock := newDABlockV7(block.Header.Number.Uint64(), block.Header.Time, block.Header.BaseFee, block.Header.GasLimit, uint16(len(block.Transactions)), numL1Messages)
106110
blocks = append(blocks, daBlock)
107111
txs = append(txs, block.Transactions)
108112
}
@@ -112,15 +116,6 @@ func (d *DACodecV7) NewDAChunk(chunk *Chunk, totalL1MessagePoppedBefore uint64)
112116
txs, // transactions
113117
)
114118

115-
// sanity check: prevL1MessageQueueHash+apply(L1Messages) = postL1MessageQueueHash
116-
computedPostL1MessageQueueHash, err := MessageQueueV2ApplyL1MessagesFromBlocks(chunk.PrevL1MessageQueueHash, chunk.Blocks)
117-
if err != nil {
118-
return nil, fmt.Errorf("failed to apply L1 messages to prevL1MessageQueueHash: %w", err)
119-
}
120-
if computedPostL1MessageQueueHash != chunk.PostL1MessageQueueHash {
121-
return nil, fmt.Errorf("failed to sanity check postL1MessageQueueHash after applying all L1 messages: expected %s, got %s", computedPostL1MessageQueueHash, chunk.PostL1MessageQueueHash)
122-
}
123-
124119
return daChunk, nil
125120
}
126121

@@ -148,6 +143,9 @@ func (d *DACodecV7) NewDABatch(batch *Batch) (DABatch, error) {
148143
chunkBlocksCount++
149144
}
150145
}
146+
if chunkBlocksCount != totalBlocks {
147+
return nil, fmt.Errorf("chunks contain less blocks than the batch: %d < %d", chunkBlocksCount, totalBlocks)
148+
}
151149
}
152150

153151
blob, blobVersionedHash, blobBytes, err := d.constructBlob(batch)

encoding/codecv7_types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,9 @@ func (b *blobPayloadV7) Encode() ([]byte, error) {
251251
var l1MessageIndex *uint64
252252
var transactionBytes []byte
253253
for i, block := range b.blocks {
254+
if !block.Header.Number.IsUint64() {
255+
return nil, fmt.Errorf("block number is not a uint64: %s", block.Header.Number.String())
256+
}
254257
// sanity check: block numbers are contiguous
255258
if block.Header.Number.Uint64() != initialL2BlockNumber+uint64(i) {
256259
return nil, fmt.Errorf("invalid block number: expected %d but got %d", initialL2BlockNumber+uint64(i), block.Header.Number.Uint64())

encoding/da.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -261,9 +261,7 @@ func convertTxDataToRLPEncoding(txData *types.TransactionData) ([]byte, error) {
261261
S: txData.S.ToInt(),
262262
})
263263

264-
case types.L1MessageTxType: // L1MessageTxType is not supported
265-
fallthrough
266-
default:
264+
default: // BlobTxType, SetCodeTxType, L1MessageTxType
267265
return nil, fmt.Errorf("unsupported tx type: %d", txData.Type)
268266
}
269267

0 commit comments

Comments
 (0)