@aztec/foundation 0.71.0 → 0.72.1
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/decoder.d.ts +1 -1
- package/dest/abi/decoder.d.ts.map +1 -1
- package/dest/abi/decoder.js +11 -2
- package/dest/abi/encoder.d.ts.map +1 -1
- package/dest/abi/encoder.js +12 -2
- package/dest/abi/event_selector.d.ts +1 -2
- package/dest/abi/event_selector.d.ts.map +1 -1
- package/dest/abi/event_selector.js +2 -3
- package/dest/abi/function_selector.d.ts +1 -2
- package/dest/abi/function_selector.d.ts.map +1 -1
- package/dest/abi/function_selector.js +2 -3
- package/dest/abi/index.d.ts +1 -0
- package/dest/abi/index.d.ts.map +1 -1
- package/dest/abi/index.js +2 -1
- package/dest/abi/u128.d.ts +13 -0
- package/dest/abi/u128.d.ts.map +1 -0
- package/dest/abi/u128.js +58 -0
- package/dest/abi/utils.d.ts +5 -0
- package/dest/abi/utils.d.ts.map +1 -1
- package/dest/abi/utils.js +8 -1
- package/dest/array/array.d.ts +8 -0
- package/dest/array/array.d.ts.map +1 -1
- package/dest/array/array.js +13 -1
- package/dest/aztec-address/index.d.ts +3 -3
- package/dest/aztec-address/index.d.ts.map +1 -1
- package/dest/aztec-address/index.js +5 -5
- package/dest/collection/array.d.ts +7 -0
- package/dest/collection/array.d.ts.map +1 -1
- package/dest/collection/array.js +13 -1
- package/dest/config/env_var.d.ts +1 -1
- package/dest/config/env_var.d.ts.map +1 -1
- package/dest/fields/fields.d.ts +10 -1
- package/dest/fields/fields.d.ts.map +1 -1
- package/dest/fields/fields.js +19 -10
- package/dest/fields/point.d.ts +4 -4
- package/dest/fields/point.d.ts.map +1 -1
- package/dest/fields/point.js +5 -5
- 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 +7 -7
- package/dest/json-rpc/client/safe_json_rpc_client.d.ts.map +1 -1
- package/dest/json-rpc/client/safe_json_rpc_client.js +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts +17 -5
- package/dest/json-rpc/server/safe_json_rpc_server.d.ts.map +1 -1
- package/dest/json-rpc/server/safe_json_rpc_server.js +16 -9
- package/dest/json-rpc/server/telemetry.d.ts +2 -0
- package/dest/json-rpc/server/telemetry.d.ts.map +1 -0
- package/dest/json-rpc/server/telemetry.js +2 -0
- package/dest/testing/files/index.d.ts +1 -1
- package/dest/testing/files/index.d.ts.map +1 -1
- package/dest/testing/files/index.js +3 -3
- package/dest/timer/timeout.js +2 -2
- package/package.json +3 -3
- package/src/abi/decoder.ts +11 -2
- package/src/abi/encoder.ts +11 -1
- package/src/abi/event_selector.ts +1 -2
- package/src/abi/function_selector.ts +1 -2
- package/src/abi/index.ts +1 -0
- package/src/abi/u128.ts +71 -0
- package/src/abi/utils.ts +8 -0
- package/src/array/array.ts +15 -0
- package/src/aztec-address/index.ts +5 -5
- package/src/collection/array.ts +15 -0
- package/src/config/env_var.ts +1 -1
- package/src/fields/fields.ts +19 -10
- package/src/fields/point.ts +6 -6
- package/src/json-rpc/client/fetch.ts +14 -6
- package/src/json-rpc/client/safe_json_rpc_client.ts +0 -1
- package/src/json-rpc/server/safe_json_rpc_server.ts +27 -11
- package/src/json-rpc/server/telemetry.ts +0 -0
- package/src/testing/files/index.ts +2 -2
- package/src/timer/timeout.ts +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import cors from '@koa/cors';
|
|
2
2
|
import http from 'http';
|
|
3
|
-
import Koa from 'koa';
|
|
3
|
+
import { default as Koa } from 'koa';
|
|
4
4
|
import bodyParser from 'koa-bodyparser';
|
|
5
5
|
import compress from 'koa-compress';
|
|
6
6
|
import Router from 'koa-router';
|
|
@@ -22,11 +22,14 @@ export class SafeJsonRpcServer {
|
|
|
22
22
|
http200OnError = false,
|
|
23
23
|
/** Health check function */
|
|
24
24
|
healthCheck = () => true,
|
|
25
|
+
/** Additional middlewares */
|
|
26
|
+
extraMiddlewares = [],
|
|
25
27
|
/** Logger */
|
|
26
28
|
log = createLogger('json-rpc:server')) {
|
|
27
29
|
this.proxy = proxy;
|
|
28
30
|
this.http200OnError = http200OnError;
|
|
29
31
|
this.healthCheck = healthCheck;
|
|
32
|
+
this.extraMiddlewares = extraMiddlewares;
|
|
30
33
|
this.log = log;
|
|
31
34
|
}
|
|
32
35
|
isHealthy() {
|
|
@@ -86,6 +89,9 @@ export class SafeJsonRpcServer {
|
|
|
86
89
|
});
|
|
87
90
|
app.use(compress({ br: false }));
|
|
88
91
|
app.use(jsonResponse);
|
|
92
|
+
for (const middleware of this.extraMiddlewares) {
|
|
93
|
+
app.use(middleware);
|
|
94
|
+
}
|
|
89
95
|
app.use(exceptionHandler);
|
|
90
96
|
app.use(bodyParser({ jsonLimit: '50mb', enableTypes: ['json'], detectJSON: () => true }));
|
|
91
97
|
app.use(cors());
|
|
@@ -106,7 +112,9 @@ export class SafeJsonRpcServer {
|
|
|
106
112
|
// Fail if not a registered function in the proxy
|
|
107
113
|
if (typeof method !== 'string' || method === 'constructor' || !this.proxy.hasMethod(method)) {
|
|
108
114
|
ctx.status = 400;
|
|
109
|
-
|
|
115
|
+
const code = -32601;
|
|
116
|
+
const message = `Method not found: ${method}`;
|
|
117
|
+
ctx.body = { jsonrpc, id, error: { code, message } };
|
|
110
118
|
}
|
|
111
119
|
else {
|
|
112
120
|
ctx.status = 200;
|
|
@@ -233,18 +241,17 @@ function makeAggregateHealthcheck(namedHandlers, log) {
|
|
|
233
241
|
* @returns A single JsonRpcServer with namespaced methods.
|
|
234
242
|
*/
|
|
235
243
|
export function createNamespacedSafeJsonRpcServer(handlers, options = {
|
|
236
|
-
http200OnError: false,
|
|
237
244
|
log: createLogger('json-rpc:server'),
|
|
238
245
|
}) {
|
|
239
|
-
const { http200OnError, log } = options;
|
|
246
|
+
const { middlewares, http200OnError, log } = options;
|
|
240
247
|
const proxy = new NamespacedSafeJsonProxy(handlers);
|
|
241
248
|
const healthCheck = makeAggregateHealthcheck(handlers, log);
|
|
242
|
-
return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, log);
|
|
249
|
+
return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, middlewares, log);
|
|
243
250
|
}
|
|
244
|
-
export function createSafeJsonRpcServer(handler, schema, options = {
|
|
245
|
-
const { http200OnError, log, healthCheck } = options;
|
|
251
|
+
export function createSafeJsonRpcServer(handler, schema, options = {}) {
|
|
252
|
+
const { http200OnError, log, healthCheck, middlewares: extraMiddlewares } = options;
|
|
246
253
|
const proxy = new SafeJsonProxy(handler, schema);
|
|
247
|
-
return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, log);
|
|
254
|
+
return new SafeJsonRpcServer(proxy, http200OnError, healthCheck, extraMiddlewares, log);
|
|
248
255
|
}
|
|
249
256
|
/**
|
|
250
257
|
* Creates a router for handling a plain status request that will return 200 status when running.
|
|
@@ -290,4 +297,4 @@ export async function startHttpRpcServer(rpcServer, options = {}) {
|
|
|
290
297
|
const port = httpServer.address().port;
|
|
291
298
|
return Object.assign(httpServer, { port });
|
|
292
299
|
}
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9qc29uX3JwY19zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvc2VydmVyL3NhZmVfanNvbl9ycGNfc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ3RCLE9BQU8sVUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sUUFBUSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFFaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUUvQixPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFxQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO0lBQ0UsZ0RBQWdEO0lBQy9CLEtBQVk7SUFDN0I7OztPQUdHO0lBQ0ssaUJBQWlCLEtBQUs7SUFDOUIsNEJBQTRCO0lBQ1gsY0FBNkIsR0FBRyxFQUFFLENBQUMsSUFBSTtJQUN4RCxhQUFhO0lBQ0wsTUFBTSxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFUNUIsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUtyQixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtRQUViLGdCQUFXLEdBQVgsV0FB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
|
|
300
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2FmZV9qc29uX3JwY19zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvanNvbi1ycGMvc2VydmVyL3NhZmVfanNvbl9ycGNfc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUErQixPQUFPLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ2xFLE9BQU8sVUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sUUFBUSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLE1BQU0sTUFBTSxZQUFZLENBQUM7QUFFaEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEtBQUssQ0FBQztBQUUvQixPQUFPLEVBQWUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFxQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVd4QyxNQUFNLE9BQU8saUJBQWlCO0lBTzVCO0lBQ0UsZ0RBQWdEO0lBQy9CLEtBQVk7SUFDN0I7OztPQUdHO0lBQ0ssaUJBQWlCLEtBQUs7SUFDOUIsNEJBQTRCO0lBQ1gsY0FBNkIsR0FBRyxFQUFFLENBQUMsSUFBSTtJQUN4RCw2QkFBNkI7SUFDckIsbUJBQTZDLEVBQUU7SUFDdkQsYUFBYTtJQUNMLE1BQU0sWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBWDVCLFVBQUssR0FBTCxLQUFL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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/json-rpc/server/telemetry.ts"],"names":[],"mappings":""}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
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
|
-
export declare function writeTestData(targetFileFromRepoRoot: string, contents: string | Buffer): void;
|
|
4
|
+
export declare function writeTestData(targetFileFromRepoRoot: string, contents: string | Buffer, raw?: boolean): void;
|
|
5
5
|
export declare function readTestData(repoPath: string): Buffer;
|
|
6
6
|
/**
|
|
7
7
|
* Looks for a variable assignment in the target file and updates the value, only if test data generation is enabled.
|
|
@@ -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,
|
|
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,EAAE,GAAG,GAAE,OAAe,QAS5G;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"}
|
|
@@ -4,12 +4,12 @@ import { createConsoleLogger } from '../../log/console.js';
|
|
|
4
4
|
import { fileURLToPath } from '../../url/index.js';
|
|
5
5
|
import { isGenerateTestDataEnabled } from '../test_data.js';
|
|
6
6
|
/** Writes the contents specified to the target file if test data generation is enabled. */
|
|
7
|
-
export function writeTestData(targetFileFromRepoRoot, contents) {
|
|
7
|
+
export function writeTestData(targetFileFromRepoRoot, contents, raw = false) {
|
|
8
8
|
if (!isGenerateTestDataEnabled()) {
|
|
9
9
|
return;
|
|
10
10
|
}
|
|
11
11
|
const targetFile = getPathToFile(targetFileFromRepoRoot);
|
|
12
|
-
const toWrite = typeof contents === 'string' ? contents : contents.toString('hex');
|
|
12
|
+
const toWrite = raw ? contents : typeof contents === 'string' ? contents : contents.toString('hex');
|
|
13
13
|
writeFileSync(targetFile, toWrite);
|
|
14
14
|
const logger = createConsoleLogger('aztec:testing:test_data');
|
|
15
15
|
logger(`Wrote test data to ${targetFile}`);
|
|
@@ -58,4 +58,4 @@ function getPathToFile(targetFileFromRepoRoot) {
|
|
|
58
58
|
}
|
|
59
59
|
return join(repoRoot, targetFileFromRepoRoot);
|
|
60
60
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdGVzdGluZy9maWxlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDN0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU1RCwyRkFBMkY7QUFDM0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxzQkFBOEIsRUFBRSxRQUF5QixFQUFFLE1BQWUsS0FBSztJQUMzRyxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLGFBQWEsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM5RCxNQUFNLENBQUMsc0JBQXNCLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsUUFBZ0I7SUFDM0MsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxzQkFBOEIsRUFBRSxRQUFnQixFQUFFLEtBQWE7SUFDbEcsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztRQUNqQyxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDOUQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDekQsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLFFBQVEsZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsUUFBUSxpQkFBaUIsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxRQUFRLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNsRixhQUFhLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyx3QkFBd0IsVUFBVSxRQUFRLFFBQVEsT0FBTyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlDQUFpQyxDQUFDLFdBQW1CLEVBQUUsS0FBYTtJQUNsRixNQUFNLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzlELE1BQU0sc0JBQXNCLEdBQUcsK0NBQStDLFdBQVcsY0FBYyxDQUFDO0lBQ3hHLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pELGFBQWEsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakMsTUFBTSxDQUFDLHdCQUF3QixVQUFVLFFBQVEsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsc0JBQThCO0lBQ25ELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3JGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDaEQsQ0FBQyJ9
|
package/dest/timer/timeout.js
CHANGED
|
@@ -25,7 +25,7 @@ export class TimeoutTask {
|
|
|
25
25
|
* @throws An error with a message indicating the function was interrupted due to exceeding the specified timeout.
|
|
26
26
|
*/
|
|
27
27
|
async exec() {
|
|
28
|
-
const interruptTimeout =
|
|
28
|
+
const interruptTimeout = setTimeout(this.interrupt, this.timeout);
|
|
29
29
|
try {
|
|
30
30
|
const start = Date.now();
|
|
31
31
|
const result = await Promise.race([this.fn(), this.interruptPromise]);
|
|
@@ -63,4 +63,4 @@ export async function executeTimeout(fn, timeout, errorOrFnName) {
|
|
|
63
63
|
const task = new TimeoutTask(fn, timeout, errorFn);
|
|
64
64
|
return await task.exec();
|
|
65
65
|
}
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90aW1lci90aW1lb3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVqRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sV0FBVztJQUt0QixZQUFvQixFQUFvQixFQUFVLE9BQWUsRUFBRSxPQUFrQjtRQUFqRSxPQUFFLEdBQUYsRUFBRSxDQUFrQjtRQUFVLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFIekQsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUNyQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBR3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLE9BQU8sQ0FBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDcEMsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGNBQWMsQ0FBSSxFQUFvQixFQUFFLE9BQWUsRUFBRSxhQUFvQztJQUNqSCxNQUFNLE9BQU8sR0FDWCxPQUFPLGFBQWEsS0FBSyxVQUFVO1FBQ2pDLENBQUMsQ0FBQyxhQUFhO1FBQ2YsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLG1CQUFtQixhQUFhLElBQUksVUFBVSxVQUFVLE9BQU8sS0FBSyxDQUFDLENBQUM7SUFDbkcsTUFBTSxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxPQUFPLE1BQU0sSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNCLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/foundation",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.72.1",
|
|
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.72.1",
|
|
106
106
|
"@koa/cors": "^5.0.0",
|
|
107
107
|
"@noble/curves": "^1.2.0",
|
|
108
108
|
"bn.js": "^5.2.1",
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"supertest": "^6.3.3",
|
|
161
161
|
"ts-node": "^10.9.1",
|
|
162
162
|
"typescript": "^5.0.4",
|
|
163
|
-
"viem": "
|
|
163
|
+
"viem": "2.22.8"
|
|
164
164
|
},
|
|
165
165
|
"files": [
|
|
166
166
|
"dest",
|
package/src/abi/decoder.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AztecAddress } from '../aztec-address/index.js';
|
|
2
|
-
import {
|
|
2
|
+
import { Fr } from '../fields/index.js';
|
|
3
3
|
import { type ABIParameter, type ABIVariable, type AbiType } from './abi.js';
|
|
4
|
-
import {
|
|
4
|
+
import { U128 } from './u128.js';
|
|
5
|
+
import { isAztecAddressStruct, isU128Struct, parseSignedInt } from './utils.js';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* The type of our decoded ABI.
|
|
@@ -43,6 +44,14 @@ class AbiDecoder {
|
|
|
43
44
|
return array;
|
|
44
45
|
}
|
|
45
46
|
case 'struct': {
|
|
47
|
+
if (isU128Struct(abiType)) {
|
|
48
|
+
const fields = [
|
|
49
|
+
new Fr(this.decodeNext({ kind: 'field' }) as bigint),
|
|
50
|
+
new Fr(this.decodeNext({ kind: 'field' }) as bigint),
|
|
51
|
+
];
|
|
52
|
+
return U128.fromFields(fields).toInteger();
|
|
53
|
+
}
|
|
54
|
+
|
|
46
55
|
const struct: { [key: string]: AbiDecoded } = {};
|
|
47
56
|
if (isAztecAddressStruct(abiType)) {
|
|
48
57
|
return new AztecAddress(this.getNextField().toBuffer());
|
package/src/abi/encoder.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Fr } from '../fields/index.js';
|
|
2
2
|
import { type AbiType, type FunctionAbi } from './abi.js';
|
|
3
|
-
import {
|
|
3
|
+
import { U128 } from './u128.js';
|
|
4
|
+
import { isAddressStruct, isFunctionSelectorStruct, isU128Struct, isWrappedFieldStruct } from './utils.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Encodes arguments for a function call.
|
|
@@ -105,6 +106,15 @@ class ArgumentEncoder {
|
|
|
105
106
|
this.encodeArgument({ kind: 'integer', sign: 'unsigned', width: 32 }, arg.value ?? arg, `${name}.inner`);
|
|
106
107
|
break;
|
|
107
108
|
}
|
|
109
|
+
if (isU128Struct(abiType)) {
|
|
110
|
+
// U128 struct has low and high limbs - so we first convert the value to the 2 limbs and then we encode them
|
|
111
|
+
const value = new U128(arg);
|
|
112
|
+
const limbs = value.toFields();
|
|
113
|
+
const limbNames = U128.getLimbNames();
|
|
114
|
+
this.encodeArgument({ kind: 'field' }, limbs[0], `${name}.${limbNames[0]}`);
|
|
115
|
+
this.encodeArgument({ kind: 'field' }, limbs[1], `${name}.${limbNames[1]}`);
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
108
118
|
if (isWrappedFieldStruct(abiType)) {
|
|
109
119
|
this.encodeArgument({ kind: 'field' }, arg.inner ?? arg, `${name}.inner`);
|
|
110
120
|
break;
|
|
@@ -53,11 +53,10 @@ export class EventSelector extends Selector {
|
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
55
|
* Create a Selector instance from a hex-encoded string.
|
|
56
|
-
* The input 'address' should be prefixed with '0x' or not, and have exactly 64 hex characters.
|
|
57
|
-
* Throws an error if the input length is invalid or address value is out of range.
|
|
58
56
|
*
|
|
59
57
|
* @param selector - The hex-encoded string representing the Selector.
|
|
60
58
|
* @returns An Selector instance.
|
|
59
|
+
* @throws If the selector length is invalid.
|
|
61
60
|
*/
|
|
62
61
|
static fromString(selector: string) {
|
|
63
62
|
const buf = fromHex(selector);
|
|
@@ -82,11 +82,10 @@ export class FunctionSelector extends Selector {
|
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
84
|
* Create a Selector instance from a hex-encoded string.
|
|
85
|
-
* The input 'address' should be prefixed with '0x' or not, and have exactly 64 hex characters.
|
|
86
|
-
* Throws an error if the input length is invalid or address value is out of range.
|
|
87
85
|
*
|
|
88
86
|
* @param selector - The hex-encoded string representing the Selector.
|
|
89
87
|
* @returns An Selector instance.
|
|
88
|
+
* @throws If the selector length is invalid.
|
|
90
89
|
*/
|
|
91
90
|
static fromString(selector: string) {
|
|
92
91
|
const buf = fromHex(selector);
|
package/src/abi/index.ts
CHANGED
package/src/abi/u128.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { Fr } from '../fields/fields.js';
|
|
2
|
+
|
|
3
|
+
// A typescript version of noir::std::U128
|
|
4
|
+
export class U128 {
|
|
5
|
+
private readonly value: bigint;
|
|
6
|
+
|
|
7
|
+
constructor(value: bigint | number) {
|
|
8
|
+
if (typeof value === 'number') {
|
|
9
|
+
value = BigInt(value);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Check value is within 128 bits
|
|
13
|
+
if (value < 0n || value >= 2n ** 128n) {
|
|
14
|
+
throw new Error(`Value ${value} is not within 128 bits and hence cannot be converted to U128.`);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
this.value = value;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
static fromU64sLE(lo: bigint, hi: bigint): U128 {
|
|
21
|
+
// Validate limbs are within valid ranges
|
|
22
|
+
if (lo < 0n || lo >= 2n ** 64n) {
|
|
23
|
+
throw new Error(`Lower limb ${lo} is not within valid range (0 to 2^64-1)`);
|
|
24
|
+
}
|
|
25
|
+
if (hi < 0n || hi >= 2n ** 64n) {
|
|
26
|
+
throw new Error(`Higher limb ${hi} is not within valid range (0 to 2^64-1)`);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Combine limbs into full value and create new instance
|
|
30
|
+
const value = (hi << 64n) | lo;
|
|
31
|
+
return new U128(value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
get lo(): bigint {
|
|
35
|
+
return this.value & 0xffffffffffffffffn;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
get hi(): bigint {
|
|
39
|
+
return this.value >> 64n;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
toInteger(): bigint {
|
|
43
|
+
return this.value;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// We use little-endian ordering to match the order in which U128 defines its limbs.
|
|
47
|
+
// This is necessary because of how Noir handles serialization:
|
|
48
|
+
// - When calling a contract function from TypeScript, the serialization below gets used and then Noir
|
|
49
|
+
// deserializes using its intrinsic serialization logic (based on the limb order in the struct).
|
|
50
|
+
// - When calling a contract function from another function, the `serialize` method is invoked
|
|
51
|
+
// on the type first.
|
|
52
|
+
// For this reason if we didn't use the ordering of U128 limbs here and in the implementation of Serialize
|
|
53
|
+
// trait for U128 we would get an arguments hash mismatch.
|
|
54
|
+
toFields(): Fr[] {
|
|
55
|
+
return [new Fr(this.lo), new Fr(this.hi)];
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Has to follow ordering of `toFields()`
|
|
59
|
+
static fromFields(fields: Fr[]): U128 {
|
|
60
|
+
if (fields.length !== 2) {
|
|
61
|
+
throw new Error(`Expected 2 fields for U128, got ${fields.length}`);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return U128.fromU64sLE(fields[0].toBigInt(), fields[1].toBigInt());
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Has to follow ordering of `toFields()`
|
|
68
|
+
static getLimbNames(): string[] {
|
|
69
|
+
return ['lo', 'hi'];
|
|
70
|
+
}
|
|
71
|
+
}
|
package/src/abi/utils.ts
CHANGED
|
@@ -36,6 +36,14 @@ export function isFunctionSelectorStruct(abiType: AbiType) {
|
|
|
36
36
|
return abiType.kind === 'struct' && abiType.path.endsWith('types::abis::function_selector::FunctionSelector');
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Returns whether the ABI type is the U128 defined in noir::std.
|
|
41
|
+
* @param abiType - Type to check.
|
|
42
|
+
*/
|
|
43
|
+
export function isU128Struct(abiType: AbiType) {
|
|
44
|
+
return abiType.kind === 'struct' && abiType.path.endsWith('U128');
|
|
45
|
+
}
|
|
46
|
+
|
|
39
47
|
/**
|
|
40
48
|
* Returns whether the ABI type is a struct with a single `inner` field.
|
|
41
49
|
* @param abiType - Type to check.
|
package/src/array/array.ts
CHANGED
|
@@ -27,6 +27,21 @@ export function makeTuple<T, N extends number>(length: N, fn: (i: number) => T,
|
|
|
27
27
|
return Array.from({ length }, (_: any, i: number) => fn(i + offset)) as Tuple<T, N>;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
/**
|
|
31
|
+
* Create an array over an integer range, filled with a function 'fn'.
|
|
32
|
+
* This is used over e.g. lodash because it resolved to a tuple type, needed for our fixed array type safety.
|
|
33
|
+
* @param n - The number of integers.
|
|
34
|
+
* @param fn - The generator function.
|
|
35
|
+
* @returns The array of numbers.
|
|
36
|
+
*/
|
|
37
|
+
export async function makeTupleAsync<T, N extends number>(length: N, fn: (i: number) => Promise<T>, offset = 0) {
|
|
38
|
+
return (await Promise.all(
|
|
39
|
+
Array(length)
|
|
40
|
+
.fill(0)
|
|
41
|
+
.map(async (_: any, i: number) => await fn(i + offset)),
|
|
42
|
+
)) as Tuple<T, N>;
|
|
43
|
+
}
|
|
44
|
+
|
|
30
45
|
/**
|
|
31
46
|
* Create an array over an integer range, filled with a function 'fn'. However, the latter half of the array are set to zeros.
|
|
32
47
|
* see `makeTuple` above.
|
|
@@ -75,11 +75,11 @@ export class AztecAddress {
|
|
|
75
75
|
/**
|
|
76
76
|
* @returns a random valid address (i.e. one that can be encrypted to).
|
|
77
77
|
*/
|
|
78
|
-
static random() {
|
|
78
|
+
static async random() {
|
|
79
79
|
// About half of random field elements result in invalid addresses, so we loop until we get a valid one.
|
|
80
80
|
while (true) {
|
|
81
81
|
const candidate = new AztecAddress(Fr.random());
|
|
82
|
-
if (candidate.isValid()) {
|
|
82
|
+
if (await candidate.isValid()) {
|
|
83
83
|
return candidate;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -100,20 +100,20 @@ export class AztecAddress {
|
|
|
100
100
|
/**
|
|
101
101
|
* @returns true if the address is valid. Invalid addresses cannot receive encrypted messages.
|
|
102
102
|
*/
|
|
103
|
-
isValid() {
|
|
103
|
+
async isValid() {
|
|
104
104
|
// An address is a field value (Fr), which for some purposes is assumed to be the x coordinate of a point in the
|
|
105
105
|
// Grumpkin curve (notably in order to encrypt to it). An address that is not the x coordinate of such a point is
|
|
106
106
|
// called an 'invalid' address.
|
|
107
107
|
//
|
|
108
108
|
// For Grumpkin, y^2 = x^3 − 17 . There exist values x ∈ Fr for which no y satisfies this equation. This means that
|
|
109
109
|
// given such an x and t = x^3 − 17, then sqrt(t) does not exist in Fr.
|
|
110
|
-
return Point.YFromX(this.xCoord) !== null;
|
|
110
|
+
return (await Point.YFromX(this.xCoord)) !== null;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
/**
|
|
114
114
|
* @returns the Point from which the address is derived. Throws if the address is invalid.
|
|
115
115
|
*/
|
|
116
|
-
toAddressPoint() {
|
|
116
|
+
toAddressPoint(): Promise<Point> {
|
|
117
117
|
return Point.fromXAndSign(this.xCoord, true);
|
|
118
118
|
}
|
|
119
119
|
|
package/src/collection/array.ts
CHANGED
|
@@ -89,6 +89,21 @@ export async function timesAsync<T>(n: number, fn: (i: number) => Promise<T>): P
|
|
|
89
89
|
return results;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
/**
|
|
93
|
+
* Executes the given async function n times in parallel and returns the results in an array.
|
|
94
|
+
* @param n - How many times to repeat.
|
|
95
|
+
* @param fn - Mapper from index to value.
|
|
96
|
+
* @returns The array with the result from all executions.
|
|
97
|
+
*/
|
|
98
|
+
export async function timesParallel<T>(n: number, fn: (i: number) => Promise<T>): Promise<T[]> {
|
|
99
|
+
const results: T[] = await Promise.all(
|
|
100
|
+
Array(n)
|
|
101
|
+
.fill(0)
|
|
102
|
+
.map((_, i) => fn(i)),
|
|
103
|
+
);
|
|
104
|
+
return results;
|
|
105
|
+
}
|
|
106
|
+
|
|
92
107
|
/**
|
|
93
108
|
* Returns the serialized size of all non-empty items in an array.
|
|
94
109
|
* @param arr - Array
|
package/src/config/env_var.ts
CHANGED
|
@@ -42,7 +42,6 @@ export type EnvVar =
|
|
|
42
42
|
| 'DEBUG'
|
|
43
43
|
| 'DEPLOY_AZTEC_CONTRACTS_SALT'
|
|
44
44
|
| 'DEPLOY_AZTEC_CONTRACTS'
|
|
45
|
-
| 'ENABLE_GAS'
|
|
46
45
|
| 'ENFORCE_FEES'
|
|
47
46
|
| 'ETHEREUM_HOST'
|
|
48
47
|
| 'FEE_JUICE_CONTRACT_ADDRESS'
|
|
@@ -70,6 +69,7 @@ export type EnvVar =
|
|
|
70
69
|
| 'OTEL_EXPORTER_OTLP_LOGS_ENDPOINT'
|
|
71
70
|
| 'OTEL_SERVICE_NAME'
|
|
72
71
|
| 'OTEL_COLLECT_INTERVAL_MS'
|
|
72
|
+
| 'OTEL_EXCLUDE_METRICS'
|
|
73
73
|
| 'OTEL_EXPORT_TIMEOUT_MS'
|
|
74
74
|
| 'OUTBOX_CONTRACT_ADDRESS'
|
|
75
75
|
| 'P2P_BLOCK_CHECK_INTERVAL_MS'
|
package/src/fields/fields.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { BarretenbergLazy } from '@aztec/bb.js';
|
|
2
2
|
|
|
3
3
|
import { inspect } from 'util';
|
|
4
4
|
|
|
@@ -99,6 +99,10 @@ abstract class BaseField {
|
|
|
99
99
|
return Boolean(this.toBigInt());
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
+
/**
|
|
103
|
+
* Converts this field to a number.
|
|
104
|
+
* Throws if the underlying value is greater than MAX_SAFE_INTEGER.
|
|
105
|
+
*/
|
|
102
106
|
toNumber(): number {
|
|
103
107
|
const value = this.toBigInt();
|
|
104
108
|
if (value > Number.MAX_SAFE_INTEGER) {
|
|
@@ -107,6 +111,15 @@ abstract class BaseField {
|
|
|
107
111
|
return Number(value);
|
|
108
112
|
}
|
|
109
113
|
|
|
114
|
+
/**
|
|
115
|
+
* Converts this field to a number.
|
|
116
|
+
* May cause loss of precision if the underlying value is greater than MAX_SAFE_INTEGER.
|
|
117
|
+
*/
|
|
118
|
+
toNumberUnsafe(): number {
|
|
119
|
+
const value = this.toBigInt();
|
|
120
|
+
return Number(value);
|
|
121
|
+
}
|
|
122
|
+
|
|
110
123
|
toShortString(): string {
|
|
111
124
|
const str = this.toString();
|
|
112
125
|
return `${str.slice(0, 10)}...${str.slice(-4)}`;
|
|
@@ -305,19 +318,15 @@ export class Fr extends BaseField {
|
|
|
305
318
|
* Computes a square root of the field element.
|
|
306
319
|
* @returns A square root of the field element (null if it does not exist).
|
|
307
320
|
*/
|
|
308
|
-
sqrt(): Fr | null {
|
|
309
|
-
const wasm =
|
|
310
|
-
wasm.
|
|
311
|
-
|
|
312
|
-
const isSqrtBuf = Buffer.from(wasm.getMemorySlice(Fr.SIZE_IN_BYTES, Fr.SIZE_IN_BYTES + 1));
|
|
313
|
-
const isSqrt = isSqrtBuf[0] === 1;
|
|
321
|
+
async sqrt(): Promise<Fr | null> {
|
|
322
|
+
const wasm = (await BarretenbergLazy.getSingleton()).getWasm();
|
|
323
|
+
const [buf] = await wasm.callWasmExport('bn254_fr_sqrt', [this.toBuffer()], [Fr.SIZE_IN_BYTES + 1]);
|
|
324
|
+
const isSqrt = buf[0] === 1;
|
|
314
325
|
if (!isSqrt) {
|
|
315
326
|
// Field element is not a quadratic residue mod p so it has no square root.
|
|
316
327
|
return null;
|
|
317
328
|
}
|
|
318
|
-
|
|
319
|
-
const rootBuf = Buffer.from(wasm.getMemorySlice(Fr.SIZE_IN_BYTES + 1, Fr.SIZE_IN_BYTES * 2 + 1));
|
|
320
|
-
return Fr.fromBuffer(rootBuf);
|
|
329
|
+
return new Fr(Buffer.from(buf.slice(1)));
|
|
321
330
|
}
|
|
322
331
|
|
|
323
332
|
toJSON() {
|
package/src/fields/point.ts
CHANGED
|
@@ -50,10 +50,10 @@ export class Point {
|
|
|
50
50
|
*
|
|
51
51
|
* @returns A randomly generated Point instance.
|
|
52
52
|
*/
|
|
53
|
-
static random() {
|
|
53
|
+
static async random() {
|
|
54
54
|
while (true) {
|
|
55
55
|
try {
|
|
56
|
-
return Point.fromXAndSign(Fr.random(), randomBoolean());
|
|
56
|
+
return await Point.fromXAndSign(Fr.random(), randomBoolean());
|
|
57
57
|
} catch (e: any) {
|
|
58
58
|
if (!(e instanceof NotOnCurveError)) {
|
|
59
59
|
throw e;
|
|
@@ -83,7 +83,7 @@ export class Point {
|
|
|
83
83
|
* @param buffer - The buffer containing the x coordinate and the sign of the y coordinate.
|
|
84
84
|
* @returns A Point instance.
|
|
85
85
|
*/
|
|
86
|
-
static fromCompressedBuffer(buffer: Buffer | BufferReader) {
|
|
86
|
+
static fromCompressedBuffer(buffer: Buffer | BufferReader): Promise<Point> {
|
|
87
87
|
const reader = BufferReader.asReader(buffer);
|
|
88
88
|
const value = toBigIntBE(reader.readBytes(Point.COMPRESSED_SIZE_IN_BYTES));
|
|
89
89
|
|
|
@@ -127,8 +127,8 @@ export class Point {
|
|
|
127
127
|
* Instead it is a boolean flag that determines whether the y coordinate is <= (Fr.MODULUS - 1) / 2
|
|
128
128
|
* @returns The point as an array of 2 fields
|
|
129
129
|
*/
|
|
130
|
-
static fromXAndSign(x: Fr, sign: boolean) {
|
|
131
|
-
const y = Point.YFromX(x);
|
|
130
|
+
static async fromXAndSign(x: Fr, sign: boolean) {
|
|
131
|
+
const y = await Point.YFromX(x);
|
|
132
132
|
if (y == null) {
|
|
133
133
|
throw new NotOnCurveError(x);
|
|
134
134
|
}
|
|
@@ -146,7 +146,7 @@ export class Point {
|
|
|
146
146
|
/**
|
|
147
147
|
* @returns
|
|
148
148
|
*/
|
|
149
|
-
static YFromX(x: Fr): Fr | null {
|
|
149
|
+
static YFromX(x: Fr): Promise<Fr | null> {
|
|
150
150
|
// Calculate y^2 = x^3 - 17 (i.e. the Grumpkin curve equation)
|
|
151
151
|
const ySquared = x.square().mul(x).sub(new Fr(17));
|
|
152
152
|
|