@aztec/blob-lib 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f

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 (43) hide show
  1. package/dest/batched_blob.d.ts +6 -1
  2. package/dest/batched_blob.d.ts.map +1 -1
  3. package/dest/blob.d.ts +13 -7
  4. package/dest/blob.d.ts.map +1 -1
  5. package/dest/blob.js +15 -15
  6. package/dest/blob_batching.d.ts +14 -2
  7. package/dest/blob_batching.d.ts.map +1 -1
  8. package/dest/blob_batching.js +24 -24
  9. package/dest/blob_utils.d.ts +2 -2
  10. package/dest/blob_utils.d.ts.map +1 -1
  11. package/dest/blob_utils.js +3 -3
  12. package/dest/circuit_types/final_blob_accumulator.js +3 -1
  13. package/dest/encoding/block_blob_data.d.ts +9 -1
  14. package/dest/encoding/block_blob_data.d.ts.map +1 -1
  15. package/dest/encoding/block_blob_data.js +11 -1
  16. package/dest/encoding/block_end_marker.js +3 -3
  17. package/dest/encoding/checkpoint_blob_data.d.ts +1 -1
  18. package/dest/encoding/checkpoint_blob_data.d.ts.map +1 -1
  19. package/dest/encoding/checkpoint_blob_data.js +5 -5
  20. package/dest/encoding/checkpoint_end_marker.js +3 -3
  21. package/dest/encoding/tx_start_marker.js +2 -2
  22. package/dest/hash.d.ts +6 -5
  23. package/dest/hash.d.ts.map +1 -1
  24. package/dest/hash.js +17 -15
  25. package/dest/kzg_context.d.ts +5 -3
  26. package/dest/kzg_context.d.ts.map +1 -1
  27. package/dest/kzg_context.js +18 -3
  28. package/dest/sponge_blob.d.ts +3 -1
  29. package/dest/sponge_blob.d.ts.map +1 -1
  30. package/dest/testing.d.ts +2 -2
  31. package/dest/testing.d.ts.map +1 -1
  32. package/package.json +5 -5
  33. package/src/blob.ts +15 -15
  34. package/src/blob_batching.ts +21 -18
  35. package/src/blob_utils.ts +5 -3
  36. package/src/encoding/block_blob_data.ts +13 -1
  37. package/src/encoding/block_end_marker.ts +3 -3
  38. package/src/encoding/checkpoint_blob_data.ts +12 -5
  39. package/src/encoding/checkpoint_end_marker.ts +3 -3
  40. package/src/encoding/tx_start_marker.ts +2 -2
  41. package/src/hash.ts +19 -14
  42. package/src/kzg_context.ts +28 -3
  43. package/src/testing.ts +1 -1
@@ -5,10 +5,15 @@ import { FinalBlobAccumulator } from './circuit_types/index.js';
5
5
  * A class to represent the result from accumulating blobs in an epoch using BatchedBlobAccumulator.
6
6
  */
7
7
  export declare class BatchedBlob {
8
+ /** Hash of Cs (to link to L1 blob hashes). */
8
9
  readonly blobCommitmentsHash: Fr;
10
+ /** Challenge point z such that p_i(z) = y_i. */
9
11
  readonly z: Fr;
12
+ /** Evaluation y, linear combination of all evaluations y_i = p_i(z) with gamma. */
10
13
  readonly y: BLS12Fr;
14
+ /** Commitment C, linear combination of all commitments C_i = [p_i] with gamma. */
11
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. */
12
17
  readonly q: BLS12Point;
13
18
  constructor(
14
19
  /** Hash of Cs (to link to L1 blob hashes). */
@@ -23,4 +28,4 @@ export declare class BatchedBlob {
23
28
  q: BLS12Point);
24
29
  toFinalBlobAccumulator(): FinalBlobAccumulator;
25
30
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hlZF9ibG9iLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmF0Y2hlZF9ibG9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFOztHQUVHO0FBQ0gscUJBQWEsV0FBVzthQUdKLG1CQUFtQixFQUFFLEVBQUU7YUFFdkIsQ0FBQyxFQUFFLEVBQUU7YUFFTCxDQUFDLEVBQUUsT0FBTzthQUVWLFVBQVUsRUFBRSxVQUFVO2FBRXRCLENBQUMsRUFBRSxVQUFVO0lBVi9CO0lBQ0UsOENBQThDO0lBQzlCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkMsZ0RBQWdEO0lBQ2hDLENBQUMsRUFBRSxFQUFFO0lBQ3JCLG1GQUFtRjtJQUNuRSxDQUFDLEVBQUUsT0FBTztJQUMxQixrRkFBa0Y7SUFDbEUsVUFBVSxFQUFFLFVBQVU7SUFDdEMsNEhBQTRIO0lBQzVHLENBQUMsRUFBRSxVQUFVLEVBQzNCO0lBRUosc0JBQXNCLHlCQUVyQjtDQUNGIn0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hlZF9ibG9iLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYmF0Y2hlZF9ibG9iLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDckUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWhFOztHQUVHO0FBQ0gscUJBQWEsV0FBVztJQUVwQiw4Q0FBOEM7YUFDOUIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QyxnREFBZ0Q7YUFDaEMsQ0FBQyxFQUFFLEVBQUU7SUFDckIsbUZBQW1GO2FBQ25FLENBQUMsRUFBRSxPQUFPO0lBQzFCLGtGQUFrRjthQUNsRSxVQUFVLEVBQUUsVUFBVTtJQUN0Qyw0SEFBNEg7YUFDNUcsQ0FBQyxFQUFFLFVBQVU7SUFWL0I7SUFDRSw4Q0FBOEM7SUFDOUIsbUJBQW1CLEVBQUUsRUFBRTtJQUN2QyxnREFBZ0Q7SUFDaEMsQ0FBQyxFQUFFLEVBQUU7SUFDckIsbUZBQW1GO0lBQ25FLENBQUMsRUFBRSxPQUFPO0lBQzFCLGtGQUFrRjtJQUNsRSxVQUFVLEVBQUUsVUFBVTtJQUN0Qyw0SEFBNEg7SUFDNUcsQ0FBQyxFQUFFLFVBQVUsRUFDM0I7SUFFSixzQkFBc0IseUJBRXJCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"batched_blob.d.ts","sourceRoot":"","sources":["../src/batched_blob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,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"}
1
+ {"version":3,"file":"batched_blob.d.ts","sourceRoot":"","sources":["../src/batched_blob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEhE;;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;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"}
package/dest/blob.d.ts CHANGED
@@ -12,7 +12,13 @@ export { FIELDS_PER_BLOB };
12
12
  * and is correctly encoded.
13
13
  */
14
14
  export declare class Blob {
15
+ /**
16
+ * The data to be broadcast on L1 in bytes form.
17
+ */
15
18
  readonly data: Uint8Array;
19
+ /**
20
+ * Commitment to the blob data. Used in compressed BLS12 point format (48 bytes).
21
+ */
16
22
  readonly commitment: Buffer;
17
23
  constructor(
18
24
  /**
@@ -28,9 +34,9 @@ export declare class Blob {
28
34
  * @param data - The buffer of the Blob.
29
35
  * @returns A Blob created from the buffer.
30
36
  *
31
- * @throws If data does not match the expected length (BYTES_PER_BLOB).
37
+ * @throws If data does not match the expected length (getBytesPerBlob()).
32
38
  */
33
- static fromBlobBuffer(data: Uint8Array): Blob;
39
+ static fromBlobBuffer(data: Uint8Array): Promise<Blob>;
34
40
  /**
35
41
  * Create a Blob from an array of fields.
36
42
  *
@@ -39,7 +45,7 @@ export declare class Blob {
39
45
  * @param fields - The array of fields to create the Blob from.
40
46
  * @returns A Blob created from the array of fields.
41
47
  */
42
- static fromFields(fields: Fr[]): Blob;
48
+ static fromFields(fields: Fr[]): Promise<Blob>;
43
49
  /**
44
50
  * Get the fields from the blob data.
45
51
  *
@@ -58,7 +64,7 @@ export declare class Blob {
58
64
  * @param json - The JSON object to create the Blob from.
59
65
  * @returns A Blob created from the JSON object.
60
66
  */
61
- static fromJson(json: BlobJson): Blob;
67
+ static fromJson(json: BlobJson): Promise<Blob>;
62
68
  /**
63
69
  * Get the JSON representation of the blob.
64
70
  *
@@ -81,10 +87,10 @@ export declare class Blob {
81
87
  * y: BLS12Fr - Evaluation y = p(z), where p() is the blob polynomial. BLS12 field element, rep. as BigNum in nr, bigint in ts.
82
88
  * proof: Buffer - KZG opening proof for y = p(z). The commitment to quotient polynomial Q, used in compressed BLS12 point format (48 bytes).
83
89
  */
84
- evaluate(challengeZ: Fr, verifyProof?: boolean): {
90
+ evaluate(challengeZ: Fr, verifyProof?: boolean): Promise<{
85
91
  y: BLS12Fr;
86
92
  proof: Buffer<ArrayBuffer>;
87
- };
93
+ }>;
88
94
  /**
89
95
  * Get the buffer representation of the ENTIRE blob.
90
96
  *
@@ -112,4 +118,4 @@ export declare class Blob {
112
118
  computeCellsAndKzgProofs: (b: Uint8Array<ArrayBufferLike>) => [Uint8Array<ArrayBufferLike>[], Uint8Array<ArrayBufferLike>[]];
113
119
  };
114
120
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gscUJBQWEsSUFBSTthQUtHLElBQUksRUFBRSxVQUFVO2FBSWhCLFVBQVUsRUFBRSxNQUFNO0lBUnBDO0lBQ0U7O09BRUc7SUFDYSxJQUFJLEVBQUUsVUFBVTtJQUNoQzs7T0FFRztJQUNhLFVBQVUsRUFBRSxNQUFNLEVBUW5DO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLElBQUksQ0FHNUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQVFwQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FJZjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxJQUFJLENBU3BDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sSUFBSSxRQUFRLENBTWpCO0lBRUQsdUJBQXVCLElBQUksTUFBTSxDQUVoQztJQUVEOzs7T0FHRztJQUNHLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUV2RDtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLFdBQVcsVUFBUTs7O01BVTNDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsUUFBUSxJQUFJLE1BQU0sQ0FFakI7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxJQUFJLENBR2xEO0lBRUQ7O09BRUc7SUFDSCxPQUFPLFdBRU47SUFFRCxNQUFNLENBQUMsa0JBQWtCOzs7O01BVXhCO0NBQ0YifQ==
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gscUJBQWEsSUFBSTtJQUViOztPQUVHO2FBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7YUFDYSxVQUFVLEVBQUUsTUFBTTtJQVJwQztJQUNFOztPQUVHO0lBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7SUFDYSxVQUFVLEVBQUUsTUFBTSxFQVFuQztJQUVEOzs7Ozs7T0FNRztJQUNILE9BQWEsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUczRDtJQUVEOzs7Ozs7O09BT0c7SUFDSCxPQUFhLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVFuRDtJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FJZjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILE9BQWEsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVNuRDtJQUVEOzs7O09BSUc7SUFDSCxNQUFNLElBQUksUUFBUSxDQU1qQjtJQUVELHVCQUF1QixJQUFJLE1BQU0sQ0FFaEM7SUFFRDs7O09BR0c7SUFDRyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFdkQ7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDRyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVE7OztPQVVqRDtJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUdsRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxXQUVOO0lBRUQsTUFBTSxDQUFDLGtCQUFrQjs7OztNQVV4QjtDQUNGIn0=
@@ -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,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;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;;;;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"}
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,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"}
package/dest/blob.js CHANGED
@@ -3,7 +3,7 @@ import { BLS12Fr } from '@aztec/foundation/curves/bls12';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
5
5
  import { computeBlobCommitment, computeChallengeZ, computeEthVersionedBlobHash } from './hash.js';
6
- import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js';
6
+ import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js';
7
7
  export { FIELDS_PER_BLOB };
8
8
  /**
9
9
  * A class to create, manage, and prove EVM blobs.
@@ -21,11 +21,11 @@ export { FIELDS_PER_BLOB };
21
21
  */ commitment){
22
22
  this.data = data;
23
23
  this.commitment = commitment;
24
- if (data.length !== BYTES_PER_BLOB) {
25
- throw new Error(`Blob data must be ${BYTES_PER_BLOB} bytes. Got ${data.length}.`);
24
+ if (data.length !== getBytesPerBlob()) {
25
+ throw new Error(`Blob data must be ${getBytesPerBlob()} bytes. Got ${data.length}.`);
26
26
  }
27
- if (commitment.length !== BYTES_PER_COMMITMENT) {
28
- throw new Error(`Blob commitment must be ${BYTES_PER_COMMITMENT} bytes. Got ${commitment.length}.`);
27
+ if (commitment.length !== getBytesPerCommitment()) {
28
+ throw new Error(`Blob commitment must be ${getBytesPerCommitment()} bytes. Got ${commitment.length}.`);
29
29
  }
30
30
  }
31
31
  /**
@@ -33,9 +33,9 @@ export { FIELDS_PER_BLOB };
33
33
  * @param data - The buffer of the Blob.
34
34
  * @returns A Blob created from the buffer.
35
35
  *
36
- * @throws If data does not match the expected length (BYTES_PER_BLOB).
37
- */ static fromBlobBuffer(data) {
38
- const commitment = computeBlobCommitment(data);
36
+ * @throws If data does not match the expected length (getBytesPerBlob()).
37
+ */ static async fromBlobBuffer(data) {
38
+ const commitment = await computeBlobCommitment(data);
39
39
  return new Blob(data, commitment);
40
40
  }
41
41
  /**
@@ -45,14 +45,14 @@ export { FIELDS_PER_BLOB };
45
45
  *
46
46
  * @param fields - The array of fields to create the Blob from.
47
47
  * @returns A Blob created from the array of fields.
48
- */ static fromFields(fields) {
48
+ */ static async fromFields(fields) {
49
49
  if (fields.length > FIELDS_PER_BLOB) {
50
50
  throw new Error(`Attempted to overfill blob with ${fields.length} fields. The maximum is ${FIELDS_PER_BLOB}.`);
51
51
  }
52
52
  const data = Buffer.concat([
53
53
  serializeToBuffer(fields)
54
- ], BYTES_PER_BLOB);
55
- const commitment = computeBlobCommitment(data);
54
+ ], getBytesPerBlob());
55
+ const commitment = await computeBlobCommitment(data);
56
56
  return new Blob(data, commitment);
57
57
  }
58
58
  /**
@@ -75,9 +75,9 @@ export { FIELDS_PER_BLOB };
75
75
  *
76
76
  * @param json - The JSON object to create the Blob from.
77
77
  * @returns A Blob created from the JSON object.
78
- */ static fromJson(json) {
78
+ */ static async fromJson(json) {
79
79
  const blobBuffer = Buffer.from(json.blob.slice(2), 'hex');
80
- const blob = Blob.fromBlobBuffer(blobBuffer);
80
+ const blob = await Blob.fromBlobBuffer(blobBuffer);
81
81
  if (blob.commitment.toString('hex') !== json.kzg_commitment.slice(2)) {
82
82
  throw new Error('KZG commitment does not match');
83
83
  }
@@ -112,9 +112,9 @@ export { FIELDS_PER_BLOB };
112
112
  * @returns
113
113
  * y: BLS12Fr - Evaluation y = p(z), where p() is the blob polynomial. BLS12 field element, rep. as BigNum in nr, bigint in ts.
114
114
  * proof: Buffer - KZG opening proof for y = p(z). The commitment to quotient polynomial Q, used in compressed BLS12 point format (48 bytes).
115
- */ evaluate(challengeZ, verifyProof = false) {
115
+ */ async evaluate(challengeZ, verifyProof = false) {
116
116
  const kzg = getKzg();
117
- const res = kzg.computeKzgProof(this.data, challengeZ.toBuffer());
117
+ const res = await kzg.asyncComputeKzgProof(this.data, challengeZ.toBuffer());
118
118
  if (verifyProof && !kzg.verifyKzgProof(this.commitment, challengeZ.toBuffer(), res[1], res[0])) {
119
119
  throw new Error(`KZG proof did not verify.`);
120
120
  }
@@ -8,13 +8,25 @@ import { BlobAccumulator, FinalBlobAccumulator, FinalBlobBatchingChallenges } fr
8
8
  * See noir-projects/noir-protocol-circuits/crates/blob/src/abis/blob_accumulator.nr
9
9
  */
10
10
  export declare class BatchedBlobAccumulator {
11
+ /** Hash of Cs (to link to L1 blob hashes). */
11
12
  readonly blobCommitmentsHashAcc: Fr;
13
+ /** Challenge point z_acc. Final value used such that p_i(z) = y_i. */
12
14
  readonly zAcc: Fr;
15
+ /** Evaluation y_acc. Final value is is linear combination of all evaluations y_i = p_i(z) with gamma. */
13
16
  readonly yAcc: BLS12Fr;
17
+ /** Commitment c_acc. Final value is linear combination of all commitments C_i = [p_i] with gamma. */
14
18
  readonly cAcc: BLS12Point;
19
+ /** KZG opening q_acc. Final value is linear combination of all blob kzg 'proofs' Q_i with gamma. */
15
20
  readonly qAcc: BLS12Point;
21
+ /**
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
+ */
16
26
  readonly gammaAcc: Fr;
27
+ /** Simply gamma^(i + 1) at blob i. Used for calculating the i'th element of the above linear comb.s */
17
28
  readonly gammaPow: BLS12Fr;
29
+ /** Final challenge values used in evaluation. Optimistically input and checked in the final acc. */
18
30
  readonly finalBlobChallenges: FinalBlobBatchingChallenges;
19
31
  constructor(
20
32
  /** Hash of Cs (to link to L1 blob hashes). */
@@ -91,7 +103,7 @@ export declare class BatchedBlobAccumulator {
91
103
  * - z := z_acc (final challenge, at which all blobs are evaluated)
92
104
  * - y := y_acc (final opening to be checked on L1)
93
105
  * - c := c_acc (final commitment to be checked on L1)
94
- * - gamma := poseidon2(gamma_acc, z) (challenge for linear combination of y and C, above)
106
+ * - gamma := poseidon2(BLOB_GAMMA_FINAL, gamma_acc, z) (challenge for linear combination of y and C, above)
95
107
  *
96
108
  * @param verifyProof - Whether to verify the KZG proof.
97
109
  * @returns A batched blob.
@@ -103,4 +115,4 @@ export declare class BatchedBlobAccumulator {
103
115
  toBlobAccumulator(): BlobAccumulator;
104
116
  toFinalBlobAccumulator(): FinalBlobAccumulator;
105
117
  }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl9iYXRjaGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfYmF0Y2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTlHOzs7R0FHRztBQUNILHFCQUFhLHNCQUFzQjthQUdmLHNCQUFzQixFQUFFLEVBQUU7YUFFMUIsSUFBSSxFQUFFLEVBQUU7YUFFUixJQUFJLEVBQUUsT0FBTzthQUViLElBQUksRUFBRSxVQUFVO2FBRWhCLElBQUksRUFBRSxVQUFVO2FBTWhCLFFBQVEsRUFBRSxFQUFFO2FBRVosUUFBUSxFQUFFLE9BQU87YUFFakIsbUJBQW1CLEVBQUUsMkJBQTJCO0lBcEJsRTtJQUNFLDhDQUE4QztJQUM5QixzQkFBc0IsRUFBRSxFQUFFO0lBQzFDLHNFQUFzRTtJQUN0RCxJQUFJLEVBQUUsRUFBRTtJQUN4Qix5R0FBeUc7SUFDekYsSUFBSSxFQUFFLE9BQU87SUFDN0IscUdBQXFHO0lBQ3JGLElBQUksRUFBRSxVQUFVO0lBQ2hDLG9HQUFvRztJQUNwRixJQUFJLEVBQUUsVUFBVTtJQUNoQzs7OztPQUlHO0lBQ2EsUUFBUSxFQUFFLEVBQUU7SUFDNUIsdUdBQXVHO0lBQ3ZGLFFBQVEsRUFBRSxPQUFPO0lBQ2pDLG9HQUFvRztJQUNwRixtQkFBbUIsRUFBRSwyQkFBMkIsRUFDOUQ7SUFFSjs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEdBQUcsc0JBQXNCLENBV2pHO0lBRUQ7Ozs7T0FJRztJQUNILE9BQWEsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBRzVGO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBYSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBZTdGO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxPQUFhLCtCQUErQixDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBbUNsSDtJQUVEOzs7O09BSUc7SUFDRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxtQ0F1Q2xEO0lBRUQ7Ozs7O09BS0c7SUFDRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLG1DQWtCdEM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0csUUFBUSxDQUFDLFdBQVcsVUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FzQnhEO0lBRUQsTUFBTSxZQU9MO0lBRUQsWUFBWSxZQVVYO0lBRUQsS0FBSywyQkFXSjtJQUVELGlCQUFpQixvQkFTaEI7SUFFRCxzQkFBc0IseUJBRXJCO0NBQ0YifQ==
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl9iYXRjaGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfYmF0Y2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTlHOzs7R0FHRztBQUNILHFCQUFhLHNCQUFzQjtJQUUvQiw4Q0FBOEM7YUFDOUIsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQyxzRUFBc0U7YUFDdEQsSUFBSSxFQUFFLEVBQUU7SUFDeEIseUdBQXlHO2FBQ3pGLElBQUksRUFBRSxPQUFPO0lBQzdCLHFHQUFxRzthQUNyRixJQUFJLEVBQUUsVUFBVTtJQUNoQyxvR0FBb0c7YUFDcEYsSUFBSSxFQUFFLFVBQVU7SUFDaEM7Ozs7T0FJRzthQUNhLFFBQVEsRUFBRSxFQUFFO0lBQzVCLHVHQUF1RzthQUN2RixRQUFRLEVBQUUsT0FBTztJQUNqQyxvR0FBb0c7YUFDcEYsbUJBQW1CLEVBQUUsMkJBQTJCO0lBcEJsRTtJQUNFLDhDQUE4QztJQUM5QixzQkFBc0IsRUFBRSxFQUFFO0lBQzFDLHNFQUFzRTtJQUN0RCxJQUFJLEVBQUUsRUFBRTtJQUN4Qix5R0FBeUc7SUFDekYsSUFBSSxFQUFFLE9BQU87SUFDN0IscUdBQXFHO0lBQ3JGLElBQUksRUFBRSxVQUFVO0lBQ2hDLG9HQUFvRztJQUNwRixJQUFJLEVBQUUsVUFBVTtJQUNoQzs7OztPQUlHO0lBQ2EsUUFBUSxFQUFFLEVBQUU7SUFDNUIsdUdBQXVHO0lBQ3ZGLFFBQVEsRUFBRSxPQUFPO0lBQ2pDLG9HQUFvRztJQUNwRixtQkFBbUIsRUFBRSwyQkFBMkIsRUFDOUQ7SUFFSjs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEdBQUcsc0JBQXNCLENBV2pHO0lBRUQ7Ozs7T0FJRztJQUNILE9BQWEsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBRzVGO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBYSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBZTdGO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxPQUFhLCtCQUErQixDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBbUNsSDtJQUVEOzs7O09BSUc7SUFDRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxtQ0F1Q2xEO0lBRUQ7Ozs7O09BS0c7SUFDRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLG1DQWtCdEM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0csUUFBUSxDQUFDLFdBQVcsVUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0F5QnhEO0lBRUQsTUFBTSxZQU9MO0lBRUQsWUFBWSxZQVVYO0lBRUQsS0FBSywyQkFXSjtJQUVELGlCQUFpQixvQkFTaEI7SUFFRCxzQkFBc0IseUJBRXJCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"blob_batching.d.ts","sourceRoot":"","sources":["../src/blob_batching.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,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,YAOL;IAED,YAAY,YAUX;IAED,KAAK,2BAWJ;IAED,iBAAiB,oBAShB;IAED,sBAAsB,yBAErB;CACF"}
1
+ {"version":3,"file":"blob_batching.d.ts","sourceRoot":"","sources":["../src/blob_batching.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,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;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;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,CAyBxD;IAED,MAAM,YAOL;IAED,YAAY,YAUX;IAED,KAAK,2BAWJ;IAED,iBAAiB,oBAShB;IAED,sBAAsB,yBAErB;CACF"}
@@ -1,12 +1,12 @@
1
- import { AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_CHECKPOINT } from '@aztec/constants';
2
- import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
1
+ import { BLOBS_PER_CHECKPOINT, DomainSeparator, MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
2
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
3
3
  import { sha256ToField } from '@aztec/foundation/crypto/sha256';
4
4
  import { BLS12Fr, BLS12Point } from '@aztec/foundation/curves/bls12';
5
5
  import { Fr } from '@aztec/foundation/curves/bn254';
6
6
  import { BatchedBlob } from './batched_blob.js';
7
7
  import { getBlobsPerL1Block } from './blob_utils.js';
8
8
  import { BlobAccumulator, FinalBlobAccumulator, FinalBlobBatchingChallenges } from './circuit_types/index.js';
9
- import { computeBlobFieldsHash, hashNoirBigNumLimbs } from './hash.js';
9
+ import { computeBlobFieldsHash, hashBlobYLimbs } from './hash.js';
10
10
  import { getKzg } from './kzg_context.js';
11
11
  /**
12
12
  * A class to create, manage, and prove batched EVM blobs.
@@ -56,8 +56,8 @@ import { getKzg } from './kzg_context.js';
56
56
  * @returns A batched blob.
57
57
  */ static async batch(blobFieldsPerCheckpoint, verifyProof = false) {
58
58
  const numCheckpoints = blobFieldsPerCheckpoint.length;
59
- if (numCheckpoints > AZTEC_MAX_EPOCH_DURATION) {
60
- throw new Error(`Too many checkpoints sent to batch(). The maximum is ${AZTEC_MAX_EPOCH_DURATION}. Got ${numCheckpoints}.`);
59
+ if (numCheckpoints > MAX_CHECKPOINTS_PER_EPOCH) {
60
+ throw new Error(`Too many checkpoints sent to batch(). The maximum is ${MAX_CHECKPOINTS_PER_EPOCH}. Got ${numCheckpoints}.`);
61
61
  }
62
62
  // Precalculate the values (z and gamma) and initialize the accumulator:
63
63
  let acc = await this.fromBlobFields(blobFieldsPerCheckpoint);
@@ -85,17 +85,17 @@ import { getKzg } from './kzg_context.js';
85
85
  for (const blobFields of blobFieldsPerCheckpoint){
86
86
  // Compute the hash of all the fields in the block.
87
87
  const blobFieldsHash = await computeBlobFieldsHash(blobFields);
88
- const blobs = getBlobsPerL1Block(blobFields);
88
+ const blobs = await getBlobsPerL1Block(blobFields);
89
89
  for (const blob of blobs){
90
90
  // Compute the challenge z for each blob and accumulate it.
91
91
  const challengeZ = await blob.computeChallengeZ(blobFieldsHash);
92
92
  if (!z) {
93
93
  z = challengeZ;
94
94
  } else {
95
- z = await poseidon2Hash([
95
+ z = await poseidon2HashWithSeparator([
96
96
  z,
97
97
  challengeZ
98
- ]);
98
+ ], DomainSeparator.BLOB_Z_ACC);
99
99
  }
100
100
  }
101
101
  allBlobs.push(...blobs);
@@ -104,21 +104,21 @@ import { getKzg } from './kzg_context.js';
104
104
  throw new Error('No blobs to precompute challenges for.');
105
105
  }
106
106
  // Now we have a shared challenge for all blobs, evaluate them...
107
- const proofObjects = allBlobs.map((b)=>b.evaluate(z));
108
- const evaluations = await Promise.all(proofObjects.map(({ y })=>hashNoirBigNumLimbs(y)));
107
+ const proofObjects = await Promise.all(allBlobs.map((b)=>b.evaluate(z)));
108
+ const evaluations = await Promise.all(proofObjects.map(({ y })=>hashBlobYLimbs(y)));
109
109
  // ...and find the challenge for the linear combination of blobs.
110
110
  let gamma = evaluations[0];
111
111
  // We start at i = 1, because gamma is initialized as the first blob's evaluation.
112
112
  for(let i = 1; i < allBlobs.length; i++){
113
- gamma = await poseidon2Hash([
113
+ gamma = await poseidon2HashWithSeparator([
114
114
  gamma,
115
115
  evaluations[i]
116
- ]);
116
+ ], DomainSeparator.BLOB_GAMMA_ACC);
117
117
  }
118
- gamma = await poseidon2Hash([
118
+ gamma = await poseidon2HashWithSeparator([
119
119
  gamma,
120
120
  z
121
- ]);
121
+ ], DomainSeparator.BLOB_GAMMA_FINAL);
122
122
  return new FinalBlobBatchingChallenges(z, BLS12Fr.fromBN254Fr(gamma));
123
123
  }
124
124
  /**
@@ -126,7 +126,7 @@ import { getKzg } from './kzg_context.js';
126
126
  * We assume the input blob has not been evaluated at z.
127
127
  * @returns An updated blob accumulator.
128
128
  */ async accumulateBlob(blob, blobFieldsHash) {
129
- const { proof, y: thisY } = blob.evaluate(this.finalBlobChallenges.z);
129
+ const { proof, y: thisY } = await blob.evaluate(this.finalBlobChallenges.z);
130
130
  const thisC = BLS12Point.decompress(blob.commitment);
131
131
  const thisQ = BLS12Point.decompress(proof);
132
132
  const blobChallengeZ = await blob.computeChallengeZ(blobFieldsHash);
@@ -141,19 +141,19 @@ import { getKzg } from './kzg_context.js';
141
141
  * - gamma^(i + 1) = gamma^1 = gamma // denoted gamma_pow_acc
142
142
  */ return new BatchedBlobAccumulator(sha256ToField([
143
143
  blob.commitment
144
- ]), blobChallengeZ, thisY, thisC, thisQ, await hashNoirBigNumLimbs(thisY), this.finalBlobChallenges.gamma, this.finalBlobChallenges);
144
+ ]), blobChallengeZ, thisY, thisC, thisQ, await hashBlobYLimbs(thisY), this.finalBlobChallenges.gamma, this.finalBlobChallenges);
145
145
  } else {
146
146
  // Moving from i - 1 to i, so:
147
147
  return new BatchedBlobAccumulator(sha256ToField([
148
148
  this.blobCommitmentsHashAcc,
149
149
  blob.commitment
150
- ]), await poseidon2Hash([
150
+ ]), await poseidon2HashWithSeparator([
151
151
  this.zAcc,
152
152
  blobChallengeZ
153
- ]), this.yAcc.add(thisY.mul(this.gammaPow)), this.cAcc.add(thisC.mul(this.gammaPow)), this.qAcc.add(thisQ.mul(this.gammaPow)), await poseidon2Hash([
153
+ ], DomainSeparator.BLOB_Z_ACC), this.yAcc.add(thisY.mul(this.gammaPow)), this.cAcc.add(thisC.mul(this.gammaPow)), this.qAcc.add(thisQ.mul(this.gammaPow)), await poseidon2HashWithSeparator([
154
154
  this.gammaAcc,
155
- await hashNoirBigNumLimbs(thisY)
156
- ]), this.gammaPow.mul(this.finalBlobChallenges.gamma), this.finalBlobChallenges);
155
+ await hashBlobYLimbs(thisY)
156
+ ], DomainSeparator.BLOB_GAMMA_ACC), this.gammaPow.mul(this.finalBlobChallenges.gamma), this.finalBlobChallenges);
157
157
  }
158
158
  }
159
159
  /**
@@ -162,7 +162,7 @@ import { getKzg } from './kzg_context.js';
162
162
  * @param blobFields - The blob fields of a checkpoint to accumulate.
163
163
  * @returns An updated blob accumulator.
164
164
  */ async accumulateFields(blobFields) {
165
- const blobs = getBlobsPerL1Block(blobFields);
165
+ const blobs = await getBlobsPerL1Block(blobFields);
166
166
  if (blobs.length > BLOBS_PER_CHECKPOINT) {
167
167
  throw new Error(`Too many blobs to accumulate. The maximum is ${BLOBS_PER_CHECKPOINT} per checkpoint. Got ${blobs.length}.`);
168
168
  }
@@ -184,16 +184,16 @@ import { getKzg } from './kzg_context.js';
184
184
  * - z := z_acc (final challenge, at which all blobs are evaluated)
185
185
  * - y := y_acc (final opening to be checked on L1)
186
186
  * - c := c_acc (final commitment to be checked on L1)
187
- * - gamma := poseidon2(gamma_acc, z) (challenge for linear combination of y and C, above)
187
+ * - gamma := poseidon2(BLOB_GAMMA_FINAL, gamma_acc, z) (challenge for linear combination of y and C, above)
188
188
  *
189
189
  * @param verifyProof - Whether to verify the KZG proof.
190
190
  * @returns A batched blob.
191
191
  */ async finalize(verifyProof = false) {
192
192
  // All values in acc are final, apart from gamma := poseidon2(gammaAcc, z):
193
- const calculatedGamma = await poseidon2Hash([
193
+ const calculatedGamma = await poseidon2HashWithSeparator([
194
194
  this.gammaAcc,
195
195
  this.zAcc
196
- ]);
196
+ ], DomainSeparator.BLOB_GAMMA_FINAL);
197
197
  // Check final values:
198
198
  if (!this.zAcc.equals(this.finalBlobChallenges.z)) {
199
199
  throw new Error(`Blob batching mismatch: accumulated z ${this.zAcc} does not equal injected z ${this.finalBlobChallenges.z}`);
@@ -16,7 +16,7 @@ export declare function getPrefixedEthBlobCommitments(blobs: Blob[]): `0x${strin
16
16
  *
17
17
  * @throws If the number of fields does not match what's indicated by the checkpoint prefix.
18
18
  */
19
- export declare function getBlobsPerL1Block(fields: Fr[]): Blob[];
19
+ export declare function getBlobsPerL1Block(fields: Fr[]): Promise<Blob[]>;
20
20
  /**
21
21
  * Get the encoded data from all blobs in the checkpoint.
22
22
  * @param blobs - The blobs to read data from. Should be all the blobs for the L1 block proposing the checkpoint.
@@ -37,4 +37,4 @@ export declare function getBlobCommitmentsFromBlobs(blobs: Blob[]): BLS12Point[]
37
37
  * See https://eips.ethereum.org/EIPS/eip-4844#point-evaluation-precompile
38
38
  */
39
39
  export declare function getEthBlobEvaluationInputs(batchedBlob: BatchedBlob): `0x${string}`;
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFzQyxNQUFNLHFCQUFxQixDQUFDO0FBR2xHOzs7OztHQUtHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVMxRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FTdkQ7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FHbkY7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FFM0Q7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUV2RTtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx3QkFBZ0IsMEJBQTBCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVNsRiJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl91dGlscy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUFzQyxNQUFNLHFCQUFxQixDQUFDO0FBR2xHOzs7OztHQUtHO0FBQ0gsd0JBQWdCLDZCQUE2QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVMxRTtBQUVEOzs7OztHQUtHO0FBQ0gsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FXdEU7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQWdCLGlDQUFpQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsR0FBRyxrQkFBa0IsQ0FHbkY7QUFFRCx3QkFBZ0IseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FFM0Q7QUFFRCx3QkFBZ0IsMkJBQTJCLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsRUFBRSxDQUV2RTtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCx3QkFBZ0IsMEJBQTBCLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxLQUFLLE1BQU0sRUFBRSxDQVNsRiJ9
@@ -1 +1 @@
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"}
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,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"}
@@ -24,14 +24,14 @@ import { computeBlobsHash, computeEthVersionedBlobHash } from './hash.js';
24
24
  * @returns As many blobs as required to broadcast the given fields to an L1 block.
25
25
  *
26
26
  * @throws If the number of fields does not match what's indicated by the checkpoint prefix.
27
- */ export function getBlobsPerL1Block(fields) {
27
+ */ export async function getBlobsPerL1Block(fields) {
28
28
  if (!fields.length) {
29
29
  throw new Error('Cannot create blobs from empty fields.');
30
30
  }
31
31
  const numBlobs = Math.ceil(fields.length / FIELDS_PER_BLOB);
32
- return Array.from({
32
+ return await Promise.all(Array.from({
33
33
  length: numBlobs
34
- }, (_, i)=>Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB)));
34
+ }, (_, i)=>Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB))));
35
35
  }
36
36
  /**
37
37
  * Get the encoded data from all blobs in the checkpoint.
@@ -1,7 +1,9 @@
1
+ var _computedKey;
1
2
  import { BLS12Fr, BLS12Point } from '@aztec/foundation/curves/bls12';
2
3
  import { Fr } from '@aztec/foundation/curves/bn254';
3
4
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
4
5
  import { inspect } from 'util';
6
+ _computedKey = inspect.custom;
5
7
  /**
6
8
  * See `noir-projects/noir-protocol-circuits/crates/blob/src/abis/final_blob_accumulator.nr` for documentation.
7
9
  */ export class FinalBlobAccumulator {
@@ -53,7 +55,7 @@ import { inspect } from 'util';
53
55
  static random() {
54
56
  return new FinalBlobAccumulator(Fr.random(), Fr.random(), BLS12Fr.random(), BLS12Point.random());
55
57
  }
56
- [inspect.custom]() {
58
+ [_computedKey]() {
57
59
  return `FinalBlobAccumulator {
58
60
  blobCommitmentsHash: ${inspect(this.blobCommitmentsHash)},
59
61
  z: ${inspect(this.z)},
@@ -3,6 +3,14 @@ import { FieldReader } from '@aztec/foundation/serialize';
3
3
  import { type BlockEndMarker } from './block_end_marker.js';
4
4
  import { type BlockEndStateField } from './block_end_state_field.js';
5
5
  import { type TxBlobData } from './tx_blob_data.js';
6
+ export declare const NUM_BLOCK_END_BLOB_FIELDS = 6;
7
+ export declare const NUM_FIRST_BLOCK_END_BLOB_FIELDS = 7;
8
+ export declare const NUM_CHECKPOINT_END_MARKER_FIELDS = 1;
9
+ /**
10
+ * Returns the number of blob fields used for block end data.
11
+ * @param isFirstBlockInCheckpoint - Whether this is the first block in a checkpoint.
12
+ */
13
+ export declare function getNumBlockEndBlobFields(isFirstBlockInCheckpoint: boolean): number;
6
14
  export interface BlockEndBlobData {
7
15
  blockEndMarker: BlockEndMarker;
8
16
  blockEndStateField: BlockEndStateField;
@@ -19,4 +27,4 @@ export declare function encodeBlockEndBlobData(blockEndBlobData: BlockEndBlobDat
19
27
  export declare function decodeBlockEndBlobData(fields: Fr[] | FieldReader, isFirstBlock: boolean): BlockEndBlobData;
20
28
  export declare function encodeBlockBlobData(blockBlobData: BlockBlobData): Fr[];
21
29
  export declare function decodeBlockBlobData(fields: Fr[] | FieldReader, isFirstBlock: boolean): BlockBlobData;
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfYmxvYl9kYXRhLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jb2RpbmcvYmxvY2tfYmxvYl9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHMUQsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUlwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUd4QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBc0MsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RixNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLGNBQWMsRUFBRSxjQUFjLENBQUM7SUFDL0Isa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkMsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUNwQixZQUFZLEVBQUUsRUFBRSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDbEIsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUNuQixpQkFBaUIsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDO0NBQ25DO0FBRUQsTUFBTSxXQUFXLGFBQWMsU0FBUSxnQkFBZ0I7SUFDckQsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQ25CO0FBRUQsd0JBQWdCLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxDQVUvRTtBQUVELHdCQUFnQixzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsZ0JBQWdCLENBbUIxRztBQUVELHdCQUFnQixtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxDQUV0RTtBQUVELHdCQUFnQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsYUFBYSxDQStCcEcifQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfYmxvYl9kYXRhLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW5jb2RpbmcvYmxvY2tfYmxvYl9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHMUQsT0FBTyxFQUNMLEtBQUssY0FBYyxFQUlwQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFDTCxLQUFLLGtCQUFrQixFQUd4QixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBc0MsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RixlQUFPLE1BQU0seUJBQXlCLElBQUksQ0FBQztBQUMzQyxlQUFPLE1BQU0sK0JBQStCLElBQUksQ0FBQztBQUNqRCxlQUFPLE1BQU0sZ0NBQWdDLElBQUksQ0FBQztBQUVsRDs7O0dBR0c7QUFDSCx3QkFBZ0Isd0JBQXdCLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxHQUFHLE1BQU0sQ0FFbEY7QUFFRCxNQUFNLFdBQVcsZ0JBQWdCO0lBQy9CLGNBQWMsRUFBRSxjQUFjLENBQUM7SUFDL0Isa0JBQWtCLEVBQUUsa0JBQWtCLENBQUM7SUFDdkMsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUNwQixZQUFZLEVBQUUsRUFBRSxDQUFDO0lBQ2pCLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDbEIsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUNuQixpQkFBaUIsRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDO0NBQ25DO0FBRUQsTUFBTSxXQUFXLGFBQWMsU0FBUSxnQkFBZ0I7SUFDckQsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDO0NBQ25CO0FBRUQsd0JBQWdCLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBRSxDQVUvRTtBQUVELHdCQUFnQixzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsZ0JBQWdCLENBbUIxRztBQUVELHdCQUFnQixtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLEVBQUUsRUFBRSxDQUV0RTtBQUVELHdCQUFnQixtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxFQUFFLFlBQVksRUFBRSxPQUFPLEdBQUcsYUFBYSxDQStCcEcifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"block_blob_data.d.ts","sourceRoot":"","sources":["../../src/encoding/block_blob_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,UAAU,EAAsC,MAAM,mBAAmB,CAAC;AAIxF,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,EAAE,CAAC;IACpB,YAAY,EAAE,EAAE,CAAC;IACjB,aAAa,EAAE,EAAE,CAAC;IAClB,cAAc,EAAE,EAAE,CAAC;IACnB,iBAAiB,EAAE,EAAE,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,GAAG,EAAE,UAAU,EAAE,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,EAAE,EAAE,CAU/E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,gBAAgB,CAmB1G;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,EAAE,EAAE,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,aAAa,CA+BpG"}
1
+ {"version":3,"file":"block_blob_data.d.ts","sourceRoot":"","sources":["../../src/encoding/block_blob_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,KAAK,UAAU,EAAsC,MAAM,mBAAmB,CAAC;AAIxF,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,+BAA+B,IAAI,CAAC;AACjD,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAElD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,wBAAwB,EAAE,OAAO,GAAG,MAAM,CAElF;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,cAAc,CAAC;IAC/B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,EAAE,CAAC;IACpB,YAAY,EAAE,EAAE,CAAC;IACjB,aAAa,EAAE,EAAE,CAAC;IAClB,cAAc,EAAE,EAAE,CAAC;IACnB,iBAAiB,EAAE,EAAE,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,GAAG,EAAE,UAAU,EAAE,CAAC;CACnB;AAED,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,EAAE,EAAE,CAU/E;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,gBAAgB,CAmB1G;AAED,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,EAAE,EAAE,CAEtE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,OAAO,GAAG,aAAa,CA+BpG"}
@@ -3,6 +3,16 @@ import { BlobDeserializationError } from '../errors.js';
3
3
  import { decodeBlockEndMarker, encodeBlockEndMarker, isBlockEndMarker } from './block_end_marker.js';
4
4
  import { decodeBlockEndStateField, encodeBlockEndStateField } from './block_end_state_field.js';
5
5
  import { decodeTxBlobData, encodeTxBlobData } from './tx_blob_data.js';
6
+ // Must match the implementation in `noir-protocol-circuits/crates/types/src/blob_data/block_blob_data.nr`.
7
+ export const NUM_BLOCK_END_BLOB_FIELDS = 6;
8
+ export const NUM_FIRST_BLOCK_END_BLOB_FIELDS = 7;
9
+ export const NUM_CHECKPOINT_END_MARKER_FIELDS = 1;
10
+ /**
11
+ * Returns the number of blob fields used for block end data.
12
+ * @param isFirstBlockInCheckpoint - Whether this is the first block in a checkpoint.
13
+ */ export function getNumBlockEndBlobFields(isFirstBlockInCheckpoint) {
14
+ return isFirstBlockInCheckpoint ? NUM_FIRST_BLOCK_END_BLOB_FIELDS : NUM_BLOCK_END_BLOB_FIELDS;
15
+ }
6
16
  export function encodeBlockEndBlobData(blockEndBlobData) {
7
17
  return [
8
18
  encodeBlockEndMarker(blockEndBlobData.blockEndMarker),
@@ -18,7 +28,7 @@ export function encodeBlockEndBlobData(blockEndBlobData) {
18
28
  }
19
29
  export function decodeBlockEndBlobData(fields, isFirstBlock) {
20
30
  const reader = FieldReader.asReader(fields);
21
- const numBlockEndData = isFirstBlock ? 7 : 6;
31
+ const numBlockEndData = getNumBlockEndBlobFields(isFirstBlock);
22
32
  if (numBlockEndData > reader.remainingFields()) {
23
33
  throw new BlobDeserializationError(`Incorrect encoding of blob fields: not enough fields for block end data. Expected ${numBlockEndData} fields, only ${reader.remainingFields()} remaining.`);
24
34
  }
@@ -7,7 +7,7 @@ const BLOCK_NUMBER_BIT_SIZE = 32n;
7
7
  const TIMESTAMP_BIT_SIZE = 64n;
8
8
  const NUM_TXS_BIT_SIZE = 16n;
9
9
  export function encodeBlockEndMarker(blockEndMarker) {
10
- let value = BLOCK_END_PREFIX;
10
+ let value = BigInt(BLOCK_END_PREFIX);
11
11
  value <<= TIMESTAMP_BIT_SIZE;
12
12
  value += blockEndMarker.timestamp;
13
13
  value <<= BLOCK_NUMBER_BIT_SIZE;
@@ -25,7 +25,7 @@ export function decodeBlockEndMarker(field) {
25
25
  const timestamp = value & 2n ** TIMESTAMP_BIT_SIZE - 1n;
26
26
  value >>= TIMESTAMP_BIT_SIZE;
27
27
  const prefix = value;
28
- if (prefix !== BLOCK_END_PREFIX) {
28
+ if (prefix !== BigInt(BLOCK_END_PREFIX)) {
29
29
  throw new BlobDeserializationError(`Incorrect encoding of blob fields: invalid block end marker.`);
30
30
  }
31
31
  return {
@@ -37,5 +37,5 @@ export function decodeBlockEndMarker(field) {
37
37
  // Check if a field is a block end marker. Used before decoding to check if it has reached the end of the block.
38
38
  export function isBlockEndMarker(field) {
39
39
  const prefix = field.toBigInt() >> NUM_TXS_BIT_SIZE + BLOCK_NUMBER_BIT_SIZE + TIMESTAMP_BIT_SIZE;
40
- return prefix === BLOCK_END_PREFIX;
40
+ return prefix === BigInt(BLOCK_END_PREFIX);
41
41
  }
@@ -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=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9ibG9iX2RhdGEuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNvZGluZy9jaGVja3BvaW50X2Jsb2JfZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFnQixXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RSxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQTRDLE1BQU0sc0JBQXNCLENBQUM7QUFDcEcsT0FBTyxFQUNMLEtBQUssbUJBQW1CLEVBSXpCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsTUFBTSxXQUFXLGtCQUFrQjtJQUNqQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztJQUN6QyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7Q0FDekI7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLENBS3JGO0FBRUQsd0JBQWdCLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FJaEY7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxrQkFBa0IsQ0EwQ3ZGO0FBRUQsd0JBQWdCLGtDQUFrQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBS2xGO0FBRUQsd0JBQWdCLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FZbkYifQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9ibG9iX2RhdGEuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbmNvZGluZy9jaGVja3BvaW50X2Jsb2JfZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFnQixXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUd4RSxPQUFPLEVBQ0wsS0FBSyxhQUFhLEVBTW5CLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLEtBQUssbUJBQW1CLEVBSXpCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFMUQsTUFBTSxXQUFXLGtCQUFrQjtJQUNqQyxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQztJQUN6QyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7Q0FDekI7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxFQUFFLENBS3JGO0FBRUQsd0JBQWdCLGtDQUFrQyxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FJaEY7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxrQkFBa0IsQ0EwQ3ZGO0FBRUQsd0JBQWdCLGtDQUFrQyxDQUFDLEdBQUcsRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBS2xGO0FBRUQsd0JBQWdCLDRCQUE0QixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FZbkYifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint_blob_data.d.ts","sourceRoot":"","sources":["../../src/encoding/checkpoint_blob_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAgB,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EAAE,KAAK,aAAa,EAA4C,MAAM,sBAAsB,CAAC;AACpG,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,wBAAgB,wBAAwB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAKrF;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,CAIhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,kBAAkB,CA0CvF;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAKlF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,GAAG,MAAM,CAYnF"}
1
+ {"version":3,"file":"checkpoint_blob_data.d.ts","sourceRoot":"","sources":["../../src/encoding/checkpoint_blob_data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAgB,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAGxE,OAAO,EACL,KAAK,aAAa,EAMnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,wBAAgB,wBAAwB,CAAC,kBAAkB,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAKrF;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,CAIhF;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,kBAAkB,CA0CvF;AAED,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAKlF;AAED,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,aAAa,EAAE,EAAE,GAAG,MAAM,CAYnF"}
@@ -1,7 +1,7 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { BufferReader, FieldReader } from '@aztec/foundation/serialize';
3
3
  import { BlobDeserializationError } from '../errors.js';
4
- import { decodeBlockBlobData, encodeBlockBlobData } from './block_blob_data.js';
4
+ import { NUM_BLOCK_END_BLOB_FIELDS, NUM_CHECKPOINT_END_MARKER_FIELDS, NUM_FIRST_BLOCK_END_BLOB_FIELDS, decodeBlockBlobData, encodeBlockBlobData } from './block_blob_data.js';
5
5
  import { decodeCheckpointEndMarker, encodeCheckpointEndMarker, isCheckpointEndMarker } from './checkpoint_end_marker.js';
6
6
  export function encodeCheckpointBlobData(checkpointBlobData) {
7
7
  return [
@@ -11,7 +11,7 @@ export function encodeCheckpointBlobData(checkpointBlobData) {
11
11
  }
12
12
  export function encodeCheckpointBlobDataFromBlocks(blocks) {
13
13
  const blocksBlobFields = blocks.map((block)=>encodeBlockBlobData(block)).flat();
14
- const numBlobFields = blocksBlobFields.length + 1; // +1 for the checkpoint end marker.
14
+ const numBlobFields = blocksBlobFields.length + NUM_CHECKPOINT_END_MARKER_FIELDS;
15
15
  return blocksBlobFields.concat(encodeCheckpointEndMarker({
16
16
  numBlobFields
17
17
  }));
@@ -60,8 +60,8 @@ export function getTotalNumBlobFieldsFromTxs(txsPerBlock) {
60
60
  if (!numBlocks) {
61
61
  return 0;
62
62
  }
63
- return (numBlocks ? 1 : 0) + // l1ToL2Messages root in the first block
64
- numBlocks * 6 + // 6 fields for each block end blob data.
65
- txsPerBlock.reduce((total, txs)=>total + txs.reduce((total, tx)=>total + tx.numBlobFields, 0), 0) + 1 // checkpoint end marker
63
+ return (numBlocks ? NUM_FIRST_BLOCK_END_BLOB_FIELDS - NUM_BLOCK_END_BLOB_FIELDS : 0) + // l1ToL2Messages root in the first block
64
+ numBlocks * NUM_BLOCK_END_BLOB_FIELDS + // 6 fields for each block end blob data.
65
+ txsPerBlock.reduce((total, txs)=>total + txs.reduce((total, tx)=>total + tx.numBlobFields, 0), 0) + NUM_CHECKPOINT_END_MARKER_FIELDS // checkpoint end marker
66
66
  ;
67
67
  }
@@ -4,7 +4,7 @@ import { BlobDeserializationError } from '../errors.js';
4
4
  // Must match the implementation in `noir-protocol-circuits/crates/types/src/blob_data/checkpoint_blob_data.nr`.
5
5
  const NUM_BLOB_FIELDS_BIT_SIZE = 32n;
6
6
  export function encodeCheckpointEndMarker(checkpointEndMarker) {
7
- let value = CHECKPOINT_END_PREFIX;
7
+ let value = BigInt(CHECKPOINT_END_PREFIX);
8
8
  value <<= NUM_BLOB_FIELDS_BIT_SIZE;
9
9
  value += BigInt(checkpointEndMarker.numBlobFields);
10
10
  return new Fr(value);
@@ -14,7 +14,7 @@ export function decodeCheckpointEndMarker(field) {
14
14
  const numBlobFields = Number(value & 2n ** NUM_BLOB_FIELDS_BIT_SIZE - 1n);
15
15
  value >>= NUM_BLOB_FIELDS_BIT_SIZE;
16
16
  const prefix = value;
17
- if (prefix !== CHECKPOINT_END_PREFIX) {
17
+ if (prefix !== BigInt(CHECKPOINT_END_PREFIX)) {
18
18
  throw new BlobDeserializationError(`Incorrect encoding of blob fields: invalid checkpoint end marker.`);
19
19
  }
20
20
  return {
@@ -24,5 +24,5 @@ export function decodeCheckpointEndMarker(field) {
24
24
  // Check if a field is a checkpoint end marker. Used to check if it has reached the end of the blob fields.
25
25
  export function isCheckpointEndMarker(field) {
26
26
  const prefix = field.toBigInt() >> NUM_BLOB_FIELDS_BIT_SIZE;
27
- return prefix === CHECKPOINT_END_PREFIX;
27
+ return prefix === BigInt(CHECKPOINT_END_PREFIX);
28
28
  }