@aztec/blob-lib 3.0.3-rc.3 → 4.0.0-devnet.1-patch.0
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.
- package/dest/batched_blob.d.ts +6 -1
- package/dest/batched_blob.d.ts.map +1 -1
- package/dest/blob.d.ts +9 -4
- package/dest/blob.d.ts.map +1 -1
- package/dest/blob.js +2 -4
- package/dest/blob_batching.d.ts +13 -1
- package/dest/blob_batching.d.ts.map +1 -1
- package/dest/blob_batching.js +3 -3
- package/dest/circuit_types/final_blob_accumulator.js +3 -1
- package/dest/encoding/block_blob_data.d.ts +9 -1
- package/dest/encoding/block_blob_data.d.ts.map +1 -1
- package/dest/encoding/block_blob_data.js +11 -1
- package/dest/encoding/block_end_marker.js +3 -3
- package/dest/encoding/checkpoint_blob_data.d.ts +1 -1
- package/dest/encoding/checkpoint_blob_data.d.ts.map +1 -1
- package/dest/encoding/checkpoint_blob_data.js +5 -5
- package/dest/encoding/checkpoint_end_marker.js +3 -3
- package/dest/encoding/tx_start_marker.js +2 -2
- package/dest/interface.d.ts +1 -2
- package/dest/interface.d.ts.map +1 -1
- package/dest/sponge_blob.d.ts +3 -1
- package/dest/sponge_blob.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/blob.ts +2 -4
- package/src/blob_batching.ts +3 -3
- package/src/encoding/block_blob_data.ts +13 -1
- package/src/encoding/block_end_marker.ts +3 -3
- package/src/encoding/checkpoint_blob_data.ts +12 -5
- package/src/encoding/checkpoint_end_marker.ts +3 -3
- package/src/encoding/tx_start_marker.ts +2 -2
- package/src/interface.ts +0 -1
package/dest/batched_blob.d.ts
CHANGED
|
@@ -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,
|
|
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;
|
|
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
|
/**
|
|
@@ -51,7 +57,7 @@ export declare class Blob {
|
|
|
51
57
|
/**
|
|
52
58
|
* Create a Blob from a JSON object.
|
|
53
59
|
*
|
|
54
|
-
* Blobs will be in this form when requested from the blob
|
|
60
|
+
* Blobs will be in this form when requested from the blob client, or from
|
|
55
61
|
* the beacon chain via `getBlobSidecars`
|
|
56
62
|
* https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Beacon/getBlobSidecars
|
|
57
63
|
*
|
|
@@ -62,10 +68,9 @@ export declare class Blob {
|
|
|
62
68
|
/**
|
|
63
69
|
* Get the JSON representation of the blob.
|
|
64
70
|
*
|
|
65
|
-
* @param index - optional - The index of the blob in the block.
|
|
66
71
|
* @returns The JSON representation of the blob.
|
|
67
72
|
*/
|
|
68
|
-
|
|
73
|
+
toJSON(): BlobJson;
|
|
69
74
|
getEthVersionedBlobHash(): Buffer;
|
|
70
75
|
/**
|
|
71
76
|
* Challenge point z (= H(H(tx_effects), kzgCommitment)).
|
|
@@ -113,4 +118,4 @@ export declare class Blob {
|
|
|
113
118
|
computeCellsAndKzgProofs: (b: Uint8Array<ArrayBufferLike>) => [Uint8Array<ArrayBufferLike>[], Uint8Array<ArrayBufferLike>[]];
|
|
114
119
|
};
|
|
115
120
|
}
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYi5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSw2QkFBNkIsQ0FBQztBQUc5RSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFFM0I7Ozs7OztHQU1HO0FBQ0gscUJBQWEsSUFBSTtJQUViOztPQUVHO2FBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7YUFDYSxVQUFVLEVBQUUsTUFBTTtJQVJwQztJQUNFOztPQUVHO0lBQ2EsSUFBSSxFQUFFLFVBQVU7SUFDaEM7O09BRUc7SUFDYSxVQUFVLEVBQUUsTUFBTSxFQVFuQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxJQUFJLENBRzVDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FRcEM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLElBQUksRUFBRSxFQUFFLENBSWY7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSSxDQVNwQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLElBQUksUUFBUSxDQU1qQjtJQUVELHVCQUF1QixJQUFJLE1BQU0sQ0FFaEM7SUFFRDs7O09BR0c7SUFDRyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFdkQ7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVE7OztNQVUzQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUdsRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxXQUVOO0lBRUQsTUFBTSxDQUFDLGtCQUFrQjs7OztNQVV4QjtDQUNGIn0=
|
package/dest/blob.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"blob.d.ts","sourceRoot":"","sources":["../src/blob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAG9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,CAAC;AAE3B;;;;;;GAMG;AACH,qBAAa,IAAI;IAEb;;OAEG;aACa,IAAI,EAAE,UAAU;IAChC;;OAEG;aACa,UAAU,EAAE,MAAM;IARpC;IACE;;OAEG;IACa,IAAI,EAAE,UAAU;IAChC;;OAEG;IACa,UAAU,EAAE,MAAM,EAQnC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAG5C;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAQpC;IAED;;;;;;OAMG;IACH,QAAQ,IAAI,EAAE,EAAE,CAIf;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CASpC;IAED;;;;OAIG;IACH,MAAM,IAAI,QAAQ,CAMjB;IAED,uBAAuB,IAAI,MAAM,CAEhC;IAED;;;OAGG;IACG,iBAAiB,CAAC,cAAc,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAEvD;IAED;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE,WAAW,UAAQ;;;MAU3C;IAED;;;;;;OAMG;IACH,QAAQ,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAGlD;IAED;;OAEG;IACH,OAAO,WAEN;IAED,MAAM,CAAC,kBAAkB;;;;MAUxB;CACF"}
|
package/dest/blob.js
CHANGED
|
@@ -69,7 +69,7 @@ export { FIELDS_PER_BLOB };
|
|
|
69
69
|
/**
|
|
70
70
|
* Create a Blob from a JSON object.
|
|
71
71
|
*
|
|
72
|
-
* Blobs will be in this form when requested from the blob
|
|
72
|
+
* Blobs will be in this form when requested from the blob client, or from
|
|
73
73
|
* the beacon chain via `getBlobSidecars`
|
|
74
74
|
* https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Beacon/getBlobSidecars
|
|
75
75
|
*
|
|
@@ -86,12 +86,10 @@ export { FIELDS_PER_BLOB };
|
|
|
86
86
|
/**
|
|
87
87
|
* Get the JSON representation of the blob.
|
|
88
88
|
*
|
|
89
|
-
* @param index - optional - The index of the blob in the block.
|
|
90
89
|
* @returns The JSON representation of the blob.
|
|
91
|
-
*/
|
|
90
|
+
*/ toJSON() {
|
|
92
91
|
return {
|
|
93
92
|
blob: `0x${Buffer.from(this.data).toString('hex')}`,
|
|
94
|
-
index: index.toString(),
|
|
95
93
|
// eslint-disable-next-line camelcase
|
|
96
94
|
kzg_commitment: `0x${this.commitment.toString('hex')}`
|
|
97
95
|
};
|
package/dest/blob_batching.d.ts
CHANGED
|
@@ -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). */
|
|
@@ -103,4 +115,4 @@ export declare class BatchedBlobAccumulator {
|
|
|
103
115
|
toBlobAccumulator(): BlobAccumulator;
|
|
104
116
|
toFinalBlobAccumulator(): FinalBlobAccumulator;
|
|
105
117
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYl9iYXRjaGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Jsb2JfYmF0Y2hpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBSTlHOzs7R0FHRztBQUNILHFCQUFhLHNCQUFzQjtJQUUvQiw4Q0FBOEM7YUFDOUIsc0JBQXNCLEVBQUUsRUFBRTtJQUMxQyxzRUFBc0U7YUFDdEQsSUFBSSxFQUFFLEVBQUU7SUFDeEIseUdBQXlHO2FBQ3pGLElBQUksRUFBRSxPQUFPO0lBQzdCLHFHQUFxRzthQUNyRixJQUFJLEVBQUUsVUFBVTtJQUNoQyxvR0FBb0c7YUFDcEYsSUFBSSxFQUFFLFVBQVU7SUFDaEM7Ozs7T0FJRzthQUNhLFFBQVEsRUFBRSxFQUFFO0lBQzVCLHVHQUF1RzthQUN2RixRQUFRLEVBQUUsT0FBTztJQUNqQyxvR0FBb0c7YUFDcEYsbUJBQW1CLEVBQUUsMkJBQTJCO0lBcEJsRTtJQUNFLDhDQUE4QztJQUM5QixzQkFBc0IsRUFBRSxFQUFFO0lBQzFDLHNFQUFzRTtJQUN0RCxJQUFJLEVBQUUsRUFBRTtJQUN4Qix5R0FBeUc7SUFDekYsSUFBSSxFQUFFLE9BQU87SUFDN0IscUdBQXFHO0lBQ3JGLElBQUksRUFBRSxVQUFVO0lBQ2hDLG9HQUFvRztJQUNwRixJQUFJLEVBQUUsVUFBVTtJQUNoQzs7OztPQUlHO0lBQ2EsUUFBUSxFQUFFLEVBQUU7SUFDNUIsdUdBQXVHO0lBQ3ZGLFFBQVEsRUFBRSxPQUFPO0lBQ2pDLG9HQUFvRztJQUNwRixtQkFBbUIsRUFBRSwyQkFBMkIsRUFDOUQ7SUFFSjs7O09BR0c7SUFDSCxNQUFNLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLEVBQUUsMkJBQTJCLEdBQUcsc0JBQXNCLENBV2pHO0lBRUQ7Ozs7T0FJRztJQUNILE9BQWEsY0FBYyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBRzVGO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBYSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLFVBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBZTdGO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxPQUFhLCtCQUErQixDQUFDLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBbUNsSDtJQUVEOzs7O09BSUc7SUFDRyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsRUFBRSxtQ0F1Q2xEO0lBRUQ7Ozs7O09BS0c7SUFDRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLG1DQWtCdEM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0csUUFBUSxDQUFDLFdBQVcsVUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FzQnhEO0lBRUQsTUFBTSxZQU9MO0lBRUQsWUFBWSxZQVVYO0lBRUQsS0FBSywyQkFXSjtJQUVELGlCQUFpQixvQkFTaEI7SUFFRCxzQkFBc0IseUJBRXJCO0NBQ0YifQ==
|
|
@@ -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;
|
|
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,CAsBxD;IAED,MAAM,YAOL;IAED,YAAY,YAUX;IAED,KAAK,2BAWJ;IAED,iBAAiB,oBAShB;IAED,sBAAsB,yBAErB;CACF"}
|
package/dest/blob_batching.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BLOBS_PER_CHECKPOINT, MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
|
|
2
2
|
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { sha256ToField } from '@aztec/foundation/crypto/sha256';
|
|
4
4
|
import { BLS12Fr, BLS12Point } from '@aztec/foundation/curves/bls12';
|
|
@@ -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 >
|
|
60
|
-
throw new Error(`Too many checkpoints sent to batch(). The maximum is ${
|
|
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);
|
|
@@ -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
|
-
[
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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 +
|
|
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 ?
|
|
64
|
-
numBlocks *
|
|
65
|
-
txsPerBlock.reduce((total, txs)=>total + txs.reduce((total, tx)=>total + tx.numBlobFields, 0), 0) +
|
|
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
|
}
|
|
@@ -13,7 +13,7 @@ const PRIVATE_LOGS_LENGTH_BIT_SIZE = 16n;
|
|
|
13
13
|
const PUBLIC_LOGS_LENGTH_BIT_SIZE = 32n;
|
|
14
14
|
const CONTRACT_CLASS_LOG_LENGTH_BIT_SIZE = 16n;
|
|
15
15
|
export function encodeTxStartMarker(txStartMarker) {
|
|
16
|
-
let value = TX_START_PREFIX;
|
|
16
|
+
let value = BigInt(TX_START_PREFIX);
|
|
17
17
|
value <<= NUM_NOTE_HASH_BIT_SIZE;
|
|
18
18
|
value += BigInt(txStartMarker.numNoteHashes);
|
|
19
19
|
value <<= NUM_NULLIFIER_BIT_SIZE;
|
|
@@ -59,7 +59,7 @@ export function decodeTxStartMarker(field) {
|
|
|
59
59
|
const numNoteHashes = Number(value & 2n ** NUM_NOTE_HASH_BIT_SIZE - 1n);
|
|
60
60
|
value >>= NUM_NOTE_HASH_BIT_SIZE;
|
|
61
61
|
const prefix = value;
|
|
62
|
-
if (prefix !== TX_START_PREFIX) {
|
|
62
|
+
if (prefix !== BigInt(TX_START_PREFIX)) {
|
|
63
63
|
throw new BlobDeserializationError(`Incorrect encoding of blob fields: invalid tx start marker.`);
|
|
64
64
|
}
|
|
65
65
|
return {
|
package/dest/interface.d.ts
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export interface BlobJson {
|
|
5
5
|
blob: string;
|
|
6
|
-
index: string;
|
|
7
6
|
kzg_commitment: string;
|
|
8
7
|
}
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxXQUFXLFFBQVE7SUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUNiLGNBQWMsRUFBRSxNQUFNLENBQUM7Q0FDeEIifQ==
|
package/dest/interface.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../src/interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB"}
|
package/dest/sponge_blob.d.ts
CHANGED
|
@@ -6,7 +6,9 @@ import { BufferReader, FieldReader, type Tuple } from '@aztec/foundation/seriali
|
|
|
6
6
|
* See noir-projects/noir-protocol-circuits/crates/types/src/abis/sponge_blob.nr.
|
|
7
7
|
*/
|
|
8
8
|
export declare class SpongeBlob {
|
|
9
|
+
/** Sponge with absorbed fields that will go into one or more blobs. */
|
|
9
10
|
readonly sponge: Poseidon2Sponge;
|
|
11
|
+
/** Number of effects absorbed so far. */
|
|
10
12
|
numAbsorbedFields: number;
|
|
11
13
|
static MAX_FIELDS: number;
|
|
12
14
|
constructor(
|
|
@@ -45,4 +47,4 @@ export declare class Poseidon2Sponge {
|
|
|
45
47
|
absorb(fields: Fr[]): Promise<void>;
|
|
46
48
|
squeeze(): Promise<Fr>;
|
|
47
49
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvbmdlX2Jsb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcG9uZ2VfYmxvYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxLQUFLLEVBR1gsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQzs7O0dBR0c7QUFDSCxxQkFBYSxVQUFVO0lBSW5CLHVFQUF1RTthQUN2RCxNQUFNLEVBQUUsZUFBZTtJQUN2Qyx5Q0FBeUM7SUFDbEMsaUJBQWlCLEVBQUUsTUFBTTtJQU5sQyxNQUFNLENBQUMsVUFBVSxTQUEwQztJQUUzRDtJQUNFLHVFQUF1RTtJQUN2RCxNQUFNLEVBQUUsZUFBZTtJQUN2Qyx5Q0FBeUM7SUFDbEMsaUJBQWlCLEVBQUUsTUFBTSxFQUM5QjtJQUVKOztPQUVHO0lBQ0gsTUFBTSxDQUFDLElBQUksSUFBSSxVQUFVLENBS3hCO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxVQUFVLENBRzNEO0lBRUQsUUFBUSw0QkFFUDtJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0NBRTVDO0lBRUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUVmO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FHeEQ7SUFFRCxLQUFLLGVBRUo7SUFFSyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxpQkFReEI7SUFFSyxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUUzQjtJQUVELE1BQU0sQ0FBQyxLQUFLLElBQUksVUFBVSxDQUV6QjtDQUNGO0FBR0QscUJBQWEsZUFBZTtJQUVqQixLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBSjdCLFlBQ1MsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNuQixTQUFTLEVBQUUsTUFBTSxFQUNqQixXQUFXLEVBQUUsT0FBTyxFQUN6QjtJQUVKLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsZUFBZSxDQVFoRTtJQUVELFFBQVEsNEJBRVA7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLDBEQUVqRDtJQUVELFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FFZjtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxlQUFlLENBUTdEO0lBRUQsTUFBTSxDQUFDLEtBQUssSUFBSSxlQUFlLENBTzlCO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLGVBQWUsQ0FJbkM7SUFLSyxhQUFhLGtCQVNsQjtJQUVLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLGlCQWF4QjtJQUVLLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBTzNCO0NBQ0YifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sponge_blob.d.ts","sourceRoot":"","sources":["../src/sponge_blob.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,KAAK,EAGX,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,qBAAa,UAAU;
|
|
1
|
+
{"version":3,"file":"sponge_blob.d.ts","sourceRoot":"","sources":["../src/sponge_blob.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,yBAAyB,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,KAAK,EAGX,MAAM,6BAA6B,CAAC;AAErC;;;GAGG;AACH,qBAAa,UAAU;IAInB,uEAAuE;aACvD,MAAM,EAAE,eAAe;IACvC,yCAAyC;IAClC,iBAAiB,EAAE,MAAM;IANlC,MAAM,CAAC,UAAU,SAA0C;IAE3D;IACE,uEAAuE;IACvD,MAAM,EAAE,eAAe;IACvC,yCAAyC;IAClC,iBAAiB,EAAE,MAAM,EAC9B;IAEJ;;OAEG;IACH,MAAM,CAAC,IAAI,IAAI,UAAU,CAKxB;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAG3D;IAED,QAAQ,4BAEP;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,gCAE5C;IAED,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,UAAU,CAGxD;IAED,KAAK,eAEJ;IAEK,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,iBAQxB;IAEK,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,CAE3B;IAED,MAAM,CAAC,KAAK,IAAI,UAAU,CAEzB;CACF;AAGD,qBAAa,eAAe;IAEjB,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACnB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,OAAO;IAJ7B,YACS,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACnB,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,EACzB;IAEJ,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe,CAQhE;IAED,QAAQ,4BAEP;IAED,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,eAAe,CAAC,0DAEjD;IAED,QAAQ,IAAI,EAAE,EAAE,CAEf;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,WAAW,GAAG,eAAe,CAQ7D;IAED,MAAM,CAAC,KAAK,IAAI,eAAe,CAO9B;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,eAAe,CAInC;IAKK,aAAa,kBASlB;IAEK,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,iBAaxB;IAEK,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC,CAO3B;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/blob-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-devnet.1-patch.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"build": "yarn clean && ../scripts/tsc.sh",
|
|
20
20
|
"build:dev": "../scripts/tsc.sh --watch",
|
|
21
21
|
"clean": "rm -rf ./dest .tsbuildinfo",
|
|
22
|
-
"start:dev": "concurrently -k \"
|
|
22
|
+
"start:dev": "concurrently -k \"../scripts/tsc.sh --watch\" \"nodemon --watch dest --exec yarn start\"",
|
|
23
23
|
"start": "node ./dest/index.js",
|
|
24
24
|
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}"
|
|
25
25
|
},
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"../package.common.json"
|
|
28
28
|
],
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@aztec/constants": "
|
|
31
|
-
"@aztec/foundation": "
|
|
30
|
+
"@aztec/constants": "4.0.0-devnet.1-patch.0",
|
|
31
|
+
"@aztec/foundation": "4.0.0-devnet.1-patch.0",
|
|
32
32
|
"@crate-crypto/node-eth-kzg": "^0.10.0",
|
|
33
33
|
"tslib": "^2.4.0"
|
|
34
34
|
},
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"@jest/globals": "^30.0.0",
|
|
37
37
|
"@types/jest": "^30.0.0",
|
|
38
38
|
"@types/node": "^22.15.17",
|
|
39
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
39
|
+
"@typescript/native-preview": "7.0.0-dev.20260113.1",
|
|
40
40
|
"get-port": "^7.1.0",
|
|
41
41
|
"jest": "^30.0.0",
|
|
42
42
|
"ts-node": "^10.9.1",
|
package/src/blob.ts
CHANGED
|
@@ -81,7 +81,7 @@ export class Blob {
|
|
|
81
81
|
/**
|
|
82
82
|
* Create a Blob from a JSON object.
|
|
83
83
|
*
|
|
84
|
-
* Blobs will be in this form when requested from the blob
|
|
84
|
+
* Blobs will be in this form when requested from the blob client, or from
|
|
85
85
|
* the beacon chain via `getBlobSidecars`
|
|
86
86
|
* https://ethereum.github.io/beacon-APIs/?urls.primaryName=dev#/Beacon/getBlobSidecars
|
|
87
87
|
*
|
|
@@ -102,13 +102,11 @@ export class Blob {
|
|
|
102
102
|
/**
|
|
103
103
|
* Get the JSON representation of the blob.
|
|
104
104
|
*
|
|
105
|
-
* @param index - optional - The index of the blob in the block.
|
|
106
105
|
* @returns The JSON representation of the blob.
|
|
107
106
|
*/
|
|
108
|
-
|
|
107
|
+
toJSON(): BlobJson {
|
|
109
108
|
return {
|
|
110
109
|
blob: `0x${Buffer.from(this.data).toString('hex')}`,
|
|
111
|
-
index: index.toString(),
|
|
112
110
|
// eslint-disable-next-line camelcase
|
|
113
111
|
kzg_commitment: `0x${this.commitment.toString('hex')}`,
|
|
114
112
|
};
|
package/src/blob_batching.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BLOBS_PER_CHECKPOINT, MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
|
|
2
2
|
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
3
3
|
import { sha256ToField } from '@aztec/foundation/crypto/sha256';
|
|
4
4
|
import { BLS12Fr, BLS12Point } from '@aztec/foundation/curves/bls12';
|
|
@@ -75,9 +75,9 @@ export class BatchedBlobAccumulator {
|
|
|
75
75
|
*/
|
|
76
76
|
static async batch(blobFieldsPerCheckpoint: Fr[][], verifyProof = false): Promise<BatchedBlob> {
|
|
77
77
|
const numCheckpoints = blobFieldsPerCheckpoint.length;
|
|
78
|
-
if (numCheckpoints >
|
|
78
|
+
if (numCheckpoints > MAX_CHECKPOINTS_PER_EPOCH) {
|
|
79
79
|
throw new Error(
|
|
80
|
-
`Too many checkpoints sent to batch(). The maximum is ${
|
|
80
|
+
`Too many checkpoints sent to batch(). The maximum is ${MAX_CHECKPOINTS_PER_EPOCH}. Got ${numCheckpoints}.`,
|
|
81
81
|
);
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -17,6 +17,18 @@ import { type TxBlobData, decodeTxBlobData, encodeTxBlobData } from './tx_blob_d
|
|
|
17
17
|
|
|
18
18
|
// Must match the implementation in `noir-protocol-circuits/crates/types/src/blob_data/block_blob_data.nr`.
|
|
19
19
|
|
|
20
|
+
export const NUM_BLOCK_END_BLOB_FIELDS = 6;
|
|
21
|
+
export const NUM_FIRST_BLOCK_END_BLOB_FIELDS = 7;
|
|
22
|
+
export const NUM_CHECKPOINT_END_MARKER_FIELDS = 1;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Returns the number of blob fields used for block end data.
|
|
26
|
+
* @param isFirstBlockInCheckpoint - Whether this is the first block in a checkpoint.
|
|
27
|
+
*/
|
|
28
|
+
export function getNumBlockEndBlobFields(isFirstBlockInCheckpoint: boolean): number {
|
|
29
|
+
return isFirstBlockInCheckpoint ? NUM_FIRST_BLOCK_END_BLOB_FIELDS : NUM_BLOCK_END_BLOB_FIELDS;
|
|
30
|
+
}
|
|
31
|
+
|
|
20
32
|
export interface BlockEndBlobData {
|
|
21
33
|
blockEndMarker: BlockEndMarker;
|
|
22
34
|
blockEndStateField: BlockEndStateField;
|
|
@@ -46,7 +58,7 @@ export function encodeBlockEndBlobData(blockEndBlobData: BlockEndBlobData): Fr[]
|
|
|
46
58
|
export function decodeBlockEndBlobData(fields: Fr[] | FieldReader, isFirstBlock: boolean): BlockEndBlobData {
|
|
47
59
|
const reader = FieldReader.asReader(fields);
|
|
48
60
|
|
|
49
|
-
const numBlockEndData = isFirstBlock
|
|
61
|
+
const numBlockEndData = getNumBlockEndBlobFields(isFirstBlock);
|
|
50
62
|
if (numBlockEndData > reader.remainingFields()) {
|
|
51
63
|
throw new BlobDeserializationError(
|
|
52
64
|
`Incorrect encoding of blob fields: not enough fields for block end data. Expected ${numBlockEndData} fields, only ${reader.remainingFields()} remaining.`,
|
|
@@ -17,7 +17,7 @@ export interface BlockEndMarker {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export function encodeBlockEndMarker(blockEndMarker: BlockEndMarker) {
|
|
20
|
-
let value = BLOCK_END_PREFIX;
|
|
20
|
+
let value = BigInt(BLOCK_END_PREFIX);
|
|
21
21
|
value <<= TIMESTAMP_BIT_SIZE;
|
|
22
22
|
value += blockEndMarker.timestamp;
|
|
23
23
|
value <<= BLOCK_NUMBER_BIT_SIZE;
|
|
@@ -37,7 +37,7 @@ export function decodeBlockEndMarker(field: Fr): BlockEndMarker {
|
|
|
37
37
|
value >>= TIMESTAMP_BIT_SIZE;
|
|
38
38
|
|
|
39
39
|
const prefix = value;
|
|
40
|
-
if (prefix !== BLOCK_END_PREFIX) {
|
|
40
|
+
if (prefix !== BigInt(BLOCK_END_PREFIX)) {
|
|
41
41
|
throw new BlobDeserializationError(`Incorrect encoding of blob fields: invalid block end marker.`);
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -51,5 +51,5 @@ export function decodeBlockEndMarker(field: Fr): BlockEndMarker {
|
|
|
51
51
|
// Check if a field is a block end marker. Used before decoding to check if it has reached the end of the block.
|
|
52
52
|
export function isBlockEndMarker(field: Fr): boolean {
|
|
53
53
|
const prefix = field.toBigInt() >> (NUM_TXS_BIT_SIZE + BLOCK_NUMBER_BIT_SIZE + TIMESTAMP_BIT_SIZE);
|
|
54
|
-
return prefix === BLOCK_END_PREFIX;
|
|
54
|
+
return prefix === BigInt(BLOCK_END_PREFIX);
|
|
55
55
|
}
|
|
@@ -2,7 +2,14 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
2
2
|
import { BufferReader, FieldReader } from '@aztec/foundation/serialize';
|
|
3
3
|
|
|
4
4
|
import { BlobDeserializationError } from '../errors.js';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
type BlockBlobData,
|
|
7
|
+
NUM_BLOCK_END_BLOB_FIELDS,
|
|
8
|
+
NUM_CHECKPOINT_END_MARKER_FIELDS,
|
|
9
|
+
NUM_FIRST_BLOCK_END_BLOB_FIELDS,
|
|
10
|
+
decodeBlockBlobData,
|
|
11
|
+
encodeBlockBlobData,
|
|
12
|
+
} from './block_blob_data.js';
|
|
6
13
|
import {
|
|
7
14
|
type CheckpointEndMarker,
|
|
8
15
|
decodeCheckpointEndMarker,
|
|
@@ -25,7 +32,7 @@ export function encodeCheckpointBlobData(checkpointBlobData: CheckpointBlobData)
|
|
|
25
32
|
|
|
26
33
|
export function encodeCheckpointBlobDataFromBlocks(blocks: BlockBlobData[]): Fr[] {
|
|
27
34
|
const blocksBlobFields = blocks.map(block => encodeBlockBlobData(block)).flat();
|
|
28
|
-
const numBlobFields = blocksBlobFields.length +
|
|
35
|
+
const numBlobFields = blocksBlobFields.length + NUM_CHECKPOINT_END_MARKER_FIELDS;
|
|
29
36
|
return blocksBlobFields.concat(encodeCheckpointEndMarker({ numBlobFields }));
|
|
30
37
|
}
|
|
31
38
|
|
|
@@ -87,9 +94,9 @@ export function getTotalNumBlobFieldsFromTxs(txsPerBlock: TxStartMarker[][]): nu
|
|
|
87
94
|
}
|
|
88
95
|
|
|
89
96
|
return (
|
|
90
|
-
(numBlocks ?
|
|
91
|
-
numBlocks *
|
|
97
|
+
(numBlocks ? NUM_FIRST_BLOCK_END_BLOB_FIELDS - NUM_BLOCK_END_BLOB_FIELDS : 0) + // l1ToL2Messages root in the first block
|
|
98
|
+
numBlocks * NUM_BLOCK_END_BLOB_FIELDS + // 6 fields for each block end blob data.
|
|
92
99
|
txsPerBlock.reduce((total, txs) => total + txs.reduce((total, tx) => total + tx.numBlobFields, 0), 0) +
|
|
93
|
-
|
|
100
|
+
NUM_CHECKPOINT_END_MARKER_FIELDS // checkpoint end marker
|
|
94
101
|
);
|
|
95
102
|
}
|
|
@@ -12,7 +12,7 @@ export interface CheckpointEndMarker {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export function encodeCheckpointEndMarker(checkpointEndMarker: CheckpointEndMarker) {
|
|
15
|
-
let value = CHECKPOINT_END_PREFIX;
|
|
15
|
+
let value = BigInt(CHECKPOINT_END_PREFIX);
|
|
16
16
|
value <<= NUM_BLOB_FIELDS_BIT_SIZE;
|
|
17
17
|
value += BigInt(checkpointEndMarker.numBlobFields);
|
|
18
18
|
return new Fr(value);
|
|
@@ -24,7 +24,7 @@ export function decodeCheckpointEndMarker(field: Fr): CheckpointEndMarker {
|
|
|
24
24
|
value >>= NUM_BLOB_FIELDS_BIT_SIZE;
|
|
25
25
|
|
|
26
26
|
const prefix = value;
|
|
27
|
-
if (prefix !== CHECKPOINT_END_PREFIX) {
|
|
27
|
+
if (prefix !== BigInt(CHECKPOINT_END_PREFIX)) {
|
|
28
28
|
throw new BlobDeserializationError(`Incorrect encoding of blob fields: invalid checkpoint end marker.`);
|
|
29
29
|
}
|
|
30
30
|
|
|
@@ -36,5 +36,5 @@ export function decodeCheckpointEndMarker(field: Fr): CheckpointEndMarker {
|
|
|
36
36
|
// Check if a field is a checkpoint end marker. Used to check if it has reached the end of the blob fields.
|
|
37
37
|
export function isCheckpointEndMarker(field: Fr): boolean {
|
|
38
38
|
const prefix = field.toBigInt() >> NUM_BLOB_FIELDS_BIT_SIZE;
|
|
39
|
-
return prefix === CHECKPOINT_END_PREFIX;
|
|
39
|
+
return prefix === BigInt(CHECKPOINT_END_PREFIX);
|
|
40
40
|
}
|
|
@@ -30,7 +30,7 @@ export interface TxStartMarker {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
export function encodeTxStartMarker(txStartMarker: TxStartMarker): Fr {
|
|
33
|
-
let value = TX_START_PREFIX;
|
|
33
|
+
let value = BigInt(TX_START_PREFIX);
|
|
34
34
|
value <<= NUM_NOTE_HASH_BIT_SIZE;
|
|
35
35
|
value += BigInt(txStartMarker.numNoteHashes);
|
|
36
36
|
value <<= NUM_NULLIFIER_BIT_SIZE;
|
|
@@ -78,7 +78,7 @@ export function decodeTxStartMarker(field: Fr): TxStartMarker {
|
|
|
78
78
|
value >>= NUM_NOTE_HASH_BIT_SIZE;
|
|
79
79
|
|
|
80
80
|
const prefix = value;
|
|
81
|
-
if (prefix !== TX_START_PREFIX) {
|
|
81
|
+
if (prefix !== BigInt(TX_START_PREFIX)) {
|
|
82
82
|
throw new BlobDeserializationError(`Incorrect encoding of blob fields: invalid tx start marker.`);
|
|
83
83
|
}
|
|
84
84
|
|