diff --git a/beacon_chain/consensus_object_pools/data_column_quarantine.nim b/beacon_chain/consensus_object_pools/data_column_quarantine.nim index a1eea6669..308013b71 100644 --- a/beacon_chain/consensus_object_pools/data_column_quarantine.nim +++ b/beacon_chain/consensus_object_pools/data_column_quarantine.nim @@ -129,9 +129,9 @@ func hasMissingDataColumns*(quarantine: DataColumnQuarantine, get_custody_columns(quarantine.nodeid, max(SAMPLES_PER_SLOT.uint64, localSubnetCount)) - for i in localCustodyColumns: - if (blck.root, ColumnIndex i) notin quarantine.data_columns: + if (blck.root, ColumnIndex i) notin quarantine.data_columns and + len(blck.message.body.blob_kzg_commitments) != 0: return false true diff --git a/beacon_chain/gossip_processing/eth2_processor.nim b/beacon_chain/gossip_processing/eth2_processor.nim index e517da3bb..cf8ee9b8f 100644 --- a/beacon_chain/gossip_processing/eth2_processor.nim +++ b/beacon_chain/gossip_processing/eth2_processor.nim @@ -398,15 +398,16 @@ proc processDataColumnSidecar*( let columnless = o.unsafeGet() withBlck(columnless): when consensusFork >= ConsensusFork.Deneb: - let - columns = self.dataColumnQuarantine[].gatherDataColumns(forkyBlck) - if columns.len >= (NUMBER_OF_COLUMNS div 2): - let - reconstructed_columns = - self.processReconstructionFromGossip(forkyBlck, columns) - for rc in reconstructed_columns.get: - self.dataColumnQuarantine[].put(newClone(rc)) if self.dataColumnQuarantine[].hasEnoughDataColumns(forkyBlck): + let + columns = self.dataColumnQuarantine[].gatherDataColumns(forkyBlck) + if columns.len >= (NUMBER_OF_COLUMNS div 2) or + self.dataColumnQuarantine[].supernode: + let + reconstructed_columns = + self.processReconstructionFromGossip(forkyBlck, columns) + for rc in reconstructed_columns.get: + self.dataColumnQuarantine[].put(newClone(rc)) self.blockProcessor[].enqueueBlock( MsgSource.gossip, columnless, Opt.none(BlobSidecars),