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