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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dest/batched_blob.d.ts +6 -1
  2. package/dest/batched_blob.d.ts.map +1 -1
  3. package/dest/blob.d.ts +13 -7
  4. package/dest/blob.d.ts.map +1 -1
  5. package/dest/blob.js +15 -15
  6. package/dest/blob_batching.d.ts +14 -2
  7. package/dest/blob_batching.d.ts.map +1 -1
  8. package/dest/blob_batching.js +24 -24
  9. package/dest/blob_utils.d.ts +2 -2
  10. package/dest/blob_utils.d.ts.map +1 -1
  11. package/dest/blob_utils.js +3 -3
  12. package/dest/circuit_types/final_blob_accumulator.js +3 -1
  13. package/dest/encoding/block_blob_data.d.ts +9 -1
  14. package/dest/encoding/block_blob_data.d.ts.map +1 -1
  15. package/dest/encoding/block_blob_data.js +11 -1
  16. package/dest/encoding/block_end_marker.js +3 -3
  17. package/dest/encoding/checkpoint_blob_data.d.ts +1 -1
  18. package/dest/encoding/checkpoint_blob_data.d.ts.map +1 -1
  19. package/dest/encoding/checkpoint_blob_data.js +5 -5
  20. package/dest/encoding/checkpoint_end_marker.js +3 -3
  21. package/dest/encoding/tx_start_marker.js +2 -2
  22. package/dest/hash.d.ts +6 -5
  23. package/dest/hash.d.ts.map +1 -1
  24. package/dest/hash.js +17 -15
  25. package/dest/kzg_context.d.ts +5 -3
  26. package/dest/kzg_context.d.ts.map +1 -1
  27. package/dest/kzg_context.js +18 -3
  28. package/dest/sponge_blob.d.ts +3 -1
  29. package/dest/sponge_blob.d.ts.map +1 -1
  30. package/dest/testing.d.ts +2 -2
  31. package/dest/testing.d.ts.map +1 -1
  32. package/package.json +5 -5
  33. package/src/blob.ts +15 -15
  34. package/src/blob_batching.ts +21 -18
  35. package/src/blob_utils.ts +5 -3
  36. package/src/encoding/block_blob_data.ts +13 -1
  37. package/src/encoding/block_end_marker.ts +3 -3
  38. package/src/encoding/checkpoint_blob_data.ts +12 -5
  39. package/src/encoding/checkpoint_end_marker.ts +3 -3
  40. package/src/encoding/tx_start_marker.ts +2 -2
  41. package/src/hash.ts +19 -14
  42. package/src/kzg_context.ts +28 -3
  43. package/src/testing.ts +1 -1
@@ -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/hash.d.ts CHANGED
@@ -18,7 +18,7 @@ export declare function computeBlobsHash(evmVersionedBlobHashes: Buffer[]): Fr;
18
18
  * This hash is included in the block header.
19
19
  */
20
20
  export declare function computeBlobFieldsHash(fields: Fr[]): Promise<Fr>;
21
- export declare function computeBlobCommitment(data: Uint8Array): Buffer;
21
+ export declare function computeBlobCommitment(data: Uint8Array): Promise<Buffer>;
22
22
  /**
23
23
  * Get the commitment fields of the blob, to compute the challenge z.
24
24
  *
@@ -36,8 +36,9 @@ export declare function computeBlobCommitment(data: Uint8Array): Buffer;
36
36
  export declare function commitmentToFields(commitment: Buffer): [Fr, Fr];
37
37
  export declare function computeChallengeZ(blobFieldsHash: Fr, commitment: Buffer): Promise<Fr>;
38
38
  /**
39
- * Hash each u128 limb of the noir bignum struct representing the BLS field, to mimic the hash accumulation in the
40
- * rollup circuits.
39
+ * Hash the u128 limbs of a BLS field's noir bignum representation under the `BLOB_HASHED_Y_LIMBS` separator.
40
+ * Used to commit to blob evaluation values `y_i` before folding them into the gamma accumulator; mirrors the
41
+ * hash accumulation performed in the rollup circuits.
41
42
  */
42
- export declare function hashNoirBigNumLimbs(field: BLS12Fr): Promise<Fr>;
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU9wRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FJdEU7QUFPRCx3QkFBZ0IsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUVyRTtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBSXJFO0FBRUQsd0JBQWdCLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsTUFBTSxDQU05RDtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCx3QkFBZ0Isa0JBQWtCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FNL0Q7QUFFRCx3QkFBc0IsaUJBQWlCLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FHM0Y7QUFFRDs7O0dBR0c7QUFDSCx3QkFBc0IsbUJBQW1CLENBQUMsS0FBSyxFQUFFLE9BQU8sR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBR3JFIn0=
43
+ export declare function hashBlobYLimbs(field: BLS12Fr): Promise<Fr>;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzaC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2hhc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU9wRDs7R0FFRztBQUNILHdCQUFnQiwyQkFBMkIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FJdEU7QUFPRCx3QkFBZ0IsZ0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUVyRTtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsd0JBQXNCLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBSXJFO0FBRUQsd0JBQXNCLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQU03RTtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCx3QkFBZ0Isa0JBQWtCLENBQUMsVUFBVSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FNL0Q7QUFFRCx3QkFBc0IsaUJBQWlCLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FNM0Y7QUFFRDs7OztHQUlHO0FBQ0gsd0JBQXNCLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FHaEUifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAOpD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAItE;AAOD,wBAAgB,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAIrE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAM9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAM/D;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAG3F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAGrE"}
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAOpD;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAItE;AAOD,wBAAgB,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,EAAE,GAAG,EAAE,CAErE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAIrE;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7E;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAM/D;AAED,wBAAsB,iBAAiB,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAM3F;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC,CAGhE"}
package/dest/hash.js CHANGED
@@ -1,7 +1,8 @@
1
- import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
1
+ import { DomainSeparator } from '@aztec/constants';
2
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
2
3
  import { sha256, sha256ToField } from '@aztec/foundation/crypto/sha256';
3
4
  import { Fr } from '@aztec/foundation/curves/bn254';
4
- import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js';
5
+ import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js';
5
6
  import { SpongeBlob } from './sponge_blob.js';
6
7
  const VERSIONED_HASH_VERSION_KZG = 0x01;
7
8
  /**
@@ -35,11 +36,11 @@ export function computeBlobsHash(evmVersionedBlobHashes) {
35
36
  await sponge.absorb(fields);
36
37
  return sponge.squeeze();
37
38
  }
38
- export function computeBlobCommitment(data) {
39
- if (data.length !== BYTES_PER_BLOB) {
40
- throw new Error(`Expected ${BYTES_PER_BLOB} bytes per blob. Got ${data.length}.`);
39
+ export async function computeBlobCommitment(data) {
40
+ if (data.length !== getBytesPerBlob()) {
41
+ throw new Error(`Expected ${getBytesPerBlob()} bytes per blob. Got ${data.length}.`);
41
42
  }
42
- return Buffer.from(getKzg().blobToKzgCommitment(data));
43
+ return Buffer.from(await getKzg().asyncBlobToKzgCommitment(data));
43
44
  }
44
45
  /**
45
46
  * Get the commitment fields of the blob, to compute the challenge z.
@@ -55,26 +56,27 @@ export function computeBlobCommitment(data) {
55
56
  * @param commitment - The commitment to convert to fields. Computed from `computeBlobCommitment`.
56
57
  * @returns The fields representing the commitment buffer.
57
58
  */ export function commitmentToFields(commitment) {
58
- if (commitment.length !== BYTES_PER_COMMITMENT) {
59
- throw new Error(`Expected ${BYTES_PER_COMMITMENT} bytes for blob commitment. Got ${commitment.length}.`);
59
+ if (commitment.length !== getBytesPerCommitment()) {
60
+ throw new Error(`Expected ${getBytesPerCommitment()} bytes for blob commitment. Got ${commitment.length}.`);
60
61
  }
61
62
  return [
62
63
  new Fr(commitment.subarray(0, 31)),
63
- new Fr(commitment.subarray(31, BYTES_PER_COMMITMENT))
64
+ new Fr(commitment.subarray(31, getBytesPerCommitment()))
64
65
  ];
65
66
  }
66
67
  export async function computeChallengeZ(blobFieldsHash, commitment) {
67
68
  const commitmentFields = commitmentToFields(commitment);
68
- return await poseidon2Hash([
69
+ return await poseidon2HashWithSeparator([
69
70
  blobFieldsHash,
70
71
  commitmentFields[0],
71
72
  commitmentFields[1]
72
- ]);
73
+ ], DomainSeparator.BLOB_CHALLENGE_Z);
73
74
  }
74
75
  /**
75
- * Hash each u128 limb of the noir bignum struct representing the BLS field, to mimic the hash accumulation in the
76
- * rollup circuits.
77
- */ export async function hashNoirBigNumLimbs(field) {
76
+ * Hash the u128 limbs of a BLS field's noir bignum representation under the `BLOB_HASHED_Y_LIMBS` separator.
77
+ * Used to commit to blob evaluation values `y_i` before folding them into the gamma accumulator; mirrors the
78
+ * hash accumulation performed in the rollup circuits.
79
+ */ export async function hashBlobYLimbs(field) {
78
80
  const num = field.toNoirBigNum();
79
- return await poseidon2Hash(num.limbs.map(Fr.fromHexString));
81
+ return await poseidon2HashWithSeparator(num.limbs.map(Fr.fromHexString), DomainSeparator.BLOB_HASHED_Y_LIMBS);
80
82
  }
@@ -1,8 +1,10 @@
1
- import { DasContextJs } from '@crate-crypto/node-eth-kzg';
2
- export * from '@crate-crypto/node-eth-kzg';
1
+ import type { DasContextJs } from '@crate-crypto/node-eth-kzg';
2
+ export type { DasContextJs } from '@crate-crypto/node-eth-kzg';
3
+ export declare function getBytesPerBlob(): number;
4
+ export declare function getBytesPerCommitment(): number;
3
5
  /**
4
6
  * Returns the lazily-initialized KZG context.
5
7
  * The first call takes ~3 seconds to initialize the precomputation tables.
6
8
  */
7
9
  export declare function getKzg(): DasContextJs;
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3pnX2NvbnRleHQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9remdfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUQsY0FBYyw0QkFBNEIsQ0FBQztBQUkzQzs7O0dBR0c7QUFDSCx3QkFBZ0IsTUFBTSxJQUFJLFlBQVksQ0FLckMifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3pnX2NvbnRleHQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9remdfY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQU0vRCxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFlL0Qsd0JBQWdCLGVBQWUsSUFBSSxNQUFNLENBRXhDO0FBRUQsd0JBQWdCLHFCQUFxQixJQUFJLE1BQU0sQ0FFOUM7QUFJRDs7O0dBR0c7QUFDSCx3QkFBZ0IsTUFBTSxJQUFJLFlBQVksQ0FLckMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"kzg_context.d.ts","sourceRoot":"","sources":["../src/kzg_context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,cAAc,4BAA4B,CAAC;AAI3C;;;GAGG;AACH,wBAAgB,MAAM,IAAI,YAAY,CAKrC"}
1
+ {"version":3,"file":"kzg_context.d.ts","sourceRoot":"","sources":["../src/kzg_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAe/D,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAID;;;GAGG;AACH,wBAAgB,MAAM,IAAI,YAAY,CAKrC"}
@@ -1,12 +1,27 @@
1
- import { DasContextJs } from '@crate-crypto/node-eth-kzg';
2
- export * from '@crate-crypto/node-eth-kzg';
1
+ import { createRequire } from 'module';
2
+ let nativeModule;
3
+ /** Lazily loads the @crate-crypto/node-eth-kzg native module. */ function loadNativeModule() {
4
+ if (!nativeModule) {
5
+ const require = createRequire(import.meta.url);
6
+ nativeModule = require('@crate-crypto/node-eth-kzg');
7
+ }
8
+ return nativeModule;
9
+ }
10
+ // Ethereum blob constants, loaded lazily from the native module.
11
+ // Values: BYTES_PER_BLOB=131072, BYTES_PER_COMMITMENT=48
12
+ export function getBytesPerBlob() {
13
+ return loadNativeModule().BYTES_PER_BLOB;
14
+ }
15
+ export function getBytesPerCommitment() {
16
+ return loadNativeModule().BYTES_PER_COMMITMENT;
17
+ }
3
18
  let kzgInstance;
4
19
  /**
5
20
  * Returns the lazily-initialized KZG context.
6
21
  * The first call takes ~3 seconds to initialize the precomputation tables.
7
22
  */ export function getKzg() {
8
23
  if (!kzgInstance) {
9
- kzgInstance = DasContextJs.create({
24
+ kzgInstance = loadNativeModule().DasContextJs.create({
10
25
  usePrecomp: true
11
26
  });
12
27
  }
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BvbmdlX2Jsb2IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9zcG9uZ2VfYmxvYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxRQUFRLEVBQWEsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUNMLFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxLQUFLLEVBR1gsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQzs7O0dBR0c7QUFDSCxxQkFBYSxVQUFVO2FBS0gsTUFBTSxFQUFFLGVBQWU7SUFFaEMsaUJBQWlCLEVBQUUsTUFBTTtJQU5sQyxNQUFNLENBQUMsVUFBVSxTQUEwQztJQUUzRDtJQUNFLHVFQUF1RTtJQUN2RCxNQUFNLEVBQUUsZUFBZTtJQUN2Qyx5Q0FBeUM7SUFDbEMsaUJBQWlCLEVBQUUsTUFBTSxFQUM5QjtJQUVKOztPQUVHO0lBQ0gsTUFBTSxDQUFDLElBQUksSUFBSSxVQUFVLENBS3hCO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxVQUFVLENBRzNEO0lBRUQsUUFBUSw0QkFFUDtJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsZ0NBRTVDO0lBRUQsUUFBUSxJQUFJLEVBQUUsRUFBRSxDQUVmO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FHeEQ7SUFFRCxLQUFLLGVBRUo7SUFFSyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxpQkFReEI7SUFFSyxPQUFPLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUUzQjtJQUVELE1BQU0sQ0FBQyxLQUFLLElBQUksVUFBVSxDQUV6QjtDQUNGO0FBR0QscUJBQWEsZUFBZTtJQUVqQixLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25CLFNBQVMsRUFBRSxNQUFNO0lBQ2pCLFdBQVcsRUFBRSxPQUFPO0lBSjdCLFlBQ1MsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUNuQixTQUFTLEVBQUUsTUFBTSxFQUNqQixXQUFXLEVBQUUsT0FBTyxFQUN6QjtJQUVKLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsZUFBZSxDQVFoRTtJQUVELFFBQVEsNEJBRVA7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLDBEQUVqRDtJQUVELFFBQVEsSUFBSSxFQUFFLEVBQUUsQ0FFZjtJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLFdBQVcsR0FBRyxlQUFlLENBUTdEO0lBRUQsTUFBTSxDQUFDLEtBQUssSUFBSSxlQUFlLENBTzlCO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLGVBQWUsQ0FJbkM7SUFLSyxhQUFhLGtCQVNsQjtJQUVLLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLGlCQWF4QjtJQUVLLE9BQU8sSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBTzNCO0NBQ0YifQ==
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;aAKH,MAAM,EAAE,eAAe;IAEhC,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"}
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/dest/testing.d.ts CHANGED
@@ -27,5 +27,5 @@ export declare function makeFinalBlobBatchingChallenges(seed?: number): FinalBlo
27
27
  * @param length
28
28
  * @returns
29
29
  */
30
- export declare function makeRandomBlob(length: number): Blob;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDaEcsT0FBTyxFQUFtQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxjQUFjLHdCQUF3QixDQUFDO0FBRXZDOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxJQUFJLFNBQUksR0FBRyxVQUFVLENBVW5EO0FBMEJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLElBQUksU0FBSSxHQUFHLGVBQWUsQ0FTN0Q7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsSUFBSSxTQUFJLHdCQU9oRDtBQUVELHdCQUFnQiwrQkFBK0IsQ0FBQyxJQUFJLFNBQUksK0JBRXZEO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FFbkQifQ==
30
+ export declare function makeRandomBlob(length: number): Promise<Blob>;
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rlc3RpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDaEcsT0FBTyxFQUFtQixVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRCxjQUFjLHdCQUF3QixDQUFDO0FBRXZDOzs7OztHQUtHO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxJQUFJLFNBQUksR0FBRyxVQUFVLENBVW5EO0FBMEJEOzs7OztHQUtHO0FBQ0gsd0JBQWdCLG1CQUFtQixDQUFDLElBQUksU0FBSSxHQUFHLGVBQWUsQ0FTN0Q7QUFFRCx3QkFBZ0Isd0JBQXdCLENBQUMsSUFBSSxTQUFJLHdCQU9oRDtBQUVELHdCQUFnQiwrQkFBK0IsQ0FBQyxJQUFJLFNBQUksK0JBRXZEO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FFNUQifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAmB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,cAAc,wBAAwB,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAI,GAAG,UAAU,CAUnD;AA0BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAI,GAAG,eAAe,CAS7D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAI,wBAOhD;AAED,wBAAgB,+BAA+B,CAAC,IAAI,SAAI,+BAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAE,MAAM,mDAAmD,CAAC;AAChG,OAAO,EAAmB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE/D,cAAc,wBAAwB,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,SAAI,GAAG,UAAU,CAUnD;AA0BD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,SAAI,GAAG,eAAe,CAS7D;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAI,wBAOhD;AAED,wBAAgB,+BAA+B,CAAC,IAAI,SAAI,+BAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/blob-lib",
3
- "version": "0.0.1-commit.03f7ef2",
3
+ "version": "0.0.1-commit.04d373f",
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 \"tsgo -b -w\" \"nodemon --watch dest --exec yarn start\"",
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": "0.0.1-commit.03f7ef2",
31
- "@aztec/foundation": "0.0.1-commit.03f7ef2",
30
+ "@aztec/constants": "0.0.1-commit.04d373f",
31
+ "@aztec/foundation": "0.0.1-commit.04d373f",
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.20251126.1",
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
@@ -5,7 +5,7 @@ import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
5
5
 
6
6
  import { computeBlobCommitment, computeChallengeZ, computeEthVersionedBlobHash } from './hash.js';
7
7
  import type { BlobJson } from './interface.js';
8
- import { BYTES_PER_BLOB, BYTES_PER_COMMITMENT, getKzg } from './kzg_context.js';
8
+ import { getBytesPerBlob, getBytesPerCommitment, getKzg } from './kzg_context.js';
9
9
 
10
10
  export { FIELDS_PER_BLOB };
11
11
 
@@ -27,11 +27,11 @@ export class Blob {
27
27
  */
28
28
  public readonly commitment: Buffer,
29
29
  ) {
30
- if (data.length !== BYTES_PER_BLOB) {
31
- throw new Error(`Blob data must be ${BYTES_PER_BLOB} bytes. Got ${data.length}.`);
30
+ if (data.length !== getBytesPerBlob()) {
31
+ throw new Error(`Blob data must be ${getBytesPerBlob()} bytes. Got ${data.length}.`);
32
32
  }
33
- if (commitment.length !== BYTES_PER_COMMITMENT) {
34
- throw new Error(`Blob commitment must be ${BYTES_PER_COMMITMENT} bytes. Got ${commitment.length}.`);
33
+ if (commitment.length !== getBytesPerCommitment()) {
34
+ throw new Error(`Blob commitment must be ${getBytesPerCommitment()} bytes. Got ${commitment.length}.`);
35
35
  }
36
36
  }
37
37
 
@@ -40,10 +40,10 @@ export class Blob {
40
40
  * @param data - The buffer of the Blob.
41
41
  * @returns A Blob created from the buffer.
42
42
  *
43
- * @throws If data does not match the expected length (BYTES_PER_BLOB).
43
+ * @throws If data does not match the expected length (getBytesPerBlob()).
44
44
  */
45
- static fromBlobBuffer(data: Uint8Array): Blob {
46
- const commitment = computeBlobCommitment(data);
45
+ static async fromBlobBuffer(data: Uint8Array): Promise<Blob> {
46
+ const commitment = await computeBlobCommitment(data);
47
47
  return new Blob(data, commitment);
48
48
  }
49
49
 
@@ -55,13 +55,13 @@ export class Blob {
55
55
  * @param fields - The array of fields to create the Blob from.
56
56
  * @returns A Blob created from the array of fields.
57
57
  */
58
- static fromFields(fields: Fr[]): Blob {
58
+ static async fromFields(fields: Fr[]): Promise<Blob> {
59
59
  if (fields.length > FIELDS_PER_BLOB) {
60
60
  throw new Error(`Attempted to overfill blob with ${fields.length} fields. The maximum is ${FIELDS_PER_BLOB}.`);
61
61
  }
62
62
 
63
- const data = Buffer.concat([serializeToBuffer(fields)], BYTES_PER_BLOB);
64
- const commitment = computeBlobCommitment(data);
63
+ const data = Buffer.concat([serializeToBuffer(fields)], getBytesPerBlob());
64
+ const commitment = await computeBlobCommitment(data);
65
65
  return new Blob(data, commitment);
66
66
  }
67
67
 
@@ -88,9 +88,9 @@ export class Blob {
88
88
  * @param json - The JSON object to create the Blob from.
89
89
  * @returns A Blob created from the JSON object.
90
90
  */
91
- static fromJson(json: BlobJson): Blob {
91
+ static async fromJson(json: BlobJson): Promise<Blob> {
92
92
  const blobBuffer = Buffer.from(json.blob.slice(2), 'hex');
93
- const blob = Blob.fromBlobBuffer(blobBuffer);
93
+ const blob = await Blob.fromBlobBuffer(blobBuffer);
94
94
 
95
95
  if (blob.commitment.toString('hex') !== json.kzg_commitment.slice(2)) {
96
96
  throw new Error('KZG commitment does not match');
@@ -134,9 +134,9 @@ export class Blob {
134
134
  * y: BLS12Fr - Evaluation y = p(z), where p() is the blob polynomial. BLS12 field element, rep. as BigNum in nr, bigint in ts.
135
135
  * proof: Buffer - KZG opening proof for y = p(z). The commitment to quotient polynomial Q, used in compressed BLS12 point format (48 bytes).
136
136
  */
137
- evaluate(challengeZ: Fr, verifyProof = false) {
137
+ async evaluate(challengeZ: Fr, verifyProof = false) {
138
138
  const kzg = getKzg();
139
- const res = kzg.computeKzgProof(this.data, challengeZ.toBuffer());
139
+ const res = await kzg.asyncComputeKzgProof(this.data, challengeZ.toBuffer());
140
140
  if (verifyProof && !kzg.verifyKzgProof(this.commitment, challengeZ.toBuffer(), res[1], res[0])) {
141
141
  throw new Error(`KZG proof did not verify.`);
142
142
  }
@@ -1,5 +1,5 @@
1
- import { AZTEC_MAX_EPOCH_DURATION, BLOBS_PER_CHECKPOINT } from '@aztec/constants';
2
- import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
1
+ import { BLOBS_PER_CHECKPOINT, DomainSeparator, MAX_CHECKPOINTS_PER_EPOCH } from '@aztec/constants';
2
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
3
3
  import { sha256ToField } from '@aztec/foundation/crypto/sha256';
4
4
  import { BLS12Fr, BLS12Point } from '@aztec/foundation/curves/bls12';
5
5
  import { Fr } from '@aztec/foundation/curves/bn254';
@@ -8,7 +8,7 @@ import { BatchedBlob } from './batched_blob.js';
8
8
  import { Blob } from './blob.js';
9
9
  import { getBlobsPerL1Block } from './blob_utils.js';
10
10
  import { BlobAccumulator, FinalBlobAccumulator, FinalBlobBatchingChallenges } from './circuit_types/index.js';
11
- import { computeBlobFieldsHash, hashNoirBigNumLimbs } from './hash.js';
11
+ import { computeBlobFieldsHash, hashBlobYLimbs } from './hash.js';
12
12
  import { getKzg } from './kzg_context.js';
13
13
 
14
14
  /**
@@ -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 > AZTEC_MAX_EPOCH_DURATION) {
78
+ if (numCheckpoints > MAX_CHECKPOINTS_PER_EPOCH) {
79
79
  throw new Error(
80
- `Too many checkpoints sent to batch(). The maximum is ${AZTEC_MAX_EPOCH_DURATION}. Got ${numCheckpoints}.`,
80
+ `Too many checkpoints sent to batch(). The maximum is ${MAX_CHECKPOINTS_PER_EPOCH}. Got ${numCheckpoints}.`,
81
81
  );
82
82
  }
83
83
 
@@ -109,14 +109,14 @@ export class BatchedBlobAccumulator {
109
109
  for (const blobFields of blobFieldsPerCheckpoint) {
110
110
  // Compute the hash of all the fields in the block.
111
111
  const blobFieldsHash = await computeBlobFieldsHash(blobFields);
112
- const blobs = getBlobsPerL1Block(blobFields);
112
+ const blobs = await getBlobsPerL1Block(blobFields);
113
113
  for (const blob of blobs) {
114
114
  // Compute the challenge z for each blob and accumulate it.
115
115
  const challengeZ = await blob.computeChallengeZ(blobFieldsHash);
116
116
  if (!z) {
117
117
  z = challengeZ;
118
118
  } else {
119
- z = await poseidon2Hash([z, challengeZ]);
119
+ z = await poseidon2HashWithSeparator([z, challengeZ], DomainSeparator.BLOB_Z_ACC);
120
120
  }
121
121
  }
122
122
  allBlobs.push(...blobs);
@@ -126,15 +126,15 @@ export class BatchedBlobAccumulator {
126
126
  }
127
127
 
128
128
  // Now we have a shared challenge for all blobs, evaluate them...
129
- const proofObjects = allBlobs.map(b => b.evaluate(z));
130
- const evaluations = await Promise.all(proofObjects.map(({ y }) => hashNoirBigNumLimbs(y)));
129
+ const proofObjects = await Promise.all(allBlobs.map(b => b.evaluate(z)));
130
+ const evaluations = await Promise.all(proofObjects.map(({ y }) => hashBlobYLimbs(y)));
131
131
  // ...and find the challenge for the linear combination of blobs.
132
132
  let gamma = evaluations[0];
133
133
  // We start at i = 1, because gamma is initialized as the first blob's evaluation.
134
134
  for (let i = 1; i < allBlobs.length; i++) {
135
- gamma = await poseidon2Hash([gamma, evaluations[i]]);
135
+ gamma = await poseidon2HashWithSeparator([gamma, evaluations[i]], DomainSeparator.BLOB_GAMMA_ACC);
136
136
  }
137
- gamma = await poseidon2Hash([gamma, z]);
137
+ gamma = await poseidon2HashWithSeparator([gamma, z], DomainSeparator.BLOB_GAMMA_FINAL);
138
138
 
139
139
  return new FinalBlobBatchingChallenges(z, BLS12Fr.fromBN254Fr(gamma));
140
140
  }
@@ -145,7 +145,7 @@ export class BatchedBlobAccumulator {
145
145
  * @returns An updated blob accumulator.
146
146
  */
147
147
  async accumulateBlob(blob: Blob, blobFieldsHash: Fr) {
148
- const { proof, y: thisY } = blob.evaluate(this.finalBlobChallenges.z);
148
+ const { proof, y: thisY } = await blob.evaluate(this.finalBlobChallenges.z);
149
149
  const thisC = BLS12Point.decompress(blob.commitment);
150
150
  const thisQ = BLS12Point.decompress(proof);
151
151
  const blobChallengeZ = await blob.computeChallengeZ(blobFieldsHash);
@@ -166,7 +166,7 @@ export class BatchedBlobAccumulator {
166
166
  thisY, // yAcc = gamma^0 * y_0 = 1 * y_0
167
167
  thisC, // cAcc = gamma^0 * C_0 = 1 * C_0
168
168
  thisQ, // qAcc = gamma^0 * Q_0 = 1 * Q_0
169
- await hashNoirBigNumLimbs(thisY), // gammaAcc = poseidon2(y_0.limbs)
169
+ await hashBlobYLimbs(thisY), // gammaAcc = poseidon2(y_0.limbs)
170
170
  this.finalBlobChallenges.gamma, // gammaPow = gamma^(i + 1) = gamma^1 = gamma
171
171
  this.finalBlobChallenges,
172
172
  );
@@ -174,11 +174,11 @@ export class BatchedBlobAccumulator {
174
174
  // Moving from i - 1 to i, so:
175
175
  return new BatchedBlobAccumulator(
176
176
  sha256ToField([this.blobCommitmentsHashAcc, blob.commitment]), // blobCommitmentsHashAcc := sha256(blobCommitmentsHashAcc, C_i)
177
- await poseidon2Hash([this.zAcc, blobChallengeZ]), // zAcc := poseidon2(zAcc, z_i)
177
+ await poseidon2HashWithSeparator([this.zAcc, blobChallengeZ], DomainSeparator.BLOB_Z_ACC), // zAcc := poseidon2(BLOB_Z_ACC, zAcc, z_i)
178
178
  this.yAcc.add(thisY.mul(this.gammaPow)), // yAcc := yAcc + (gamma^i * y_i)
179
179
  this.cAcc.add(thisC.mul(this.gammaPow)), // cAcc := cAcc + (gamma^i * C_i)
180
180
  this.qAcc.add(thisQ.mul(this.gammaPow)), // qAcc := qAcc + (gamma^i * C_i)
181
- await poseidon2Hash([this.gammaAcc, await hashNoirBigNumLimbs(thisY)]), // gammaAcc := poseidon2(gammaAcc, poseidon2(y_i.limbs))
181
+ await poseidon2HashWithSeparator([this.gammaAcc, await hashBlobYLimbs(thisY)], DomainSeparator.BLOB_GAMMA_ACC), // gammaAcc := poseidon2(BLOB_GAMMA_ACC, gammaAcc, poseidon2(y_i.limbs))
182
182
  this.gammaPow.mul(this.finalBlobChallenges.gamma), // gammaPow = gamma^(i + 1) = gamma^i * final_gamma
183
183
  this.finalBlobChallenges,
184
184
  );
@@ -192,7 +192,7 @@ export class BatchedBlobAccumulator {
192
192
  * @returns An updated blob accumulator.
193
193
  */
194
194
  async accumulateFields(blobFields: Fr[]) {
195
- const blobs = getBlobsPerL1Block(blobFields);
195
+ const blobs = await getBlobsPerL1Block(blobFields);
196
196
 
197
197
  if (blobs.length > BLOBS_PER_CHECKPOINT) {
198
198
  throw new Error(
@@ -220,14 +220,17 @@ export class BatchedBlobAccumulator {
220
220
  * - z := z_acc (final challenge, at which all blobs are evaluated)
221
221
  * - y := y_acc (final opening to be checked on L1)
222
222
  * - c := c_acc (final commitment to be checked on L1)
223
- * - gamma := poseidon2(gamma_acc, z) (challenge for linear combination of y and C, above)
223
+ * - gamma := poseidon2(BLOB_GAMMA_FINAL, gamma_acc, z) (challenge for linear combination of y and C, above)
224
224
  *
225
225
  * @param verifyProof - Whether to verify the KZG proof.
226
226
  * @returns A batched blob.
227
227
  */
228
228
  async finalize(verifyProof = false): Promise<BatchedBlob> {
229
229
  // All values in acc are final, apart from gamma := poseidon2(gammaAcc, z):
230
- const calculatedGamma = await poseidon2Hash([this.gammaAcc, this.zAcc]);
230
+ const calculatedGamma = await poseidon2HashWithSeparator(
231
+ [this.gammaAcc, this.zAcc],
232
+ DomainSeparator.BLOB_GAMMA_FINAL,
233
+ );
231
234
  // Check final values:
232
235
  if (!this.zAcc.equals(this.finalBlobChallenges.z)) {
233
236
  throw new Error(
package/src/blob_utils.ts CHANGED
@@ -30,14 +30,16 @@ export function getPrefixedEthBlobCommitments(blobs: Blob[]): `0x${string}` {
30
30
  *
31
31
  * @throws If the number of fields does not match what's indicated by the checkpoint prefix.
32
32
  */
33
- export function getBlobsPerL1Block(fields: Fr[]): Blob[] {
33
+ export async function getBlobsPerL1Block(fields: Fr[]): Promise<Blob[]> {
34
34
  if (!fields.length) {
35
35
  throw new Error('Cannot create blobs from empty fields.');
36
36
  }
37
37
 
38
38
  const numBlobs = Math.ceil(fields.length / FIELDS_PER_BLOB);
39
- return Array.from({ length: numBlobs }, (_, i) =>
40
- Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB)),
39
+ return await Promise.all(
40
+ Array.from({ length: numBlobs }, (_, i) =>
41
+ Blob.fromFields(fields.slice(i * FIELDS_PER_BLOB, (i + 1) * FIELDS_PER_BLOB)),
42
+ ),
41
43
  );
42
44
  }
43
45
 
@@ -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 ? 7 : 6;
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 { type BlockBlobData, decodeBlockBlobData, encodeBlockBlobData } from './block_blob_data.js';
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 + 1; // +1 for the checkpoint end marker.
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 ? 1 : 0) + // l1ToL2Messages root in the first block
91
- numBlocks * 6 + // 6 fields for each block end blob data.
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
- 1 // checkpoint end marker
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