Skip to content

Commit 89fc7ad

Browse files
authored
integrate new column quarantine into the column flow (#7187)
* integrate new column quarantine into the column flow * rest fix * fix * review comments * address review
1 parent 3e4e606 commit 89fc7ad

File tree

12 files changed

+230
-324
lines changed

12 files changed

+230
-324
lines changed

beacon_chain/beacon_node.nim

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ import
2323
./el/el_manager,
2424
./consensus_object_pools/[
2525
blockchain_dag, blob_quarantine, block_quarantine, consensus_manager,
26-
data_column_quarantine, attestation_pool, sync_committee_msg_pool, validator_change_pool,
26+
attestation_pool, sync_committee_msg_pool, validator_change_pool,
2727
blockchain_list],
28-
./spec/datatypes/[base, altair],
28+
./spec/datatypes/[base, altair, fulu],
2929
./spec/eth2_apis/dynamic_fee_recipients,
3030
./spec/signatures_batch,
3131
./sync/[sync_manager, request_manager, sync_types],
@@ -56,6 +56,7 @@ type
5656
phase0AttSlashQueue*: AsyncEventQueue[phase0.AttesterSlashing]
5757
electraAttSlashQueue*: AsyncEventQueue[electra.AttesterSlashing]
5858
blobSidecarQueue*: AsyncEventQueue[BlobSidecarInfoObject]
59+
columnSidecarQueue*: AsyncEventQueue[DataColumnSidecar]
5960
finalQueue*: AsyncEventQueue[FinalizationInfoObject]
6061
reorgQueue*: AsyncEventQueue[ReorgInfoObject]
6162
contribQueue*: AsyncEventQueue[SignedContributionAndProof]
@@ -81,7 +82,7 @@ type
8182
list*: ChainListRef
8283
quarantine*: ref Quarantine
8384
blobQuarantine*: ref BlobQuarantine
84-
dataColumnQuarantine*: ref DataColumnQuarantine
85+
dataColumnQuarantine*: ref ColumnQuarantine
8586
attestationPool*: ref AttestationPool
8687
syncCommitteeMsgPool*: ref SyncCommitteeMsgPool
8788
lightClientPool*: ref LightClientPool

beacon_chain/consensus_object_pools/blob_quarantine.nim

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type
3434
maxSidecarsCount: int
3535
maxSidecarsPerBlockCount: int
3636
sidecarsCount: int
37-
custodyColumns: seq[ColumnIndex]
37+
custodyColumns*: seq[ColumnIndex]
3838
custodyMap: ColumnMap
3939
roots: Table[Eth2Digest, RootTableRecord[A]]
4040
usage: OrderedSet[Eth2Digest]
@@ -328,6 +328,19 @@ func hasSidecars*(
328328
## ``blck`` with block root ``blockRoot``.
329329
hasSidecars(quarantine, blck.root, blck)
330330

331+
func peekSidecars*(
332+
quarantine: ColumnQuarantine,
333+
blockRoot: Eth2Digest
334+
): seq[DataColumnSidecar] =
335+
## Function returns the sidecars stored in the ColumnQuarantine
336+
## for a specific block root ``blockRoot``.
337+
let record = quarantine.roots.getOrDefault(blockRoot)
338+
if len(record.sidecars) == 0:
339+
# Block root not found or sidecars sequence was not initialized.
340+
return @[]
341+
342+
record.sidecars.mapIt(it[]) # Dereference and return the sidecars
343+
331344
func popSidecars*(
332345
quarantine: var BlobQuarantine,
333346
blockRoot: Eth2Digest,
@@ -516,6 +529,78 @@ func fetchMissingSidecars*(
516529
res.add(DataColumnIdentifier(block_root: blockRoot, index: column))
517530
res
518531

532+
func fetchMissingColumnsByRoot*(
533+
quarantine: ColumnQuarantine,
534+
blockRoot: Eth2Digest,
535+
blck: fulu.SignedBeaconBlock,
536+
peerCustodyColumns: openArray[ColumnIndex] = []
537+
): seq[DataColumnsByRootIdentifier] =
538+
## Function returns a sequence of DataColumnsByRootIdentifier for data columns
539+
## which are missing for the block associated with root ``blockRoot`` and block ``blck``.
540+
var res: seq[DataColumnsByRootIdentifier]
541+
var missingIndices: DataColumnIndices
542+
let record = quarantine.roots.getOrDefault(blockRoot)
543+
544+
if len(blck.message.body.blob_kzg_commitments) == 0:
545+
# Fast-path if block does not have any columns
546+
return res
547+
548+
let
549+
supernode = (len(quarantine.custodyColumns) == NUMBER_OF_COLUMNS)
550+
columnsCount =
551+
if supernode:
552+
(NUMBER_OF_COLUMNS div 2 + 1)
553+
else:
554+
len(quarantine.custodyColumns)
555+
556+
if supernode:
557+
let
558+
columns =
559+
if len(peerCustodyColumns) > 0:
560+
@peerCustodyColumns
561+
else:
562+
quarantine.custodyColumns
563+
if len(record.sidecars) == 0:
564+
var columnsRequested = 0
565+
for column in columns:
566+
if columnsRequested >= columnsCount:
567+
# We don't need to request more than (NUMBER_OF_COLUMNS div 2 + 1)
568+
# columns.
569+
break
570+
discard missingIndices.add(column)
571+
inc(columnsRequested)
572+
else:
573+
if record.count >= columnsCount:
574+
return res
575+
var columnsRequested = 0
576+
for column in columns:
577+
if record.count + columnsRequested >= columnsCount:
578+
# We don't need to request more than (NUMBER_OF_COLUMNS div 2 + 1)
579+
# columns.
580+
break
581+
let index = quarantine.getIndex(column)
582+
if (index == -1) or record.sidecars[index].isNil():
583+
discard missingIndices.add(column)
584+
inc(columnsRequested)
585+
else:
586+
let peerMap =
587+
if len(peerCustodyColumns) > 0:
588+
ColumnMap.init(peerCustodyColumns)
589+
else:
590+
ColumnMap.init(quarantine.custodyColumns)
591+
if len(record.sidecars) == 0:
592+
for column in (peerMap and quarantine.custodyMap).items():
593+
discard missingIndices.add(column)
594+
else:
595+
for column in (peerMap and quarantine.custodyMap).items():
596+
let index = quarantine.getIndex(column)
597+
if (index == -1) or (record.sidecars[index].isNil()):
598+
discard missingIndices.add(column)
599+
600+
if missingIndices.len > 0:
601+
res.add(DataColumnsByRootIdentifier(block_root: blockRoot, indices: missingIndices))
602+
res
603+
519604
func pruneAfterFinalization*[A, B](
520605
quarantine: var SidecarQuarantine[A, B],
521606
epoch: Epoch
@@ -575,7 +660,7 @@ func init*(
575660
T: typedesc[ColumnQuarantine],
576661
cfg: RuntimeConfig,
577662
custodyColumns: openArray[ColumnIndex],
578-
onBlobSidecarCallback: OnDataColumnSidecarCallback
663+
onDataColumnSidecarCallback: OnDataColumnSidecarCallback
579664
): ColumnQuarantine =
580665
doAssert(len(custodyColumns) <= NUMBER_OF_COLUMNS)
581666
let size = maxSidecars(NUMBER_OF_COLUMNS)
@@ -594,5 +679,5 @@ func init*(
594679
indexMap: indexMap,
595680
custodyColumns: @custodyColumns,
596681
custodyMap: ColumnMap.init(custodyColumns),
597-
onSidecarCallback: onBlobSidecarCallback
682+
onSidecarCallback: onDataColumnSidecarCallback
598683
)

beacon_chain/consensus_object_pools/data_column_quarantine.nim

Lines changed: 0 additions & 172 deletions
This file was deleted.

0 commit comments

Comments
 (0)