From 1f88c54430c378a078ac9dcd707539c6c3c7b649 Mon Sep 17 00:00:00 2001 From: matthewkeil Date: Thu, 18 Jul 2024 16:59:40 -0300 Subject: [PATCH] refactor: getDataColumnSidecars for PR comments --- packages/beacon-node/src/util/blobs.ts | 36 +++++++++---------- .../beacon-node/test/unit/util/kzg.test.ts | 1 - 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/packages/beacon-node/src/util/blobs.ts b/packages/beacon-node/src/util/blobs.ts index f49bfa4def20..c9dda47324f8 100644 --- a/packages/beacon-node/src/util/blobs.ts +++ b/packages/beacon-node/src/util/blobs.ts @@ -76,6 +76,10 @@ export function getDataColumnSidecars( contents: deneb.Contents & {kzgCommitmentsInclusionProof?: peerdas.KzgCommitmentsInclusionProof} ): peerdas.DataColumnSidecars { const blobKzgCommitments = (signedBlock as deneb.SignedBeaconBlock).message.body.blobKzgCommitments; + const {blobs} = contents; + if (!Array.isArray(blobs)) { + throw Error("Invalid block with missing blobs for computeBlobSidecars"); + } if (blobKzgCommitments === undefined) { throw Error("Invalid block with missing blobKzgCommitments for computeBlobSidecars"); } @@ -86,25 +90,19 @@ export function getDataColumnSidecars( const signedBlockHeader = signedBlockToSignedHeader(config, signedBlock); const kzgCommitmentsInclusionProof = contents.kzgCommitmentsInclusionProof ?? computeKzgCommitmentsInclusionProof(fork, signedBlock.message.body); + const cellsAndProofs = blobs.map((blob) => ckzg.computeCellsAndKzgProofs(blob)); - const dataColumnSidecar = { - index: j, - column, - kzgCommitments: blobKzgCommitments, - kzgProofs, - signedBlockHeader, - kzgCommitmentsInclusionProof, - } as peerdas.DataColumnSidecar; - - contents.blobs.map(ckzg.computeCellsAndKzgProofs).forEach(([cells, proofs], rowNumber) => { - cells.map((cell, columnNumber) => { - if (rowNumber === 0) { - sidecars[columnNumber].index = columnNumber; - } - sidecars[columnNumber].column[rowNumber] = cell; - sidecars[columnNumber].kzgProofs[rowNumber] = proofs[columnNumber]; - }); + return Array.from({length: NUMBER_OF_COLUMNS}, (_, columnIndex) => { + // columnIndex'th column + const column = Array.from({length: blobs.length}, (_, rowNumber) => cellsAndProofs[rowNumber][0][columnIndex]); + const kzgProofs = Array.from({length: blobs.length}, (_, rowNumber) => cellsAndProofs[rowNumber][1][columnIndex]); + return { + index: columnIndex, + column, + kzgCommitments: blobKzgCommitments, + kzgProofs, + signedBlockHeader, + kzgCommitmentsInclusionProof, + }; }); - - return sidecars; } diff --git a/packages/beacon-node/test/unit/util/kzg.test.ts b/packages/beacon-node/test/unit/util/kzg.test.ts index fcb568252788..a68c803dc167 100644 --- a/packages/beacon-node/test/unit/util/kzg.test.ts +++ b/packages/beacon-node/test/unit/util/kzg.test.ts @@ -8,7 +8,6 @@ import {computeBlobSidecars, getDataColumnSidecars, kzgCommitmentToVersionedHash import {loadEthereumTrustedSetup, initCKZG, ckzg, FIELD_ELEMENTS_PER_BLOB_MAINNET} from "../../../src/util/kzg.js"; import {validateBlobSidecars, validateGossipBlobSidecar} from "../../../src/chain/validation/blobSidecar.js"; import {getBlobCellAndProofs} from "../../utils/getBlobCellAndProofs.js"; -import {linspace} from "../../../src/util/numpy.js"; describe("C-KZG", () => { const afterEachCallbacks: (() => Promise | void)[] = [];