UNPKG

@lodestar/beacon-node

Version:

A Typescript implementation of the beacon chain

35 lines 1.98 kB
import { CELLS_PER_EXT_BLOB } from "@lodestar/params"; import { kzg } from "../../util/kzg.js"; /** * Optionally sanity-check that the KZG commitments match the versioned hashes in the transactions * https://github.com/ethereum/consensus-specs/blob/11a037fd9227e29ee809c9397b09f8cc3383a8c0/specs/eip4844/validator.md#blob-kzg-commitments */ export async function validateBlobsAndKzgCommitments(commitments, proofs, blobs) { if (blobs.length !== commitments.length) { throw Error(`Blobs bundle blobs len ${blobs.length} != commitments len ${commitments.length}`); } if (proofs.length !== blobs.length) { throw new Error(`Invalid proofs length for BlobsBundleV1 format: expected ${blobs.length}, got ${proofs.length}`); } if (!(await kzg.asyncVerifyBlobKzgProofBatch(blobs, commitments, proofs))) { throw new Error("Error in verifyBlobKzgProofBatch"); } } /** * Optionally sanity-check that the KZG commitments match the versioned hashes in the transactions */ export async function validateCellsAndKzgCommitments(commitments, proofs, cells) { if (cells.length !== commitments.length) { throw Error(`Blobs bundle cells len ${cells.length} != commitments len ${commitments.length}`); } const expectedProofsLength = cells.length * CELLS_PER_EXT_BLOB; if (proofs.length !== expectedProofsLength) { throw Error(`Invalid proofs length for BlobsBundleV2 format: expected ${expectedProofsLength}, got ${proofs.length}`); } const commitmentBytes = commitments.flatMap((commitment) => Array(CELLS_PER_EXT_BLOB).fill(commitment)); const cellIndices = Array.from({ length: cells.length }).flatMap(() => Array.from({ length: CELLS_PER_EXT_BLOB }, (_, i) => i)); if (!(await kzg.asyncVerifyCellKzgProofBatch(commitmentBytes, cellIndices, cells.flat(), proofs.flat()))) { throw new Error("Error in verifyCellKzgProofBatch"); } } //# sourceMappingURL=validateBlobsAndKzgCommitments.js.map