@aztec/foundation 0.86.0 → 0.87.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/array/array.d.ts.map +1 -1
- package/dest/bigint/index.d.ts +2 -0
- package/dest/bigint/index.d.ts.map +1 -1
- package/dest/bigint/index.js +6 -0
- package/dest/bigint-buffer/index.d.ts +0 -2
- package/dest/bigint-buffer/index.d.ts.map +1 -1
- package/dest/buffer/buffer16.d.ts +80 -0
- package/dest/buffer/buffer16.d.ts.map +1 -0
- package/dest/buffer/buffer16.js +100 -0
- package/dest/buffer/buffer32.d.ts +3 -7
- package/dest/buffer/buffer32.d.ts.map +1 -1
- package/dest/buffer/buffer32.js +6 -6
- package/dest/buffer/index.d.ts +1 -0
- package/dest/buffer/index.d.ts.map +1 -1
- package/dest/buffer/index.js +1 -0
- package/dest/collection/array.d.ts +0 -2
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/object.d.ts +2 -0
- package/dest/collection/object.d.ts.map +1 -1
- package/dest/collection/object.js +8 -0
- package/dest/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/crypto/aes128/index.d.ts +2 -4
- package/dest/crypto/aes128/index.d.ts.map +1 -1
- package/dest/crypto/ecdsa/index.d.ts +0 -2
- package/dest/crypto/ecdsa/index.d.ts.map +1 -1
- package/dest/crypto/ecdsa/signature.d.ts +1 -3
- package/dest/crypto/ecdsa/signature.d.ts.map +1 -1
- package/dest/crypto/grumpkin/index.d.ts +0 -2
- package/dest/crypto/grumpkin/index.d.ts.map +1 -1
- package/dest/crypto/keccak/index.d.ts +2 -4
- package/dest/crypto/keccak/index.d.ts.map +1 -1
- package/dest/crypto/keys/index.d.ts +0 -2
- package/dest/crypto/keys/index.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.noble.d.ts +2 -4
- package/dest/crypto/pedersen/pedersen.noble.d.ts.map +1 -1
- package/dest/crypto/pedersen/pedersen.wasm.d.ts +2 -4
- package/dest/crypto/pedersen/pedersen.wasm.d.ts.map +1 -1
- package/dest/crypto/poseidon/index.d.ts +0 -2
- package/dest/crypto/poseidon/index.d.ts.map +1 -1
- package/dest/crypto/random/index.d.ts +1 -3
- package/dest/crypto/random/index.d.ts.map +1 -1
- package/dest/crypto/random/randomness_singleton.d.ts +0 -2
- package/dest/crypto/random/randomness_singleton.d.ts.map +1 -1
- package/dest/crypto/schnorr/signature.d.ts +3 -5
- package/dest/crypto/schnorr/signature.d.ts.map +1 -1
- package/dest/crypto/secp256k1/index.d.ts +4 -6
- package/dest/crypto/secp256k1/index.d.ts.map +1 -1
- package/dest/crypto/secp256k1-signer/utils.d.ts +0 -2
- package/dest/crypto/secp256k1-signer/utils.d.ts.map +1 -1
- package/dest/crypto/serialize.d.ts +4 -6
- package/dest/crypto/serialize.d.ts.map +1 -1
- package/dest/crypto/sha256/index.d.ts +2 -4
- package/dest/crypto/sha256/index.d.ts.map +1 -1
- package/dest/crypto/sha512/index.d.ts +1 -3
- package/dest/crypto/sha512/index.d.ts.map +1 -1
- package/dest/crypto/signature/index.d.ts +0 -2
- package/dest/crypto/signature/index.d.ts.map +1 -1
- package/dest/crypto/sync/pedersen/index.d.ts +2 -4
- package/dest/crypto/sync/pedersen/index.d.ts.map +1 -1
- package/dest/crypto/sync/poseidon/index.d.ts +0 -2
- package/dest/crypto/sync/poseidon/index.d.ts.map +1 -1
- package/dest/decorators/memoize.d.ts.map +1 -1
- package/dest/eth-address/index.d.ts +2 -5
- package/dest/eth-address/index.d.ts.map +1 -1
- package/dest/eth-signature/eth_signature.d.ts +0 -2
- package/dest/eth-signature/eth_signature.d.ts.map +1 -1
- package/dest/fields/coordinate.d.ts +0 -2
- package/dest/fields/coordinate.d.ts.map +1 -1
- package/dest/fields/fields.d.ts +0 -3
- package/dest/fields/fields.d.ts.map +1 -1
- package/dest/fields/point.d.ts +2 -4
- package/dest/fields/point.d.ts.map +1 -1
- package/dest/fields/point.js +2 -2
- package/dest/iterable/filter.js +1 -1
- package/dest/iterable/map.js +1 -1
- package/dest/json-rpc/client/fetch.d.ts +2 -2
- package/dest/json-rpc/client/fetch.d.ts.map +1 -1
- package/dest/json-rpc/client/fetch.js +16 -30
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts +7 -3
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +135 -13
- package/dest/json-rpc/client/undici.d.ts.map +1 -1
- package/dest/json-rpc/client/undici.js +6 -7
- package/dest/json-rpc/convert.d.ts +1 -1
- package/dest/json-rpc/convert.d.ts.map +1 -1
- package/dest/json-rpc/convert.js +1 -1
- package/dest/json-rpc/errors.d.ts +4 -0
- package/dest/json-rpc/errors.d.ts.map +1 -0
- package/dest/json-rpc/errors.js +6 -0
- package/dest/json-rpc/fixtures/class_a.d.ts +5 -3
- package/dest/json-rpc/fixtures/class_a.d.ts.map +1 -1
- package/dest/json-rpc/fixtures/class_b.d.ts +5 -3
- package/dest/json-rpc/fixtures/class_b.d.ts.map +1 -1
- package/dest/json-rpc/index.d.ts +1 -0
- package/dest/json-rpc/index.d.ts.map +1 -1
- package/dest/json-rpc/index.js +1 -0
- package/dest/json-rpc/js_utils.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +2 -1
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +112 -39
- package/dest/json-rpc/test/integration.d.ts +0 -1
- package/dest/json-rpc/test/integration.d.ts.map +1 -1
- package/dest/log/console.d.ts.map +1 -1
- package/dest/log/gcloud-logger-config.d.ts.map +1 -1
- package/dest/log/gcloud-logger-config.js +0 -4
- package/dest/log/pino-logger.d.ts +1 -2
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/message/index.d.ts.map +1 -1
- package/dest/mutex/mutex_database.d.ts.map +1 -1
- package/dest/queue/bounded_serial_queue.d.ts.map +1 -1
- package/dest/schemas/api.d.ts.map +1 -1
- package/dest/schemas/parse.js +1 -1
- package/dest/schemas/schemas.d.ts +3 -5
- package/dest/schemas/schemas.d.ts.map +1 -1
- package/dest/schemas/utils.d.ts +1 -3
- package/dest/schemas/utils.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.d.ts +9 -2
- package/dest/serialize/buffer_reader.d.ts.map +1 -1
- package/dest/serialize/buffer_reader.js +15 -2
- package/dest/serialize/field_reader.d.ts +2 -1
- package/dest/serialize/field_reader.d.ts.map +1 -1
- package/dest/serialize/field_reader.js +4 -1
- package/dest/serialize/free_funcs.d.ts +15 -9
- package/dest/serialize/free_funcs.d.ts.map +1 -1
- package/dest/serialize/free_funcs.js +11 -0
- package/dest/serialize/serialize.d.ts +3 -5
- package/dest/serialize/serialize.d.ts.map +1 -1
- package/dest/string/index.d.ts +2 -2
- package/dest/string/index.d.ts.map +1 -1
- package/dest/string/index.js +6 -0
- package/dest/testing/files/index.d.ts +0 -2
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/timer/timeout.d.ts.map +1 -1
- package/dest/transport/dispatch/create_dispatch_fn.d.ts.map +1 -1
- package/dest/transport/interface/connector.d.ts.map +1 -1
- package/dest/transport/interface/listener.d.ts +0 -1
- package/dest/transport/interface/listener.d.ts.map +1 -1
- package/dest/transport/interface/socket.d.ts.map +1 -1
- package/dest/transport/node/node_connector.d.ts +0 -1
- package/dest/transport/node/node_connector.d.ts.map +1 -1
- package/dest/transport/node/node_connector_socket.d.ts +0 -1
- package/dest/transport/node/node_connector_socket.d.ts.map +1 -1
- package/dest/transport/node/node_listener.d.ts +0 -1
- package/dest/transport/node/node_listener.d.ts.map +1 -1
- package/dest/transport/node/node_listener_socket.d.ts +0 -1
- package/dest/transport/node/node_listener_socket.d.ts.map +1 -1
- package/dest/transport/transport_client.d.ts +0 -1
- package/dest/transport/transport_client.d.ts.map +1 -1
- package/dest/transport/transport_server.d.ts.map +1 -1
- package/dest/trees/hasher.d.ts +4 -6
- package/dest/trees/hasher.d.ts.map +1 -1
- package/dest/trees/indexed_merkle_tree.d.ts +0 -2
- package/dest/trees/indexed_merkle_tree.d.ts.map +1 -1
- package/dest/trees/indexed_merkle_tree_calculator.d.ts +1 -3
- package/dest/trees/indexed_merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/indexed_tree_leaf.d.ts +0 -2
- package/dest/trees/indexed_tree_leaf.d.ts.map +1 -1
- package/dest/trees/membership_witness.d.ts +1 -3
- package/dest/trees/membership_witness.d.ts.map +1 -1
- package/dest/trees/merkle_tree.d.ts +0 -2
- package/dest/trees/merkle_tree.d.ts.map +1 -1
- package/dest/trees/merkle_tree_calculator.d.ts +1 -3
- package/dest/trees/merkle_tree_calculator.d.ts.map +1 -1
- package/dest/trees/sibling_path.d.ts +6 -8
- package/dest/trees/sibling_path.d.ts.map +1 -1
- package/dest/trees/unbalanced_merkle_tree.d.ts +0 -2
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -1
- package/dest/types/index.d.ts +0 -2
- package/dest/types/index.d.ts.map +1 -1
- package/dest/url/index.d.ts.map +1 -1
- package/dest/url/index.js +1 -1
- package/package.json +16 -15
- package/src/bigint/index.ts +8 -0
- package/src/buffer/buffer16.ts +133 -0
- package/src/buffer/buffer32.ts +8 -6
- package/src/buffer/index.ts +1 -0
- package/src/collection/object.ts +10 -0
- package/src/config/env_var.ts +13 -3
- package/src/fields/point.ts +0 -2
- package/src/iterable/filter.ts +1 -1
- package/src/iterable/map.ts +1 -1
- package/src/json-rpc/client/fetch.ts +14 -33
- package/src/json-rpc/client/safe_json_rpc_client.ts +171 -13
- package/src/json-rpc/client/undici.ts +6 -13
- package/src/json-rpc/convert.ts +2 -2
- package/src/json-rpc/errors.ts +6 -0
- package/src/json-rpc/fixtures/class_a.ts +4 -1
- package/src/json-rpc/fixtures/class_b.ts +4 -1
- package/src/json-rpc/index.ts +1 -0
- package/src/json-rpc/server/safe_json_rpc_server.ts +78 -25
- package/src/log/console.ts +4 -1
- package/src/log/gcloud-logger-config.ts +2 -2
- package/src/log/pino-logger.ts +2 -2
- package/src/message/index.ts +5 -1
- package/src/mutex/mutex_database.ts +2 -3
- package/src/queue/bounded_serial_queue.ts +4 -1
- package/src/schemas/api.ts +4 -4
- package/src/schemas/parse.ts +1 -1
- package/src/serialize/buffer_reader.ts +23 -3
- package/src/serialize/field_reader.ts +11 -3
- package/src/serialize/free_funcs.ts +13 -0
- package/src/string/index.ts +9 -1
- package/src/timer/timeout.ts +5 -1
- package/src/transport/interface/connector.ts +0 -1
- package/src/transport/interface/listener.ts +2 -3
- package/src/transport/interface/socket.ts +2 -3
- package/src/transport/transport_client.ts +3 -4
- package/src/transport/transport_server.ts +4 -1
- package/src/trees/hasher.ts +4 -4
- package/src/trees/indexed_merkle_tree.ts +5 -1
- package/src/trees/indexed_merkle_tree_calculator.ts +2 -2
- package/src/trees/merkle_tree.ts +4 -1
- package/src/trees/merkle_tree_calculator.ts +8 -3
- package/src/types/index.ts +0 -5
- package/src/url/index.ts +0 -1
|
@@ -11,11 +11,15 @@ import type { Tuple } from './types.js';
|
|
|
11
11
|
*/
|
|
12
12
|
export class FieldReader {
|
|
13
13
|
private index: number;
|
|
14
|
-
private length: number;
|
|
15
|
-
|
|
14
|
+
private readonly length: number;
|
|
15
|
+
|
|
16
|
+
constructor(
|
|
17
|
+
private fields: Fr[],
|
|
18
|
+
offset = 0,
|
|
19
|
+
) {
|
|
16
20
|
this.index = offset;
|
|
17
21
|
this.length = fields.length;
|
|
18
|
-
if (offset
|
|
22
|
+
if (offset > this.length) {
|
|
19
23
|
throw new Error('Offset out of bounds.');
|
|
20
24
|
}
|
|
21
25
|
}
|
|
@@ -43,6 +47,10 @@ export class FieldReader {
|
|
|
43
47
|
return this.index;
|
|
44
48
|
}
|
|
45
49
|
|
|
50
|
+
public remainingFields(): number {
|
|
51
|
+
return this.length - this.index;
|
|
52
|
+
}
|
|
53
|
+
|
|
46
54
|
/**
|
|
47
55
|
* Skips the next n fields.
|
|
48
56
|
*
|
|
@@ -56,6 +56,19 @@ export function numToUInt32BE(n: number, bufferSize = 4) {
|
|
|
56
56
|
return buf;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
+
/**
|
|
60
|
+
* Convert a bigint to a big-endian unsigned 64-bit integer Buffer.
|
|
61
|
+
*
|
|
62
|
+
* @param n - The bigint to be converted to a big-endian unsigned 64-bit integer Buffer.
|
|
63
|
+
* @param bufferSize - Optional, the size of the output Buffer (default is 8).
|
|
64
|
+
* @returns A Buffer containing the big-endian unsigned 64-bit integer representation of the input number.
|
|
65
|
+
*/
|
|
66
|
+
export function bigintToUInt64BE(n: bigint, bufferSize = 8) {
|
|
67
|
+
const buf = Buffer.alloc(bufferSize);
|
|
68
|
+
buf.writeBigUInt64BE(n, bufferSize - 8);
|
|
69
|
+
return buf;
|
|
70
|
+
}
|
|
71
|
+
|
|
59
72
|
/**
|
|
60
73
|
* Serialize a number into a big-endian signed 32-bit integer Buffer with the specified buffer size.
|
|
61
74
|
* This function converts the input number into its binary representation and stores it in a Buffer
|
package/src/string/index.ts
CHANGED
|
@@ -19,7 +19,7 @@ export function bufferToHex(buffer: Buffer): `0x${string}` {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
export function pluralize(str: string, count: number | bigint, plural?: string): string {
|
|
22
|
-
return count === 1 || count === 1n ? str : plural ?? `${str}s
|
|
22
|
+
return count === 1 || count === 1n ? str : (plural ?? `${str}s`);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
export function count(count: number | bigint, str: string, plural?: string): string {
|
|
@@ -29,3 +29,11 @@ export function count(count: number | bigint, str: string, plural?: string): str
|
|
|
29
29
|
export function truncate(str: string, length: number = 64): string {
|
|
30
30
|
return str.length > length ? str.slice(0, length) + '...' : str;
|
|
31
31
|
}
|
|
32
|
+
|
|
33
|
+
export function isoDate(date?: Date) {
|
|
34
|
+
return (date ?? new Date()).toISOString().replace(/[-:T]/g, '').replace(/\..+$/, '');
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function urlJoin(...args: string[]): string {
|
|
38
|
+
return args.map(arg => arg.replace(/\/+$/, '').replace(/^\/+/, '')).join('/');
|
|
39
|
+
}
|
package/src/timer/timeout.ts
CHANGED
|
@@ -12,7 +12,11 @@ export class TimeoutTask<T> {
|
|
|
12
12
|
private interrupt = () => {};
|
|
13
13
|
private totalTime = 0;
|
|
14
14
|
|
|
15
|
-
constructor(
|
|
15
|
+
constructor(
|
|
16
|
+
private fn: () => Promise<T>,
|
|
17
|
+
private timeout: number,
|
|
18
|
+
errorFn: () => any,
|
|
19
|
+
) {
|
|
16
20
|
this.interruptPromise = new Promise<T>((_, reject) => {
|
|
17
21
|
this.interrupt = () => reject(errorFn());
|
|
18
22
|
});
|
|
@@ -7,10 +7,9 @@ import type { Socket } from './socket.js';
|
|
|
7
7
|
* Possible implementations could include MessageChannels or WebSockets.
|
|
8
8
|
*/
|
|
9
9
|
export interface Listener extends EventEmitter {
|
|
10
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
11
10
|
open(): void;
|
|
12
|
-
|
|
11
|
+
|
|
13
12
|
close(): void;
|
|
14
|
-
|
|
13
|
+
|
|
15
14
|
on(name: 'new_socket', cb: (client: Socket) => void): this;
|
|
16
15
|
}
|
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
* If `registerHandler` callback receives `undefined` that signals the other end closed.
|
|
7
7
|
*/
|
|
8
8
|
export interface Socket {
|
|
9
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
10
9
|
send(msg: any, transfer?: Transferable[]): Promise<void>;
|
|
11
|
-
|
|
10
|
+
|
|
12
11
|
registerHandler(cb: (msg: any) => any): void;
|
|
13
|
-
|
|
12
|
+
|
|
14
13
|
close(): void;
|
|
15
14
|
}
|
|
@@ -18,9 +18,9 @@ interface PendingRequest {
|
|
|
18
18
|
* The unique message identifier used for tracking and matching request/response pairs.
|
|
19
19
|
*/
|
|
20
20
|
msgId: number;
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
resolve(data: any): void;
|
|
23
|
-
|
|
23
|
+
|
|
24
24
|
reject(error: Error): void;
|
|
25
25
|
}
|
|
26
26
|
|
|
@@ -30,9 +30,8 @@ interface PendingRequest {
|
|
|
30
30
|
* for efficient and concurrent communication with a corresponding TransportServer.
|
|
31
31
|
*/
|
|
32
32
|
export interface ITransportClient<Payload> extends EventEmitter {
|
|
33
|
-
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
34
33
|
on(name: 'event_msg', handler: (payload: Payload) => void): this;
|
|
35
|
-
|
|
34
|
+
|
|
36
35
|
emit(name: 'event_msg', payload: Payload): boolean;
|
|
37
36
|
}
|
|
38
37
|
|
|
@@ -9,7 +9,10 @@ import { isTransferDescriptor } from './interface/transferable.js';
|
|
|
9
9
|
export class TransportServer<Payload> {
|
|
10
10
|
private sockets: Socket[] = [];
|
|
11
11
|
|
|
12
|
-
constructor(
|
|
12
|
+
constructor(
|
|
13
|
+
private listener: Listener,
|
|
14
|
+
private msgHandlerFn: (msg: Payload) => Promise<any>,
|
|
15
|
+
) {}
|
|
13
16
|
|
|
14
17
|
/**
|
|
15
18
|
* Starts the TransportServer, allowing it to accept new connections and handle incoming messages.
|
package/src/trees/hasher.ts
CHANGED
|
@@ -8,14 +8,14 @@ export interface Hasher {
|
|
|
8
8
|
* @param rhs - The second array.
|
|
9
9
|
* @returns The new 32-byte hash.
|
|
10
10
|
*/
|
|
11
|
-
hash(lhs: Uint8Array, rhs: Uint8Array): Buffer
|
|
11
|
+
hash(lhs: Uint8Array, rhs: Uint8Array): Buffer<ArrayBuffer>;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* Hashes an array of buffers.
|
|
15
15
|
* @param inputs - The array of buffers to hash.
|
|
16
16
|
* @returns The resulting 32-byte hash.
|
|
17
17
|
*/
|
|
18
|
-
hashInputs(inputs: Buffer[]): Buffer
|
|
18
|
+
hashInputs(inputs: Buffer[]): Buffer<ArrayBuffer>;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -28,12 +28,12 @@ export interface AsyncHasher {
|
|
|
28
28
|
* @param rhs - The second array.
|
|
29
29
|
* @returns The new 32-byte hash.
|
|
30
30
|
*/
|
|
31
|
-
hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer
|
|
31
|
+
hash(lhs: Uint8Array, rhs: Uint8Array): Promise<Buffer<ArrayBuffer>>;
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Hashes an array of buffers.
|
|
35
35
|
* @param inputs - The array of buffers to hash.
|
|
36
36
|
* @returns The resulting 32-byte hash.
|
|
37
37
|
*/
|
|
38
|
-
hashInputs(inputs: Buffer[]): Promise<Buffer
|
|
38
|
+
hashInputs(inputs: Buffer[]): Promise<Buffer<ArrayBuffer>>;
|
|
39
39
|
}
|
|
@@ -6,7 +6,11 @@ import { MerkleTree } from './merkle_tree.js';
|
|
|
6
6
|
|
|
7
7
|
/** A simple immutable indexed merkle tree container. Use a IndexedMerkleTreeCalculator to create a new instance from a set of leaves. */
|
|
8
8
|
export class IndexedMerkleTree<T extends IndexedTreeLeafPreimage, N extends number> extends MerkleTree {
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(
|
|
10
|
+
height: N,
|
|
11
|
+
nodes: Buffer[],
|
|
12
|
+
public readonly leafPreimages: T[],
|
|
13
|
+
) {
|
|
10
14
|
super(height, nodes);
|
|
11
15
|
}
|
|
12
16
|
|
|
@@ -28,7 +28,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
|
|
|
28
28
|
) {
|
|
29
29
|
const zeroHashes = [zeroLeaf];
|
|
30
30
|
for (let i = 0; i < height; i++) {
|
|
31
|
-
zeroHashes.push(await hasher.hash(zeroHashes[i], zeroHashes[i]));
|
|
31
|
+
zeroHashes.push((await hasher.hash(zeroHashes[i], zeroHashes[i])) as Buffer<ArrayBuffer>);
|
|
32
32
|
}
|
|
33
33
|
return new IndexedMerkleTreeCalculator(height, zeroHashes, hasher, factory);
|
|
34
34
|
}
|
|
@@ -59,7 +59,7 @@ export class IndexedMerkleTreeCalculator<T extends IndexedTreeLeafPreimage, N ex
|
|
|
59
59
|
|
|
60
60
|
for (let i = 0; i < this.height; ++i) {
|
|
61
61
|
const numLeaves = 2 ** (this.height - i);
|
|
62
|
-
const newLeaves: Buffer[] = [];
|
|
62
|
+
const newLeaves: Buffer<ArrayBuffer>[] = [];
|
|
63
63
|
for (let j = 0; j < leaves.length / 2; ++j) {
|
|
64
64
|
const l = leaves[j * 2];
|
|
65
65
|
const r = leaves[j * 2 + 1] || this.zeroHashes[i];
|
package/src/trees/merkle_tree.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/** A simple immutable Merkle tree container. Use a MerkleTreeCalculator to create a new instance from a set of leaves. */
|
|
2
2
|
export class MerkleTree {
|
|
3
|
-
constructor(
|
|
3
|
+
constructor(
|
|
4
|
+
public readonly height: number,
|
|
5
|
+
public readonly nodes: Buffer[],
|
|
6
|
+
) {
|
|
4
7
|
const expectedNodeCount = 2 ** (height + 1) - 1;
|
|
5
8
|
if (nodes.length !== expectedNodeCount) {
|
|
6
9
|
throw new Error(`Invalid node count for Merkle tree: got ${nodes.length} but expected ${expectedNodeCount}`);
|
|
@@ -7,18 +7,23 @@ import { MerkleTree } from './merkle_tree.js';
|
|
|
7
7
|
* Merkle tree calculator.
|
|
8
8
|
*/
|
|
9
9
|
export class MerkleTreeCalculator {
|
|
10
|
-
private constructor(
|
|
10
|
+
private constructor(
|
|
11
|
+
private height: number,
|
|
12
|
+
private zeroHashes: Buffer[],
|
|
13
|
+
private hasher: AsyncHasher['hash'],
|
|
14
|
+
) {
|
|
11
15
|
this.hasher = hasher;
|
|
12
16
|
}
|
|
13
17
|
|
|
14
18
|
static async create(
|
|
15
19
|
height: number,
|
|
16
20
|
zeroLeaf = Buffer.alloc(32),
|
|
17
|
-
hasher = async (left: Buffer, right: Buffer) =>
|
|
21
|
+
hasher = async (left: Buffer, right: Buffer) =>
|
|
22
|
+
(await pedersenHash([left, right])).toBuffer() as Buffer<ArrayBuffer>,
|
|
18
23
|
) {
|
|
19
24
|
const zeroHashes = [zeroLeaf];
|
|
20
25
|
for (let i = 0; i < height; i++) {
|
|
21
|
-
zeroHashes.push(await hasher(zeroHashes[i], zeroHashes[i]));
|
|
26
|
+
zeroHashes.push((await hasher(zeroHashes[i], zeroHashes[i])) as Buffer<ArrayBuffer>);
|
|
22
27
|
}
|
|
23
28
|
return new MerkleTreeCalculator(height, zeroHashes, hasher);
|
|
24
29
|
}
|
package/src/types/index.ts
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
/** Strips methods of a type. */
|
|
2
2
|
export type FieldsOf<T> = {
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
4
3
|
[P in keyof T as T[P] extends Function ? never : P]: T[P];
|
|
5
4
|
};
|
|
6
5
|
|
|
7
6
|
/** Extracts methods of a type. */
|
|
8
7
|
export type FunctionsOf<T> = {
|
|
9
|
-
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
10
8
|
[P in keyof T as T[P] extends Function ? P : never]: T[P];
|
|
11
9
|
};
|
|
12
10
|
|
|
@@ -20,6 +18,3 @@ export type Writeable<T> = { -readonly [P in keyof T]: T[P] };
|
|
|
20
18
|
export function unfreeze<T>(obj: T): Writeable<T> {
|
|
21
19
|
return obj as Writeable<T>;
|
|
22
20
|
}
|
|
23
|
-
|
|
24
|
-
/** Maybe exists, maybe not. */
|
|
25
|
-
export type Maybe<T extends object> = T | unknown;
|
package/src/url/index.ts
CHANGED