@aztec/blob-lib 3.0.0-nightly.20251127 → 3.0.0-nightly.20251128

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dest/batched_blob.d.ts +25 -0
  2. package/dest/batched_blob.d.ts.map +1 -0
  3. package/dest/batched_blob.js +20 -0
  4. package/dest/blob.d.ts +4 -10
  5. package/dest/blob.d.ts.map +1 -1
  6. package/dest/blob_batching.d.ts +30 -80
  7. package/dest/blob_batching.d.ts.map +1 -1
  8. package/dest/blob_batching.js +46 -87
  9. package/dest/blob_utils.d.ts +14 -1
  10. package/dest/blob_utils.d.ts.map +1 -1
  11. package/dest/blob_utils.js +21 -1
  12. package/dest/circuit_types/blob_accumulator.d.ts +2 -1
  13. package/dest/circuit_types/blob_accumulator.d.ts.map +1 -1
  14. package/dest/circuit_types/blob_accumulator.js +3 -0
  15. package/dest/circuit_types/final_blob_accumulator.d.ts +1 -1
  16. package/dest/circuit_types/final_blob_accumulator.d.ts.map +1 -1
  17. package/dest/circuit_types/final_blob_batching_challenges.d.ts +1 -1
  18. package/dest/circuit_types/final_blob_batching_challenges.d.ts.map +1 -1
  19. package/dest/circuit_types/index.d.ts +1 -1
  20. package/dest/encoding/block_blob_data.d.ts +1 -1
  21. package/dest/encoding/block_end_marker.d.ts +1 -1
  22. package/dest/encoding/block_end_state_field.d.ts +1 -1
  23. package/dest/encoding/checkpoint_blob_data.d.ts +1 -1
  24. package/dest/encoding/checkpoint_end_marker.d.ts +1 -1
  25. package/dest/encoding/fixtures.d.ts +1 -1
  26. package/dest/encoding/index.d.ts +2 -1
  27. package/dest/encoding/index.d.ts.map +1 -1
  28. package/dest/encoding/index.js +1 -0
  29. package/dest/encoding/tx_blob_data.d.ts +1 -1
  30. package/dest/encoding/tx_start_marker.d.ts +1 -1
  31. package/dest/errors.d.ts +1 -1
  32. package/dest/errors.d.ts.map +1 -1
  33. package/dest/hash.d.ts +1 -1
  34. package/dest/index.d.ts +2 -2
  35. package/dest/index.d.ts.map +1 -1
  36. package/dest/index.js +1 -1
  37. package/dest/interface.d.ts +1 -1
  38. package/dest/kzg_context.d.ts +1 -1
  39. package/dest/sponge_blob.d.ts +1 -3
  40. package/dest/sponge_blob.d.ts.map +1 -1
  41. package/dest/testing.d.ts +7 -3
  42. package/dest/testing.d.ts.map +1 -1
  43. package/dest/testing.js +34 -5
  44. package/dest/types.d.ts +2 -1
  45. package/dest/types.d.ts.map +1 -1
  46. package/dest/types.js +1 -0
  47. package/package.json +7 -6
  48. package/src/batched_blob.ts +25 -0
  49. package/src/blob_batching.ts +58 -105
  50. package/src/blob_utils.ts +24 -1
  51. package/src/circuit_types/blob_accumulator.ts +11 -0
  52. package/src/encoding/index.ts +1 -0
  53. package/src/index.ts +1 -1
  54. package/src/testing.ts +48 -12
  55. package/src/types.ts +1 -0
@@ -0,0 +1,25 @@
1
+ import { BLS12Fr, BLS12Point, Fr } from '@aztec/foundation/fields';
2
+ import { FinalBlobAccumulator } from './circuit_types/index.js';
3
+ /**
4
+ * A class to represent the result from accumulating blobs in an epoch using BatchedBlobAccumulator.
5
+ */
6
+ export declare class BatchedBlob {
7
+ readonly blobCommitmentsHash: Fr;
8
+ readonly z: Fr;
9
+ readonly y: BLS12Fr;
10
+ readonly commitment: BLS12Point;
11
+ readonly q: BLS12Point;
12
+ constructor(
13
+ /** Hash of Cs (to link to L1 blob hashes). */
14
+ blobCommitmentsHash: Fr,
15
+ /** Challenge point z such that p_i(z) = y_i. */
16
+ z: Fr,
17
+ /** Evaluation y, linear combination of all evaluations y_i = p_i(z) with gamma. */
18
+ y: BLS12Fr,
19
+ /** Commitment C, linear combination of all commitments C_i = [p_i] with gamma. */
20
+ commitment: BLS12Point,
21
+ /** KZG opening 'proof' Q (commitment to the quotient poly.), linear combination of all blob kzg 'proofs' Q_i with gamma. */
22
+ q: BLS12Point);
23
+ toFinalBlobAccumulator(): FinalBlobAccumulator;
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hlZF9ibG9iLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmF0Y2hlZF9ibG9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFOztHQUVHO0FBQ0gscUJBQWEsV0FBVzthQUdKLG1CQUFtQixFQUFFLEVBQUU7YUFFdkIsQ0FBQyxFQUFFLEVBQUU7YUFFTCxDQUFDLEVBQUUsT0FBTzthQUVWLFVBQVUsRUFBRSxVQUFVO2FBRXRCLENBQUMsRUFBRSxVQUFVO0lBVi9CO0lBQ0UsOENBQThDO0lBQzlCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkMsZ0RBQWdEO0lBQ2hDLENBQUMsRUFBRSxFQUFFO0lBQ3JCLG1GQUFtRjtJQUNuRSxDQUFDLEVBQUUsT0FBTztJQUMxQixrRkFBa0Y7SUFDbEUsVUFBVSxFQUFFLFVBQVU7SUFDdEMsNEhBQTRIO0lBQzVHLENBQUMsRUFBRSxVQUFVLEVBQzNCO0lBRUosc0JBQXNCLHlCQUVyQjtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batched_blob.d.ts","sourceRoot":"","sources":["../src/batched_blob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;GAEG;AACH,qBAAa,WAAW;aAGJ,mBAAmB,EAAE,EAAE;aAEvB,CAAC,EAAE,EAAE;aAEL,CAAC,EAAE,OAAO;aAEV,UAAU,EAAE,UAAU;aAEtB,CAAC,EAAE,UAAU;IAV/B;IACE,8CAA8C;IAC9B,mBAAmB,EAAE,EAAE;IACvC,gDAAgD;IAChC,CAAC,EAAE,EAAE;IACrB,mFAAmF;IACnE,CAAC,EAAE,OAAO;IAC1B,kFAAkF;IAClE,UAAU,EAAE,UAAU;IACtC,4HAA4H;IAC5G,CAAC,EAAE,UAAU,EAC3B;IAEJ,sBAAsB,yBAErB;CACF"}
@@ -0,0 +1,20 @@
1
+ import { FinalBlobAccumulator } from './circuit_types/index.js';
2
+ /**
3
+ * A class to represent the result from accumulating blobs in an epoch using BatchedBlobAccumulator.
4
+ */ export class BatchedBlob {
5
+ blobCommitmentsHash;
6
+ z;
7
+ y;
8
+ commitment;
9
+ q;
10
+ constructor(/** Hash of Cs (to link to L1 blob hashes). */ blobCommitmentsHash, /** Challenge point z such that p_i(z) = y_i. */ z, /** Evaluation y, linear combination of all evaluations y_i = p_i(z) with gamma. */ y, /** Commitment C, linear combination of all commitments C_i = [p_i] with gamma. */ commitment, /** KZG opening 'proof' Q (commitment to the quotient poly.), linear combination of all blob kzg 'proofs' Q_i with gamma. */ q){
11
+ this.blobCommitmentsHash = blobCommitmentsHash;
12
+ this.z = z;
13
+ this.y = y;
14
+ this.commitment = commitment;
15
+ this.q = q;
16
+ }
17
+ toFinalBlobAccumulator() {
18
+ return new FinalBlobAccumulator(this.blobCommitmentsHash, this.z, this.y, this.commitment);
19
+ }
20
+ }
package/dest/blob.d.ts CHANGED
@@ -11,13 +11,7 @@ export { FIELDS_PER_BLOB };
11
11
  * and is correctly encoded.
12
12
  */
13
13
  export declare class Blob {
14
- /**
15
- * The data to be broadcast on L1 in bytes form.
16
- */
17
14
  readonly data: Uint8Array;
18
- /**
19
- * Commitment to the blob data. Used in compressed BLS12 point format (48 bytes).
20
- */
21
15
  readonly commitment: Buffer;
22
16
  constructor(
23
17
  /**
@@ -113,9 +107,9 @@ export declare class Blob {
113
107
  */
114
108
  getSize(): number;
115
109
  static getViemKzgInstance(): {
116
- blobToKzgCommitment: (blob: Uint8Array) => Uint8Array;
117
- computeBlobKzgProof: (blob: Uint8Array, commitment: Uint8Array) => Uint8Array;
118
- computeCellsAndKzgProofs: (b: Uint8Array) => [Uint8Array[], Uint8Array[]];
110
+ blobToKzgCommitment: (blob: Uint8Array<ArrayBufferLike>) => Uint8Array<ArrayBufferLike>;
111
+ computeBlobKzgProof: (blob: Uint8Array<ArrayBufferLike>, commitment: Uint8Array<ArrayBufferLike>) => Uint8Array<ArrayBufferLike>;
112
+ computeCellsAndKzgProofs: (b: Uint8Array<ArrayBufferLike>) => [Uint8Array<ArrayBufferLike>[], Uint8Array<ArrayBufferLike>[]];
119
113
  };
120
114
  }
121
- //# sourceMappingURL=blob.d.ts.map
115
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gscUJBQWEsSUFBSTthQUtHLElBQUksRUFBRSxVQUFVO2FBSWhCLFVBQVUsRUFBRSxNQUFNO0lBUnBDO0lBQ0U7O09BRUc7SUFDYSxJQUFJLEVBQUUsVUFBVTtJQUNoQzs7T0FFRztJQUNhLFVBQVUsRUFBRSxNQUFNLEVBUW5DO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FHNUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQVFwQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FJZjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBU3BDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxRQUFRLENBTzlCO0lBRUQsdUJBQXVCLElBQUksTUFBTSxDQUVoQztJQUVEOzs7T0FHRztJQUNHLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUV2RDtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsVUFBUTs7O01BUzNDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsUUFBUSxJQUFJLE1BQU0sQ0FFakI7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxJQUFJLENBR2xEO0lBRUQ7O09BRUc7SUFDSCxPQUFPLFdBRU47SUFFRCxNQUFNLENBQUMsa0JBQWtCOzs7O01BU3hCO0NBQ0YifQ==
@@ -1 +1 @@
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,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvD,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;;IAPlC;;OAEG;IACa,IAAI,EAAE,UAAU;IAChC;;OAEG;IACa,UAAU,EAAE,MAAM;IAUpC;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAK7C;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI;IAUrC;;;;;;OAMG;IACH,QAAQ,IAAI,EAAE,EAAE;IAMhB;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAWrC;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAS/B,uBAAuB,IAAI,MAAM;IAIjC;;;OAGG;IACG,iBAAiB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IAIxD;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,WAAW,UAAQ;;;;IAW5C;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM;IAIlB;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAKnD;;OAEG;IACH,OAAO;IAIP,MAAM,CAAC,kBAAkB;;;sCAIS,UAAU,KAAG,CAAC,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;;CAM5E"}
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,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvD,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;aAKG,IAAI,EAAE,UAAU;aAIhB,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;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAO9B;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;;;MAS3C;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;;;;MASxB;CACF"}
@@ -1,97 +1,19 @@
1
1
  import { BLS12Fr, BLS12Point, Fr } from '@aztec/foundation/fields';
2
+ import { BatchedBlob } from './batched_blob.js';
2
3
  import { Blob } from './blob.js';
3
4
  import { BlobAccumulator, FinalBlobAccumulator, FinalBlobBatchingChallenges } from './circuit_types/index.js';
4
5
  /**
5
6
  * A class to create, manage, and prove batched EVM blobs.
6
- */
7
- export declare class BatchedBlob {
8
- /** Hash of Cs (to link to L1 blob hashes). */
9
- readonly blobCommitmentsHash: Fr;
10
- /** Challenge point z such that p_i(z) = y_i. */
11
- readonly z: Fr;
12
- /** Evaluation y, linear combination of all evaluations y_i = p_i(z) with gamma. */
13
- readonly y: BLS12Fr;
14
- /** Commitment C, linear combination of all commitments C_i = [p_i] with gamma. */
15
- readonly commitment: BLS12Point;
16
- /** KZG opening 'proof' Q (commitment to the quotient poly.), linear combination of all blob kzg 'proofs' Q_i with gamma. */
17
- readonly q: BLS12Point;
18
- constructor(
19
- /** Hash of Cs (to link to L1 blob hashes). */
20
- blobCommitmentsHash: Fr,
21
- /** Challenge point z such that p_i(z) = y_i. */
22
- z: Fr,
23
- /** Evaluation y, linear combination of all evaluations y_i = p_i(z) with gamma. */
24
- y: BLS12Fr,
25
- /** Commitment C, linear combination of all commitments C_i = [p_i] with gamma. */
26
- commitment: BLS12Point,
27
- /** KZG opening 'proof' Q (commitment to the quotient poly.), linear combination of all blob kzg 'proofs' Q_i with gamma. */
28
- q: BLS12Point);
29
- /**
30
- * Get the final batched opening proof from multiple blobs.
31
- * @dev MUST input all blobs to be broadcast. Does not work in multiple calls because z and gamma are calculated
32
- * beforehand from ALL blobs.
33
- *
34
- * @returns A batched blob.
35
- */
36
- static batch(blobFieldsPerCheckpoint: Fr[][]): Promise<BatchedBlob>;
37
- /**
38
- * Returns an empty BatchedBlobAccumulator with precomputed challenges from all blobs in the epoch.
39
- * @dev MUST input all blobs to be broadcast. Does not work in multiple calls because z and gamma are calculated
40
- * beforehand from ALL blobs.
41
- */
42
- static newAccumulator(blobFieldsPerCheckpoint: Fr[][]): Promise<BatchedBlobAccumulator>;
43
- /**
44
- * Gets the final challenges based on all blobs and their elements to perform a multi opening proof.
45
- * Used in BatchedBlobAccumulator as 'finalZ' and finalGamma':
46
- * - z = H(...H(H(z_0, z_1) z_2)..z_n)
47
- * - where z_i = H(H(fields of blob_i), C_i) = Blob.challengeZ,
48
- * - used such that p_i(z) = y_i = Blob.evaluationY for all n blob polynomials p_i().
49
- * - gamma = H(H(...H(H(y_0, y_1) y_2)..y_n), z)
50
- * - used such that y = sum_i { gamma^i * y_i }, and C = sum_i { gamma^i * C_i }, for all blob evaluations y_i (see above) and commitments C_i.
51
- *
52
- * @param blobs - The blobs to precompute the challenges for. Each sub-array is the blobs for an L1 block.
53
- * @returns Challenges z and gamma.
54
- */
55
- static precomputeBatchedBlobChallenges(blobFieldsPerCheckpoint: Fr[][]): Promise<FinalBlobBatchingChallenges>;
56
- verify(): boolean;
57
- getEthVersionedBlobHash(): Buffer;
58
- /**
59
- * Returns a proof of opening of the blobs to verify on L1 using the point evaluation precompile:
60
- *
61
- * input[:32] - versioned_hash
62
- * input[32:64] - z
63
- * input[64:96] - y
64
- * input[96:144] - commitment C
65
- * input[144:192] - commitment Q (a 'proof' committing to the quotient polynomial q(X))
66
- *
67
- * See https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile
68
- */
69
- getEthBlobEvaluationInputs(): `0x${string}`;
70
- toFinalBlobAccumulator(): FinalBlobAccumulator;
71
- }
72
- /**
73
7
  * See noir-projects/noir-protocol-circuits/crates/blob/src/abis/blob_accumulator.nr
74
8
  */
75
9
  export declare class BatchedBlobAccumulator {
76
- /** Hash of Cs (to link to L1 blob hashes). */
77
10
  readonly blobCommitmentsHashAcc: Fr;
78
- /** Challenge point z_acc. Final value used such that p_i(z) = y_i. */
79
11
  readonly zAcc: Fr;
80
- /** Evaluation y_acc. Final value is is linear combination of all evaluations y_i = p_i(z) with gamma. */
81
12
  readonly yAcc: BLS12Fr;
82
- /** Commitment c_acc. Final value is linear combination of all commitments C_i = [p_i] with gamma. */
83
13
  readonly cAcc: BLS12Point;
84
- /** KZG opening q_acc. Final value is linear combination of all blob kzg 'proofs' Q_i with gamma. */
85
14
  readonly qAcc: BLS12Point;
86
- /**
87
- * Challenge point gamma_acc for multi opening. Used with y, C, and kzg 'proof' Q above.
88
- * TODO(#13608): We calculate this by hashing natively in the circuit (hence Fr representation), but it's actually used
89
- * as a BLS12Fr field elt. Is this safe? Is there a skew?
90
- */
91
15
  readonly gammaAcc: Fr;
92
- /** Simply gamma^(i + 1) at blob i. Used for calculating the i'th element of the above linear comb.s */
93
16
  readonly gammaPow: BLS12Fr;
94
- /** Final challenge values used in evaluation. Optimistically input and checked in the final acc. */
95
17
  readonly finalBlobChallenges: FinalBlobBatchingChallenges;
96
18
  constructor(
97
19
  /** Hash of Cs (to link to L1 blob hashes). */
@@ -119,6 +41,33 @@ export declare class BatchedBlobAccumulator {
119
41
  * @returns An empty blob accumulator with challenges.
120
42
  */
121
43
  static newWithChallenges(finalBlobChallenges: FinalBlobBatchingChallenges): BatchedBlobAccumulator;
44
+ /**
45
+ * Returns an empty BatchedBlobAccumulator with precomputed challenges from all blobs in the epoch.
46
+ * @dev MUST input all blobs to be broadcast. Does not work in multiple calls because z and gamma are calculated
47
+ * beforehand from ALL blobs.
48
+ */
49
+ static fromBlobFields(blobFieldsPerCheckpoint: Fr[][]): Promise<BatchedBlobAccumulator>;
50
+ /**
51
+ * Get the final batched opening proof from multiple blobs.
52
+ * @dev MUST input all blobs to be broadcast. Does not work in multiple calls because z and gamma are calculated
53
+ * beforehand from ALL blobs.
54
+ *
55
+ * @returns A batched blob.
56
+ */
57
+ static batch(blobFieldsPerCheckpoint: Fr[][], verifyProof?: boolean): Promise<BatchedBlob>;
58
+ /**
59
+ * Gets the final challenges based on all blobs and their elements to perform a multi opening proof.
60
+ * Used in BatchedBlobAccumulator as 'finalZ' and finalGamma':
61
+ * - z = H(...H(H(z_0, z_1) z_2)..z_n)
62
+ * - where z_i = H(H(fields of blob_i), C_i) = Blob.challengeZ,
63
+ * - used such that p_i(z) = y_i = Blob.evaluationY for all n blob polynomials p_i().
64
+ * - gamma = H(H(...H(H(y_0, y_1) y_2)..y_n), z)
65
+ * - used such that y = sum_i { gamma^i * y_i }, and C = sum_i { gamma^i * C_i }, for all blob evaluations y_i (see above) and commitments C_i.
66
+ *
67
+ * @param blobs - The blobs to precompute the challenges for. Each sub-array is the blobs for an L1 block.
68
+ * @returns Challenges z and gamma.
69
+ */
70
+ static precomputeBatchedBlobChallenges(blobFieldsPerCheckpoint: Fr[][]): Promise<FinalBlobBatchingChallenges>;
122
71
  /**
123
72
  * Given blob i, accumulate all state.
124
73
  * We assume the input blob has not been evaluated at z.
@@ -147,9 +96,10 @@ export declare class BatchedBlobAccumulator {
147
96
  * @returns A batched blob.
148
97
  */
149
98
  finalize(verifyProof?: boolean): Promise<BatchedBlob>;
99
+ verify(): boolean;
150
100
  isEmptyState(): boolean;
151
101
  clone(): BatchedBlobAccumulator;
152
102
  toBlobAccumulator(): BlobAccumulator;
153
103
  toFinalBlobAccumulator(): FinalBlobAccumulator;
154
104
  }
155
- //# sourceMappingURL=blob_batching.d.ts.map
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl9iYXRjaGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfYmF0Y2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTlHOzs7R0FHRztBQUNILHFCQUFhLHNCQUFzQjthQUdmLHNCQUFzQixFQUFFLEVBQUU7YUFFMUIsSUFBSSxFQUFFLEVBQUU7YUFFUixJQUFJLEVBQUUsT0FBTzthQUViLElBQUksRUFBRSxVQUFVO2FBRWhCLElBQUksRUFBRSxVQUFVO2FBTWhCLFFBQVEsRUFBRSxFQUFFO2FBRVosUUFBUSxFQUFFLE9BQU87YUFFakIsbUJBQW1CLEVBQUUsMkJBQTJCO0lBcEJsRTtJQUNFLDhDQUE4QztJQUM5QixzQkFBc0IsRUFBRSxFQUFFO0lBQzFDLHNFQUFzRTtJQUN0RCxJQUFJLEVBQUUsRUFBRTtJQUN4Qix5R0FBeUc7SUFDekYsSUFBSSxFQUFFLE9BQU87SUFDN0IscUdBQXFHO0lBQ3JGLElBQUksRUFBRSxVQUFVO0lBQ2hDLG9HQUFvRztJQUNwRixJQUFJLEVBQUUsVUFBVTtJQUNoQzs7OztPQUlHO0lBQ2EsUUFBUSxFQUFFLEVBQUU7SUFDNUIsdUdBQXVHO0lBQ3ZGLFFBQVEsRUFBRSxPQUFPO0lBQ2pDLG9HQUFvRztJQUNwRixtQkFBbUIsRUFBRSwyQkFBMkIsRUFDOUQ7SUFFSjs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEdBQUcsc0JBQXNCLENBV2pHO0lBRUQ7Ozs7T0FJRztJQUNILE9BQWEsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBRzVGO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBYSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBZTdGO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxPQUFhLCtCQUErQixDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBbUNsSDtJQUVEOzs7O09BSUc7SUFDRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxtQ0F1Q2xEO0lBRUQ7Ozs7O09BS0c7SUFDRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLG1DQWtCdEM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0csUUFBUSxDQUFDLFdBQVcsVUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FzQnhEO0lBRUQsTUFBTSxZQUVMO0lBRUQsWUFBWSxZQVVYO0lBRUQsS0FBSywyQkFXSjtJQUVELGlCQUFpQixvQkFTaEI7SUFFRCxzQkFBc0IseUJBRXJCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"blob_batching.d.ts","sourceRoot":"","sources":["../src/blob_batching.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI9G;;GAEG;AACH,qBAAa,WAAW;IAEpB,8CAA8C;aAC9B,mBAAmB,EAAE,EAAE;IACvC,gDAAgD;aAChC,CAAC,EAAE,EAAE;IACrB,mFAAmF;aACnE,CAAC,EAAE,OAAO;IAC1B,kFAAkF;aAClE,UAAU,EAAE,UAAU;IACtC,4HAA4H;aAC5G,CAAC,EAAE,UAAU;;IAT7B,8CAA8C;IAC9B,mBAAmB,EAAE,EAAE;IACvC,gDAAgD;IAChC,CAAC,EAAE,EAAE;IACrB,mFAAmF;IACnE,CAAC,EAAE,OAAO;IAC1B,kFAAkF;IAClE,UAAU,EAAE,UAAU;IACtC,4HAA4H;IAC5G,CAAC,EAAE,UAAU;IAG/B;;;;;;OAMG;WACU,KAAK,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAiBzE;;;;OAIG;WACU,cAAc,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAK7F;;;;;;;;;;;OAWG;WACU,+BAA+B,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAqCnH,MAAM;IAKN,uBAAuB,IAAI,MAAM;IAIjC;;;;;;;;;;OAUG;IACH,0BAA0B,IAAI,KAAK,MAAM,EAAE;IAW3C,sBAAsB;CAGvB;AAED;;GAEG;AACH,qBAAa,sBAAsB;IAE/B,8CAA8C;aAC9B,sBAAsB,EAAE,EAAE;IAC1C,sEAAsE;aACtD,IAAI,EAAE,EAAE;IACxB,yGAAyG;aACzF,IAAI,EAAE,OAAO;IAC7B,qGAAqG;aACrF,IAAI,EAAE,UAAU;IAChC,oGAAoG;aACpF,IAAI,EAAE,UAAU;IAChC;;;;OAIG;aACa,QAAQ,EAAE,EAAE;IAC5B,uGAAuG;aACvF,QAAQ,EAAE,OAAO;IACjC,oGAAoG;aACpF,mBAAmB,EAAE,2BAA2B;;IAnBhE,8CAA8C;IAC9B,sBAAsB,EAAE,EAAE;IAC1C,sEAAsE;IACtD,IAAI,EAAE,EAAE;IACxB,yGAAyG;IACzF,IAAI,EAAE,OAAO;IAC7B,qGAAqG;IACrF,IAAI,EAAE,UAAU;IAChC,oGAAoG;IACpF,IAAI,EAAE,UAAU;IAChC;;;;OAIG;IACa,QAAQ,EAAE,EAAE;IAC5B,uGAAuG;IACvF,QAAQ,EAAE,OAAO;IACjC,oGAAoG;IACpF,mBAAmB,EAAE,2BAA2B;IAGlE;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,2BAA2B,GAAG,sBAAsB;IAalG;;;;OAIG;IACG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE;IAyCnD;;;;;OAKG;IACG,gBAAgB,CAAC,UAAU,EAAE,EAAE,EAAE;IAoBvC;;;;;;;;;;;;;OAaG;IACG,QAAQ,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBzD,YAAY;IAYZ,KAAK;IAaL,iBAAiB;IAWjB,sBAAsB;CAGvB"}
1
+ {"version":3,"file":"blob_batching.d.ts","sourceRoot":"","sources":["../src/blob_batching.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAI9G;;;GAGG;AACH,qBAAa,sBAAsB;aAGf,sBAAsB,EAAE,EAAE;aAE1B,IAAI,EAAE,EAAE;aAER,IAAI,EAAE,OAAO;aAEb,IAAI,EAAE,UAAU;aAEhB,IAAI,EAAE,UAAU;aAMhB,QAAQ,EAAE,EAAE;aAEZ,QAAQ,EAAE,OAAO;aAEjB,mBAAmB,EAAE,2BAA2B;IApBlE;IACE,8CAA8C;IAC9B,sBAAsB,EAAE,EAAE;IAC1C,sEAAsE;IACtD,IAAI,EAAE,EAAE;IACxB,yGAAyG;IACzF,IAAI,EAAE,OAAO;IAC7B,qGAAqG;IACrF,IAAI,EAAE,UAAU;IAChC,oGAAoG;IACpF,IAAI,EAAE,UAAU;IAChC;;;;OAIG;IACa,QAAQ,EAAE,EAAE;IAC5B,uGAAuG;IACvF,QAAQ,EAAE,OAAO;IACjC,oGAAoG;IACpF,mBAAmB,EAAE,2BAA2B,EAC9D;IAEJ;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,2BAA2B,GAAG,sBAAsB,CAWjG;IAED;;;;OAIG;IACH,OAAa,cAAc,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAG5F;IAED;;;;;;OAMG;IACH,OAAa,KAAK,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,EAAE,WAAW,UAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAe7F;IAED;;;;;;;;;;;OAWG;IACH,OAAa,+BAA+B,CAAC,uBAAuB,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAmClH;IAED;;;;OAIG;IACG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,mCAuClD;IAED;;;;;OAKG;IACG,gBAAgB,CAAC,UAAU,EAAE,EAAE,EAAE,mCAkBtC;IAED;;;;;;;;;;;;;OAaG;IACG,QAAQ,CAAC,WAAW,UAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,CAsBxD;IAED,MAAM,YAEL;IAED,YAAY,YAUX;IAED,KAAK,2BAWJ;IAED,iBAAiB,oBAShB;IAED,sBAAsB,yBAErB;CACF"}
@@ -1,24 +1,50 @@
1
1
  import { AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_CHECKPOINT } from '@aztec/constants';
2
2
  import { poseidon2Hash, sha256ToField } from '@aztec/foundation/crypto';
3
3
  import { BLS12Fr, BLS12Point, Fr } from '@aztec/foundation/fields';
4
+ import { BatchedBlob } from './batched_blob.js';
4
5
  import { getBlobsPerL1Block } from './blob_utils.js';
5
6
  import { BlobAccumulator, FinalBlobAccumulator, FinalBlobBatchingChallenges } from './circuit_types/index.js';
6
- import { computeBlobFieldsHash, computeEthVersionedBlobHash, hashNoirBigNumLimbs } from './hash.js';
7
+ import { computeBlobFieldsHash, hashNoirBigNumLimbs } from './hash.js';
7
8
  import { kzg } from './kzg_context.js';
8
9
  /**
9
10
  * A class to create, manage, and prove batched EVM blobs.
10
- */ export class BatchedBlob {
11
- blobCommitmentsHash;
12
- z;
13
- y;
14
- commitment;
15
- q;
16
- constructor(/** Hash of Cs (to link to L1 blob hashes). */ blobCommitmentsHash, /** Challenge point z such that p_i(z) = y_i. */ z, /** Evaluation y, linear combination of all evaluations y_i = p_i(z) with gamma. */ y, /** Commitment C, linear combination of all commitments C_i = [p_i] with gamma. */ commitment, /** KZG opening 'proof' Q (commitment to the quotient poly.), linear combination of all blob kzg 'proofs' Q_i with gamma. */ q){
17
- this.blobCommitmentsHash = blobCommitmentsHash;
18
- this.z = z;
19
- this.y = y;
20
- this.commitment = commitment;
21
- this.q = q;
11
+ * See noir-projects/noir-protocol-circuits/crates/blob/src/abis/blob_accumulator.nr
12
+ */ export class BatchedBlobAccumulator {
13
+ blobCommitmentsHashAcc;
14
+ zAcc;
15
+ yAcc;
16
+ cAcc;
17
+ qAcc;
18
+ gammaAcc;
19
+ gammaPow;
20
+ finalBlobChallenges;
21
+ constructor(/** Hash of Cs (to link to L1 blob hashes). */ blobCommitmentsHashAcc, /** Challenge point z_acc. Final value used such that p_i(z) = y_i. */ zAcc, /** Evaluation y_acc. Final value is is linear combination of all evaluations y_i = p_i(z) with gamma. */ yAcc, /** Commitment c_acc. Final value is linear combination of all commitments C_i = [p_i] with gamma. */ cAcc, /** KZG opening q_acc. Final value is linear combination of all blob kzg 'proofs' Q_i with gamma. */ qAcc, /**
22
+ * Challenge point gamma_acc for multi opening. Used with y, C, and kzg 'proof' Q above.
23
+ * TODO(#13608): We calculate this by hashing natively in the circuit (hence Fr representation), but it's actually used
24
+ * as a BLS12Fr field elt. Is this safe? Is there a skew?
25
+ */ gammaAcc, /** Simply gamma^(i + 1) at blob i. Used for calculating the i'th element of the above linear comb.s */ gammaPow, /** Final challenge values used in evaluation. Optimistically input and checked in the final acc. */ finalBlobChallenges){
26
+ this.blobCommitmentsHashAcc = blobCommitmentsHashAcc;
27
+ this.zAcc = zAcc;
28
+ this.yAcc = yAcc;
29
+ this.cAcc = cAcc;
30
+ this.qAcc = qAcc;
31
+ this.gammaAcc = gammaAcc;
32
+ this.gammaPow = gammaPow;
33
+ this.finalBlobChallenges = finalBlobChallenges;
34
+ }
35
+ /**
36
+ * Create the empty accumulation state of the epoch.
37
+ * @returns An empty blob accumulator with challenges.
38
+ */ static newWithChallenges(finalBlobChallenges) {
39
+ return new BatchedBlobAccumulator(Fr.ZERO, Fr.ZERO, BLS12Fr.ZERO, BLS12Point.ZERO, BLS12Point.ZERO, Fr.ZERO, BLS12Fr.ZERO, finalBlobChallenges);
40
+ }
41
+ /**
42
+ * Returns an empty BatchedBlobAccumulator with precomputed challenges from all blobs in the epoch.
43
+ * @dev MUST input all blobs to be broadcast. Does not work in multiple calls because z and gamma are calculated
44
+ * beforehand from ALL blobs.
45
+ */ static async fromBlobFields(blobFieldsPerCheckpoint) {
46
+ const finalBlobChallenges = await this.precomputeBatchedBlobChallenges(blobFieldsPerCheckpoint);
47
+ return BatchedBlobAccumulator.newWithChallenges(finalBlobChallenges);
22
48
  }
23
49
  /**
24
50
  * Get the final batched opening proof from multiple blobs.
@@ -26,26 +52,18 @@ import { kzg } from './kzg_context.js';
26
52
  * beforehand from ALL blobs.
27
53
  *
28
54
  * @returns A batched blob.
29
- */ static async batch(blobFieldsPerCheckpoint) {
55
+ */ static async batch(blobFieldsPerCheckpoint, verifyProof = false) {
30
56
  const numCheckpoints = blobFieldsPerCheckpoint.length;
31
57
  if (numCheckpoints > AZTEC_MAX_EPOCH_DURATION) {
32
58
  throw new Error(`Too many checkpoints sent to batch(). The maximum is ${AZTEC_MAX_EPOCH_DURATION}. Got ${numCheckpoints}.`);
33
59
  }
34
60
  // Precalculate the values (z and gamma) and initialize the accumulator:
35
- let acc = await this.newAccumulator(blobFieldsPerCheckpoint);
61
+ let acc = await this.fromBlobFields(blobFieldsPerCheckpoint);
36
62
  // Now we can create a multi opening proof of all input blobs:
37
63
  for (const blobFields of blobFieldsPerCheckpoint){
38
64
  acc = await acc.accumulateFields(blobFields);
39
65
  }
40
- return await acc.finalize();
41
- }
42
- /**
43
- * Returns an empty BatchedBlobAccumulator with precomputed challenges from all blobs in the epoch.
44
- * @dev MUST input all blobs to be broadcast. Does not work in multiple calls because z and gamma are calculated
45
- * beforehand from ALL blobs.
46
- */ static async newAccumulator(blobFieldsPerCheckpoint) {
47
- const finalBlobChallenges = await this.precomputeBatchedBlobChallenges(blobFieldsPerCheckpoint);
48
- return BatchedBlobAccumulator.newWithChallenges(finalBlobChallenges);
66
+ return await acc.finalize(verifyProof);
49
67
  }
50
68
  /**
51
69
  * Gets the final challenges based on all blobs and their elements to perform a multi opening proof.
@@ -101,68 +119,6 @@ import { kzg } from './kzg_context.js';
101
119
  ]);
102
120
  return new FinalBlobBatchingChallenges(z, BLS12Fr.fromBN254Fr(gamma));
103
121
  }
104
- verify() {
105
- return kzg.verifyKzgProof(this.commitment.compress(), this.z.toBuffer(), this.y.toBuffer(), this.q.compress());
106
- }
107
- // Returns ethereum's versioned blob hash, following kzg_to_versioned_hash: https://eips.ethereum.org/EIPS/eip-4844#helpers
108
- getEthVersionedBlobHash() {
109
- return computeEthVersionedBlobHash(this.commitment.compress());
110
- }
111
- /**
112
- * Returns a proof of opening of the blobs to verify on L1 using the point evaluation precompile:
113
- *
114
- * input[:32] - versioned_hash
115
- * input[32:64] - z
116
- * input[64:96] - y
117
- * input[96:144] - commitment C
118
- * input[144:192] - commitment Q (a 'proof' committing to the quotient polynomial q(X))
119
- *
120
- * See https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile
121
- */ getEthBlobEvaluationInputs() {
122
- const buf = Buffer.concat([
123
- this.getEthVersionedBlobHash(),
124
- this.z.toBuffer(),
125
- this.y.toBuffer(),
126
- this.commitment.compress(),
127
- this.q.compress()
128
- ]);
129
- return `0x${buf.toString('hex')}`;
130
- }
131
- toFinalBlobAccumulator() {
132
- return new FinalBlobAccumulator(this.blobCommitmentsHash, this.z, this.y, this.commitment);
133
- }
134
- }
135
- /**
136
- * See noir-projects/noir-protocol-circuits/crates/blob/src/abis/blob_accumulator.nr
137
- */ export class BatchedBlobAccumulator {
138
- blobCommitmentsHashAcc;
139
- zAcc;
140
- yAcc;
141
- cAcc;
142
- qAcc;
143
- gammaAcc;
144
- gammaPow;
145
- finalBlobChallenges;
146
- constructor(/** Hash of Cs (to link to L1 blob hashes). */ blobCommitmentsHashAcc, /** Challenge point z_acc. Final value used such that p_i(z) = y_i. */ zAcc, /** Evaluation y_acc. Final value is is linear combination of all evaluations y_i = p_i(z) with gamma. */ yAcc, /** Commitment c_acc. Final value is linear combination of all commitments C_i = [p_i] with gamma. */ cAcc, /** KZG opening q_acc. Final value is linear combination of all blob kzg 'proofs' Q_i with gamma. */ qAcc, /**
147
- * Challenge point gamma_acc for multi opening. Used with y, C, and kzg 'proof' Q above.
148
- * TODO(#13608): We calculate this by hashing natively in the circuit (hence Fr representation), but it's actually used
149
- * as a BLS12Fr field elt. Is this safe? Is there a skew?
150
- */ gammaAcc, /** Simply gamma^(i + 1) at blob i. Used for calculating the i'th element of the above linear comb.s */ gammaPow, /** Final challenge values used in evaluation. Optimistically input and checked in the final acc. */ finalBlobChallenges){
151
- this.blobCommitmentsHashAcc = blobCommitmentsHashAcc;
152
- this.zAcc = zAcc;
153
- this.yAcc = yAcc;
154
- this.cAcc = cAcc;
155
- this.qAcc = qAcc;
156
- this.gammaAcc = gammaAcc;
157
- this.gammaPow = gammaPow;
158
- this.finalBlobChallenges = finalBlobChallenges;
159
- }
160
- /**
161
- * Create the empty accumulation state of the epoch.
162
- * @returns An empty blob accumulator with challenges.
163
- */ static newWithChallenges(finalBlobChallenges) {
164
- return new BatchedBlobAccumulator(Fr.ZERO, Fr.ZERO, BLS12Fr.ZERO, BLS12Point.ZERO, BLS12Point.ZERO, Fr.ZERO, BLS12Fr.ZERO, finalBlobChallenges);
165
- }
166
122
  /**
167
123
  * Given blob i, accumulate all state.
168
124
  * We assume the input blob has not been evaluated at z.
@@ -244,11 +200,14 @@ import { kzg } from './kzg_context.js';
244
200
  throw new Error(`Blob batching mismatch: accumulated gamma ${calculatedGamma} does not equal injected gamma ${this.finalBlobChallenges.gamma.toBN254Fr()}`);
245
201
  }
246
202
  const batchedBlob = new BatchedBlob(this.blobCommitmentsHashAcc, this.zAcc, this.yAcc, this.cAcc, this.qAcc);
247
- if (verifyProof && !batchedBlob.verify()) {
203
+ if (verifyProof && !this.verify()) {
248
204
  throw new Error(`KZG proof did not verify.`);
249
205
  }
250
206
  return batchedBlob;
251
207
  }
208
+ verify() {
209
+ return kzg.verifyKzgProof(this.cAcc.compress(), this.zAcc.toBuffer(), this.yAcc.toBuffer(), this.qAcc.compress());
210
+ }
252
211
  isEmptyState() {
253
212
  return this.blobCommitmentsHashAcc.isZero() && this.zAcc.isZero() && this.yAcc.isZero() && this.cAcc.isZero() && this.qAcc.isZero() && this.gammaAcc.isZero() && this.gammaPow.isZero();
254
213
  }
@@ -1,4 +1,5 @@
1
1
  import { BLS12Point, Fr } from '@aztec/foundation/fields';
2
+ import type { BatchedBlob } from './batched_blob.js';
2
3
  import { Blob } from './blob.js';
3
4
  import { type CheckpointBlobData } from './encoding/index.js';
4
5
  /**
@@ -23,4 +24,16 @@ export declare function getBlobsPerL1Block(fields: Fr[]): Blob[];
23
24
  export declare function decodeCheckpointBlobDataFromBlobs(blobs: Blob[]): CheckpointBlobData;
24
25
  export declare function computeBlobsHashFromBlobs(blobs: Blob[]): Fr;
25
26
  export declare function getBlobCommitmentsFromBlobs(blobs: Blob[]): BLS12Point[];
26
- //# sourceMappingURL=blob_utils.d.ts.map
27
+ /**
28
+ * Returns a proof of opening of the blobs to verify on L1 using the point evaluation precompile:
29
+ *
30
+ * input[:32] - versioned_hash
31
+ * input[32:64] - z
32
+ * input[64:96] - y
33
+ * input[96:144] - commitment C
34
+ * input[144:192] - commitment Q (a 'proof' committing to the quotient polynomial q(X))
35
+ *
36
+ * See https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile
37
+ */
38
+ export declare function getEthBlobEvaluationInputs(batchedBlob: BatchedBlob): `0x${string}`;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFzQyxNQUFNLHFCQUFxQixDQUFDO0FBR2xHOzs7OztHQUtHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVMxRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FTdkQ7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FHbkY7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FFM0Q7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUV2RTtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx3QkFBZ0IsMEJBQTBCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVNsRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"blob_utils.d.ts","sourceRoot":"","sources":["../src/blob_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE1D,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"}
1
+ {"version":3,"file":"blob_utils.d.ts","sourceRoot":"","sources":["../src/blob_utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAE1D,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"}
@@ -2,7 +2,7 @@ import { FIELDS_PER_BLOB } from '@aztec/constants';
2
2
  import { BLS12Point } from '@aztec/foundation/fields';
3
3
  import { Blob } from './blob.js';
4
4
  import { decodeCheckpointBlobDataFromBuffer } from './encoding/index.js';
5
- import { computeBlobsHash } from './hash.js';
5
+ import { computeBlobsHash, computeEthVersionedBlobHash } from './hash.js';
6
6
  /**
7
7
  * @param blobs - The blobs to emit.
8
8
  * @returns The blobs' compressed commitments in hex prefixed by the number of blobs. 1 byte for the prefix, 48 bytes
@@ -47,3 +47,23 @@ export function computeBlobsHashFromBlobs(blobs) {
47
47
  export function getBlobCommitmentsFromBlobs(blobs) {
48
48
  return blobs.map((b)=>BLS12Point.decompress(b.commitment));
49
49
  }
50
+ /**
51
+ * Returns a proof of opening of the blobs to verify on L1 using the point evaluation precompile:
52
+ *
53
+ * input[:32] - versioned_hash
54
+ * input[32:64] - z
55
+ * input[64:96] - y
56
+ * input[96:144] - commitment C
57
+ * input[144:192] - commitment Q (a 'proof' committing to the quotient polynomial q(X))
58
+ *
59
+ * See https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile
60
+ */ export function getEthBlobEvaluationInputs(batchedBlob) {
61
+ const buf = Buffer.concat([
62
+ computeEthVersionedBlobHash(batchedBlob.commitment.compress()),
63
+ batchedBlob.z.toBuffer(),
64
+ batchedBlob.y.toBuffer(),
65
+ batchedBlob.commitment.compress(),
66
+ batchedBlob.q.compress()
67
+ ]);
68
+ return `0x${buf.toString('hex')}`;
69
+ }
@@ -17,5 +17,6 @@ export declare class BlobAccumulator {
17
17
  toBuffer(): Buffer<ArrayBufferLike>;
18
18
  toFields(): Fr[];
19
19
  static fromFields(fields: Fr[] | FieldReader): BlobAccumulator;
20
+ static random(): BlobAccumulator;
20
21
  }
21
- //# sourceMappingURL=blob_accumulator.d.ts.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl9hY2N1bXVsYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NpcmN1aXRfdHlwZXMvYmxvYl9hY2N1bXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVcsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRjs7R0FFRztBQUNILHFCQUFhLGVBQWU7SUFFakIsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQixJQUFJLEVBQUUsRUFBRTtJQUNSLElBQUksRUFBRSxPQUFPO0lBQ2IsSUFBSSxFQUFFLFVBQVU7SUFDaEIsUUFBUSxFQUFFLEVBQUU7SUFDWixXQUFXLEVBQUUsT0FBTztJQU43QixZQUNTLHNCQUFzQixFQUFFLEVBQUUsRUFDMUIsSUFBSSxFQUFFLEVBQUUsRUFDUixJQUFJLEVBQUUsT0FBTyxFQUNiLElBQUksRUFBRSxVQUFVLEVBQ2hCLFFBQVEsRUFBRSxFQUFFLEVBQ1osV0FBVyxFQUFFLE9BQU8sRUFDekI7SUFFSixNQUFNLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FFOUI7SUFFRCxNQUFNLENBQUMsS0FBSyxFQUFFLGVBQWUsV0FTNUI7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLGVBQWUsQ0FVaEU7SUFFRCxRQUFRLDRCQVNQO0lBRUQsUUFBUSxTQVdQO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLGVBQWUsQ0FjN0Q7SUFFRCxNQUFNLENBQUMsTUFBTSxvQkFTWjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"blob_accumulator.d.ts","sourceRoot":"","sources":["../../src/circuit_types/blob_accumulator.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAE3F;;GAEG;AACH,qBAAa,eAAe;IAEjB,sBAAsB,EAAE,EAAE;IAC1B,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,OAAO;gBALpB,sBAAsB,EAAE,EAAE,EAC1B,IAAI,EAAE,EAAE,EACR,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,EAAE,EACZ,WAAW,EAAE,OAAO;IAG7B,MAAM,CAAC,KAAK,IAAI,eAAe;IAI/B,MAAM,CAAC,KAAK,EAAE,eAAe;IAW7B,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe;IAYjE,QAAQ;IAWR,QAAQ;IAaR,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,eAAe;CAe/D"}
1
+ {"version":3,"file":"blob_accumulator.d.ts","sourceRoot":"","sources":["../../src/circuit_types/blob_accumulator.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAE3F;;GAEG;AACH,qBAAa,eAAe;IAEjB,sBAAsB,EAAE,EAAE;IAC1B,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,OAAO;IAN7B,YACS,sBAAsB,EAAE,EAAE,EAC1B,IAAI,EAAE,EAAE,EACR,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,EAAE,EACZ,WAAW,EAAE,OAAO,EACzB;IAEJ,MAAM,CAAC,KAAK,IAAI,eAAe,CAE9B;IAED,MAAM,CAAC,KAAK,EAAE,eAAe,WAS5B;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe,CAUhE;IAED,QAAQ,4BASP;IAED,QAAQ,SAWP;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,eAAe,CAc7D;IAED,MAAM,CAAC,MAAM,oBASZ;CACF"}
@@ -55,4 +55,7 @@ import { BufferReader, FieldReader, serializeToBuffer } from '@aztec/foundation/
55
55
  limbs: reader.readFieldArray(BLS12_FR_LIMBS).map((f)=>f.toString())
56
56
  }));
57
57
  }
58
+ static random() {
59
+ return new BlobAccumulator(Fr.random(), Fr.random(), BLS12Fr.random(), BLS12Point.random(), Fr.random(), BLS12Fr.random());
60
+ }
58
61
  }
@@ -19,4 +19,4 @@ export declare class FinalBlobAccumulator {
19
19
  static random(): FinalBlobAccumulator;
20
20
  [inspect.custom](): string;
21
21
  }
22
- //# sourceMappingURL=final_blob_accumulator.d.ts.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYWxfYmxvYl9hY2N1bXVsYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NpcmN1aXRfdHlwZXMvZmluYWxfYmxvYl9hY2N1bXVsYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0I7O0dBRUc7QUFDSCxxQkFBYSxvQkFBb0I7SUFFdEIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QixDQUFDLEVBQUUsRUFBRTtJQUNMLENBQUMsRUFBRSxPQUFPO0lBQ1YsQ0FBQyxFQUFFLFVBQVU7SUFKdEIsWUFDUyxtQkFBbUIsRUFBRSxFQUFFLEVBQ3ZCLENBQUMsRUFBRSxFQUFFLEVBQ0wsQ0FBQyxFQUFFLE9BQU8sRUFDVixDQUFDLEVBQUUsVUFBVSxFQUNsQjtJQUVKLE1BQU0sQ0FBQyxLQUFLLElBQUksb0JBQW9CLENBRW5DO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxvQkFBb0IsQ0FRckU7SUFFRCxRQUFRLDRCQUVQO0lBRUQsUUFBUSxTQU9QO0lBR0QsUUFBUSxXQU1QO0lBRUQsTUFBTSxDQUFDLEtBQUssRUFBRSxvQkFBb0IsV0FPakM7SUFHRCxNQUFNLENBQUMsTUFBTSx5QkFFWjtJQUVELENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQU9mO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"final_blob_accumulator.d.ts","sourceRoot":"","sources":["../../src/circuit_types/final_blob_accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;GAEG;AACH,qBAAa,oBAAoB;IAEtB,mBAAmB,EAAE,EAAE;IACvB,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,UAAU;gBAHb,mBAAmB,EAAE,EAAE,EACvB,CAAC,EAAE,EAAE,EACL,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,UAAU;IAGtB,MAAM,CAAC,KAAK,IAAI,oBAAoB;IAIpC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,oBAAoB;IAUtE,QAAQ;IAIR,QAAQ;IAUR,QAAQ;IAQR,MAAM,CAAC,KAAK,EAAE,oBAAoB;IAUlC,MAAM,CAAC,MAAM;IAIb,CAAC,OAAO,CAAC,MAAM,CAAC;CAQjB"}
1
+ {"version":3,"file":"final_blob_accumulator.d.ts","sourceRoot":"","sources":["../../src/circuit_types/final_blob_accumulator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B;;GAEG;AACH,qBAAa,oBAAoB;IAEtB,mBAAmB,EAAE,EAAE;IACvB,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,OAAO;IACV,CAAC,EAAE,UAAU;IAJtB,YACS,mBAAmB,EAAE,EAAE,EACvB,CAAC,EAAE,EAAE,EACL,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,UAAU,EAClB;IAEJ,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAEnC;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,oBAAoB,CAQrE;IAED,QAAQ,4BAEP;IAED,QAAQ,SAOP;IAGD,QAAQ,WAMP;IAED,MAAM,CAAC,KAAK,EAAE,oBAAoB,WAOjC;IAGD,MAAM,CAAC,MAAM,yBAEZ;IAED,CAAC,OAAO,CAAC,MAAM,CAAC,WAOf;CACF"}
@@ -12,4 +12,4 @@ export declare class FinalBlobBatchingChallenges {
12
12
  static fromBuffer(buffer: Buffer | BufferReader): FinalBlobBatchingChallenges;
13
13
  toBuffer(): Buffer<ArrayBufferLike>;
14
14
  }
15
- //# sourceMappingURL=final_blob_batching_challenges.d.ts.map
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluYWxfYmxvYl9iYXRjaGluZ19jaGFsbGVuZ2VzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2lyY3VpdF90eXBlcy9maW5hbF9ibG9iX2JhdGNoaW5nX2NoYWxsZW5nZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBRTlFOztHQUVHO0FBQ0gscUJBQWEsMkJBQTJCO2FBRXBCLENBQUMsRUFBRSxFQUFFO2FBQ0wsS0FBSyxFQUFFLE9BQU87SUFGaEMsWUFDa0IsQ0FBQyxFQUFFLEVBQUUsRUFDTCxLQUFLLEVBQUUsT0FBTyxFQUM1QjtJQUVKLE1BQU0sQ0FBQyxLQUFLLEVBQUUsMkJBQTJCLFdBRXhDO0lBRUQsTUFBTSxDQUFDLEtBQUssSUFBSSwyQkFBMkIsQ0FFMUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLDJCQUEyQixDQUc1RTtJQUVELFFBQVEsNEJBRVA7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"final_blob_batching_challenges.d.ts","sourceRoot":"","sources":["../../src/circuit_types/final_blob_batching_challenges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E;;GAEG;AACH,qBAAa,2BAA2B;aAEpB,CAAC,EAAE,EAAE;aACL,KAAK,EAAE,OAAO;gBADd,CAAC,EAAE,EAAE,EACL,KAAK,EAAE,OAAO;IAGhC,MAAM,CAAC,KAAK,EAAE,2BAA2B;IAIzC,MAAM,CAAC,KAAK,IAAI,2BAA2B;IAI3C,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,2BAA2B;IAK7E,QAAQ;CAGT"}
1
+ {"version":3,"file":"final_blob_batching_challenges.d.ts","sourceRoot":"","sources":["../../src/circuit_types/final_blob_batching_challenges.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E;;GAEG;AACH,qBAAa,2BAA2B;aAEpB,CAAC,EAAE,EAAE;aACL,KAAK,EAAE,OAAO;IAFhC,YACkB,CAAC,EAAE,EAAE,EACL,KAAK,EAAE,OAAO,EAC5B;IAEJ,MAAM,CAAC,KAAK,EAAE,2BAA2B,WAExC;IAED,MAAM,CAAC,KAAK,IAAI,2BAA2B,CAE1C;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,2BAA2B,CAG5E;IAED,QAAQ,4BAEP;CACF"}
@@ -1,4 +1,4 @@
1
1
  export * from './blob_accumulator.js';
2
2
  export * from './final_blob_accumulator.js';
3
3
  export * from './final_blob_batching_challenges.js';
4
- //# sourceMappingURL=index.d.ts.map
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jaXJjdWl0X3R5cGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFDQUFxQyxDQUFDIn0=
@@ -19,4 +19,4 @@ export declare function encodeBlockEndBlobData(blockEndBlobData: BlockEndBlobDat
19
19
  export declare function decodeBlockEndBlobData(fields: Fr[] | FieldReader, isFirstBlock: boolean): BlockEndBlobData;
20
20
  export declare function encodeBlockBlobData(blockBlobData: BlockBlobData): Fr[];
21
21
  export declare function decodeBlockBlobData(fields: Fr[] | FieldReader, isFirstBlock: boolean): BlockBlobData;
22
- //# sourceMappingURL=block_blob_data.d.ts.map
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfYmxvYl9kYXRhLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jb2RpbmcvYmxvY2tfYmxvYl9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHMUQsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUlwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUd4QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBc0MsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RixNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLGNBQWMsRUFBRSxjQUFjLENBQUM7SUFDL0Isa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkMsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUNwQixZQUFZLEVBQUUsRUFBRSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDbEIsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUNuQixpQkFBaUIsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDO0NBQ25DO0FBRUQsTUFBTSxXQUFXLGFBQWMsU0FBUSxnQkFBZ0I7SUFDckQsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQ25CO0FBRUQsd0JBQWdCLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxDQVUvRTtBQUVELHdCQUFnQixzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsZ0JBQWdCLENBbUIxRztBQUVELHdCQUFnQixtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxDQUV0RTtBQUVELHdCQUFnQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsYUFBYSxDQStCcEcifQ==
@@ -7,4 +7,4 @@ export interface BlockEndMarker {
7
7
  export declare function encodeBlockEndMarker(blockEndMarker: BlockEndMarker): Fr;
8
8
  export declare function decodeBlockEndMarker(field: Fr): BlockEndMarker;
9
9
  export declare function isBlockEndMarker(field: Fr): boolean;
10
- //# sourceMappingURL=block_end_marker.d.ts.map
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfZW5kX21hcmtlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2VuY29kaW5nL2Jsb2NrX2VuZF9tYXJrZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBVTlDLE1BQU0sV0FBVyxjQUFjO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsV0FBVyxFQUFFLE1BQU0sQ0FBQztJQUNwQixNQUFNLEVBQUUsTUFBTSxDQUFDO0NBQ2hCO0FBRUQsd0JBQWdCLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxjQUFjLE1BU2xFO0FBRUQsd0JBQWdCLG9CQUFvQixDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsY0FBYyxDQW1COUQ7QUFHRCx3QkFBZ0IsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBR25EIn0=
@@ -9,4 +9,4 @@ export interface BlockEndStateField {
9
9
  }
10
10
  export declare function encodeBlockEndStateField(blockEndStateField: BlockEndStateField): Fr;
11
11
  export declare function decodeBlockEndStateField(field: Fr): BlockEndStateField;
12
- //# sourceMappingURL=block_end_state_field.d.ts.map
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfZW5kX3N0YXRlX2ZpZWxkLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jb2RpbmcvYmxvY2tfZW5kX3N0YXRlX2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU05QyxlQUFPLE1BQU0sd0JBQXdCLE1BQU0sQ0FBQztBQUU1QyxNQUFNLFdBQVcsa0JBQWtCO0lBQ2pDLG1DQUFtQyxFQUFFLE1BQU0sQ0FBQztJQUM1Qyw4QkFBOEIsRUFBRSxNQUFNLENBQUM7SUFDdkMsK0JBQStCLEVBQUUsTUFBTSxDQUFDO0lBQ3hDLGdDQUFnQyxFQUFFLE1BQU0sQ0FBQztJQUN6QyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3ZCO0FBRUQsd0JBQWdCLHdCQUF3QixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixNQVc5RTtBQUVELHdCQUFnQix3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLGtCQUFrQixDQXVCdEUifQ==
@@ -12,4 +12,4 @@ export declare function encodeCheckpointBlobDataFromBlocks(blocks: BlockBlobData
12
12
  export declare function decodeCheckpointBlobData(fields: Fr[] | FieldReader): CheckpointBlobData;
13
13
  export declare function decodeCheckpointBlobDataFromBuffer(buf: Buffer): CheckpointBlobData;
14
14
  export declare function getTotalNumBlobFieldsFromTxs(txsPerBlock: TxStartMarker[][]): number;
15
- //# sourceMappingURL=checkpoint_blob_data.d.ts.map
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9ibG9iX2RhdGEuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNvZGluZy9jaGVja3BvaW50X2Jsb2JfZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUMsT0FBTyxFQUFnQixXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RSxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQTRDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEcsT0FBTyxFQUNMLEtBQUssbUJBQW1CLEVBSXpCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsTUFBTSxXQUFXLGtCQUFrQjtJQUNqQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztJQUN6QyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7Q0FDekI7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLENBS3JGO0FBRUQsd0JBQWdCLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FJaEY7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxrQkFBa0IsQ0EwQ3ZGO0FBRUQsd0JBQWdCLGtDQUFrQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBS2xGO0FBRUQsd0JBQWdCLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FZbkYifQ==
@@ -5,4 +5,4 @@ export interface CheckpointEndMarker {
5
5
  export declare function encodeCheckpointEndMarker(checkpointEndMarker: CheckpointEndMarker): Fr;
6
6
  export declare function decodeCheckpointEndMarker(field: Fr): CheckpointEndMarker;
7
7
  export declare function isCheckpointEndMarker(field: Fr): boolean;
8
- //# sourceMappingURL=checkpoint_end_marker.d.ts.map
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9lbmRfbWFya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jb2RpbmcvY2hlY2twb2ludF9lbmRfbWFya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVE5QyxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDdkI7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsbUJBQW1CLEVBQUUsbUJBQW1CLE1BS2pGO0FBRUQsd0JBQWdCLHlCQUF5QixDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsbUJBQW1CLENBYXhFO0FBR0Qsd0JBQWdCLHFCQUFxQixDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUd4RCJ9