@@ -154,7 +154,7 @@ func (nb *sequencerBenchmark) Run(ctx context.Context, metricsCollector metrics.
154154 flashblocksClient := sequencerClient .FlashblocksClient ()
155155 if flashblocksClient != nil {
156156 nb .log .Info ("Starting flashblocks collection" )
157- flashblockCollector = newFlashblockCollector ()
157+ flashblockCollector = newFlashblockCollector (nb . log )
158158 flashblocksClient .AddListener (flashblockCollector )
159159
160160 if err := flashblocksClient .Start (benchmarkCtx ); err != nil {
@@ -204,23 +204,26 @@ func (nb *sequencerBenchmark) Run(ctx context.Context, metricsCollector metrics.
204204
205205 go func () {
206206 consensusClient := consensus .NewSequencerConsensusClient (nb .log , sequencerClient .Client (), sequencerClient .AuthClient (), mempool , consensus.ConsensusClientOptions {
207- BlockTime : params .BlockTime ,
208- GasLimit : params .GasLimit ,
209- GasLimitSetup : 1e9 , // 1G gas
207+ BlockTime : params .BlockTime ,
208+ GasLimit : params .GasLimit ,
209+ GasLimitSetup : 1e9 , // 1G gas
210210 ParallelTxBatches : nb .config .Config .ParallelTxBatches (),
211211 }, headBlockHash , headBlockNumber , l1Chain , nb .config .BatcherAddr ())
212212
213213 payloads := make ([]engine.ExecutableData , 0 )
214214
215+ var lastSetupPayload * engine.ExecutableData
215216 setupLoop:
216217 for {
217218 _blockMetrics := metrics .NewBlockMetrics ()
218- _ , err := consensusClient .Propose (benchmarkCtx , _blockMetrics , true )
219+ setupPayload , err := consensusClient .Propose (benchmarkCtx , _blockMetrics , true )
219220 if err != nil {
220221 errChan <- err
221222 return
222223 }
223224
225+ lastSetupPayload = setupPayload
226+
224227 select {
225228 case <- setupComplete :
226229 break setupLoop
@@ -231,6 +234,8 @@ func (nb *sequencerBenchmark) Run(ctx context.Context, metricsCollector metrics.
231234
232235 }
233236
237+ payloads = append (payloads , * lastSetupPayload )
238+
234239 blockMetrics := metrics .NewBlockMetrics ()
235240
236241 // run for a few blocks
@@ -276,7 +281,7 @@ func (nb *sequencerBenchmark) Run(ctx context.Context, metricsCollector metrics.
276281 return nil , 0 , err
277282 case payloads := <- payloadResult :
278283 // Collect flashblocks if available
279- var flashblocks []types.FlashblocksPayloadV1
284+ var flashblocks map [ uint64 ] []types.FlashblocksPayloadV1
280285 if flashblockCollector != nil {
281286 flashblocks = flashblockCollector .GetFlashblocks ()
282287 nb .log .Info ("Collected flashblocks" , "count" , len (flashblocks ))
@@ -286,37 +291,50 @@ func (nb *sequencerBenchmark) Run(ctx context.Context, metricsCollector metrics.
286291 ExecutablePayloads : payloads ,
287292 Flashblocks : flashblocks ,
288293 }
289- return result , payloads [0 ].Number - 1 , nil
294+ return result , payloads [0 ].Number , nil
290295 }
291296}
292297
293298// flashblockCollector implements FlashblockListener to collect flashblocks.
294299type flashblockCollector struct {
295- flashblocks []types.FlashblocksPayloadV1
296- mu sync.Mutex
300+ log log.Logger
301+ flashblocks map [uint64 ][]types.FlashblocksPayloadV1
302+ currentBaseBlock * uint64
303+ mu sync.Mutex
297304}
298305
299306// newFlashblockCollector creates a new flashblock collector.
300- func newFlashblockCollector () * flashblockCollector {
307+ func newFlashblockCollector (log log. Logger ) * flashblockCollector {
301308 return & flashblockCollector {
302- flashblocks : make ([]types.FlashblocksPayloadV1 , 0 ),
309+ flashblocks : make (map [uint64 ][]types.FlashblocksPayloadV1 ),
310+ log : log ,
303311 }
304312}
305313
306314// OnFlashblock implements FlashblockListener.
307315func (c * flashblockCollector ) OnFlashblock (flashblock types.FlashblocksPayloadV1 ) {
308316 c .mu .Lock ()
309317 defer c .mu .Unlock ()
310- c .flashblocks = append (c .flashblocks , flashblock )
318+ if flashblock .Base != nil {
319+ baseBlock := uint64 (flashblock .Base .BlockNumber )
320+ c .currentBaseBlock = & baseBlock
321+ } else if c .currentBaseBlock == nil {
322+ c .log .Warn ("received flashblock without base block number" )
323+ return
324+ }
325+ c .log .Info ("Collected flashblock" , "block_number" , * c .currentBaseBlock , "index" , flashblock .Index , "tx_count" , len (flashblock .Diff .Transactions ))
326+ c .flashblocks [* c .currentBaseBlock ] = append (c .flashblocks [* c .currentBaseBlock ], flashblock )
311327}
312328
313329// GetFlashblocks returns all collected flashblocks.
314- func (c * flashblockCollector ) GetFlashblocks () []types.FlashblocksPayloadV1 {
330+ func (c * flashblockCollector ) GetFlashblocks () map [ uint64 ] []types.FlashblocksPayloadV1 {
315331 c .mu .Lock ()
316332 defer c .mu .Unlock ()
317333
318334 // Return a copy to avoid race conditions
319- result := make ([]types.FlashblocksPayloadV1 , len (c .flashblocks ))
320- copy (result , c .flashblocks )
335+ result := make (map [uint64 ][]types.FlashblocksPayloadV1 )
336+ for blockNumber , flashblocks := range c .flashblocks {
337+ result [blockNumber ] = append ([]types.FlashblocksPayloadV1 {}, flashblocks ... )
338+ }
321339 return result
322340}
0 commit comments