@@ -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 )
0 commit comments