@@ -131,18 +131,13 @@ public async Task Add(Block block, TxReceipt[] receipts, CancellationToken cance
131131
132132 RlpBehaviors rlpBehaviors = spec . IsEip658Enabled ? RlpBehaviors . Eip658Receipts : RlpBehaviors . None ;
133133
134- ( ValueHash256 BeaconBlockRoot , ValueHash256 StateRoot ) ? roots = null ;
134+ AddEncodedPayloads ( block , receipts , rlpBehaviors , spec . IsEip658Enabled ) ;
135135
136136 if ( isPostMerge && _beaconRootsProvider is not null && _slotTime is not null )
137137 {
138138 long slot = ( long ) _slotTime . GetSlot ( block . Header . Timestamp * MillisecondsPerSecond ) ;
139- roots = await _beaconRootsProvider . GetBeaconRoots ( slot , cancellation ) ;
140- }
141-
142- AddEncodedPayloads ( block , receipts , rlpBehaviors , spec . IsEip658Enabled ) ;
143-
144- if ( isPostMerge )
145- {
139+ ( ValueHash256 BeaconBlockRoot , ValueHash256 StateRoot ) ? roots =
140+ await _beaconRootsProvider . GetBeaconRoots ( slot , cancellation ) ;
146141 _blocksRootContext ! . ProcessBlock ( block , roots ? . BeaconBlockRoot , roots ? . StateRoot ) ;
147142 }
148143 else
@@ -399,56 +394,38 @@ private static void DisposePayloads(ArrayPoolList<ArrayPoolSpan<byte>> payloads)
399394 payloads . Clear ( ) ;
400395 }
401396
402- private static void DisposeAddedOrOwned (
403- ArrayPoolList < ArrayPoolSpan < byte > > payloads ,
404- int originalCount ,
405- ArrayPoolSpan < byte > payload ,
406- bool ownsPayload )
397+ private void AddEncodedPayloads ( Block block , TxReceipt [ ] receipts , RlpBehaviors rlpBehaviors , bool isEip658 )
407398 {
408- if ( payloads . Count > originalCount )
399+ ArrayPoolSpan < byte > headerRlp = _headerDecoder . EncodeToArrayPoolSpan ( block . Header , rlpBehaviors ) ;
400+ try
409401 {
410- payloads [ ^ 1 ] . Dispose ( ) ;
411- payloads . RemoveAt ( payloads . Count - 1 ) ;
402+ _headers . Add ( headerRlp ) ;
412403 }
413- else if ( ownsPayload )
404+ catch
414405 {
415- payload . Dispose ( ) ;
406+ headerRlp . Dispose ( ) ;
407+ throw ;
416408 }
417- }
418-
419- private void AddEncodedPayloads ( Block block , TxReceipt [ ] receipts , RlpBehaviors rlpBehaviors , bool isEip658 )
420- {
421- ArrayPoolSpan < byte > headerRlp = _headerDecoder . EncodeToArrayPoolSpan ( block . Header , rlpBehaviors ) ;
422- ArrayPoolSpan < byte > bodyRlp = default ;
423- ArrayPoolSpan < byte > receiptRlp = default ;
424-
425- bool ownsHeader = true ;
426- bool ownsBody = false ;
427- bool ownsReceipt = false ;
428-
429- int headersCount = _headers . Count ;
430- int bodiesCount = _bodies . Count ;
431- int receiptsCount = _receipts . Count ;
432409
410+ ArrayPoolSpan < byte > bodyRlp = _blockBodyDecoder . EncodeToArrayPoolSpan ( block . Body , rlpBehaviors ) ;
433411 try
434412 {
435- bodyRlp = _blockBodyDecoder . EncodeToArrayPoolSpan ( block . Body , rlpBehaviors ) ;
436- ownsBody = true ;
437- receiptRlp = EncodeSlimReceipts ( receipts , isEip658 ) ;
438- ownsReceipt = true ;
439-
440- _headers . Add ( headerRlp ) ;
441- ownsHeader = false ;
442413 _bodies . Add ( bodyRlp ) ;
443- ownsBody = false ;
414+ }
415+ catch
416+ {
417+ bodyRlp . Dispose ( ) ;
418+ throw ;
419+ }
420+
421+ ArrayPoolSpan < byte > receiptRlp = EncodeSlimReceipts ( receipts , isEip658 ) ;
422+ try
423+ {
444424 _receipts . Add ( receiptRlp ) ;
445- ownsReceipt = false ;
446425 }
447426 catch
448427 {
449- DisposeAddedOrOwned ( _headers , headersCount , headerRlp , ownsHeader ) ;
450- DisposeAddedOrOwned ( _bodies , bodiesCount , bodyRlp , ownsBody ) ;
451- DisposeAddedOrOwned ( _receipts , receiptsCount , receiptRlp , ownsReceipt ) ;
428+ receiptRlp . Dispose ( ) ;
452429 throw ;
453430 }
454431 }
0 commit comments