@@ -12,6 +12,7 @@ import (
12
12
"github.com/scroll-tech/da-codec/encoding/codecv0"
13
13
"github.com/scroll-tech/da-codec/encoding/codecv1"
14
14
"github.com/scroll-tech/da-codec/encoding/codecv2"
15
+ "github.com/scroll-tech/da-codec/encoding/codecv3"
15
16
16
17
"github.com/scroll-tech/go-ethereum/accounts/abi"
17
18
"github.com/scroll-tech/go-ethereum/common"
@@ -456,10 +457,16 @@ func validateBatch(event *L1FinalizeBatchEvent, parentBatchMeta *rawdb.Finalized
456
457
return 0 , nil , fmt .Errorf ("failed to create codecv1 DA batch, batch index: %v, err: %w" , event .BatchIndex .Uint64 (), err )
457
458
}
458
459
localBatchHash = daBatch .Hash ()
459
- } else { // codecv2: batches after Curie
460
+ } else if ! chainCfg . IsDarwin ( startBlock . Header . Time ) { // codecv2: batches after Curie and before Darwin
460
461
daBatch , err := codecv2 .NewDABatch (batch )
461
462
if err != nil {
462
- return 0 , nil , fmt .Errorf ("failed to create codecv1 DA batch, batch index: %v, err: %w" , event .BatchIndex .Uint64 (), err )
463
+ return 0 , nil , fmt .Errorf ("failed to create codecv2 DA batch, batch index: %v, err: %w" , event .BatchIndex .Uint64 (), err )
464
+ }
465
+ localBatchHash = daBatch .Hash ()
466
+ } else { // codecv3: batches after Darwin
467
+ daBatch , err := codecv3 .NewDABatch (batch )
468
+ if err != nil {
469
+ return 0 , nil , fmt .Errorf ("failed to create codecv3 DA batch, batch index: %v, err: %w" , event .BatchIndex .Uint64 (), err )
463
470
}
464
471
localBatchHash = daBatch .Hash ()
465
472
}
@@ -555,6 +562,25 @@ func decodeBlockRangesFromEncodedChunks(codecVersion encoding.CodecVersion, chun
555
562
StartBlockNumber : daBlocks [0 ].BlockNumber ,
556
563
EndBlockNumber : daBlocks [len (daBlocks )- 1 ].BlockNumber ,
557
564
})
565
+ case encoding .CodecV3 :
566
+ if len (chunk ) != 1 + numBlocks * 60 {
567
+ return nil , fmt .Errorf ("invalid chunk byte length, expected: %v, got: %v" , 1 + numBlocks * 60 , len (chunk ))
568
+ }
569
+ daBlocks := make ([]* codecv3.DABlock , numBlocks )
570
+ for i := 0 ; i < numBlocks ; i ++ {
571
+ startIdx := 1 + i * 60 // add 1 to skip numBlocks byte
572
+ endIdx := startIdx + 60
573
+ daBlocks [i ] = & codecv3.DABlock {}
574
+ if err := daBlocks [i ].Decode (chunk [startIdx :endIdx ]); err != nil {
575
+ return nil , err
576
+ }
577
+ }
578
+
579
+ chunkBlockRanges = append (chunkBlockRanges , & rawdb.ChunkBlockRange {
580
+ StartBlockNumber : daBlocks [0 ].BlockNumber ,
581
+ EndBlockNumber : daBlocks [len (daBlocks )- 1 ].BlockNumber ,
582
+ })
583
+
558
584
default :
559
585
return nil , fmt .Errorf ("unexpected batch version %v" , codecVersion )
560
586
}
0 commit comments