@aztec/blob-lib
Advanced tools
@@ -88,3 +88,3 @@ import { BLOBS_PER_CHECKPOINT, MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants'; | ||
| const blobFieldsHash = await computeBlobFieldsHash(blobFields); | ||
| const blobs = getBlobsPerL1Block(blobFields); | ||
| const blobs = await getBlobsPerL1Block(blobFields); | ||
| for (const blob of blobs){ | ||
@@ -108,3 +108,3 @@ // Compute the challenge z for each blob and accumulate it. | ||
| // Now we have a shared challenge for all blobs, evaluate them... | ||
| const proofObjects = allBlobs.map((b)=>b.evaluate(z)); | ||
| const proofObjects = await Promise.all(allBlobs.map((b)=>b.evaluate(z))); | ||
| const evaluations = await Promise.all(proofObjects.map(({ y })=>hashNoirBigNumLimbs(y))); | ||
@@ -131,3 +131,3 @@ // ...and find the challenge for the linear combination of blobs. | ||
| */ async accumulateBlob(blob, blobFieldsHash) { | ||
| const { proof, y: thisY } = blob.evaluate(this.finalBlobChallenges.z); | ||
| const { proof, y: thisY } = await blob.evaluate(this.finalBlobChallenges.z); | ||
| const thisC = BLS12Point.decompress(blob.commitment); | ||
@@ -168,3 +168,3 @@ const thisQ = BLS12Point.decompress(proof); | ||
| */ async accumulateFields(blobFields) { | ||
| const blobs = getBlobsPerL1Block(blobFields); | ||
| const blobs = await getBlobsPerL1Block(blobFields); | ||
| if (blobs.length > BLOBS_PER_CHECKPOINT) { | ||
@@ -171,0 +171,0 @@ throw new Error(`Too many blobs to accumulate. The maximum is ${BLOBS_PER_CHECKPOINT} per checkpoint. Got ${blobs.length}.`); |
@@ -19,3 +19,3 @@ import { BLS12Point } from '@aztec/foundation/curves/bls12'; | ||
| */ | ||
| export declare function getBlobsPerL1Block(fields: Fr[]): Blob[]; | ||
| export declare function getBlobsPerL1Block(fields: Fr[]): Promise<Blob[]>; | ||
| /** | ||
@@ -41,2 +41,2 @@ * Get the encoded data from all blobs in the checkpoint. | ||
| export declare function getEthBlobEvaluationInputs(batchedBlob: BatchedBlob): `0x${string}`; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFzQyxNQUFNLHFCQUFxQixDQUFDO0FBR2xHOzs7OztHQUtHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVMxRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FTdkQ7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FHbkY7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FFM0Q7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUV2RTtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx3QkFBZ0IsMEJBQTBCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVNsRiJ9 | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFzQyxNQUFNLHFCQUFxQixDQUFDO0FBR2xHOzs7OztHQUtHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVMxRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FXdEU7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FHbkY7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FFM0Q7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUV2RTtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx3QkFBZ0IsMEJBQTBCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVNsRiJ9 |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"blob_utils.d.ts","sourceRoot":"","sources":["../src/blob_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,kBAAkB,EAAsC,MAAM,qBAAqB,CAAC;AAGlG;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,EAAE,CAS1E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CASvD;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAGnF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAE3D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAEvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,MAAM,EAAE,CASlF"} | ||
| {"version":3,"file":"blob_utils.d.ts","sourceRoot":"","sources":["../src/blob_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,kBAAkB,EAAsC,MAAM,qBAAqB,CAAC;AAGlG;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,MAAM,EAAE,CAS1E;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAWtE;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,kBAAkB,CAGnF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAE3D;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAEvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,MAAM,EAAE,CASlF"} |
@@ -27,3 +27,3 @@ import { FIELDS_PER_BLOB } from '@aztec/constants'; | ||
| * @throws If the number of fields does not match what's indicated by the checkpoint prefix. | ||
| */ export function getBlobsPerL1Block(fields) { | ||
| */ export async function getBlobsPerL1Block(fields) { | ||
| if (!fields.length) { | ||
@@ -33,5 +33,5 @@ throw new Error('Cannot create blobs from empty fields.'); | ||
| const numBlobs = Math.ceil(fields.length / FIELDS_PER_BLOB); | ||
| return Array.from({ | ||
| return await Promise.all(Array.from({ | ||
| length: numBlobs | ||
| }, (_, i)=>Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB))); | ||
| }, (_, i)=>Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB)))); | ||
| } | ||
@@ -38,0 +38,0 @@ /** |
+7
-7
@@ -37,5 +37,5 @@ import { FIELDS_PER_BLOB } from '@aztec/constants'; | ||
| * | ||
| * @throws If data does not match the expected length (BYTES_PER_BLOB). | ||
| * @throws If data does not match the expected length (getBytesPerBlob()). | ||
| */ | ||
| static fromBlobBuffer(data: Uint8Array): Blob; | ||
| static fromBlobBuffer(data: Uint8Array): Promise<Blob>; | ||
| /** | ||
@@ -49,3 +49,3 @@ * Create a Blob from an array of fields. | ||
| */ | ||
| static fromFields(fields: Fr[]): Blob; | ||
| static fromFields(fields: Fr[]): Promise<Blob>; | ||
| /** | ||
@@ -69,3 +69,3 @@ * Get the fields from the blob data. | ||
| */ | ||
| static fromJson(json: BlobJson): Blob; | ||
| static fromJson(json: BlobJson): Promise<Blob>; | ||
| /** | ||
@@ -93,6 +93,6 @@ * Get the JSON representation of the blob. | ||
| */ | ||
| evaluate(challengeZ: Fr, verifyProof?: boolean): { | ||
| evaluate(challengeZ: Fr, verifyProof?: boolean): Promise<{ | ||
| y: BLS12Fr; | ||
| proof: Buffer<ArrayBuffer>; | ||
| }; | ||
| }>; | ||
| /** | ||
@@ -125,2 +125,2 @@ * Get the buffer representation of the ENTIRE blob. | ||
| } | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gscUJBQWEsSUFBSTtJQUViOztPQUVHO2FBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7YUFDYSxVQUFVLEVBQUUsTUFBTTtJQVJwQztJQUNFOztPQUVHO0lBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7SUFDYSxVQUFVLEVBQUUsTUFBTSxFQVFuQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBRzVDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FRcEM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLElBQUksRUFBRSxFQUFFLENBSWY7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSSxDQVNwQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLElBQUksUUFBUSxDQU1qQjtJQUVELHVCQUF1QixJQUFJLE1BQU0sQ0FFaEM7SUFFRDs7O09BR0c7SUFDRyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFdkQ7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVE7OztNQVUzQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUdsRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxXQUVOO0lBRUQsTUFBTSxDQUFDLGtCQUFrQjs7OztNQVV4QjtDQUNGIn0= | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gscUJBQWEsSUFBSTtJQUViOztPQUVHO2FBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7YUFDYSxVQUFVLEVBQUUsTUFBTTtJQVJwQztJQUNFOztPQUVHO0lBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7SUFDYSxVQUFVLEVBQUUsTUFBTSxFQVFuQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQWEsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUczRDtJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFhLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVFuRDtJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FJZjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE9BQWEsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVNuRDtJQUVEOzs7O09BSUc7SUFDSCxNQUFNLElBQUksUUFBUSxDQU1qQjtJQUVELHVCQUF1QixJQUFJLE1BQU0sQ0FFaEM7SUFFRDs7O09BR0c7SUFDRyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFdkQ7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDRyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVE7OztPQVVqRDtJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUdsRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxXQUVOO0lBRUQsTUFBTSxDQUFDLGtCQUFrQjs7OztNQVV4QjtDQUNGIn0= |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"blob.d.ts","sourceRoot":"","sources":["../src/blob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;GAMG;AACH,qBAAa,IAAI;IAEb;;OAEG;aACa,IAAI,EAAE,UAAU;IAChC;;OAEG;aACa,UAAU,EAAE,MAAM;IARpC;IACE;;OAEG;IACa,IAAI,EAAE,UAAU;IAChC;;OAEG;IACa,UAAU,EAAE,MAAM,EAQnC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAG5C;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAQpC;IAED;;;;;;OAMG;IACH,QAAQ,IAAI,EAAE,EAAE,CAIf;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CASpC;IAED;;;;OAIG;IACH,MAAM,IAAI,QAAQ,CAMjB;IAED,uBAAuB,IAAI,MAAM,CAEhC;IAED;;;OAGG;IACG,iBAAiB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEvD;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,WAAW,UAAQ;;;MAU3C;IAED;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGlD;IAED;;OAEG;IACH,OAAO,WAEN;IAED,MAAM,CAAC,kBAAkB;;;;MAUxB;CACF"} | ||
| {"version":3,"file":"blob.d.ts","sourceRoot":"","sources":["../src/blob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;GAMG;AACH,qBAAa,IAAI;IAEb;;OAEG;aACa,IAAI,EAAE,UAAU;IAChC;;OAEG;aACa,UAAU,EAAE,MAAM;IARpC;IACE;;OAEG;IACa,IAAI,EAAE,UAAU;IAChC;;OAEG;IACa,UAAU,EAAE,MAAM,EAQnC;IAED;;;;;;OAMG;IACH,OAAa,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAG3D;IAED;;;;;;;OAOG;IACH,OAAa,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnD;IAED;;;;;;OAMG;IACH,QAAQ,IAAI,EAAE,EAAE,CAIf;IAED;;;;;;;;;OASG;IACH,OAAa,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CASnD;IAED;;;;OAIG;IACH,MAAM,IAAI,QAAQ,CAMjB;IAED,uBAAuB,IAAI,MAAM,CAEhC;IAED;;;OAGG;IACG,iBAAiB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEvD;IAED;;;;;;;;;OASG;IACG,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,WAAW,UAAQ;;;OAUjD;IAED;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGlD;IAED;;OAEG;IACH,OAAO,WAEN;IAED,MAAM,CAAC,kBAAkB;;;;MAUxB;CACF"} |
+15
-15
@@ -6,3 +6,3 @@ import { FIELDS_PER_BLOB } from '@aztec/constants'; | ||
| import { computeBlobCommitment, computeChallengeZ, computeEthVersionedBlobHash } from './hash.js'; | ||
| import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js'; | ||
| import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js'; | ||
| export { FIELDS_PER_BLOB }; | ||
@@ -25,7 +25,7 @@ /** | ||
| this.commitment = commitment; | ||
| if (data.length !== BYTES_PER_BLOB) { | ||
| throw new Error(`Blob data must be ${BYTES_PER_BLOB} bytes. Got ${data.length}.`); | ||
| if (data.length !== getBytesPerBlob()) { | ||
| throw new Error(`Blob data must be ${getBytesPerBlob()} bytes. Got ${data.length}.`); | ||
| } | ||
| if (commitment.length !== BYTES_PER_COMMITMENT) { | ||
| throw new Error(`Blob commitment must be ${BYTES_PER_COMMITMENT} bytes. Got ${commitment.length}.`); | ||
| if (commitment.length !== getBytesPerCommitment()) { | ||
| throw new Error(`Blob commitment must be ${getBytesPerCommitment()} bytes. Got ${commitment.length}.`); | ||
| } | ||
@@ -38,5 +38,5 @@ } | ||
| * | ||
| * @throws If data does not match the expected length (BYTES_PER_BLOB). | ||
| */ static fromBlobBuffer(data) { | ||
| const commitment = computeBlobCommitment(data); | ||
| * @throws If data does not match the expected length (getBytesPerBlob()). | ||
| */ static async fromBlobBuffer(data) { | ||
| const commitment = await computeBlobCommitment(data); | ||
| return new Blob(data, commitment); | ||
@@ -51,3 +51,3 @@ } | ||
| * @returns A Blob created from the array of fields. | ||
| */ static fromFields(fields) { | ||
| */ static async fromFields(fields) { | ||
| if (fields.length > FIELDS_PER_BLOB) { | ||
@@ -58,4 +58,4 @@ throw new Error(`Attempted to overfill blob with ${fields.length} fields. The maximum is ${FIELDS_PER_BLOB}.`); | ||
| serializeToBuffer(fields) | ||
| ], BYTES_PER_BLOB); | ||
| const commitment = computeBlobCommitment(data); | ||
| ], getBytesPerBlob()); | ||
| const commitment = await computeBlobCommitment(data); | ||
| return new Blob(data, commitment); | ||
@@ -83,5 +83,5 @@ } | ||
| * @returns A Blob created from the JSON object. | ||
| */ static fromJson(json) { | ||
| */ static async fromJson(json) { | ||
| const blobBuffer = Buffer.from(json.blob.slice(2), 'hex'); | ||
| const blob = Blob.fromBlobBuffer(blobBuffer); | ||
| const blob = await Blob.fromBlobBuffer(blobBuffer); | ||
| if (blob.commitment.toString('hex') !== json.kzg_commitment.slice(2)) { | ||
@@ -121,5 +121,5 @@ throw new Error('KZG commitment does not match'); | ||
| * proof: Buffer - KZG opening proof for y = p(z). The commitment to quotient polynomial Q, used in compressed BLS12 point format (48 bytes). | ||
| */ evaluate(challengeZ, verifyProof = false) { | ||
| */ async evaluate(challengeZ, verifyProof = false) { | ||
| const kzg = getKzg(); | ||
| const res = kzg.computeKzgProof(this.data, challengeZ.toBuffer()); | ||
| const res = await kzg.asyncComputeKzgProof(this.data, challengeZ.toBuffer()); | ||
| if (verifyProof && !kzg.verifyKzgProof(this.commitment, challengeZ.toBuffer(), res[1], res[0])) { | ||
@@ -126,0 +126,0 @@ throw new Error(`KZG proof did not verify.`); |
+2
-2
@@ -21,3 +21,3 @@ import { BLS12Fr } from '@aztec/foundation/curves/bls12'; | ||
| export declare function computeBlobFieldsHash(fields: Fr[]): Promise<Fr>; | ||
| export declare function computeBlobCommitment(data: Uint8Array): Buffer; | ||
| export declare function computeBlobCommitment(data: Uint8Array): Promise<Buffer>; | ||
| /** | ||
@@ -44,2 +44,2 @@ * Get the commitment fields of the blob, to compute the challenge z. | ||
| export declare function hashNoirBigNumLimbs(field: BLS12Fr): Promise<Fr>; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU9wRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FJdEU7QUFPRCx3QkFBZ0IsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUVyRTtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBSXJFO0FBRUQsd0JBQWdCLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsTUFBTSxDQU05RDtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCx3QkFBZ0Isa0JBQWtCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FNL0Q7QUFFRCx3QkFBc0IsaUJBQWlCLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FHM0Y7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBR3JFIn0= | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU9wRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FJdEU7QUFPRCx3QkFBZ0IsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUVyRTtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBSXJFO0FBRUQsd0JBQXNCLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU03RTtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCx3QkFBZ0Isa0JBQWtCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FNL0Q7QUFFRCx3QkFBc0IsaUJBQWlCLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FHM0Y7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBR3JFIn0= |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAOpD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAItE;AAOD,wBAAgB,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAIrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAM9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAM/D;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAG3F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAGrE"} | ||
| {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAOpD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAItE;AAOD,wBAAgB,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAIrE;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAM/D;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAG3F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAGrE"} |
+8
-8
| import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon'; | ||
| import { sha256, sha256ToField } from '@aztec/foundation/crypto/sha256'; | ||
| import { Fr } from '@aztec/foundation/curves/bn254'; | ||
| import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js'; | ||
| import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js'; | ||
| import { SpongeBlob } from './sponge_blob.js'; | ||
@@ -38,7 +38,7 @@ const VERSIONED_HASH_VERSION_KZG = 0x01; | ||
| } | ||
| export function computeBlobCommitment(data) { | ||
| if (data.length !== BYTES_PER_BLOB) { | ||
| throw new Error(`Expected ${BYTES_PER_BLOB} bytes per blob. Got ${data.length}.`); | ||
| export async function computeBlobCommitment(data) { | ||
| if (data.length !== getBytesPerBlob()) { | ||
| throw new Error(`Expected ${getBytesPerBlob()} bytes per blob. Got ${data.length}.`); | ||
| } | ||
| return Buffer.from(getKzg().blobToKzgCommitment(data)); | ||
| return Buffer.from(await getKzg().asyncBlobToKzgCommitment(data)); | ||
| } | ||
@@ -59,8 +59,8 @@ /** | ||
| */ export function commitmentToFields(commitment) { | ||
| if (commitment.length !== BYTES_PER_COMMITMENT) { | ||
| throw new Error(`Expected ${BYTES_PER_COMMITMENT} bytes for blob commitment. Got ${commitment.length}.`); | ||
| if (commitment.length !== getBytesPerCommitment()) { | ||
| throw new Error(`Expected ${getBytesPerCommitment()} bytes for blob commitment. Got ${commitment.length}.`); | ||
| } | ||
| return [ | ||
| new Fr(commitment.subarray(0, 31)), | ||
| new Fr(commitment.subarray(31, BYTES_PER_COMMITMENT)) | ||
| new Fr(commitment.subarray(31, getBytesPerCommitment())) | ||
| ]; | ||
@@ -67,0 +67,0 @@ } |
@@ -1,3 +0,5 @@ | ||
| import { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| export * from '@crate-crypto/node-eth-kzg'; | ||
| import type { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| export type { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| export declare function getBytesPerBlob(): number; | ||
| export declare function getBytesPerCommitment(): number; | ||
| /** | ||
@@ -8,2 +10,2 @@ * Returns the lazily-initialized KZG context. | ||
| export declare function getKzg(): DasContextJs; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3pnX2NvbnRleHQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9remdfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsY0FBYyw0QkFBNEIsQ0FBQztBQUkzQzs7O0dBR0c7QUFDSCx3QkFBZ0IsTUFBTSxJQUFJLFlBQVksQ0FLckMifQ== | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3pnX2NvbnRleHQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9remdfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU0vRCxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFlL0Qsd0JBQWdCLGVBQWUsSUFBSSxNQUFNLENBRXhDO0FBRUQsd0JBQWdCLHFCQUFxQixJQUFJLE1BQU0sQ0FFOUM7QUFJRDs7O0dBR0c7QUFDSCx3QkFBZ0IsTUFBTSxJQUFJLFlBQVksQ0FLckMifQ== |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"kzg_context.d.ts","sourceRoot":"","sources":["../src/kzg_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,cAAc,4BAA4B,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,MAAM,IAAI,YAAY,CAKrC"} | ||
| {"version":3,"file":"kzg_context.d.ts","sourceRoot":"","sources":["../src/kzg_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe/D,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAID;;;GAGG;AACH,wBAAgB,MAAM,IAAI,YAAY,CAKrC"} |
+18
-3
@@ -1,3 +0,18 @@ | ||
| import { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| export * from '@crate-crypto/node-eth-kzg'; | ||
| import { createRequire } from 'module'; | ||
| let nativeModule; | ||
| /** Lazily loads the @crate-crypto/node-eth-kzg native module. */ function loadNativeModule() { | ||
| if (!nativeModule) { | ||
| const require = createRequire(import.meta.url); | ||
| nativeModule = require('@crate-crypto/node-eth-kzg'); | ||
| } | ||
| return nativeModule; | ||
| } | ||
| // Ethereum blob constants, loaded lazily from the native module. | ||
| // Values: BYTES_PER_BLOB=131072, BYTES_PER_COMMITMENT=48 | ||
| export function getBytesPerBlob() { | ||
| return loadNativeModule().BYTES_PER_BLOB; | ||
| } | ||
| export function getBytesPerCommitment() { | ||
| return loadNativeModule().BYTES_PER_COMMITMENT; | ||
| } | ||
| let kzgInstance; | ||
@@ -9,3 +24,3 @@ /** | ||
| if (!kzgInstance) { | ||
| kzgInstance = DasContextJs.create({ | ||
| kzgInstance = loadNativeModule().DasContextJs.create({ | ||
| usePrecomp: true | ||
@@ -12,0 +27,0 @@ }); |
@@ -30,3 +30,3 @@ import { Blob } from './blob.js'; | ||
| */ | ||
| export declare function makeRandomBlob(length: number): Blob; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDaEcsT0FBTyxFQUFtQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxjQUFjLHdCQUF3QixDQUFDO0FBRXZDOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxJQUFJLFNBQUksR0FBRyxVQUFVLENBVW5EO0FBMEJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLElBQUksU0FBSSxHQUFHLGVBQWUsQ0FTN0Q7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsSUFBSSxTQUFJLHdCQU9oRDtBQUVELHdCQUFnQiwrQkFBK0IsQ0FBQyxJQUFJLFNBQUksK0JBRXZEO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFbkQifQ== | ||
| export declare function makeRandomBlob(length: number): Promise<Blob>; | ||
| //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDaEcsT0FBTyxFQUFtQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxjQUFjLHdCQUF3QixDQUFDO0FBRXZDOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxJQUFJLFNBQUksR0FBRyxVQUFVLENBVW5EO0FBMEJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLElBQUksU0FBSSxHQUFHLGVBQWUsQ0FTN0Q7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsSUFBSSxTQUFJLHdCQU9oRDtBQUVELHdCQUFnQiwrQkFBK0IsQ0FBQyxJQUFJLFNBQUksK0JBRXZEO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUQifQ== |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAmB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,cAAc,wBAAwB,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAI,GAAG,UAAU,CAUnD;AA0BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAI,GAAG,eAAe,CAS7D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAI,wBAOhD;AAED,wBAAgB,+BAA+B,CAAC,IAAI,SAAI,+BAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD"} | ||
| {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAmB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,cAAc,wBAAwB,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAI,GAAG,UAAU,CAUnD;AA0BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAI,GAAG,eAAe,CAS7D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAI,wBAOhD;AAED,wBAAgB,+BAA+B,CAAC,IAAI,SAAI,+BAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D"} |
+3
-3
| { | ||
| "name": "@aztec/blob-lib", | ||
| "version": "0.0.1-commit.8f9871590", | ||
| "version": "0.0.1-commit.9117c5f5a", | ||
| "type": "module", | ||
@@ -30,4 +30,4 @@ "exports": { | ||
| "dependencies": { | ||
| "@aztec/constants": "0.0.1-commit.8f9871590", | ||
| "@aztec/foundation": "0.0.1-commit.8f9871590", | ||
| "@aztec/constants": "0.0.1-commit.9117c5f5a", | ||
| "@aztec/foundation": "0.0.1-commit.9117c5f5a", | ||
| "@crate-crypto/node-eth-kzg": "^0.10.0", | ||
@@ -34,0 +34,0 @@ "tslib": "^2.4.0" |
@@ -112,3 +112,3 @@ import { BLOBS_PER_CHECKPOINT, MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants'; | ||
| const blobFieldsHash = await computeBlobFieldsHash(blobFields); | ||
| const blobs = getBlobsPerL1Block(blobFields); | ||
| const blobs = await getBlobsPerL1Block(blobFields); | ||
| for (const blob of blobs) { | ||
@@ -130,3 +130,3 @@ // Compute the challenge z for each blob and accumulate it. | ||
| // Now we have a shared challenge for all blobs, evaluate them... | ||
| const proofObjects = allBlobs.map(b => b.evaluate(z)); | ||
| const proofObjects = await Promise.all(allBlobs.map(b => b.evaluate(z))); | ||
| const evaluations = await Promise.all(proofObjects.map(({ y }) => hashNoirBigNumLimbs(y))); | ||
@@ -150,3 +150,3 @@ // ...and find the challenge for the linear combination of blobs. | ||
| async accumulateBlob(blob: Blob, blobFieldsHash: Fr) { | ||
| const { proof, y: thisY } = blob.evaluate(this.finalBlobChallenges.z); | ||
| const { proof, y: thisY } = await blob.evaluate(this.finalBlobChallenges.z); | ||
| const thisC = BLS12Point.decompress(blob.commitment); | ||
@@ -198,3 +198,3 @@ const thisQ = BLS12Point.decompress(proof); | ||
| async accumulateFields(blobFields: Fr[]) { | ||
| const blobs = getBlobsPerL1Block(blobFields); | ||
| const blobs = await getBlobsPerL1Block(blobFields); | ||
@@ -201,0 +201,0 @@ if (blobs.length > BLOBS_PER_CHECKPOINT) { |
@@ -33,3 +33,3 @@ import { FIELDS_PER_BLOB } from '@aztec/constants'; | ||
| */ | ||
| export function getBlobsPerL1Block(fields: Fr[]): Blob[] { | ||
| export async function getBlobsPerL1Block(fields: Fr[]): Promise<Blob[]> { | ||
| if (!fields.length) { | ||
@@ -40,4 +40,6 @@ throw new Error('Cannot create blobs from empty fields.'); | ||
| const numBlobs = Math.ceil(fields.length / FIELDS_PER_BLOB); | ||
| return Array.from({ length: numBlobs }, (_, i) => | ||
| Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB)), | ||
| return await Promise.all( | ||
| Array.from({ length: numBlobs }, (_, i) => | ||
| Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB)), | ||
| ), | ||
| ); | ||
@@ -44,0 +46,0 @@ } |
+15
-15
@@ -8,3 +8,3 @@ import { FIELDS_PER_BLOB } from '@aztec/constants'; | ||
| import type { BlobJson } from './interface.js'; | ||
| import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js'; | ||
| import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js'; | ||
@@ -31,7 +31,7 @@ export { FIELDS_PER_BLOB }; | ||
| ) { | ||
| if (data.length !== BYTES_PER_BLOB) { | ||
| throw new Error(`Blob data must be ${BYTES_PER_BLOB} bytes. Got ${data.length}.`); | ||
| if (data.length !== getBytesPerBlob()) { | ||
| throw new Error(`Blob data must be ${getBytesPerBlob()} bytes. Got ${data.length}.`); | ||
| } | ||
| if (commitment.length !== BYTES_PER_COMMITMENT) { | ||
| throw new Error(`Blob commitment must be ${BYTES_PER_COMMITMENT} bytes. Got ${commitment.length}.`); | ||
| if (commitment.length !== getBytesPerCommitment()) { | ||
| throw new Error(`Blob commitment must be ${getBytesPerCommitment()} bytes. Got ${commitment.length}.`); | ||
| } | ||
@@ -45,6 +45,6 @@ } | ||
| * | ||
| * @throws If data does not match the expected length (BYTES_PER_BLOB). | ||
| * @throws If data does not match the expected length (getBytesPerBlob()). | ||
| */ | ||
| static fromBlobBuffer(data: Uint8Array): Blob { | ||
| const commitment = computeBlobCommitment(data); | ||
| static async fromBlobBuffer(data: Uint8Array): Promise<Blob> { | ||
| const commitment = await computeBlobCommitment(data); | ||
| return new Blob(data, commitment); | ||
@@ -61,3 +61,3 @@ } | ||
| */ | ||
| static fromFields(fields: Fr[]): Blob { | ||
| static async fromFields(fields: Fr[]): Promise<Blob> { | ||
| if (fields.length > FIELDS_PER_BLOB) { | ||
@@ -67,4 +67,4 @@ throw new Error(`Attempted to overfill blob with ${fields.length} fields. The maximum is ${FIELDS_PER_BLOB}.`); | ||
| const data = Buffer.concat([serializeToBuffer(fields)], BYTES_PER_BLOB); | ||
| const commitment = computeBlobCommitment(data); | ||
| const data = Buffer.concat([serializeToBuffer(fields)], getBytesPerBlob()); | ||
| const commitment = await computeBlobCommitment(data); | ||
| return new Blob(data, commitment); | ||
@@ -96,5 +96,5 @@ } | ||
| */ | ||
| static fromJson(json: BlobJson): Blob { | ||
| static async fromJson(json: BlobJson): Promise<Blob> { | ||
| const blobBuffer = Buffer.from(json.blob.slice(2), 'hex'); | ||
| const blob = Blob.fromBlobBuffer(blobBuffer); | ||
| const blob = await Blob.fromBlobBuffer(blobBuffer); | ||
@@ -143,5 +143,5 @@ if (blob.commitment.toString('hex') !== json.kzg_commitment.slice(2)) { | ||
| */ | ||
| evaluate(challengeZ: Fr, verifyProof = false) { | ||
| async evaluate(challengeZ: Fr, verifyProof = false) { | ||
| const kzg = getKzg(); | ||
| const res = kzg.computeKzgProof(this.data, challengeZ.toBuffer()); | ||
| const res = await kzg.asyncComputeKzgProof(this.data, challengeZ.toBuffer()); | ||
| if (verifyProof && !kzg.verifyKzgProof(this.commitment, challengeZ.toBuffer(), res[1], res[0])) { | ||
@@ -148,0 +148,0 @@ throw new Error(`KZG proof did not verify.`); |
+8
-8
@@ -6,3 +6,3 @@ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon'; | ||
| import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js'; | ||
| import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js'; | ||
| import { SpongeBlob } from './sponge_blob.js'; | ||
@@ -48,8 +48,8 @@ | ||
| export function computeBlobCommitment(data: Uint8Array): Buffer { | ||
| if (data.length !== BYTES_PER_BLOB) { | ||
| throw new Error(`Expected ${BYTES_PER_BLOB} bytes per blob. Got ${data.length}.`); | ||
| export async function computeBlobCommitment(data: Uint8Array): Promise<Buffer> { | ||
| if (data.length !== getBytesPerBlob()) { | ||
| throw new Error(`Expected ${getBytesPerBlob()} bytes per blob. Got ${data.length}.`); | ||
| } | ||
| return Buffer.from(getKzg().blobToKzgCommitment(data)); | ||
| return Buffer.from(await getKzg().asyncBlobToKzgCommitment(data)); | ||
| } | ||
@@ -72,7 +72,7 @@ | ||
| export function commitmentToFields(commitment: Buffer): [Fr, Fr] { | ||
| if (commitment.length !== BYTES_PER_COMMITMENT) { | ||
| throw new Error(`Expected ${BYTES_PER_COMMITMENT} bytes for blob commitment. Got ${commitment.length}.`); | ||
| if (commitment.length !== getBytesPerCommitment()) { | ||
| throw new Error(`Expected ${getBytesPerCommitment()} bytes for blob commitment. Got ${commitment.length}.`); | ||
| } | ||
| return [new Fr(commitment.subarray(0, 31)), new Fr(commitment.subarray(31, BYTES_PER_COMMITMENT))]; | ||
| return [new Fr(commitment.subarray(0, 31)), new Fr(commitment.subarray(31, getBytesPerCommitment()))]; | ||
| } | ||
@@ -79,0 +79,0 @@ |
+28
-3
@@ -1,5 +0,30 @@ | ||
| import { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| import type { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| import { createRequire } from 'module'; | ||
| export * from '@crate-crypto/node-eth-kzg'; | ||
| // Re-export the type only. The native module is loaded lazily to avoid | ||
| // creating a napi-rs CustomGC handle at import time, which keeps the | ||
| // Node.js event loop alive and can deadlock process.exit(). | ||
| export type { DasContextJs } from '@crate-crypto/node-eth-kzg'; | ||
| let nativeModule: typeof import('@crate-crypto/node-eth-kzg') | undefined; | ||
| /** Lazily loads the @crate-crypto/node-eth-kzg native module. */ | ||
| function loadNativeModule(): typeof import('@crate-crypto/node-eth-kzg') { | ||
| if (!nativeModule) { | ||
| const require = createRequire(import.meta.url); | ||
| nativeModule = require('@crate-crypto/node-eth-kzg') as typeof import('@crate-crypto/node-eth-kzg'); | ||
| } | ||
| return nativeModule!; | ||
| } | ||
| // Ethereum blob constants, loaded lazily from the native module. | ||
| // Values: BYTES_PER_BLOB=131072, BYTES_PER_COMMITMENT=48 | ||
| export function getBytesPerBlob(): number { | ||
| return loadNativeModule().BYTES_PER_BLOB; | ||
| } | ||
| export function getBytesPerCommitment(): number { | ||
| return loadNativeModule().BYTES_PER_COMMITMENT; | ||
| } | ||
| let kzgInstance: DasContextJs | undefined; | ||
@@ -13,5 +38,5 @@ | ||
| if (!kzgInstance) { | ||
| kzgInstance = DasContextJs.create({ usePrecomp: true }); | ||
| kzgInstance = loadNativeModule().DasContextJs.create({ usePrecomp: true }); | ||
| } | ||
| return kzgInstance; | ||
| } |
+1
-1
@@ -92,4 +92,4 @@ import { makeTuple } from '@aztec/foundation/array'; | ||
| */ | ||
| export function makeRandomBlob(length: number): Blob { | ||
| export function makeRandomBlob(length: number): Promise<Blob> { | ||
| return Blob.fromFields([...Array.from({ length: length }, () => Fr.random())]); | ||
| } |
Debug access
Supply chain riskUses debug, reflection and dynamic code execution features.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
655802
0.39%8146
0.49%12
20%+ Added
+ Added
+ Added
- Removed
- Removed
- Removed