@aztec/foundation 0.69.1 → 0.71.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/abi/note_selector.d.ts +5 -2
- package/dest/abi/note_selector.d.ts.map +1 -1
- package/dest/abi/note_selector.js +12 -4
- package/dest/collection/array.d.ts +8 -0
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +28 -1
- package/dest/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/config/index.d.ts +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +6 -2
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +7 -2
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +18 -16
- package/dest/log/gcloud-logger-config.d.ts +14 -0
- package/dest/log/gcloud-logger-config.d.ts.map +1 -0
- package/dest/log/gcloud-logger-config.js +64 -0
- package/dest/log/pino-logger.d.ts +3 -0
- package/dest/log/pino-logger.d.ts.map +1 -1
- package/dest/log/pino-logger.js +25 -39
- package/dest/noir/noir_package_config.d.ts +2 -2
- package/dest/promise/running-promise.d.ts.map +1 -1
- package/dest/promise/running-promise.js +9 -1
- package/dest/queue/serial_queue.d.ts +1 -0
- package/dest/queue/serial_queue.d.ts.map +1 -1
- package/dest/queue/serial_queue.js +6 -1
- package/dest/testing/files/index.d.ts +2 -1
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/testing/files/index.js +6 -2
- package/dest/trees/index.d.ts +2 -1
- package/dest/trees/index.d.ts.map +1 -1
- package/dest/trees/index.js +3 -2
- package/dest/trees/{unbalanced_merkle_root.d.ts → unbalanced_merkle_tree.d.ts} +6 -2
- package/dest/trees/unbalanced_merkle_tree.d.ts.map +1 -0
- package/dest/trees/{unbalanced_merkle_root.js → unbalanced_merkle_tree.js} +40 -2
- package/dest/trees/unbalanced_tree_store.d.ts +19 -0
- package/dest/trees/unbalanced_tree_store.d.ts.map +1 -0
- package/dest/trees/unbalanced_tree_store.js +80 -0
- package/package.json +2 -2
- package/src/abi/note_selector.ts +11 -4
- package/src/collection/array.ts +31 -0
- package/src/config/env_var.ts +7 -3
- package/src/config/index.ts +7 -2
- package/src/json-rpc/server/safe_json_rpc_server.ts +22 -15
- package/src/log/gcloud-logger-config.ts +71 -0
- package/src/log/pino-logger.ts +30 -42
- package/src/promise/running-promise.ts +8 -0
- package/src/queue/serial_queue.ts +5 -0
- package/src/testing/files/index.ts +6 -1
- package/src/trees/index.ts +2 -1
- package/src/trees/unbalanced_merkle_tree.ts +103 -0
- package/src/trees/unbalanced_tree_store.ts +102 -0
- package/dest/trees/unbalanced_merkle_root.d.ts.map +0 -1
- package/src/trees/unbalanced_merkle_root.ts +0 -52
package/dest/log/pino-logger.js
CHANGED
|
@@ -3,9 +3,11 @@ import isNode from 'detect-node';
|
|
|
3
3
|
import { pino, symbols } from 'pino';
|
|
4
4
|
import { inspect } from 'util';
|
|
5
5
|
import { compactArray } from '../collection/array.js';
|
|
6
|
+
import { parseBooleanEnv } from '../config/index.js';
|
|
7
|
+
import { GoogleCloudLoggerConfig } from './gcloud-logger-config.js';
|
|
6
8
|
import { getLogLevelFromFilters, parseEnv } from './log-filters.js';
|
|
7
9
|
export function createLogger(module) {
|
|
8
|
-
module = module.replace(/^aztec:/, '');
|
|
10
|
+
module = logNameHandlers.reduce((moduleName, handler) => handler(moduleName), module.replace(/^aztec:/, ''));
|
|
9
11
|
const pinoLogger = logger.child({ module }, { level: getLogLevelFromFilters(logFilters, module) });
|
|
10
12
|
// We check manually for isLevelEnabled to avoid calling processLogData unnecessarily.
|
|
11
13
|
// Note that isLevelEnabled is missing from the browser version of pino.
|
|
@@ -41,6 +43,16 @@ export function addLogDataHandler(handler) {
|
|
|
41
43
|
function processLogData(data) {
|
|
42
44
|
return logDataHandlers.reduce((accum, handler) => handler(accum), data);
|
|
43
45
|
}
|
|
46
|
+
const logNameHandlers = [];
|
|
47
|
+
export function addLogNameHandler(handler) {
|
|
48
|
+
logNameHandlers.push(handler);
|
|
49
|
+
}
|
|
50
|
+
export function removeLogNameHandler(handler) {
|
|
51
|
+
const index = logNameHandlers.indexOf(handler);
|
|
52
|
+
if (index !== -1) {
|
|
53
|
+
logNameHandlers.splice(index, 1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
44
56
|
// Patch isLevelEnabled missing from pino/browser.
|
|
45
57
|
function isLevelEnabled(logger, level) {
|
|
46
58
|
return typeof logger.isLevelEnabled === 'function'
|
|
@@ -52,41 +64,14 @@ const defaultLogLevel = process.env.NODE_ENV === 'test' ? 'silent' : 'info';
|
|
|
52
64
|
const [logLevel, logFilters] = parseEnv(process.env.LOG_LEVEL, defaultLogLevel);
|
|
53
65
|
// Define custom logging levels for pino.
|
|
54
66
|
const customLevels = { verbose: 25 };
|
|
55
|
-
//
|
|
56
|
-
const
|
|
57
|
-
// Severity labels https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry#LogSeverity
|
|
58
|
-
let severity;
|
|
59
|
-
switch (label) {
|
|
60
|
-
case 'trace':
|
|
61
|
-
case 'debug':
|
|
62
|
-
severity = 'DEBUG';
|
|
63
|
-
break;
|
|
64
|
-
case 'verbose':
|
|
65
|
-
case 'info':
|
|
66
|
-
severity = 'INFO';
|
|
67
|
-
break;
|
|
68
|
-
case 'warn':
|
|
69
|
-
severity = 'WARNING';
|
|
70
|
-
break;
|
|
71
|
-
case 'error':
|
|
72
|
-
severity = 'ERROR';
|
|
73
|
-
break;
|
|
74
|
-
case 'fatal':
|
|
75
|
-
severity = 'CRITICAL';
|
|
76
|
-
break;
|
|
77
|
-
default:
|
|
78
|
-
severity = 'DEFAULT';
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
return { severity, level };
|
|
82
|
-
};
|
|
67
|
+
// Global pino options, tweaked for google cloud if running there.
|
|
68
|
+
const useGcloudObservability = parseBooleanEnv(process.env['USE_GCLOUD_OBSERVABILITY']);
|
|
83
69
|
const pinoOpts = {
|
|
84
70
|
customLevels,
|
|
71
|
+
messageKey: 'msg',
|
|
85
72
|
useOnlyCustomLevels: false,
|
|
86
73
|
level: logLevel,
|
|
87
|
-
|
|
88
|
-
level: levelToSeverityFormatter,
|
|
89
|
-
},
|
|
74
|
+
...(useGcloudObservability ? GoogleCloudLoggerConfig : {}),
|
|
90
75
|
};
|
|
91
76
|
export const levels = {
|
|
92
77
|
labels: { ...pino.levels.labels, ...Object.fromEntries(Object.entries(customLevels).map(e => e.reverse())) },
|
|
@@ -104,7 +89,7 @@ export const pinoPrettyOpts = {
|
|
|
104
89
|
customLevels: 'fatal:60,error:50,warn:40,info:30,verbose:25,debug:20,trace:10',
|
|
105
90
|
customColors: 'fatal:bgRed,error:red,warn:yellow,info:green,verbose:magenta,debug:blue,trace:gray',
|
|
106
91
|
minimumLevel: 'trace',
|
|
107
|
-
singleLine: !
|
|
92
|
+
singleLine: !parseBooleanEnv(process.env['LOG_MULTILINE']),
|
|
108
93
|
};
|
|
109
94
|
const prettyTransport = {
|
|
110
95
|
target: 'pino-pretty',
|
|
@@ -123,7 +108,8 @@ const stdioTransport = {
|
|
|
123
108
|
// would mean that all child loggers created before the telemetry-client is initialized would not have
|
|
124
109
|
// this transport configured. Note that the target is defined as the export in the telemetry-client,
|
|
125
110
|
// since pino will load this transport separately on a worker thread, to minimize disruption to the main loop.
|
|
126
|
-
const otlpEndpoint = process.env
|
|
111
|
+
const otlpEndpoint = process.env['OTEL_EXPORTER_OTLP_LOGS_ENDPOINT'];
|
|
112
|
+
const otlpEnabled = !!otlpEndpoint && !useGcloudObservability;
|
|
127
113
|
const otelOpts = { levels };
|
|
128
114
|
const otelTransport = {
|
|
129
115
|
target: '@aztec/telemetry-client/otel-pino-stream',
|
|
@@ -143,10 +129,10 @@ function makeLogger() {
|
|
|
143
129
|
}
|
|
144
130
|
else {
|
|
145
131
|
// Regular nodejs with transports on worker thread, using pino-pretty for console logging if LOG_JSON
|
|
146
|
-
// is not set, and an optional OTLP transport if the OTLP endpoint is
|
|
132
|
+
// is not set, and an optional OTLP transport if the OTLP endpoint is set.
|
|
147
133
|
const targets = compactArray([
|
|
148
|
-
|
|
149
|
-
|
|
134
|
+
parseBooleanEnv(process.env.LOG_JSON) ? stdioTransport : prettyTransport,
|
|
135
|
+
otlpEnabled ? otelTransport : undefined,
|
|
150
136
|
]);
|
|
151
137
|
return pino(pinoOpts, pino.transport({ targets, levels: levels.values }));
|
|
152
138
|
}
|
|
@@ -157,7 +143,7 @@ logger.verbose({
|
|
|
157
143
|
module: 'logger',
|
|
158
144
|
...logFilters.reduce((accum, [module, level]) => ({ ...accum, [`log.${module}`]: level }), {}),
|
|
159
145
|
}, isNode
|
|
160
|
-
? `Logger initialized with level ${logLevel}` + (
|
|
146
|
+
? `Logger initialized with level ${logLevel}` + (otlpEnabled ? ` with OTLP exporter to ${otlpEndpoint}` : '')
|
|
161
147
|
: `Browser console logger initialized with level ${logLevel}`);
|
|
162
148
|
/**
|
|
163
149
|
* Overwrites the logging stream with a different destination.
|
|
@@ -192,4 +178,4 @@ export function registerLoggingStream(stream) {
|
|
|
192
178
|
function formatErr(msg, err) {
|
|
193
179
|
return err ? `${msg}: ${inspect(err)}` : msg;
|
|
194
180
|
}
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluby1sb2dnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9nL3Bpbm8tbG9nZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDekMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFJcEUsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjO0lBQ3pDLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDN0csTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFzQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbkcsc0ZBQXNGO0lBQ3RGLHdFQUF3RTtJQUN4RSxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQWUsRUFBRSxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FDN0QsY0FBYyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsY0FBYyxDQUFFLElBQWdCLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFdkcsT0FBTztRQUNMLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1FBQ2hCLDJFQUEyRTtRQUMzRSxtRUFBbUU7UUFDbkUsS0FBSyxFQUFFLENBQUMsR0FBVyxFQUFFLEdBQWEsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUM7UUFDaEcsK0NBQStDO1FBQy9DLEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFhLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1FBQ2hHLDhEQUE4RDtRQUM5RCxJQUFJLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDL0Qsd0ZBQXdGO1FBQ3hGLElBQUksRUFBRSxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztRQUMvRCw0RkFBNEY7UUFDNUYsT0FBTyxFQUFFLENBQUMsR0FBVyxFQUFFLElBQWMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDO1FBQ3JFLDBHQUEwRztRQUMxRyxLQUFLLEVBQUUsQ0FBQyxHQUFXLEVBQUUsSUFBYyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUM7UUFDakUseUZBQXlGO1FBQ3pGLEtBQUssRUFBRSxDQUFDLEdBQVcsRUFBRSxJQUFjLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztRQUNqRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQWlCO1FBQ25DLDBEQUEwRDtRQUMxRCxjQUFjLEVBQUUsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO1FBQ3RFLGtDQUFrQztRQUNsQyxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFLRCxNQUFNLGVBQWUsR0FBcUIsRUFBRSxDQUFDO0FBRTdDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUF1QjtJQUN2RCxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxJQUFhO0lBQ25DLE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRSxDQUFDO0FBS0QsTUFBTSxlQUFlLEdBQXFCLEVBQUUsQ0FBQztBQUU3QyxNQUFNLFVBQVUsaUJBQWlCLENBQUMsT0FBdUI7SUFDdkQsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE9BQXVCO0lBQzFELE1BQU0sS0FBSyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0MsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqQixlQUFlLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNuQyxDQUFDO0FBQ0gsQ0FBQztBQUVELGtEQUFrRDtBQUNsRCxTQUFTLGNBQWMsQ0FBQyxNQUF1QyxFQUFFLEtBQWU7SUFDOUUsT0FBTyxPQUFPLE1BQU0sQ0FBQyxjQUFjLEtBQUssVUFBVTtRQUNoRCxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBRUQsOENBQThDO0FBQzlDLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDNUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFFaEYseUNBQXlDO0FBQ3pDLE1BQU0sWUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBRXJDLGtFQUFrRTtBQUNsRSxNQUFNLHNCQUFzQixHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDBCQUEyQyxDQUFDLENBQUMsQ0FBQztBQUN6RyxNQUFNLFFBQVEsR0FBa0Q7SUFDOUQsWUFBWTtJQUNaLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLG1CQUFtQixFQUFFLEtBQUs7SUFDMUIsS0FBSyxFQUFFLFFBQVE7SUFDZixHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Q0FDM0QsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDNUcsTUFBTSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLFlBQVksRUFBRTtDQUNuRCxDQUFDO0FBRUYsa0VBQWtFO0FBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQztBQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDbkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHO0lBQzVCLFdBQVcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxFQUFFLElBQUk7SUFDVixRQUFRLEVBQUUsUUFBUTtJQUNsQixNQUFNLEVBQUUsMkRBQTJEO0lBQ25FLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDdEQsWUFBWSxFQUFFLGdFQUFnRTtJQUM5RSxZQUFZLEVBQUUsb0ZBQW9GO0lBQ2xHLFlBQVksRUFBRSxPQUFnQjtJQUM5QixVQUFVLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFnQyxDQUFDLENBQUM7Q0FDNUUsQ0FBQztBQUVGLE1BQU0sZUFBZSxHQUFnQztJQUNuRCxNQUFNLEVBQUUsYUFBYTtJQUNyQixPQUFPLEVBQUUsY0FBYztJQUN2QixLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRiwrQ0FBK0M7QUFDL0MsTUFBTSxjQUFjLEdBQWdDO0lBQ2xELE1BQU0sRUFBRSxXQUFXO0lBQ25CLE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUU7SUFDM0IsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYscUdBQXFHO0FBQ3JHLHFHQUFxRztBQUNyRyw0R0FBNEc7QUFDNUcsc0dBQXNHO0FBQ3RHLG9HQUFvRztBQUNwRyw4R0FBOEc7QUFDOUcsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBbUQsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztBQUM5RCxNQUFNLFFBQVEsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQzVCLE1BQU0sYUFBYSxHQUFnQztJQUNqRCxNQUFNLEVBQUUsMENBQTBDO0lBQ2xELE9BQU8sRUFBRSxRQUFRO0lBQ2pCLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUNGLFNBQVMsVUFBVTtJQUNqQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWix5QkFBeUI7UUFDekIsT0FBTyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7U0FBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEMsZ0VBQWdFO1FBQ2hFLGdGQUFnRjtRQUNoRixtRkFBbUY7UUFDbkYsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QyxDQUFDO1NBQU0sQ0FBQztRQUNOLHFHQUFxRztRQUNyRywwRUFBMEU7UUFDMUUsTUFBTSxPQUFPLEdBQWtDLFlBQVksQ0FBQztZQUMxRCxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ3hFLFdBQVcsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQ3hDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxNQUFNLEdBQUcsVUFBVSxFQUFFLENBQUM7QUFFNUIsZ0NBQWdDO0FBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQ1o7SUFDRSxNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDLE9BQU8sTUFBTSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztDQUMvRixFQUNELE1BQU07SUFDSixDQUFDLENBQUMsaUNBQWlDLFFBQVEsRUFBRSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RyxDQUFDLENBQUMsaURBQWlELFFBQVEsRUFBRSxDQUNoRSxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQWdCO0lBQ3BELE1BQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBZ0I7SUFDcEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0lBQzlFLE1BQU0sUUFBUSxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDcEQsTUFBTSxXQUFXLEdBQUcsUUFBUTtRQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FDZDtZQUNFLHlGQUF5RjtZQUN6RiwyRUFBMkU7WUFDM0UsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtTQUMzQixFQUNELEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FDMUI7UUFDSCxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ1YsTUFBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDbkQsQ0FBQztBQWNEOzs7OztHQUtHO0FBQ0gsU0FBUyxTQUFTLENBQUMsR0FBVyxFQUFFLEdBQXFCO0lBQ25ELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0FBQy9DLENBQUMifQ==
|
|
@@ -39,9 +39,9 @@ declare const noirPackageConfigSchema: z.ZodObject<{
|
|
|
39
39
|
backend?: string | undefined;
|
|
40
40
|
license?: string | undefined;
|
|
41
41
|
}, {
|
|
42
|
+
description?: string | undefined;
|
|
42
43
|
name?: string | undefined;
|
|
43
44
|
type?: "lib" | "contract" | "bin" | undefined;
|
|
44
|
-
description?: string | undefined;
|
|
45
45
|
entry?: string | undefined;
|
|
46
46
|
authors?: string[] | undefined;
|
|
47
47
|
compiler_version?: string | undefined;
|
|
@@ -87,9 +87,9 @@ declare const noirPackageConfigSchema: z.ZodObject<{
|
|
|
87
87
|
}>;
|
|
88
88
|
}, {
|
|
89
89
|
package: {
|
|
90
|
+
description?: string | undefined;
|
|
90
91
|
name?: string | undefined;
|
|
91
92
|
type?: "lib" | "contract" | "bin" | undefined;
|
|
92
|
-
description?: string | undefined;
|
|
93
93
|
entry?: string | undefined;
|
|
94
94
|
authors?: string[] | undefined;
|
|
95
95
|
compiler_version?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"running-promise.d.ts","sourceRoot":"","sources":["../../src/promise/running-promise.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB;IAR3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,SAAS,CAAqD;gBAG5D,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC9B,MAAM,yCAAkC,EACxC,iBAAiB,SAAQ;IAGnC;;OAEG;IACI,KAAK;
|
|
1
|
+
{"version":3,"file":"running-promise.d.ts","sourceRoot":"","sources":["../../src/promise/running-promise.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,iBAAiB;IAR3B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,kBAAkB,CAA4B;IACtD,OAAO,CAAC,SAAS,CAAqD;gBAG5D,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EAC9B,MAAM,yCAAkC,EACxC,iBAAiB,SAAQ;IAGnC;;OAEG;IACI,KAAK;IA+BZ;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAU3B;;;OAGG;IACI,SAAS;IAIhB;;;OAGG;IACU,OAAO;IAcpB;;;OAGG;IACH,oBAAoB,CAAC,iBAAiB,EAAE,MAAM;CAG/C"}
|
|
@@ -20,6 +20,10 @@ export class RunningPromise {
|
|
|
20
20
|
* Starts the running promise.
|
|
21
21
|
*/
|
|
22
22
|
start() {
|
|
23
|
+
if (this.running) {
|
|
24
|
+
this.logger.warn(`Attempted to start running promise that was already started`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
23
27
|
this.running = true;
|
|
24
28
|
const poll = async () => {
|
|
25
29
|
while (this.running) {
|
|
@@ -48,6 +52,10 @@ export class RunningPromise {
|
|
|
48
52
|
* and waits for the currently executing function to complete.
|
|
49
53
|
*/
|
|
50
54
|
async stop() {
|
|
55
|
+
if (!this.running) {
|
|
56
|
+
this.logger.warn(`Running promise was not started`);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
51
59
|
this.running = false;
|
|
52
60
|
this.interruptibleSleep.interrupt();
|
|
53
61
|
await this.runningPromise;
|
|
@@ -83,4 +91,4 @@ export class RunningPromise {
|
|
|
83
91
|
this.pollingIntervalMS = pollingIntervalMS;
|
|
84
92
|
}
|
|
85
93
|
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
94
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmluZy1wcm9taXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Byb21pc2UvcnVubmluZy1wcm9taXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQTZCLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sY0FBYztJQU16QixZQUNVLEVBQThCLEVBQzlCLFNBQVMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLEVBQ3hDLG9CQUFvQixLQUFLO1FBRnpCLE9BQUUsR0FBRixFQUFFLENBQTRCO1FBQzlCLFdBQU0sR0FBTixNQUFNLENBQWtDO1FBQ3hDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBUTtRQVIzQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLG1CQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLHVCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUM5QyxjQUFTLEdBQTJDLFNBQVMsQ0FBQztJQU1uRSxDQUFDO0lBRUo7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkRBQTZELENBQUMsQ0FBQztZQUNoRixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLE1BQU0sSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDO29CQUNILE1BQU0sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsQixDQUFDO2dCQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7b0JBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3JELENBQUM7Z0JBRUQscUdBQXFHO2dCQUNyRyxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUNqQixJQUFJLENBQUMsU0FBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDN0IsQ0FBQztnQkFFRCxxRUFBcUU7Z0JBQ3JFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDakMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUM5RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQ3BELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUztRQUNkLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBRUQsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixTQUFTLEdBQUcsb0JBQW9CLEVBQVEsQ0FBQztZQUN6QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUNELE1BQU0sU0FBVSxDQUFDLE9BQU8sQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CLENBQUMsaUJBQXlCO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQztJQUM3QyxDQUFDO0NBQ0YifQ==
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export declare class SerialQueue {
|
|
5
5
|
private readonly queue;
|
|
6
6
|
private runningPromise;
|
|
7
|
+
private started;
|
|
7
8
|
/**
|
|
8
9
|
* Initializes the execution of enqueued functions in the serial queue.
|
|
9
10
|
* Functions are executed in the order they were added to the queue, with each function
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serial_queue.d.ts","sourceRoot":"","sources":["../../src/queue/serial_queue.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IACpE,OAAO,CAAC,cAAc,CAAiB;
|
|
1
|
+
{"version":3,"file":"serial_queue.d.ts","sourceRoot":"","sources":["../../src/queue/serial_queue.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA8C;IACpE,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;OAKG;IACI,KAAK;IAQZ;;;;;OAKG;IACI,MAAM;IAIb;;;;;;OAMG;IACI,MAAM;IAKb;;;;;OAKG;IACI,GAAG;IAKV;;;;;OAKG;IACI,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAgB/C;;OAEG;IACU,SAAS;CAGvB"}
|
|
@@ -5,6 +5,7 @@ import { FifoMemoryQueue } from './fifo_memory_queue.js';
|
|
|
5
5
|
export class SerialQueue {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.queue = new FifoMemoryQueue();
|
|
8
|
+
this.started = false;
|
|
8
9
|
}
|
|
9
10
|
/**
|
|
10
11
|
* Initializes the execution of enqueued functions in the serial queue.
|
|
@@ -13,7 +14,11 @@ export class SerialQueue {
|
|
|
13
14
|
* This method should be called once to start processing the queue.
|
|
14
15
|
*/
|
|
15
16
|
start() {
|
|
17
|
+
if (this.started) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
16
20
|
this.runningPromise = this.queue.process(fn => fn());
|
|
21
|
+
this.started = true;
|
|
17
22
|
}
|
|
18
23
|
/**
|
|
19
24
|
* Returns the current number of enqueued functions in the serial queue.
|
|
@@ -74,4 +79,4 @@ export class SerialQueue {
|
|
|
74
79
|
await this.put(async () => { });
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsX3F1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3F1ZXVlL3NlcmlhbF9xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUF4QjtRQUNtQixVQUFLLEdBQUcsSUFBSSxlQUFlLEVBQXVCLENBQUM7UUFFNUQsWUFBTyxHQUFHLEtBQUssQ0FBQztJQTZFMUIsQ0FBQztJQTNFQzs7Ozs7T0FLRztJQUNJLEtBQUs7UUFDVixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLE1BQU07UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLE1BQU07UUFDWCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxHQUFHO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksR0FBRyxDQUFJLEVBQW9CO1FBQ2hDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQztvQkFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDO29CQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2YsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDWixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUztRQUNwQixNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUNqQyxDQUFDO0NBQ0YifQ==
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
3
|
/** Writes the contents specified to the target file if test data generation is enabled. */
|
|
4
4
|
export declare function writeTestData(targetFileFromRepoRoot: string, contents: string | Buffer): void;
|
|
5
|
+
export declare function readTestData(repoPath: string): Buffer;
|
|
5
6
|
/**
|
|
6
7
|
* Looks for a variable assignment in the target file and updates the value, only if test data generation is enabled.
|
|
7
8
|
* Note that a magic inline comment would be a cleaner approach, like `/* TEST-DATA-START *\/` and `/* TEST-DATA-END *\/`,
|
|
@@ -12,7 +13,7 @@ export declare function updateInlineTestData(targetFileFromRepoRoot: string, ite
|
|
|
12
13
|
/**
|
|
13
14
|
* Updates the sample Prover.toml files in noir-projects/noir-protocol-circuits/crates/.
|
|
14
15
|
* @remarks Requires AZTEC_GENERATE_TEST_DATA=1 to be set
|
|
15
|
-
* To re-gen, run 'AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e
|
|
16
|
+
* To re-gen, run 'AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e full.test '
|
|
16
17
|
*/
|
|
17
18
|
export declare function updateProtocolCircuitSampleInputs(circuitName: string, value: string): void;
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/files/index.ts"],"names":[],"mappings":";;AAOA,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,QAStF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAenG;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAMnF"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/testing/files/index.ts"],"names":[],"mappings":";;AAOA,2FAA2F;AAC3F,wBAAgB,aAAa,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,QAStF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAenG;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAMnF"}
|
|
@@ -14,6 +14,10 @@ export function writeTestData(targetFileFromRepoRoot, contents) {
|
|
|
14
14
|
const logger = createConsoleLogger('aztec:testing:test_data');
|
|
15
15
|
logger(`Wrote test data to ${targetFile}`);
|
|
16
16
|
}
|
|
17
|
+
export function readTestData(repoPath) {
|
|
18
|
+
const targetFile = getPathToFile(repoPath);
|
|
19
|
+
return readFileSync(targetFile);
|
|
20
|
+
}
|
|
17
21
|
/**
|
|
18
22
|
* Looks for a variable assignment in the target file and updates the value, only if test data generation is enabled.
|
|
19
23
|
* Note that a magic inline comment would be a cleaner approach, like `/* TEST-DATA-START *\/` and `/* TEST-DATA-END *\/`,
|
|
@@ -38,7 +42,7 @@ export function updateInlineTestData(targetFileFromRepoRoot, itemName, value) {
|
|
|
38
42
|
/**
|
|
39
43
|
* Updates the sample Prover.toml files in noir-projects/noir-protocol-circuits/crates/.
|
|
40
44
|
* @remarks Requires AZTEC_GENERATE_TEST_DATA=1 to be set
|
|
41
|
-
* To re-gen, run 'AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e
|
|
45
|
+
* To re-gen, run 'AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn test:e2e full.test '
|
|
42
46
|
*/
|
|
43
47
|
export function updateProtocolCircuitSampleInputs(circuitName, value) {
|
|
44
48
|
const logger = createConsoleLogger('aztec:testing:test_data');
|
|
@@ -54,4 +58,4 @@ function getPathToFile(targetFileFromRepoRoot) {
|
|
|
54
58
|
}
|
|
55
59
|
return join(repoRoot, targetFileFromRepoRoot);
|
|
56
60
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9maWxlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCwyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxzQkFBOEIsRUFBRSxRQUF5QjtJQUNyRixJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkYsYUFBYSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sQ0FBQyxzQkFBc0IsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFnQjtJQUMzQyxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLHNCQUE4QixFQUFFLFFBQWdCLEVBQUUsS0FBYTtJQUNsRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM5RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUN6RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sUUFBUSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixRQUFRLGlCQUFpQixVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLFFBQVEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLGFBQWEsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLHdCQUF3QixVQUFVLFFBQVEsUUFBUSxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUNBQWlDLENBQUMsV0FBbUIsRUFBRSxLQUFhO0lBQ2xGLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDOUQsTUFBTSxzQkFBc0IsR0FBRywrQ0FBK0MsV0FBVyxjQUFjLENBQUM7SUFDeEcsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsYUFBYSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNqQyxNQUFNLENBQUMsd0JBQXdCLFVBQVUsUUFBUSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxzQkFBOEI7SUFDbkQsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLENBQUM7SUFDckYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUNoRCxDQUFDIn0=
|
package/dest/trees/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
export * from './
|
|
3
|
+
export * from './unbalanced_merkle_tree.js';
|
|
4
|
+
export * from './unbalanced_tree_store.js';
|
|
4
5
|
/**
|
|
5
6
|
* A leaf of an indexed merkle tree.
|
|
6
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trees/index.ts"],"names":[],"mappings":";;AAAA,cAAc,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trees/index.ts"],"names":[],"mappings":";;AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAE3C;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IACnB;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,eAAe,CAAC;CACrD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,IAAI,eAAe,CAAC;IAC1B;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAC;IACnB;;OAEG;IACH,YAAY,IAAI,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAwB,SAAQ,gBAAgB;IAC/D,UAAU,IAAI,MAAM,CAAC;IACrB;;OAEG;IACH,YAAY,IAAI,MAAM,CAAC;CACxB"}
|
package/dest/trees/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
|
|
1
|
+
export * from './unbalanced_merkle_tree.js';
|
|
2
|
+
export * from './unbalanced_tree_store.js';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJlZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDRCQUE0QixDQUFDIn0=
|
|
@@ -4,10 +4,14 @@ import { sha256Trunc } from '@aztec/foundation/crypto';
|
|
|
4
4
|
/**
|
|
5
5
|
* Computes the merkle root for an unbalanced tree.
|
|
6
6
|
*
|
|
7
|
-
* @dev Adapted from
|
|
7
|
+
* @dev Adapted from unbalanced_tree.ts.
|
|
8
8
|
* Calculates the tree upwards layer by layer until we reach the root.
|
|
9
9
|
* The L1 calculation instead computes the tree from right to left (slightly cheaper gas).
|
|
10
10
|
* TODO: A more thorough investigation of which method is cheaper, then use that method everywhere.
|
|
11
11
|
*/
|
|
12
12
|
export declare function computeUnbalancedMerkleRoot(leaves: Buffer[], emptyLeaf?: Buffer, hasher?: typeof sha256Trunc): Buffer;
|
|
13
|
-
|
|
13
|
+
export declare function findLeafLevelAndIndex(numLeaves: number, leafIndex: number): {
|
|
14
|
+
level: number;
|
|
15
|
+
indexAtLevel: number;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=unbalanced_merkle_tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unbalanced_merkle_tree.d.ts","sourceRoot":"","sources":["../../src/trees/unbalanced_merkle_tree.ts"],"names":[],"mappings":";;AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,qBAAc,GAAG,MAAM,CAwC9G;AAgDD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;EAGzE"}
|
|
@@ -3,7 +3,7 @@ import { sha256Trunc } from '@aztec/foundation/crypto';
|
|
|
3
3
|
/**
|
|
4
4
|
* Computes the merkle root for an unbalanced tree.
|
|
5
5
|
*
|
|
6
|
-
* @dev Adapted from
|
|
6
|
+
* @dev Adapted from unbalanced_tree.ts.
|
|
7
7
|
* Calculates the tree upwards layer by layer until we reach the root.
|
|
8
8
|
* The L1 calculation instead computes the tree from right to left (slightly cheaper gas).
|
|
9
9
|
* TODO: A more thorough investigation of which method is cheaper, then use that method everywhere.
|
|
@@ -49,4 +49,42 @@ export function computeUnbalancedMerkleRoot(leaves, emptyLeaf, hasher = sha256Tr
|
|
|
49
49
|
// return the root
|
|
50
50
|
return thisLayer[0];
|
|
51
51
|
}
|
|
52
|
-
|
|
52
|
+
function getMaxBalancedTreeDepth(numLeaves) {
|
|
53
|
+
return Math.floor(Math.log2(numLeaves));
|
|
54
|
+
}
|
|
55
|
+
function getMaxUnbalancedTreeDepth(numLeaves) {
|
|
56
|
+
return Math.ceil(Math.log2(numLeaves));
|
|
57
|
+
}
|
|
58
|
+
function findPosition(rootLevel, leafLevel, numLeaves, indexOffset, targetIndex) {
|
|
59
|
+
if (numLeaves <= 1) {
|
|
60
|
+
// Single leaf.
|
|
61
|
+
return { level: rootLevel, indexAtLevel: indexOffset };
|
|
62
|
+
}
|
|
63
|
+
// The largest balanced tree that can be created with the given number of leaves.
|
|
64
|
+
const maxBalancedTreeDepth = getMaxBalancedTreeDepth(numLeaves);
|
|
65
|
+
const numBalancedLeaves = 2 ** maxBalancedTreeDepth;
|
|
66
|
+
const numRemainingLeaves = numLeaves - numBalancedLeaves;
|
|
67
|
+
if (targetIndex < numBalancedLeaves) {
|
|
68
|
+
// Target is in the balanced tree.
|
|
69
|
+
// - If numRemainingLeaves is 0: this balanced tree is grown from the current root.
|
|
70
|
+
// - If numRemainingLeaves is not 0: the remaining leaves will form another tree, which will become the right child of the root.
|
|
71
|
+
// And the balanced tree will be the left child of the root.
|
|
72
|
+
// There will be an extra level between the root of the balanced tree and the current root.
|
|
73
|
+
const extraLevel = numRemainingLeaves ? 1 : 0;
|
|
74
|
+
return { level: rootLevel + maxBalancedTreeDepth + extraLevel, indexAtLevel: indexOffset + targetIndex };
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
// Target is in the right branch.
|
|
78
|
+
const rightBranchMaxLevel = getMaxUnbalancedTreeDepth(numRemainingLeaves);
|
|
79
|
+
const shiftedUp = leafLevel - rootLevel - rightBranchMaxLevel - 1;
|
|
80
|
+
const nextLeafLevel = leafLevel - shiftedUp;
|
|
81
|
+
const newIndexOffset = (indexOffset + numBalancedLeaves) >> shiftedUp;
|
|
82
|
+
const shiftedTargetIndex = targetIndex - numBalancedLeaves;
|
|
83
|
+
return findPosition(rootLevel + 1, nextLeafLevel, numRemainingLeaves, newIndexOffset, shiftedTargetIndex);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function findLeafLevelAndIndex(numLeaves, leafIndex) {
|
|
87
|
+
const maxLevel = getMaxUnbalancedTreeDepth(numLeaves);
|
|
88
|
+
return findPosition(0, maxLevel, numLeaves, 0, leafIndex);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iYWxhbmNlZF9tZXJrbGVfdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmVlcy91bmJhbGFuY2VkX21lcmtsZV90cmVlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxNQUFnQixFQUFFLFNBQWtCLEVBQUUsTUFBTSxHQUFHLFdBQVc7SUFDcEcsa0JBQWtCO0lBQ2xCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN0QixJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7UUFDMUUsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsR0FDM0IsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RywwREFBMEQ7SUFDMUQs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
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface TreeNodeLocation {
|
|
2
|
+
level: number;
|
|
3
|
+
index: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class UnbalancedTreeStore<T> {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(numLeaves: number);
|
|
8
|
+
setLeaf(leafIndex: number, value: T): TreeNodeLocation;
|
|
9
|
+
setNode({ level, index }: TreeNodeLocation, value: T): void;
|
|
10
|
+
getParentLocation({ level, index }: TreeNodeLocation): TreeNodeLocation;
|
|
11
|
+
getSiblingLocation({ level, index }: TreeNodeLocation): TreeNodeLocation;
|
|
12
|
+
getChildLocations({ level, index }: TreeNodeLocation): [TreeNodeLocation, TreeNodeLocation];
|
|
13
|
+
getLeaf(leafIndex: number): T | undefined;
|
|
14
|
+
getNode(location: TreeNodeLocation): T | undefined;
|
|
15
|
+
getParent(location: TreeNodeLocation): T | undefined;
|
|
16
|
+
getSibling(location: TreeNodeLocation): T | undefined;
|
|
17
|
+
getChildren(location: TreeNodeLocation): [T | undefined, T | undefined];
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=unbalanced_tree_store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unbalanced_tree_store.d.ts","sourceRoot":"","sources":["../../src/trees/unbalanced_tree_store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAOD,qBAAa,mBAAmB,CAAC,CAAC;;gBAIpB,SAAS,EAAE,MAAM;IAI7B,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB;IAiBtD,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAWpD,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,gBAAgB;IAQvE,kBAAkB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,gBAAgB;IAQxE,iBAAiB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,gBAAgB,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAM3F,OAAO,CAAC,SAAS,EAAE,MAAM;IASzB,OAAO,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,GAAG,SAAS;IAIlD,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,GAAG,SAAS;IAKpD,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,GAAG,SAAS;IAKrD,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,SAAS,CAAC;CAQxE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
var _UnbalancedTreeStore_instances, _UnbalancedTreeStore_nodeMapping, _UnbalancedTreeStore_numLeaves, _UnbalancedTreeStore_getKey;
|
|
2
|
+
import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
+
import { findLeafLevelAndIndex } from './unbalanced_merkle_tree.js';
|
|
4
|
+
export class UnbalancedTreeStore {
|
|
5
|
+
constructor(numLeaves) {
|
|
6
|
+
_UnbalancedTreeStore_instances.add(this);
|
|
7
|
+
_UnbalancedTreeStore_nodeMapping.set(this, new Map());
|
|
8
|
+
_UnbalancedTreeStore_numLeaves.set(this, void 0);
|
|
9
|
+
__classPrivateFieldSet(this, _UnbalancedTreeStore_numLeaves, numLeaves, "f");
|
|
10
|
+
}
|
|
11
|
+
setLeaf(leafIndex, value) {
|
|
12
|
+
if (leafIndex >= __classPrivateFieldGet(this, _UnbalancedTreeStore_numLeaves, "f")) {
|
|
13
|
+
throw new Error(`Expected at most ${__classPrivateFieldGet(this, _UnbalancedTreeStore_numLeaves, "f")} leaves. Received a leaf at index ${leafIndex}.`);
|
|
14
|
+
}
|
|
15
|
+
const { level, indexAtLevel } = findLeafLevelAndIndex(__classPrivateFieldGet(this, _UnbalancedTreeStore_numLeaves, "f"), leafIndex);
|
|
16
|
+
const location = {
|
|
17
|
+
level,
|
|
18
|
+
index: indexAtLevel,
|
|
19
|
+
};
|
|
20
|
+
__classPrivateFieldGet(this, _UnbalancedTreeStore_nodeMapping, "f").set(__classPrivateFieldGet(this, _UnbalancedTreeStore_instances, "m", _UnbalancedTreeStore_getKey).call(this, location), {
|
|
21
|
+
location,
|
|
22
|
+
value,
|
|
23
|
+
});
|
|
24
|
+
return location;
|
|
25
|
+
}
|
|
26
|
+
setNode({ level, index }, value) {
|
|
27
|
+
const location = {
|
|
28
|
+
level,
|
|
29
|
+
index,
|
|
30
|
+
};
|
|
31
|
+
__classPrivateFieldGet(this, _UnbalancedTreeStore_nodeMapping, "f").set(__classPrivateFieldGet(this, _UnbalancedTreeStore_instances, "m", _UnbalancedTreeStore_getKey).call(this, location), {
|
|
32
|
+
location,
|
|
33
|
+
value,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
getParentLocation({ level, index }) {
|
|
37
|
+
if (level === 0) {
|
|
38
|
+
throw new Error('Tree root does not have a parent.');
|
|
39
|
+
}
|
|
40
|
+
return { level: level - 1, index: Math.floor(index / 2) };
|
|
41
|
+
}
|
|
42
|
+
getSiblingLocation({ level, index }) {
|
|
43
|
+
if (level === 0) {
|
|
44
|
+
throw new Error('Tree root does not have a sibling.');
|
|
45
|
+
}
|
|
46
|
+
return { level, index: index % 2 ? index - 1 : index + 1 };
|
|
47
|
+
}
|
|
48
|
+
getChildLocations({ level, index }) {
|
|
49
|
+
const left = { level: level + 1, index: index * 2 };
|
|
50
|
+
const right = { level: level + 1, index: index * 2 + 1 };
|
|
51
|
+
return [left, right];
|
|
52
|
+
}
|
|
53
|
+
getLeaf(leafIndex) {
|
|
54
|
+
const { level, indexAtLevel } = findLeafLevelAndIndex(__classPrivateFieldGet(this, _UnbalancedTreeStore_numLeaves, "f"), leafIndex);
|
|
55
|
+
const location = {
|
|
56
|
+
level,
|
|
57
|
+
index: indexAtLevel,
|
|
58
|
+
};
|
|
59
|
+
return this.getNode(location);
|
|
60
|
+
}
|
|
61
|
+
getNode(location) {
|
|
62
|
+
return __classPrivateFieldGet(this, _UnbalancedTreeStore_nodeMapping, "f").get(__classPrivateFieldGet(this, _UnbalancedTreeStore_instances, "m", _UnbalancedTreeStore_getKey).call(this, location))?.value;
|
|
63
|
+
}
|
|
64
|
+
getParent(location) {
|
|
65
|
+
const parentLocation = this.getParentLocation(location);
|
|
66
|
+
return this.getNode(parentLocation);
|
|
67
|
+
}
|
|
68
|
+
getSibling(location) {
|
|
69
|
+
const siblingLocation = this.getSiblingLocation(location);
|
|
70
|
+
return this.getNode(siblingLocation);
|
|
71
|
+
}
|
|
72
|
+
getChildren(location) {
|
|
73
|
+
const [left, right] = this.getChildLocations(location);
|
|
74
|
+
return [this.getNode(left), this.getNode(right)];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
_UnbalancedTreeStore_nodeMapping = new WeakMap(), _UnbalancedTreeStore_numLeaves = new WeakMap(), _UnbalancedTreeStore_instances = new WeakSet(), _UnbalancedTreeStore_getKey = function _UnbalancedTreeStore_getKey(location) {
|
|
78
|
+
return `${location.level}-${location.index}`;
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5iYWxhbmNlZF90cmVlX3N0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyZWVzL3VuYmFsYW5jZWRfdHJlZV9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBWXBFLE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBWSxTQUFpQjs7UUFIN0IsMkNBQXlDLElBQUksR0FBRyxFQUFFLEVBQUM7UUFDMUMsaURBQW1CO1FBRzFCLHVCQUFBLElBQUksa0NBQWMsU0FBUyxNQUFBLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU8sQ0FBQyxTQUFpQixFQUFFLEtBQVE7UUFDakMsSUFBSSxTQUFTLElBQUksdUJBQUEsSUFBSSxzQ0FBVyxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsdUJBQUEsSUFBSSxzQ0FBVyxxQ0FBcUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUN4RyxDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyx1QkFBQSxJQUFJLHNDQUFXLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEYsTUFBTSxRQUFRLEdBQUc7WUFDZixLQUFLO1lBQ0wsS0FBSyxFQUFFLFlBQVk7U0FDcEIsQ0FBQztRQUNGLHVCQUFBLElBQUksd0NBQWEsQ0FBQyxHQUFHLENBQUMsdUJBQUEsSUFBSSxtRUFBUSxNQUFaLElBQUksRUFBUyxRQUFRLENBQUMsRUFBRTtZQUM1QyxRQUFRO1lBQ1IsS0FBSztTQUNOLENBQUMsQ0FBQztRQUNILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFvQixFQUFFLEtBQVE7UUFDbEQsTUFBTSxRQUFRLEdBQUc7WUFDZixLQUFLO1lBQ0wsS0FBSztTQUNOLENBQUM7UUFDRix1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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/foundation",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.71.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dest/index.js",
|
|
6
6
|
"types": "./dest/index.d.ts",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
]
|
|
103
103
|
},
|
|
104
104
|
"dependencies": {
|
|
105
|
-
"@aztec/bb.js": "0.
|
|
105
|
+
"@aztec/bb.js": "0.71.0",
|
|
106
106
|
"@koa/cors": "^5.0.0",
|
|
107
107
|
"@noble/curves": "^1.2.0",
|
|
108
108
|
"bn.js": "^5.2.1",
|
package/src/abi/note_selector.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { toBigIntBE } from '../bigint-buffer/index.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { randomInt } from '../crypto/index.js';
|
|
3
|
+
import { Fr } from '../fields/fields.js';
|
|
4
4
|
import { hexSchemaFor } from '../schemas/utils.js';
|
|
5
5
|
import { BufferReader } from '../serialize/buffer_reader.js';
|
|
6
6
|
import { TypeRegistry } from '../serialize/type_registry.js';
|
|
@@ -14,7 +14,10 @@ export interface NoteSelector {
|
|
|
14
14
|
_branding: 'NoteSelector';
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* A note selector is a 7 bit long value that identifies a note type within a contract.
|
|
19
|
+
* TODO(#10952): Encoding of note type id can be reduced to 7 bits.
|
|
20
|
+
*/
|
|
18
21
|
export class NoteSelector extends Selector {
|
|
19
22
|
/**
|
|
20
23
|
* Deserializes from a buffer or reader, corresponding to a write in cpp.
|
|
@@ -24,6 +27,9 @@ export class NoteSelector extends Selector {
|
|
|
24
27
|
static fromBuffer(buffer: Buffer | BufferReader) {
|
|
25
28
|
const reader = BufferReader.asReader(buffer);
|
|
26
29
|
const value = Number(toBigIntBE(reader.readBytes(Selector.SIZE)));
|
|
30
|
+
if (value >= 1 << 7) {
|
|
31
|
+
throw new Error(`Invalid note selector: ${value}`);
|
|
32
|
+
}
|
|
27
33
|
return new NoteSelector(value);
|
|
28
34
|
}
|
|
29
35
|
|
|
@@ -55,7 +61,8 @@ export class NoteSelector extends Selector {
|
|
|
55
61
|
* @returns A random selector.
|
|
56
62
|
*/
|
|
57
63
|
static random() {
|
|
58
|
-
|
|
64
|
+
const value = randomInt(1 << 7);
|
|
65
|
+
return NoteSelector.fromField(new Fr(value));
|
|
59
66
|
}
|
|
60
67
|
|
|
61
68
|
toJSON() {
|