Skip to content

Commit 9779b4b

Browse files
authored
Optimize validate_data_columns (#7326)
1 parent 94ccd76 commit 9779b4b

File tree

1 file changed

+21
-32
lines changed

1 file changed

+21
-32
lines changed

beacon_node/beacon_chain/src/kzg_utils.rs

Lines changed: 21 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ use std::sync::Arc;
88
use types::beacon_block_body::KzgCommitments;
99
use types::data_column_sidecar::{Cell, DataColumn, DataColumnSidecarError};
1010
use types::{
11-
Blob, BlobSidecar, BlobSidecarList, ChainSpec, ColumnIndex, DataColumnSidecar,
12-
DataColumnSidecarList, EthSpec, Hash256, KzgCommitment, KzgProof, SignedBeaconBlock,
13-
SignedBeaconBlockHeader, SignedBlindedBeaconBlock,
11+
Blob, BlobSidecar, BlobSidecarList, ChainSpec, DataColumnSidecar, DataColumnSidecarList,
12+
EthSpec, Hash256, KzgCommitment, KzgProof, SignedBeaconBlock, SignedBeaconBlockHeader,
13+
SignedBlindedBeaconBlock,
1414
};
1515

1616
/// Converts a blob ssz List object to an array to be used with the kzg
@@ -79,38 +79,27 @@ pub fn validate_data_columns<'a, E: EthSpec, I>(
7979
where
8080
I: Iterator<Item = &'a Arc<DataColumnSidecar<E>>> + Clone,
8181
{
82-
let cells = data_column_iter
83-
.clone()
84-
.flat_map(|data_column| data_column.column.iter().map(ssz_cell_to_crypto_cell::<E>))
85-
.collect::<Result<Vec<_>, KzgError>>()?;
82+
let mut cells = Vec::new();
83+
let mut proofs = Vec::new();
84+
let mut column_indices = Vec::new();
85+
let mut commitments = Vec::new();
8686

87-
let proofs = data_column_iter
88-
.clone()
89-
.flat_map(|data_column| {
90-
data_column
91-
.kzg_proofs
92-
.iter()
93-
.map(|&proof| Bytes48::from(proof))
94-
})
95-
.collect::<Vec<_>>();
87+
for data_column in data_column_iter {
88+
let col_index = data_column.index;
9689

97-
let column_indices = data_column_iter
98-
.clone()
99-
.flat_map(|data_column| {
100-
let col_index = data_column.index;
101-
data_column.column.iter().map(move |_| col_index)
102-
})
103-
.collect::<Vec<ColumnIndex>>();
90+
for cell in &data_column.column {
91+
cells.push(ssz_cell_to_crypto_cell::<E>(cell)?);
92+
column_indices.push(col_index);
93+
}
10494

105-
let commitments = data_column_iter
106-
.clone()
107-
.flat_map(|data_column| {
108-
data_column
109-
.kzg_commitments
110-
.iter()
111-
.map(|&commitment| Bytes48::from(commitment))
112-
})
113-
.collect::<Vec<_>>();
95+
for &proof in &data_column.kzg_proofs {
96+
proofs.push(Bytes48::from(proof));
97+
}
98+
99+
for &commitment in &data_column.kzg_commitments {
100+
commitments.push(Bytes48::from(commitment));
101+
}
102+
}
114103

115104
kzg.verify_cell_proof_batch(&cells, &proofs, column_indices, &commitments)
116105
}

0 commit comments

Comments
 (0)