@aztec/pxe 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.75.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/bin/index.d.ts +3 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +5 -3
- package/dest/config/index.d.ts +46 -0
- package/dest/config/index.d.ts.map +1 -0
- package/dest/config/index.js +21 -18
- package/dest/config/package_info.d.ts +5 -0
- package/dest/config/package_info.d.ts.map +1 -0
- package/dest/config/package_info.js +2 -4
- package/dest/contract_data_oracle/index.d.ts +104 -0
- package/dest/contract_data_oracle/index.d.ts.map +1 -0
- package/dest/contract_data_oracle/index.js +79 -69
- package/dest/contract_data_oracle/private_functions_tree.d.ts +65 -0
- package/dest/contract_data_oracle/private_functions_tree.d.ts.map +1 -0
- package/dest/contract_data_oracle/private_functions_tree.js +50 -44
- package/dest/database/contracts/contract_artifact_db.d.ts +20 -0
- package/dest/database/contracts/contract_artifact_db.d.ts.map +1 -0
- package/dest/database/contracts/contract_artifact_db.js +2 -3
- package/dest/database/contracts/contract_instance_db.d.ts +19 -0
- package/dest/database/contracts/contract_instance_db.d.ts.map +1 -0
- package/dest/database/contracts/contract_instance_db.js +2 -3
- package/dest/database/index.d.ts +3 -0
- package/dest/database/index.d.ts.map +1 -0
- package/dest/database/index.js +1 -0
- package/dest/database/kv_pxe_database.d.ts +55 -0
- package/dest/database/kv_pxe_database.d.ts.map +1 -0
- package/dest/database/kv_pxe_database.js +259 -243
- package/dest/database/note_dao.d.ts +103 -0
- package/dest/database/note_dao.d.ts.map +1 -0
- package/dest/database/note_dao.js +43 -28
- package/dest/database/outgoing_note_dao.d.ts +73 -0
- package/dest/database/outgoing_note_dao.d.ts.map +1 -0
- package/dest/database/outgoing_note_dao.js +34 -20
- package/dest/database/pxe_database.d.ts +216 -0
- package/dest/database/pxe_database.d.ts.map +1 -0
- package/dest/database/pxe_database.js +2 -4
- package/dest/database/pxe_database_test_suite.d.ts +7 -0
- package/dest/database/pxe_database_test_suite.d.ts.map +1 -0
- package/dest/database/pxe_database_test_suite.js +151 -296
- package/dest/index.d.ts +15 -0
- package/dest/index.d.ts.map +1 -0
- package/dest/index.js +1 -0
- package/dest/kernel_oracle/index.d.ts +34 -0
- package/dest/kernel_oracle/index.d.ts.map +1 -0
- package/dest/kernel_oracle/index.js +6 -9
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts +28 -0
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -0
- package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +66 -68
- package/dest/kernel_prover/hints/index.d.ts +2 -0
- package/dest/kernel_prover/hints/index.d.ts.map +1 -0
- package/dest/kernel_prover/hints/index.js +1 -0
- package/dest/kernel_prover/index.d.ts +3 -0
- package/dest/kernel_prover/index.d.ts.map +1 -0
- package/dest/kernel_prover/index.js +1 -0
- package/dest/kernel_prover/kernel_prover.d.ts +38 -0
- package/dest/kernel_prover/kernel_prover.d.ts.map +1 -0
- package/dest/kernel_prover/kernel_prover.js +65 -60
- package/dest/kernel_prover/proving_data_oracle.d.ts +65 -0
- package/dest/kernel_prover/proving_data_oracle.d.ts.map +1 -0
- package/dest/kernel_prover/proving_data_oracle.js +2 -4
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +10 -0
- package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +1 -0
- package/dest/note_decryption_utils/add_public_values_to_payload.js +9 -8
- package/dest/pxe_http/index.d.ts +2 -0
- package/dest/pxe_http/index.d.ts.map +1 -0
- package/dest/pxe_http/index.js +1 -0
- package/dest/pxe_http/pxe_http_server.d.ts +16 -0
- package/dest/pxe_http/pxe_http_server.d.ts.map +1 -0
- package/dest/pxe_http/pxe_http_server.js +6 -8
- package/dest/pxe_service/error_enriching.d.ts +11 -0
- package/dest/pxe_service/error_enriching.d.ts.map +1 -0
- package/dest/pxe_service/error_enriching.js +13 -10
- package/dest/pxe_service/index.d.ts +4 -0
- package/dest/pxe_service/index.d.ts.map +1 -0
- package/dest/pxe_service/index.js +1 -0
- package/dest/pxe_service/pxe_service.d.ts +98 -0
- package/dest/pxe_service/pxe_service.d.ts.map +1 -0
- package/dest/pxe_service/pxe_service.js +290 -282
- package/dest/pxe_service/test/pxe_test_suite.d.ts +3 -0
- package/dest/pxe_service/test/pxe_test_suite.d.ts.map +1 -0
- package/dest/pxe_service/test/pxe_test_suite.js +27 -40
- package/dest/simulator/index.d.ts +10 -0
- package/dest/simulator/index.d.ts.map +1 -0
- package/dest/simulator/index.js +3 -1
- package/dest/simulator_oracle/index.d.ts +129 -0
- package/dest/simulator_oracle/index.d.ts.map +1 -0
- package/dest/simulator_oracle/index.js +231 -266
- package/dest/simulator_oracle/tagging_utils.d.ts +16 -0
- package/dest/simulator_oracle/tagging_utils.d.ts.map +1 -0
- package/dest/simulator_oracle/tagging_utils.js +6 -4
- package/dest/synchronizer/index.d.ts +2 -0
- package/dest/synchronizer/index.d.ts.map +1 -0
- package/dest/synchronizer/index.js +1 -0
- package/dest/synchronizer/synchronizer.d.ts +30 -0
- package/dest/synchronizer/synchronizer.d.ts.map +1 -0
- package/dest/synchronizer/synchronizer.js +42 -42
- package/dest/utils/create_pxe_service.d.ts +16 -0
- package/dest/utils/create_pxe_service.d.ts.map +1 -0
- package/dest/utils/create_pxe_service.js +9 -9
- package/package.json +15 -15
- package/src/pxe_service/pxe_service.ts +10 -5
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Fr, IndexedTaggingSecret } from '@aztec/circuits.js';
|
|
2
|
+
export declare const WINDOW_HALF_SIZE = 10;
|
|
3
|
+
export declare function getIndexedTaggingSecretsForTheWindow(secretsAndWindows: {
|
|
4
|
+
appTaggingSecret: Fr;
|
|
5
|
+
leftMostIndex: number;
|
|
6
|
+
rightMostIndex: number;
|
|
7
|
+
}[]): IndexedTaggingSecret[];
|
|
8
|
+
/**
|
|
9
|
+
* Creates a map from app tagging secret to initial index.
|
|
10
|
+
* @param indexedTaggingSecrets - The indexed tagging secrets to get the initial indexes from.
|
|
11
|
+
* @returns The map from app tagging secret to initial index.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getInitialIndexesMap(indexedTaggingSecrets: IndexedTaggingSecret[]): {
|
|
14
|
+
[k: string]: number;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=tagging_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tagging_utils.d.ts","sourceRoot":"","sources":["../../src/simulator_oracle/tagging_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGnE,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,wBAAgB,oCAAoC,CAClD,iBAAiB,EAAE;IAAE,gBAAgB,EAAE,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,EAAE,GAC3F,oBAAoB,EAAE,CAQxB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,qBAAqB,EAAE,oBAAoB,EAAE,GAAG;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAQ3G"}
|
|
@@ -3,8 +3,8 @@ import { IndexedTaggingSecret } from '@aztec/circuits.js';
|
|
|
3
3
|
export const WINDOW_HALF_SIZE = 10;
|
|
4
4
|
export function getIndexedTaggingSecretsForTheWindow(secretsAndWindows) {
|
|
5
5
|
const secrets = [];
|
|
6
|
-
for (const secretAndWindow of secretsAndWindows){
|
|
7
|
-
for(let i = secretAndWindow.leftMostIndex; i <= secretAndWindow.rightMostIndex; i++){
|
|
6
|
+
for (const secretAndWindow of secretsAndWindows) {
|
|
7
|
+
for (let i = secretAndWindow.leftMostIndex; i <= secretAndWindow.rightMostIndex; i++) {
|
|
8
8
|
secrets.push(new IndexedTaggingSecret(secretAndWindow.appTaggingSecret, i));
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -14,10 +14,12 @@ export function getIndexedTaggingSecretsForTheWindow(secretsAndWindows) {
|
|
|
14
14
|
* Creates a map from app tagging secret to initial index.
|
|
15
15
|
* @param indexedTaggingSecrets - The indexed tagging secrets to get the initial indexes from.
|
|
16
16
|
* @returns The map from app tagging secret to initial index.
|
|
17
|
-
*/
|
|
17
|
+
*/
|
|
18
|
+
export function getInitialIndexesMap(indexedTaggingSecrets) {
|
|
18
19
|
const initialIndexes = {};
|
|
19
|
-
for (const indexedTaggingSecret of indexedTaggingSecrets){
|
|
20
|
+
for (const indexedTaggingSecret of indexedTaggingSecrets) {
|
|
20
21
|
initialIndexes[indexedTaggingSecret.appTaggingSecret.toString()] = indexedTaggingSecret.index;
|
|
21
22
|
}
|
|
22
23
|
return initialIndexes;
|
|
23
24
|
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnZ2luZ191dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaW11bGF0b3Jfb3JhY2xlL3RhZ2dpbmdfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFXLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkUsd0VBQXdFO0FBQ3hFLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUVuQyxNQUFNLFVBQVUsb0NBQW9DLENBQ2xELGlCQUE0RjtJQUU1RixNQUFNLE9BQU8sR0FBMkIsRUFBRSxDQUFDO0lBQzNDLEtBQUssTUFBTSxlQUFlLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUNoRCxLQUFLLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyRixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxxQkFBNkM7SUFDaEYsTUFBTSxjQUFjLEdBQTRCLEVBQUUsQ0FBQztJQUVuRCxLQUFLLE1BQU0sb0JBQW9CLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUN6RCxjQUFjLENBQUMsb0JBQW9CLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7SUFDaEcsQ0FBQztJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/synchronizer/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type AztecNode, L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/circuit-types';
|
|
2
|
+
import { type Logger } from '@aztec/foundation/log';
|
|
3
|
+
import { type L2TipsStore } from '@aztec/kv-store/stores';
|
|
4
|
+
import { type PXEConfig } from '../config/index.js';
|
|
5
|
+
import { type PxeDatabase } from '../database/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* The Synchronizer class manages the synchronization with the aztec node, allowing PXE to retrieve the
|
|
8
|
+
* latest block header and handle reorgs.
|
|
9
|
+
* It provides methods to trigger a sync and get the block number we are syncec to
|
|
10
|
+
* details, and fetch transactions by hash.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Synchronizer implements L2BlockStreamEventHandler {
|
|
13
|
+
private node;
|
|
14
|
+
private db;
|
|
15
|
+
private l2TipsStore;
|
|
16
|
+
private initialSyncBlockNumber;
|
|
17
|
+
private log;
|
|
18
|
+
protected readonly blockStream: L2BlockStream;
|
|
19
|
+
constructor(node: AztecNode, db: PxeDatabase, l2TipsStore: L2TipsStore, config?: Partial<Pick<PXEConfig, 'l2StartingBlock'>>, loggerOrSuffix?: string | Logger);
|
|
20
|
+
protected createBlockStream(config: Partial<Pick<PXEConfig, 'l2StartingBlock'>>): L2BlockStream;
|
|
21
|
+
/** Handle events emitted by the block stream. */
|
|
22
|
+
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Syncs PXE and the node by dowloading the metadata of the latest blocks, allowing simulations to use
|
|
25
|
+
* recent data (e.g. notes), and handling any reorgs that might have occurred.
|
|
26
|
+
*/
|
|
27
|
+
sync(): Promise<void>;
|
|
28
|
+
getSynchedBlockNumber(): Promise<number>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=synchronizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"synchronizer.d.ts","sourceRoot":"","sources":["../../src/synchronizer/synchronizer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;GAKG;AACH,qBAAa,YAAa,YAAW,yBAAyB;IAM1D,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,WAAW;IAPrB,OAAO,CAAC,sBAAsB,CAA4B;IAC1D,OAAO,CAAC,GAAG,CAAS;IACpB,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;gBAGpC,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,WAAW,EACf,WAAW,EAAE,WAAW,EAChC,MAAM,GAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAM,EACxD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM;IASlC,SAAS,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAM/E,iDAAiD;IACpC,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B7E;;;OAGG;IACU,IAAI;IAeJ,qBAAqB;CAGnC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { L2BlockStream } from '@aztec/circuit-types';
|
|
1
|
+
import { L2BlockStream, } from '@aztec/circuit-types';
|
|
2
2
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/circuits.js';
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
/**
|
|
@@ -6,63 +6,62 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
6
6
|
* latest block header and handle reorgs.
|
|
7
7
|
* It provides methods to trigger a sync and get the block number we are syncec to
|
|
8
8
|
* details, and fetch transactions by hash.
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
db
|
|
12
|
-
l2TipsStore;
|
|
13
|
-
initialSyncBlockNumber;
|
|
14
|
-
log;
|
|
15
|
-
blockStream;
|
|
16
|
-
constructor(node, db, l2TipsStore, config = {}, loggerOrSuffix){
|
|
9
|
+
*/
|
|
10
|
+
export class Synchronizer {
|
|
11
|
+
constructor(node, db, l2TipsStore, config = {}, loggerOrSuffix) {
|
|
17
12
|
this.node = node;
|
|
18
13
|
this.db = db;
|
|
19
14
|
this.l2TipsStore = l2TipsStore;
|
|
20
15
|
this.initialSyncBlockNumber = INITIAL_L2_BLOCK_NUM - 1;
|
|
21
|
-
this.log =
|
|
16
|
+
this.log =
|
|
17
|
+
!loggerOrSuffix || typeof loggerOrSuffix === 'string'
|
|
18
|
+
? createLogger(loggerOrSuffix ? `pxe:synchronizer:${loggerOrSuffix}` : `pxe:synchronizer`)
|
|
19
|
+
: loggerOrSuffix;
|
|
22
20
|
this.blockStream = this.createBlockStream(config);
|
|
23
21
|
}
|
|
24
22
|
createBlockStream(config) {
|
|
25
23
|
return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream'), {
|
|
26
|
-
startingBlock: config.l2StartingBlock
|
|
24
|
+
startingBlock: config.l2StartingBlock,
|
|
27
25
|
});
|
|
28
26
|
}
|
|
29
|
-
/** Handle events emitted by the block stream. */
|
|
27
|
+
/** Handle events emitted by the block stream. */
|
|
28
|
+
async handleBlockStreamEvent(event) {
|
|
30
29
|
await this.l2TipsStore.handleBlockStreamEvent(event);
|
|
31
|
-
switch(event.type){
|
|
32
|
-
case 'blocks-added':
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
30
|
+
switch (event.type) {
|
|
31
|
+
case 'blocks-added': {
|
|
32
|
+
const lastBlock = event.blocks.at(-1);
|
|
33
|
+
this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
|
|
34
|
+
blockHash: lastBlock.hash(),
|
|
35
|
+
archive: lastBlock.archive.root.toString(),
|
|
36
|
+
header: lastBlock.header.toInspect(),
|
|
37
|
+
});
|
|
38
|
+
await this.db.setHeader(lastBlock.header);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case 'chain-pruned': {
|
|
42
|
+
this.log.warn(`Pruning data after block ${event.blockNumber} due to reorg`);
|
|
43
|
+
// We first unnullify and then remove so that unnullified notes that were created after the block number end up deleted.
|
|
44
|
+
await this.db.unnullifyNotesAfter(event.blockNumber);
|
|
45
|
+
await this.db.removeNotesAfter(event.blockNumber);
|
|
46
|
+
// Remove all note tagging indexes to force a full resync. This is suboptimal, but unless we track the
|
|
47
|
+
// block number in which each index is used it's all we can do.
|
|
48
|
+
await this.db.resetNoteSyncData();
|
|
49
|
+
// Update the header to the last block.
|
|
50
|
+
await this.db.setHeader(await this.node.getBlockHeader(event.blockNumber));
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
56
53
|
}
|
|
57
54
|
}
|
|
58
55
|
/**
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
* Syncs PXE and the node by dowloading the metadata of the latest blocks, allowing simulations to use
|
|
57
|
+
* recent data (e.g. notes), and handling any reorgs that might have occurred.
|
|
58
|
+
*/
|
|
59
|
+
async sync() {
|
|
62
60
|
let currentHeader;
|
|
63
61
|
try {
|
|
64
62
|
currentHeader = await this.db.getBlockHeader();
|
|
65
|
-
}
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
66
65
|
this.log.debug('Header is not set, requesting from the node');
|
|
67
66
|
}
|
|
68
67
|
if (!currentHeader) {
|
|
@@ -72,6 +71,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
72
71
|
await this.blockStream.sync();
|
|
73
72
|
}
|
|
74
73
|
async getSynchedBlockNumber() {
|
|
75
|
-
return await this.db.getBlockNumber() ?? this.initialSyncBlockNumber;
|
|
74
|
+
return (await this.db.getBlockNumber()) ?? this.initialSyncBlockNumber;
|
|
76
75
|
}
|
|
77
76
|
}
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3luY2hyb25pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N5bmNocm9uaXplci9zeW5jaHJvbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGFBQWEsR0FHZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBZSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU1sRTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBS3ZCLFlBQ1UsSUFBZSxFQUNmLEVBQWUsRUFDZixXQUF3QixFQUNoQyxTQUFzRCxFQUFFLEVBQ3hELGNBQWdDO1FBSnhCLFNBQUksR0FBSixJQUFJLENBQVc7UUFDZixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFQMUIsMkJBQXNCLEdBQUcsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBV3hELElBQUksQ0FBQyxHQUFHO1lBQ04sQ0FBQyxjQUFjLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUTtnQkFDbkQsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7Z0JBQzFGLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVTLGlCQUFpQixDQUFDLE1BQW1EO1FBQzdFLE9BQU8sSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsa0JBQWtCLENBQUMsRUFBRTtZQUM1RixhQUFhLEVBQUUsTUFBTSxDQUFDLGVBQWU7U0FDdEMsQ0FBQyxD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
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type AztecNode, type PrivateKernelProver } from '@aztec/circuit-types';
|
|
2
|
+
import { type PXEServiceConfig } from '../config/index.js';
|
|
3
|
+
import { PXEService } from '../pxe_service/pxe_service.js';
|
|
4
|
+
/**
|
|
5
|
+
* Create and start an PXEService instance with the given AztecNode.
|
|
6
|
+
* If no keyStore or database is provided, it will use KeyStore and MemoryDB as default values.
|
|
7
|
+
* Returns a Promise that resolves to the started PXEService instance.
|
|
8
|
+
*
|
|
9
|
+
* @param aztecNode - The AztecNode instance to be used by the server.
|
|
10
|
+
* @param config - The PXE Service Config to use
|
|
11
|
+
* @param options - (Optional) Optional information for creating an PXEService.
|
|
12
|
+
* @param proofCreator - An optional proof creator to use in place of any other configuration
|
|
13
|
+
* @returns A Promise that resolves to the started PXEService instance.
|
|
14
|
+
*/
|
|
15
|
+
export declare function createPXEService(aztecNode: AztecNode, config: PXEServiceConfig, useLogSuffix?: string | boolean | undefined, proofCreator?: PrivateKernelProver): Promise<PXEService>;
|
|
16
|
+
//# sourceMappingURL=create_pxe_service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create_pxe_service.d.ts","sourceRoot":"","sources":["../../src/utils/create_pxe_service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAQhF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,gBAAgB,EACxB,YAAY,GAAE,MAAM,GAAG,OAAO,GAAG,SAAqB,EACtD,YAAY,CAAC,EAAE,mBAAmB,uBAwBnC"}
|
|
@@ -18,19 +18,20 @@ import { PXEService } from '../pxe_service/pxe_service.js';
|
|
|
18
18
|
* @param options - (Optional) Optional information for creating an PXEService.
|
|
19
19
|
* @param proofCreator - An optional proof creator to use in place of any other configuration
|
|
20
20
|
* @returns A Promise that resolves to the started PXEService instance.
|
|
21
|
-
*/
|
|
22
|
-
|
|
21
|
+
*/
|
|
22
|
+
export async function createPXEService(aztecNode, config, useLogSuffix = undefined, proofCreator) {
|
|
23
|
+
const logSuffix = typeof useLogSuffix === 'boolean' ? (useLogSuffix ? randomBytes(3).toString('hex') : undefined) : useLogSuffix;
|
|
23
24
|
const l1Contracts = await aztecNode.getL1ContractAddresses();
|
|
24
25
|
const configWithContracts = {
|
|
25
26
|
...config,
|
|
26
|
-
l1Contracts
|
|
27
|
+
l1Contracts,
|
|
27
28
|
};
|
|
28
29
|
const keyStore = new KeyStore(await createStore('pxe_key_store', configWithContracts, createLogger('pxe:keystore:lmdb')));
|
|
29
30
|
const store = await createStore('pxe_data', configWithContracts, createLogger('pxe:data:lmdb'));
|
|
30
31
|
const db = await KVPxeDatabase.create(store);
|
|
31
32
|
const tips = new L2TipsStore(store, 'pxe');
|
|
32
33
|
const simulationProvider = new WASMSimulator();
|
|
33
|
-
const prover = proofCreator ?? await createProver(config, simulationProvider, logSuffix);
|
|
34
|
+
const prover = proofCreator ?? (await createProver(config, simulationProvider, logSuffix));
|
|
34
35
|
const pxe = new PXEService(keyStore, aztecNode, db, tips, prover, simulationProvider, config, logSuffix);
|
|
35
36
|
await pxe.init();
|
|
36
37
|
return pxe;
|
|
@@ -38,12 +39,11 @@ import { PXEService } from '../pxe_service/pxe_service.js';
|
|
|
38
39
|
function createProver(config, simulationProvider, logSuffix) {
|
|
39
40
|
if (!config.bbBinaryPath || !config.bbWorkingDirectory) {
|
|
40
41
|
return new BBWASMBundlePrivateKernelProver(simulationProvider, 16);
|
|
41
|
-
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
42
44
|
const bbConfig = config;
|
|
43
45
|
const log = createLogger('pxe:bb-native-prover' + (logSuffix ? `:${logSuffix}` : ''));
|
|
44
|
-
return BBNativePrivateKernelProver.new({
|
|
45
|
-
bbSkipCleanup: false,
|
|
46
|
-
...bbConfig
|
|
47
|
-
}, simulationProvider, log);
|
|
46
|
+
return BBNativePrivateKernelProver.new({ bbSkipCleanup: false, ...bbConfig }, simulationProvider, log);
|
|
48
47
|
}
|
|
49
48
|
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX3B4ZV9zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2NyZWF0ZV9weGVfc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBMkIsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRDs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsU0FBb0IsRUFDcEIsTUFBd0IsRUFDeEIsZUFBNkMsU0FBUyxFQUN0RCxZQUFrQztJQUVsQyxNQUFNLFNBQVMsR0FDYixPQUFPLFlBQVksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBRWpILE1BQU0sV0FBVyxHQUFHLE1BQU0sU0FBUyxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDN0QsTUFBTSxtQkFBbUIsR0FBRztRQUMxQixHQUFHLE1BQU07UUFDVCxXQUFXO0tBQ1EsQ0FBQztJQUV0QixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FDM0IsTUFBTSxXQUFXLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQzNGLENBQUM7SUFFRixNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxFQUFFLEdBQUcsTUFBTSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMzQyxNQUFNLGtCQUFrQixHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDL0MsTUFBTSxNQUFNLEdBQUcsWUFBWSxJQUFJLENBQUMsTUFBTSxZQUFZLENBQUMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDekcsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsTUFBd0IsRUFBRSxrQkFBc0MsRUFBRSxTQUFrQjtJQUN4RyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZELE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sUUFBUSxHQUFHLE1BQ0MsQ0FBQztRQUNuQixNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEYsT0FBTywyQkFBMkIsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLEdBQUcsUUFBUSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekcsQ0FBQztBQUNILENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/pxe",
|
|
3
|
-
"version": "0.75.0
|
|
3
|
+
"version": "0.75.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./dest/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"clean": "rm -rf ./dest .tsbuildinfo ./src/config/package_info.ts",
|
|
24
24
|
"formatting": "run -T prettier --check ./src && run -T eslint ./src",
|
|
25
25
|
"formatting:fix": "run -T eslint --fix ./src && run -T prettier -w ./src",
|
|
26
|
-
"test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
26
|
+
"test": "HARDWARE_CONCURRENCY=${HARDWARE_CONCURRENCY:-16} RAYON_NUM_THREADS=${RAYON_NUM_THREADS:-4} NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
|
|
27
27
|
"start": "LOG_LEVEL=${LOG_LEVEL:-debug} && node ./dest/bin/index.js",
|
|
28
28
|
"generate": "node ./scripts/generate_package_info.js"
|
|
29
29
|
},
|
|
@@ -66,19 +66,19 @@
|
|
|
66
66
|
]
|
|
67
67
|
},
|
|
68
68
|
"dependencies": {
|
|
69
|
-
"@aztec/bb-prover": "0.75.0
|
|
70
|
-
"@aztec/bb.js": "0.75.0
|
|
71
|
-
"@aztec/builder": "0.75.0
|
|
72
|
-
"@aztec/circuit-types": "0.75.0
|
|
73
|
-
"@aztec/circuits.js": "0.75.0
|
|
74
|
-
"@aztec/ethereum": "0.75.0
|
|
75
|
-
"@aztec/foundation": "0.75.0
|
|
76
|
-
"@aztec/key-store": "0.75.0
|
|
77
|
-
"@aztec/kv-store": "0.75.0
|
|
78
|
-
"@aztec/noir-protocol-circuits-types": "0.75.0
|
|
79
|
-
"@aztec/protocol-contracts": "0.75.0
|
|
80
|
-
"@aztec/simulator": "0.75.0
|
|
81
|
-
"@aztec/types": "0.75.0
|
|
69
|
+
"@aztec/bb-prover": "0.75.0",
|
|
70
|
+
"@aztec/bb.js": "0.75.0",
|
|
71
|
+
"@aztec/builder": "0.75.0",
|
|
72
|
+
"@aztec/circuit-types": "0.75.0",
|
|
73
|
+
"@aztec/circuits.js": "0.75.0",
|
|
74
|
+
"@aztec/ethereum": "0.75.0",
|
|
75
|
+
"@aztec/foundation": "0.75.0",
|
|
76
|
+
"@aztec/key-store": "0.75.0",
|
|
77
|
+
"@aztec/kv-store": "0.75.0",
|
|
78
|
+
"@aztec/noir-protocol-circuits-types": "0.75.0",
|
|
79
|
+
"@aztec/protocol-contracts": "0.75.0",
|
|
80
|
+
"@aztec/simulator": "0.75.0",
|
|
81
|
+
"@aztec/types": "0.75.0",
|
|
82
82
|
"@msgpack/msgpack": "^3.0.0-beta2",
|
|
83
83
|
"@noir-lang/types": "workspace:*",
|
|
84
84
|
"koa": "^2.14.2",
|
|
@@ -42,7 +42,11 @@ import type {
|
|
|
42
42
|
PartialAddress,
|
|
43
43
|
PrivateKernelTailCircuitPublicInputs,
|
|
44
44
|
} from '@aztec/circuits.js';
|
|
45
|
-
import {
|
|
45
|
+
import {
|
|
46
|
+
computeContractAddressFromInstance,
|
|
47
|
+
computeContractClassId,
|
|
48
|
+
getContractClassFromArtifact,
|
|
49
|
+
} from '@aztec/circuits.js/contract';
|
|
46
50
|
import { computeNoteHashNonce, siloNullifier } from '@aztec/circuits.js/hash';
|
|
47
51
|
import { computeAddressSecret } from '@aztec/circuits.js/keys';
|
|
48
52
|
import {
|
|
@@ -236,7 +240,7 @@ export class PXEService implements PXE {
|
|
|
236
240
|
}
|
|
237
241
|
|
|
238
242
|
public async registerContractClass(artifact: ContractArtifact): Promise<void> {
|
|
239
|
-
const
|
|
243
|
+
const contractClassId = await computeContractClassId(await getContractClassFromArtifact(artifact));
|
|
240
244
|
await this.db.addContractArtifact(contractClassId, artifact);
|
|
241
245
|
this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
|
|
242
246
|
}
|
|
@@ -248,9 +252,10 @@ export class PXEService implements PXE {
|
|
|
248
252
|
if (artifact) {
|
|
249
253
|
// If the user provides an artifact, validate it against the expected class id and register it
|
|
250
254
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
251
|
-
|
|
255
|
+
const contractClassId = await computeContractClassId(contractClass);
|
|
256
|
+
if (!contractClassId.equals(instance.contractClassId)) {
|
|
252
257
|
throw new Error(
|
|
253
|
-
`Artifact does not match expected class id (computed ${
|
|
258
|
+
`Artifact does not match expected class id (computed ${contractClassId} but instance refers to ${instance.contractClassId})`,
|
|
254
259
|
);
|
|
255
260
|
}
|
|
256
261
|
const computedAddress = await computeContractAddressFromInstance(instance);
|
|
@@ -258,7 +263,7 @@ export class PXEService implements PXE {
|
|
|
258
263
|
throw new Error('Added a contract in which the address does not match the contract instance.');
|
|
259
264
|
}
|
|
260
265
|
|
|
261
|
-
await this.db.addContractArtifact(
|
|
266
|
+
await this.db.addContractArtifact(contractClassId, artifact);
|
|
262
267
|
|
|
263
268
|
const publicFunctionSignatures = artifact.functions
|
|
264
269
|
.filter(fn => fn.functionType === FunctionType.PUBLIC)
|