@aztec/aztec-node 0.46.7 → 0.47.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/aztec-node/config.d.ts +2 -3
- package/dest/aztec-node/config.d.ts.map +1 -1
- package/dest/aztec-node/config.js +4 -5
- package/dest/aztec-node/server.d.ts +6 -4
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +28 -46
- package/package.json +18 -18
- package/src/aztec-node/config.ts +4 -7
- package/src/aztec-node/server.ts +30 -60
- package/dest/aztec-node/simulator-factory.d.ts +0 -5
- package/dest/aztec-node/simulator-factory.d.ts.map +0 -1
- package/dest/aztec-node/simulator-factory.js +0 -18
- package/src/aztec-node/simulator-factory.ts +0 -26
|
@@ -2,16 +2,15 @@ import { type ArchiverConfig } from '@aztec/archiver';
|
|
|
2
2
|
import { type P2PConfig } from '@aztec/p2p';
|
|
3
3
|
import { type ProverClientConfig } from '@aztec/prover-client';
|
|
4
4
|
import { type SequencerClientConfig } from '@aztec/sequencer-client';
|
|
5
|
+
import { type WorldStateConfig } from '@aztec/world-state';
|
|
5
6
|
/**
|
|
6
7
|
* The configuration the aztec node.
|
|
7
8
|
*/
|
|
8
|
-
export type AztecNodeConfig = ArchiverConfig & SequencerClientConfig & ProverClientConfig & P2PConfig & {
|
|
9
|
+
export type AztecNodeConfig = ArchiverConfig & SequencerClientConfig & ProverClientConfig & WorldStateConfig & P2PConfig & {
|
|
9
10
|
/** Whether the sequencer is disabled for this node. */
|
|
10
11
|
disableSequencer: boolean;
|
|
11
12
|
/** Whether the prover is disabled for this node. */
|
|
12
13
|
disableProver: boolean;
|
|
13
|
-
/** A URL for an archiver service that the node will use. */
|
|
14
|
-
archiverUrl?: string;
|
|
15
14
|
};
|
|
16
15
|
/**
|
|
17
16
|
* Returns the config of the aztec node from environment variables with reasonable defaults.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/aztec-node/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/aztec-node/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA+C,MAAM,iBAAiB,CAAC;AACnG,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,KAAK,qBAAqB,EAAwC,MAAM,yBAAyB,CAAC;AAC3G,OAAO,EAAE,KAAK,gBAAgB,EAAmD,MAAM,oBAAoB,CAAC;AAM5G;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,GAC1C,qBAAqB,GACrB,kBAAkB,GAClB,gBAAgB,GAChB,SAAS,GAAG;IACV,uDAAuD;IACvD,gBAAgB,EAAE,OAAO,CAAC;IAE1B,oDAAoD;IACpD,aAAa,EAAE,OAAO,CAAC;CACxB,CAAC;AAEJ;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,CAclD;AAED;;GAEG;AACH,wBAAgB,cAAc;;;EAI7B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getArchiverConfigFromEnv as getArchiverVars } from '@aztec/archiver';
|
|
2
2
|
import { getP2PConfigEnvVars } from '@aztec/p2p';
|
|
3
3
|
import { getProverEnvVars } from '@aztec/prover-client';
|
|
4
4
|
import { getConfigEnvVars as getSequencerVars } from '@aztec/sequencer-client';
|
|
5
|
-
import {
|
|
5
|
+
import { getWorldStateConfigFromEnv as getWorldStateVars } from '@aztec/world-state';
|
|
6
6
|
import { readFileSync } from 'fs';
|
|
7
7
|
import { dirname, resolve } from 'path';
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
@@ -11,7 +11,7 @@ import { fileURLToPath } from 'url';
|
|
|
11
11
|
* @returns A valid aztec node config.
|
|
12
12
|
*/
|
|
13
13
|
export function getConfigEnvVars() {
|
|
14
|
-
const { SEQ_DISABLED, PROVER_DISABLED = ''
|
|
14
|
+
const { SEQ_DISABLED, PROVER_DISABLED = '' } = process.env;
|
|
15
15
|
const allEnvVars = {
|
|
16
16
|
...getSequencerVars(),
|
|
17
17
|
...getArchiverVars(),
|
|
@@ -19,7 +19,6 @@ export function getConfigEnvVars() {
|
|
|
19
19
|
...getWorldStateVars(),
|
|
20
20
|
...getProverEnvVars(),
|
|
21
21
|
disableSequencer: !!SEQ_DISABLED,
|
|
22
|
-
archiverUrl: ARCHIVER_URL,
|
|
23
22
|
disableProver: ['1', 'true'].includes(PROVER_DISABLED),
|
|
24
23
|
};
|
|
25
24
|
return allEnvVars;
|
|
@@ -32,4 +31,4 @@ export function getPackageInfo() {
|
|
|
32
31
|
const { version, name } = JSON.parse(readFileSync(packageJsonPath).toString());
|
|
33
32
|
return { version, name };
|
|
34
33
|
}
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F6dGVjLW5vZGUvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsd0JBQXdCLElBQUksZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFrQixtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNqRSxPQUFPLEVBQTJCLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakYsT0FBTyxFQUE4QixnQkFBZ0IsSUFBSSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNHLE9BQU8sRUFBeUIsMEJBQTBCLElBQUksaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFpQnBDOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0I7SUFDOUIsTUFBTSxFQUFFLFlBQVksRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztJQUUzRCxNQUFNLFVBQVUsR0FBb0I7UUFDbEMsR0FBRyxnQkFBZ0IsRUFBRTtRQUNyQixHQUFHLGVBQWUsRUFBRTtRQUNwQixHQUFHLG1CQUFtQixFQUFFO1FBQ3hCLEdBQUcsaUJBQWlCLEVBQUU7UUFDdEIsR0FBRyxnQkFBZ0IsRUFBRTtRQUNyQixnQkFBZ0IsRUFBRSxDQUFDLENBQUMsWUFBWTtRQUNoQyxhQUFhLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztLQUN2RCxDQUFDO0lBRUYsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWM7SUFDNUIsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDL0YsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9FLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDM0IsQ0FBQyJ9
|
|
@@ -46,6 +46,7 @@ export declare class AztecNodeService implements AztecNode {
|
|
|
46
46
|
*/
|
|
47
47
|
getSequencer(): SequencerClient | undefined;
|
|
48
48
|
getProver(): ProverClient | undefined;
|
|
49
|
+
getBlockSource(): L2BlockSource;
|
|
49
50
|
/**
|
|
50
51
|
* Method to return the currently deployed L1 contract addresses.
|
|
51
52
|
* @returns - The currently deployed L1 contract addresses.
|
|
@@ -74,6 +75,7 @@ export declare class AztecNodeService implements AztecNode {
|
|
|
74
75
|
* @returns The block number.
|
|
75
76
|
*/
|
|
76
77
|
getBlockNumber(): Promise<number>;
|
|
78
|
+
getProvenBlockNumber(): Promise<number>;
|
|
77
79
|
/**
|
|
78
80
|
* Method to fetch the version of the package.
|
|
79
81
|
* @returns The node package version
|
|
@@ -122,11 +124,11 @@ export declare class AztecNodeService implements AztecNode {
|
|
|
122
124
|
*/
|
|
123
125
|
getPendingTxs(): Promise<Tx[]>;
|
|
124
126
|
/**
|
|
125
|
-
* Method to retrieve a single
|
|
127
|
+
* Method to retrieve a single tx from the mempool or unfinalised chain.
|
|
126
128
|
* @param txHash - The transaction hash to return.
|
|
127
|
-
* @returns - The
|
|
129
|
+
* @returns - The tx if it exists.
|
|
128
130
|
*/
|
|
129
|
-
|
|
131
|
+
getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
130
132
|
/**
|
|
131
133
|
* Find the index of the given leaf in the given tree.
|
|
132
134
|
* @param blockNumber - The block number at which to get the data
|
|
@@ -228,7 +230,7 @@ export declare class AztecNodeService implements AztecNode {
|
|
|
228
230
|
*/
|
|
229
231
|
getPublicStorageAt(contract: AztecAddress, slot: Fr, blockNumber: L2BlockNumber): Promise<Fr>;
|
|
230
232
|
/**
|
|
231
|
-
* Returns the currently committed block header.
|
|
233
|
+
* Returns the currently committed block header, or the initial header if no blocks have been produced.
|
|
232
234
|
* @returns The current committed block header.
|
|
233
235
|
*/
|
|
234
236
|
getHeader(): Promise<Header>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,OAAO,EACP,YAAY,EACZ,0BAA0B,EAC1B,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,eAAe,EACpB,WAAW,EACX,KAAK,EAAE,EACP,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,SAAS,EAET,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,KAAK,cAAc,EAEnB,EAAE,EACF,KAAK,MAAM,EAEX,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAG1B,KAAK,uBAAuB,EAE7B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI/D,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var _AztecNodeService_instances, _AztecNodeService_getWorldState, _AztecNodeService_syncWorldState;
|
|
2
2
|
import { __classPrivateFieldGet } from "tslib";
|
|
3
|
-
import {
|
|
3
|
+
import { createArchiver } from '@aztec/archiver';
|
|
4
4
|
import { BBCircuitVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
|
|
5
5
|
import { AggregateTxValidator, LogType, MerkleTreeId, NullifierMembershipWitness, PublicDataWitness, PublicSimulationOutput, SiblingPath, TxReceipt, TxStatus, partitionReverts, } from '@aztec/circuit-types';
|
|
6
6
|
import { EthAddress, Fr, INITIAL_L2_BLOCK_NUM, NUMBER_OF_L1_L2_MESSAGES_PER_ROLLUP, } from '@aztec/circuits.js';
|
|
@@ -10,8 +10,7 @@ import { AztecAddress } from '@aztec/foundation/aztec-address';
|
|
|
10
10
|
import { padArrayEnd } from '@aztec/foundation/collection';
|
|
11
11
|
import { sha256Trunc } from '@aztec/foundation/crypto';
|
|
12
12
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
13
|
-
import {
|
|
14
|
-
import { initStoreForRollup, openTmpStore } from '@aztec/kv-store/utils';
|
|
13
|
+
import { createStore, openTmpStore } from '@aztec/kv-store/utils';
|
|
15
14
|
import { SHA256Trunc, StandardTree, UnbalancedTree } from '@aztec/merkle-tree';
|
|
16
15
|
import { AztecKVTxPool, createP2PClient } from '@aztec/p2p';
|
|
17
16
|
import { getCanonicalClassRegisterer } from '@aztec/protocol-contracts/class-registerer';
|
|
@@ -19,13 +18,12 @@ import { getCanonicalGasToken } from '@aztec/protocol-contracts/gas-token';
|
|
|
19
18
|
import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer';
|
|
20
19
|
import { getCanonicalKeyRegistryAddress } from '@aztec/protocol-contracts/key-registry';
|
|
21
20
|
import { getCanonicalMultiCallEntrypointAddress } from '@aztec/protocol-contracts/multi-call-entrypoint';
|
|
22
|
-
import {
|
|
21
|
+
import { createProverClient } from '@aztec/prover-client';
|
|
23
22
|
import { SequencerClient, getGlobalVariableBuilder } from '@aztec/sequencer-client';
|
|
24
|
-
import { PublicProcessorFactory, WASMSimulator } from '@aztec/simulator';
|
|
23
|
+
import { PublicProcessorFactory, WASMSimulator, createSimulationProvider } from '@aztec/simulator';
|
|
25
24
|
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
26
|
-
import { MerkleTrees,
|
|
25
|
+
import { MerkleTrees, createWorldStateSynchronizer } from '@aztec/world-state';
|
|
27
26
|
import { getPackageInfo } from './config.js';
|
|
28
|
-
import { getSimulationProvider } from './simulator-factory.js';
|
|
29
27
|
import { MetadataTxValidator } from './tx_validator/tx_metadata_validator.js';
|
|
30
28
|
import { TxProofValidator } from './tx_validator/tx_proof_validator.js';
|
|
31
29
|
/**
|
|
@@ -72,36 +70,21 @@ export class AztecNodeService {
|
|
|
72
70
|
if (config.l1ChainId !== ethereumChain.chainInfo.id) {
|
|
73
71
|
throw new Error(`RPC URL configured for chain id ${ethereumChain.chainInfo.id} but expected id ${config.l1ChainId}`);
|
|
74
72
|
}
|
|
75
|
-
const store = await
|
|
76
|
-
|
|
77
|
-
if (!config.archiverUrl) {
|
|
78
|
-
// first create and sync the archiver
|
|
79
|
-
const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
|
|
80
|
-
archiver = await Archiver.createAndSync(config, archiverStore, telemetry, true);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
archiver = createArchiverClient(config.archiverUrl);
|
|
84
|
-
}
|
|
73
|
+
const store = await createStore(config, config.l1Contracts.rollupAddress, storeLog);
|
|
74
|
+
const archiver = await createArchiver(config, store, telemetry, { blockUntilSync: true });
|
|
85
75
|
// we identify the P2P transaction protocol by using the rollup contract address.
|
|
86
76
|
// this may well change in future
|
|
87
77
|
config.transactionProtocol = `/aztec/tx/${config.l1Contracts.rollupAddress.toString()}`;
|
|
88
78
|
// create the tx pool and the p2p client, which will need the l2 block source
|
|
89
|
-
const p2pClient = await createP2PClient(
|
|
79
|
+
const p2pClient = await createP2PClient(config, store, new AztecKVTxPool(store, telemetry), archiver);
|
|
90
80
|
// now create the merkle trees and the world state synchronizer
|
|
91
|
-
const
|
|
92
|
-
const worldStateConfig = getWorldStateConfig();
|
|
93
|
-
const worldStateSynchronizer = new ServerWorldStateSynchronizer(store, merkleTrees, archiver, worldStateConfig);
|
|
81
|
+
const worldStateSynchronizer = await createWorldStateSynchronizer(config, store, archiver);
|
|
94
82
|
// start both and wait for them to sync from the block source
|
|
95
83
|
await Promise.all([p2pClient.start(), worldStateSynchronizer.start()]);
|
|
96
84
|
const proofVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier();
|
|
97
85
|
const txValidator = new AggregateTxValidator(new MetadataTxValidator(config.l1ChainId), new TxProofValidator(proofVerifier));
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
const prover = config.disableProver
|
|
101
|
-
? undefined
|
|
102
|
-
: await TxProver.new(config, worldStateSynchronizer, telemetry, await archiver
|
|
103
|
-
.getBlock(-1)
|
|
104
|
-
.then(b => b?.header ?? worldStateSynchronizer.getCommitted().buildInitialHeader()));
|
|
86
|
+
const simulationProvider = await createSimulationProvider(config, log);
|
|
87
|
+
const prover = await createProverClient(config, worldStateSynchronizer, archiver, telemetry);
|
|
105
88
|
if (!prover && !config.disableSequencer) {
|
|
106
89
|
throw new Error("Can't start a sequencer without a prover");
|
|
107
90
|
}
|
|
@@ -121,6 +104,9 @@ export class AztecNodeService {
|
|
|
121
104
|
getProver() {
|
|
122
105
|
return this.prover;
|
|
123
106
|
}
|
|
107
|
+
getBlockSource() {
|
|
108
|
+
return this.blockSource;
|
|
109
|
+
}
|
|
124
110
|
/**
|
|
125
111
|
* Method to return the currently deployed L1 contract addresses.
|
|
126
112
|
* @returns - The currently deployed L1 contract addresses.
|
|
@@ -159,6 +145,9 @@ export class AztecNodeService {
|
|
|
159
145
|
async getBlockNumber() {
|
|
160
146
|
return await this.blockSource.getBlockNumber();
|
|
161
147
|
}
|
|
148
|
+
async getProvenBlockNumber() {
|
|
149
|
+
return await this.blockSource.getProvenBlockNumber();
|
|
150
|
+
}
|
|
162
151
|
/**
|
|
163
152
|
* Method to fetch the version of the package.
|
|
164
153
|
* @returns The node package version
|
|
@@ -223,8 +212,7 @@ export class AztecNodeService {
|
|
|
223
212
|
// We first check if the tx is in pending (instead of first checking if it is mined) because if we first check
|
|
224
213
|
// for mined and then for pending there could be a race condition where the tx is mined between the two checks
|
|
225
214
|
// and we would incorrectly return a TxReceipt with status DROPPED
|
|
226
|
-
|
|
227
|
-
if (pendingTx) {
|
|
215
|
+
if (this.p2pClient.getTxStatus(txHash) === 'pending') {
|
|
228
216
|
txReceipt = new TxReceipt(txHash, TxStatus.PENDING, '');
|
|
229
217
|
}
|
|
230
218
|
const settledTxReceipt = await this.blockSource.getSettledTxReceipt(txHash);
|
|
@@ -252,16 +240,16 @@ export class AztecNodeService {
|
|
|
252
240
|
* Method to retrieve pending txs.
|
|
253
241
|
* @returns - The pending txs.
|
|
254
242
|
*/
|
|
255
|
-
|
|
256
|
-
return
|
|
243
|
+
getPendingTxs() {
|
|
244
|
+
return Promise.resolve(this.p2pClient.getTxs('pending'));
|
|
257
245
|
}
|
|
258
246
|
/**
|
|
259
|
-
* Method to retrieve a single
|
|
247
|
+
* Method to retrieve a single tx from the mempool or unfinalised chain.
|
|
260
248
|
* @param txHash - The transaction hash to return.
|
|
261
|
-
* @returns - The
|
|
249
|
+
* @returns - The tx if it exists.
|
|
262
250
|
*/
|
|
263
|
-
|
|
264
|
-
return
|
|
251
|
+
getTxByHash(txHash) {
|
|
252
|
+
return Promise.resolve(this.p2pClient.getTxByHash(txHash));
|
|
265
253
|
}
|
|
266
254
|
/**
|
|
267
255
|
* Find the index of the given leaf in the given tree.
|
|
@@ -477,17 +465,11 @@ export class AztecNodeService {
|
|
|
477
465
|
return preimage.value;
|
|
478
466
|
}
|
|
479
467
|
/**
|
|
480
|
-
* Returns the currently committed block header.
|
|
468
|
+
* Returns the currently committed block header, or the initial header if no blocks have been produced.
|
|
481
469
|
* @returns The current committed block header.
|
|
482
470
|
*/
|
|
483
471
|
async getHeader() {
|
|
484
|
-
|
|
485
|
-
if (block) {
|
|
486
|
-
return block.header;
|
|
487
|
-
}
|
|
488
|
-
// No block was not found so we build the initial header.
|
|
489
|
-
const committedDb = await __classPrivateFieldGet(this, _AztecNodeService_instances, "m", _AztecNodeService_getWorldState).call(this, 'latest');
|
|
490
|
-
return await committedDb.buildInitialHeader();
|
|
472
|
+
return (await this.getBlock(-1))?.header ?? (await __classPrivateFieldGet(this, _AztecNodeService_instances, "m", _AztecNodeService_getWorldState).call(this, 'latest')).getInitialHeader();
|
|
491
473
|
}
|
|
492
474
|
/**
|
|
493
475
|
* Simulates the public part of a transaction with the current state.
|
|
@@ -506,7 +488,7 @@ export class AztecNodeService {
|
|
|
506
488
|
// So simulation of public functions doesn't affect the merkle trees.
|
|
507
489
|
const merkleTrees = await MerkleTrees.new(this.merkleTreesDb, this.log);
|
|
508
490
|
const publicProcessorFactory = new PublicProcessorFactory(merkleTrees.asLatest(), this.contractDataSource, new WASMSimulator(), this.telemetry);
|
|
509
|
-
const processor =
|
|
491
|
+
const processor = publicProcessorFactory.create(prevHeader, newGlobalVariables);
|
|
510
492
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
511
493
|
const [processedTxs, failedTxs, returns] = await processor.process([tx]);
|
|
512
494
|
// REFACTOR: Consider returning the error/revert rather than throwing
|
|
@@ -585,4 +567,4 @@ async function _AztecNodeService_syncWorldState() {
|
|
|
585
567
|
const blockSourceHeight = await this.blockSource.getBlockNumber();
|
|
586
568
|
return this.worldStateSynchronizer.syncImmediate(blockSourceHeight);
|
|
587
569
|
};
|
|
588
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F6dGVjLW5vZGUvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFzQixRQUFRLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMxRSxPQUFPLEVBQ0wsb0JBQW9CLEVBV3BCLE9BQU8sRUFDUCxZQUFZLEVBQ1osMEJBQTBCLEVBRzFCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFFdEIsV0FBVyxFQUlYLFNBQVMsRUFDVCxRQUFRLEVBRVIsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUVMLFVBQVUsRUFDVixFQUFFLEVBRUYsb0JBQW9CLEVBSXBCLG1DQUFtQyxHQUlwQyxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hFLE9BQU8sRUFBNEIsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVoRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxhQUFhLEVBQVksZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzNGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQThCLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2hILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQU9uRSxPQUFPLEVBQ0wsV0FBVyxFQUNYLDRCQUE0QixFQUc1QixnQkFBZ0IsSUFBSSxtQkFBbUIsR0FDeEMsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQXdCLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RTs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFDWSxNQUF1QixFQUNkLFNBQWMsRUFDZCxXQUEwQixFQUMxQixtQkFBaUMsRUFDakMscUJBQW1DLEVBQ25DLGtCQUFzQyxFQUN0QyxtQkFBd0MsRUFDeEMsc0JBQThDLEVBQzlDLFNBQXNDLEVBQ3RDLFNBQWlCLEVBQ2pCLE9BQWUsRUFDZixxQkFBNEMsRUFDNUMsYUFBMkIsRUFDN0IsTUFBZ0MsRUFDekMsV0FBd0IsRUFDeEIsU0FBMEIsRUFDMUIsTUFBTSxpQkFBaUIsQ0FBQyxZQUFZLENBQUM7O1FBaEJuQyxXQUFNLEdBQU4sTUFBTSxDQUFpQjtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQUs7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBZTtRQUMxQix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQWM7UUFDakMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFjO1FBQ25DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQTZCO1FBQ3RDLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFDN0IsV0FBTSxHQUFOLE1BQU0sQ0FBMEI7UUFDekMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsUUFBRyxHQUFILEdBQUcsQ0FBa0M7UUFFN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQ1gsc0NBQXNDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLHNCQUFzQjtZQUNsRixXQUFXLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJO1lBQzFELGFBQWEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUk7WUFDOUQsVUFBVSxNQUFNLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsSUFBSTtZQUN4RCxXQUFXLE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJO1lBQzFELHdCQUF3QixNQUFNLENBQUMsV0FBVyxDQUFDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUM7UUFDcEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDL0IsTUFBdUIsRUFDdkIsU0FBMkIsRUFDM0IsR0FBRyxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxFQUNyQyxRQUFRLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLENBQUM7UUFFL0MsU0FBUyxLQUFULFNBQVMsR0FBSyxJQUFJLG1CQUFtQixFQUFFLEVBQUM7UUFDeEMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0UsMkVBQTJFO1FBQzNFLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BELE1BQU0sSUFBSSxLQUFLLENBQ2IsbUNBQW1DLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxvQkFBb0IsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUNwRyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sa0JBQWtCLENBQ3BDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEVBQzFELE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUNoQyxRQUFRLENBQ1QsQ0FBQztRQUVGLElBQUksUUFBdUIsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3hCLHFDQUFxQztZQUNyQyxNQUFNLGFBQWEsR0FBRyxJQUFJLG1CQUFtQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckUsUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNsRixDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELGlGQUFpRjtRQUNqRixpQ0FBaUM7UUFDakMsTUFBTSxDQUFDLG1CQUFtQixHQUFHLGFBQWEsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztRQUV4Riw2RUFBNkU7UUFDN0UsTUFBTSxTQUFTLEdBQUcsTUFBTSxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLGFBQWEsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFdEcsK0RBQStEO1FBQy9ELE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNLGdCQUFnQixHQUFxQixtQkFBbUIsRUFBRSxDQUFDO1FBQ2pFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhILDZEQUE2RDtRQUM3RCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZFLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0saUJBQWlCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDMUcsTUFBTSxXQUFXLEdBQUcsSUFBSSxvQkFBb0IsQ0FDMUMsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQ3pDLElBQUksZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQ3BDLENBQUM7UUFFRiwyQ0FBMkM7UUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsYUFBYTtZQUNqQyxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxNQUFNLFFBQVEsQ0FBQyxHQUFHLENBQ2hCLE1BQU0sRUFDTixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULE1BQU0sUUFBUTtpQkFDWCxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ1osSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLE1BQU0sSUFBSSxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQ3RGLENBQUM7UUFFTixJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQjtZQUN2QyxDQUFDLENBQUMsU0FBUztZQUNYLENBQUMsQ0FBQyxNQUFNLGVBQWUsQ0FBQyxHQUFHLENBQ3ZCLE1BQU0sRUFDTixTQUFTLEVBQ1Qsc0JBQXNCLEVBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU8sRUFDUCxrQkFBa0IsRUFDbEIsU0FBUyxDQUNWLENBQUM7UUFFTixPQUFPLElBQUksZ0JBQWdCLENBQ3pCLE1BQU0sRUFDTixTQUFTLEVBQ1QsUUFBUSxFQUNSLFFBQVEsRUFDUixRQUFRLEVBQ1IsUUFBUSxFQUNSLFFBQVEsRUFDUixzQkFBc0IsRUFDdEIsU0FBUyxFQUNULGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUMxQixNQUFNLENBQUMsT0FBTyxFQUNkLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUNoQyxLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxDQUNKLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHNCQUFzQjtRQUMzQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBYztRQUNsQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUNoRCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxjQUFjO1FBQ3pCLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7O09BR0c7SUFDSSxjQUFjO1FBQ25CLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFVBQVU7UUFDZixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxVQUFVO1FBQ2YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsRUFBTTtRQUM1QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXFCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksT0FBTyxDQUNaLElBQVksRUFDWixLQUFhLEVBQ2IsT0FBZ0I7UUFFaEIsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3hHLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBb0QsQ0FBQztJQUNwRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtCQUFrQixDQUFDLE1BQWlCO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQU07UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLE1BQU0sQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLCtCQUErQixDQUFDLENBQUM7WUFDN0UsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLElBQUksQ0FBQyxTQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQWM7UUFDdEMsSUFBSSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUVuRiw4R0FBOEc7UUFDOUcsOEdBQThHO1FBQzlHLGtFQUFrRTtRQUNsRSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RSxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDckIsU0FBUyxHQUFHLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sV0FBVyxDQUFDLE1BQWM7UUFDL0IsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGFBQWE7UUFDeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxTQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsTUFBYztRQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDLFNBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxhQUFhLENBQ3hCLFdBQTBCLEVBQzFCLE1BQW9CLEVBQ3BCLFNBQWE7UUFFYixNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFBLElBQUksb0VBQWUsTUFBbkIsSUFBSSxFQUFnQixXQUFXLENBQUMsQ0FBQztRQUMzRCxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyx1QkFBdUIsQ0FDbEMsV0FBMEIsRUFDMUIsU0FBaUI7UUFFakIsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBQSxJQUFJLG9FQUFlLE1BQW5CLElBQUksRUFBZ0IsV0FBVyxDQUFDLENBQUM7UUFDM0QsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLHNCQUFzQixDQUNqQyxXQUEwQixFQUMxQixTQUFpQjtRQUVqQixNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFBLElBQUksb0VBQWUsTUFBbkIsSUFBSSxFQUFnQixXQUFXLENBQUMsQ0FBQztRQUMzRCxPQUFPLFdBQVcsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLGlDQUFpQyxDQUM1QyxXQUEwQixFQUMxQixhQUFpQixFQUNqQixVQUFVLEdBQUcsRUFBRTtRQUVmLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBQSxJQUFJLG9FQUFlLE1BQW5CLElBQUksRUFBZ0IsV0FBVyxDQUFDLENBQUM7UUFDM0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsY0FBYyxDQUNsRCxZQUFZLENBQUMscUJBQXFCLEVBQ2xDLEtBQUssQ0FDTixDQUFDO1FBQ0YsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxLQUFLLENBQUMscUJBQXFCLENBQUMsYUFBaUIsRUFBRSxrQkFBa0IsR0FBRyxvQkFBb0I7UUFDN0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDbkgsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQztJQUN6RyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksS0FBSyxDQUFDLGlDQUFpQyxDQUM1QyxXQUEwQixFQUMxQixhQUFpQjtRQUVqQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVwSCxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqRix3QkFBd0I7UUFDeEIsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25ELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDN0QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6RCxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO1FBQzNGLENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxjQUFjLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUN0QyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQzVFLE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUMzQixZQUFZLENBQUMsSUFBSSxDQUFDLEVBQ2xCLElBQUksV0FBVyxFQUFFLEVBQ2pCLHNCQUFzQixDQUFDLEVBQUUsRUFDekIsVUFBVSxFQUNWLEVBQUUsRUFDRixFQUFFLENBQ0gsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRiwrRUFBK0U7UUFDL0UsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxjQUFjLENBQ2xGLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUMzQixJQUFJLENBQ0wsQ0FBQztRQUVGLElBQUksa0JBQWtCLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakYsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsa0JBQWtCLEdBQUcsV0FBVyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN0RSw4RkFBOEY7UUFDOUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxXQUFXLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMUcsTUFBTSxXQUFXLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFbkQsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1Ryw0Q0FBNEM7UUFDNUMsTUFBTSxVQUFVLEdBQUcsMEJBQTBCLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDNUcsNEVBQTRFO1FBQzVFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FDMUIsWUFBWTthQUNULFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDWCxNQUFNLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDakcsQ0FBQyxDQUNGLENBQUM7UUFFRixPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLFdBQTBCLEVBQzFCLFNBQWlCO1FBRWpCLE1BQU0sV0FBVyxHQUFHLE1BQU0sdUJBQUEsSUFBSSxvRUFBZSxNQUFuQixJQUFJLEVBQWdCLFdBQVcsQ0FBQyxDQUFDO1FBQzNELE9BQU8sV0FBVyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLEtBQUssQ0FBQyx3QkFBd0IsQ0FDbkMsV0FBMEIsRUFDMUIsU0FBaUI7UUFFakIsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBQSxJQUFJLG9FQUFlLE1BQW5CLElBQUksRUFBZ0IsV0FBVyxDQUFDLENBQUM7UUFDM0QsT0FBTyxXQUFXLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsNkJBQTZCLENBQ3hDLFdBQTBCLEVBQzFCLFNBQWE7UUFFYixNQUFNLEVBQUUsR0FBRyxNQUFNLHVCQUFBLElBQUksb0VBQWUsTUFBbkIsSUFBSSxFQUFnQixXQUFXLENBQUMsQ0FBQztRQUNsRCxNQUFNLEtBQUssR0FBRyxNQUFNLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkYsTUFBTSxrQkFBa0IsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUMxQyxZQUFZLENBQUMsY0FBYyxFQUMzQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQ2QsQ0FBQztRQUVGLE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRWpHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxJQUFJLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFxQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7OztPQWFHO0lBQ0ksS0FBSyxDQUFDLGdDQUFnQyxDQUMzQyxXQUEwQixFQUMxQixTQUFhO1FBRWIsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBQSxJQUFJLG9FQUFlLE1BQW5CLElBQUksRUFBZ0IsV0FBVyxDQUFDLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxXQUFXLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsVUFBVSxDQUFDO1FBQzdDLElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxTQUFTLENBQUMsUUFBUSxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUNELE1BQU0sWUFBWSxHQUFHLENBQUMsTUFBTSxXQUFXLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUUsQ0FBQztRQUU5RixNQUFNLFdBQVcsR0FBRyxNQUFNLFdBQVcsQ0FBQyxjQUFjLENBQ2xELFlBQVksQ0FBQyxjQUFjLEVBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDZCxDQUFDO1FBQ0YsT0FBTyxJQUFJLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxZQUFxQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzNHLENBQUM7SUFFRCxLQUFLLENBQUMsd0JBQXdCLENBQUMsV0FBMEIsRUFBRSxRQUFZO1FBQ3JFLE1BQU0sV0FBVyxHQUFHLE1BQU0sdUJBQUEsSUFBSSxvRUFBZSxNQUFuQixJQUFJLEVBQWdCLFdBQVcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sYUFBYSxHQUFHLE1BQU0sV0FBVyxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLGVBQWUsQ0FDakQsWUFBWSxDQUFDLGdCQUFnQixFQUM3QixhQUFhLENBQUMsS0FBSyxDQUNwQixDQUErQixDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsQ0FDM0MsWUFBWSxDQUFDLGdCQUFnQixFQUM3QixhQUFhLENBQUMsS0FBSyxDQUNwQixDQUFDO1lBQ0YsT0FBTyxJQUFJLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFzQixFQUFFLElBQVEsRUFBRSxXQUEwQjtRQUMxRixNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFBLElBQUksb0VBQWUsTUFBbkIsSUFBSSxFQUFnQixXQUFXLENBQUMsQ0FBQztRQUMzRCxNQUFNLFFBQVEsR0FBRyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxXQUFXLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2xILElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ2pCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sV0FBVyxDQUFDLGVBQWUsQ0FDakQsWUFBWSxDQUFDLGdCQUFnQixFQUM3QixhQUFhLENBQUMsS0FBSyxDQUNwQixDQUErQixDQUFDO1FBQ2pDLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLFNBQVM7UUFDcEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUN0QixDQUFDO1FBRUQseURBQXlEO1FBQ3pELE1BQU0sV0FBVyxHQUFHLE1BQU0sdUJBQUEsSUFBSSxvRUFBZSxNQUFuQixJQUFJLEVBQWdCLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sTUFBTSxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7OztRQUdJO0lBQ0csS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQU07UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbEUsb0ZBQW9GO1FBQ3BGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDN0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQztRQUV2RSxNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUM5RSxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFDbkIsUUFBUSxFQUNSLFlBQVksQ0FDYixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7UUFFakUsc0ZBQXNGO1FBQ3RGLDBHQUEwRztRQUMxRyxxRUFBcUU7UUFDckUsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxzQkFBc0IsQ0FDdkQsV0FBVyxDQUFDLFFBQVEsRUFBRSxFQUN0QixJQUFJLENBQUMsa0JBQWtCLEVBQ3ZCLElBQUksYUFBYSxFQUFFLEVBQ25CLElBQUksQ0FBQyxTQUFTLENBQ2YsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RGLGtFQUFrRTtRQUNsRSxNQUFNLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxNQUFNLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLHFFQUFxRTtRQUNyRSxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsU0FBUyxFQUFFLGFBQWEsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDckYsTUFBTSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMxRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsWUFBWSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxzQkFBc0IsQ0FDL0IsV0FBVyxDQUFDLGFBQWEsRUFDekIsV0FBVyxDQUFDLGVBQWUsRUFDM0IsV0FBVyxDQUFDLFlBQVksRUFDeEIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQzFCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUNwQixPQUFPLEVBQ1AsV0FBVyxDQUFDLE9BQU8sQ0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQStDO1FBQ3BFLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxNQUFNLElBQUksQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUMsSUFBSSxTQUFTLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUU3RyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksb0JBQW9CLENBQ3pDLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUN2QyxJQUFJLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUNwQyxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFTSw0QkFBNEI7UUFDakMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxDQUFDLE9BQU87WUFDdEQsUUFBUSxFQUFFLG9CQUFvQixFQUFFLENBQUMsT0FBTztZQUN4QyxnQkFBZ0IsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLE9BQU87WUFDeEQsV0FBVyxFQUFFLDhCQUE4QixFQUFFO1lBQzdDLG1CQUFtQixFQUFFLHNDQUFzQyxFQUFFO1NBQzlELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxPQUFxQixFQUFFLFFBQTBCO1FBQzFFLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN4RSxDQUFDO0NBd0NGOztBQXRDQzs7OztHQUlHO0FBQ0gsS0FBSywwQ0FBZ0IsV0FBMEI7SUFDN0MsSUFBSSxPQUFPLFdBQVcsS0FBSyxRQUFRLElBQUksV0FBVyxHQUFHLG9CQUFvQixFQUFFLENBQUM7UUFDMUUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsSUFBSSxhQUFhLEdBQVcsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQztRQUNILCtDQUErQztRQUMvQyxhQUFhLEdBQUcsTUFBTSx1QkFBQSxJQUFJLHFFQUFnQixNQUFwQixJQUFJLENBQWtCLENBQUM7SUFDL0MsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsdUVBQXVFO0lBQ3ZFLElBQUksV0FBVyxLQUFLLFFBQVEsSUFBSSxXQUFXLEtBQUssYUFBYSxFQUFFLENBQUM7UUFDOUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLFdBQVcsNkJBQTZCLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDeEcsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEQsQ0FBQztTQUFNLElBQUksV0FBVyxHQUFHLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLDRCQUE0QixXQUFXLDZCQUE2QixhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RCxDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxXQUFXLGlCQUFpQixDQUFDLENBQUM7SUFDekQsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxLQUFLO0lBQ0gsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDbEUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDdEUsQ0FBQyJ9
|
|
570
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F6dGVjLW5vZGUvc2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFFLE9BQU8sRUFDTCxvQkFBb0IsRUFXcEIsT0FBTyxFQUNQLFlBQVksRUFDWiwwQkFBMEIsRUFHMUIsaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUV0QixXQUFXLEVBSVgsU0FBUyxFQUNULFFBQVEsRUFFUixnQkFBZ0IsR0FDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBRUwsVUFBVSxFQUNWLEVBQUUsRUFFRixvQkFBb0IsRUFJcEIsbUNBQW1DLEdBSXBDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUE0QixtQkFBbUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWhGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0UsT0FBTyxFQUFFLGFBQWEsRUFBWSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdEUsT0FBTyxFQUFFLDJCQUEyQixF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec-node",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.47.0",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": "./dest/index.js",
|
|
@@ -56,23 +56,23 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/archiver": "0.
|
|
60
|
-
"@aztec/bb-prover": "0.
|
|
61
|
-
"@aztec/circuit-types": "0.
|
|
62
|
-
"@aztec/circuits.js": "0.
|
|
63
|
-
"@aztec/ethereum": "0.
|
|
64
|
-
"@aztec/foundation": "0.
|
|
65
|
-
"@aztec/kv-store": "0.
|
|
66
|
-
"@aztec/l1-artifacts": "0.
|
|
67
|
-
"@aztec/merkle-tree": "0.
|
|
68
|
-
"@aztec/p2p": "0.
|
|
69
|
-
"@aztec/protocol-contracts": "0.
|
|
70
|
-
"@aztec/prover-client": "0.
|
|
71
|
-
"@aztec/sequencer-client": "0.
|
|
72
|
-
"@aztec/simulator": "0.
|
|
73
|
-
"@aztec/telemetry-client": "0.
|
|
74
|
-
"@aztec/types": "0.
|
|
75
|
-
"@aztec/world-state": "0.
|
|
59
|
+
"@aztec/archiver": "0.47.0",
|
|
60
|
+
"@aztec/bb-prover": "0.47.0",
|
|
61
|
+
"@aztec/circuit-types": "0.47.0",
|
|
62
|
+
"@aztec/circuits.js": "0.47.0",
|
|
63
|
+
"@aztec/ethereum": "0.47.0",
|
|
64
|
+
"@aztec/foundation": "0.47.0",
|
|
65
|
+
"@aztec/kv-store": "0.47.0",
|
|
66
|
+
"@aztec/l1-artifacts": "0.47.0",
|
|
67
|
+
"@aztec/merkle-tree": "0.47.0",
|
|
68
|
+
"@aztec/p2p": "0.47.0",
|
|
69
|
+
"@aztec/protocol-contracts": "0.47.0",
|
|
70
|
+
"@aztec/prover-client": "0.47.0",
|
|
71
|
+
"@aztec/sequencer-client": "0.47.0",
|
|
72
|
+
"@aztec/simulator": "0.47.0",
|
|
73
|
+
"@aztec/telemetry-client": "0.47.0",
|
|
74
|
+
"@aztec/types": "0.47.0",
|
|
75
|
+
"@aztec/world-state": "0.47.0",
|
|
76
76
|
"koa": "^2.14.2",
|
|
77
77
|
"koa-router": "^12.0.0",
|
|
78
78
|
"tslib": "^2.4.0"
|
package/src/aztec-node/config.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type ArchiverConfig,
|
|
1
|
+
import { type ArchiverConfig, getArchiverConfigFromEnv as getArchiverVars } from '@aztec/archiver';
|
|
2
2
|
import { type P2PConfig, getP2PConfigEnvVars } from '@aztec/p2p';
|
|
3
3
|
import { type ProverClientConfig, getProverEnvVars } from '@aztec/prover-client';
|
|
4
4
|
import { type SequencerClientConfig, getConfigEnvVars as getSequencerVars } from '@aztec/sequencer-client';
|
|
5
|
-
import {
|
|
5
|
+
import { type WorldStateConfig, getWorldStateConfigFromEnv as getWorldStateVars } from '@aztec/world-state';
|
|
6
6
|
|
|
7
7
|
import { readFileSync } from 'fs';
|
|
8
8
|
import { dirname, resolve } from 'path';
|
|
@@ -14,15 +14,13 @@ import { fileURLToPath } from 'url';
|
|
|
14
14
|
export type AztecNodeConfig = ArchiverConfig &
|
|
15
15
|
SequencerClientConfig &
|
|
16
16
|
ProverClientConfig &
|
|
17
|
+
WorldStateConfig &
|
|
17
18
|
P2PConfig & {
|
|
18
19
|
/** Whether the sequencer is disabled for this node. */
|
|
19
20
|
disableSequencer: boolean;
|
|
20
21
|
|
|
21
22
|
/** Whether the prover is disabled for this node. */
|
|
22
23
|
disableProver: boolean;
|
|
23
|
-
|
|
24
|
-
/** A URL for an archiver service that the node will use. */
|
|
25
|
-
archiverUrl?: string;
|
|
26
24
|
};
|
|
27
25
|
|
|
28
26
|
/**
|
|
@@ -30,7 +28,7 @@ export type AztecNodeConfig = ArchiverConfig &
|
|
|
30
28
|
* @returns A valid aztec node config.
|
|
31
29
|
*/
|
|
32
30
|
export function getConfigEnvVars(): AztecNodeConfig {
|
|
33
|
-
const { SEQ_DISABLED, PROVER_DISABLED = ''
|
|
31
|
+
const { SEQ_DISABLED, PROVER_DISABLED = '' } = process.env;
|
|
34
32
|
|
|
35
33
|
const allEnvVars: AztecNodeConfig = {
|
|
36
34
|
...getSequencerVars(),
|
|
@@ -39,7 +37,6 @@ export function getConfigEnvVars(): AztecNodeConfig {
|
|
|
39
37
|
...getWorldStateVars(),
|
|
40
38
|
...getProverEnvVars(),
|
|
41
39
|
disableSequencer: !!SEQ_DISABLED,
|
|
42
|
-
archiverUrl: ARCHIVER_URL,
|
|
43
40
|
disableProver: ['1', 'true'].includes(PROVER_DISABLED),
|
|
44
41
|
};
|
|
45
42
|
|
package/src/aztec-node/server.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createArchiver } from '@aztec/archiver';
|
|
2
2
|
import { BBCircuitVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
|
|
3
3
|
import {
|
|
4
4
|
AggregateTxValidator,
|
|
@@ -51,8 +51,7 @@ import { padArrayEnd } from '@aztec/foundation/collection';
|
|
|
51
51
|
import { sha256Trunc } from '@aztec/foundation/crypto';
|
|
52
52
|
import { createDebugLogger } from '@aztec/foundation/log';
|
|
53
53
|
import { type AztecKVStore } from '@aztec/kv-store';
|
|
54
|
-
import {
|
|
55
|
-
import { initStoreForRollup, openTmpStore } from '@aztec/kv-store/utils';
|
|
54
|
+
import { createStore, openTmpStore } from '@aztec/kv-store/utils';
|
|
56
55
|
import { SHA256Trunc, StandardTree, UnbalancedTree } from '@aztec/merkle-tree';
|
|
57
56
|
import { AztecKVTxPool, type P2P, createP2PClient } from '@aztec/p2p';
|
|
58
57
|
import { getCanonicalClassRegisterer } from '@aztec/protocol-contracts/class-registerer';
|
|
@@ -60,9 +59,9 @@ import { getCanonicalGasToken } from '@aztec/protocol-contracts/gas-token';
|
|
|
60
59
|
import { getCanonicalInstanceDeployer } from '@aztec/protocol-contracts/instance-deployer';
|
|
61
60
|
import { getCanonicalKeyRegistryAddress } from '@aztec/protocol-contracts/key-registry';
|
|
62
61
|
import { getCanonicalMultiCallEntrypointAddress } from '@aztec/protocol-contracts/multi-call-entrypoint';
|
|
63
|
-
import {
|
|
62
|
+
import { createProverClient } from '@aztec/prover-client';
|
|
64
63
|
import { type GlobalVariableBuilder, SequencerClient, getGlobalVariableBuilder } from '@aztec/sequencer-client';
|
|
65
|
-
import { PublicProcessorFactory, WASMSimulator } from '@aztec/simulator';
|
|
64
|
+
import { PublicProcessorFactory, WASMSimulator, createSimulationProvider } from '@aztec/simulator';
|
|
66
65
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
67
66
|
import { NoopTelemetryClient } from '@aztec/telemetry-client/noop';
|
|
68
67
|
import {
|
|
@@ -71,16 +70,9 @@ import {
|
|
|
71
70
|
type ContractInstanceWithAddress,
|
|
72
71
|
type ProtocolContractAddresses,
|
|
73
72
|
} from '@aztec/types/contracts';
|
|
74
|
-
import {
|
|
75
|
-
MerkleTrees,
|
|
76
|
-
ServerWorldStateSynchronizer,
|
|
77
|
-
type WorldStateConfig,
|
|
78
|
-
type WorldStateSynchronizer,
|
|
79
|
-
getConfigEnvVars as getWorldStateConfig,
|
|
80
|
-
} from '@aztec/world-state';
|
|
73
|
+
import { MerkleTrees, type WorldStateSynchronizer, createWorldStateSynchronizer } from '@aztec/world-state';
|
|
81
74
|
|
|
82
75
|
import { type AztecNodeConfig, getPackageInfo } from './config.js';
|
|
83
|
-
import { getSimulationProvider } from './simulator-factory.js';
|
|
84
76
|
import { MetadataTxValidator } from './tx_validator/tx_metadata_validator.js';
|
|
85
77
|
import { TxProofValidator } from './tx_validator/tx_proof_validator.js';
|
|
86
78
|
|
|
@@ -140,32 +132,19 @@ export class AztecNodeService implements AztecNode {
|
|
|
140
132
|
);
|
|
141
133
|
}
|
|
142
134
|
|
|
143
|
-
const store = await
|
|
144
|
-
AztecLmdbStore.open(config.dataDirectory, false, storeLog),
|
|
145
|
-
config.l1Contracts.rollupAddress,
|
|
146
|
-
storeLog,
|
|
147
|
-
);
|
|
135
|
+
const store = await createStore(config, config.l1Contracts.rollupAddress, storeLog);
|
|
148
136
|
|
|
149
|
-
|
|
150
|
-
if (!config.archiverUrl) {
|
|
151
|
-
// first create and sync the archiver
|
|
152
|
-
const archiverStore = new KVArchiverDataStore(store, config.maxLogs);
|
|
153
|
-
archiver = await Archiver.createAndSync(config, archiverStore, telemetry, true);
|
|
154
|
-
} else {
|
|
155
|
-
archiver = createArchiverClient(config.archiverUrl);
|
|
156
|
-
}
|
|
137
|
+
const archiver = await createArchiver(config, store, telemetry, { blockUntilSync: true });
|
|
157
138
|
|
|
158
139
|
// we identify the P2P transaction protocol by using the rollup contract address.
|
|
159
140
|
// this may well change in future
|
|
160
141
|
config.transactionProtocol = `/aztec/tx/${config.l1Contracts.rollupAddress.toString()}`;
|
|
161
142
|
|
|
162
143
|
// create the tx pool and the p2p client, which will need the l2 block source
|
|
163
|
-
const p2pClient = await createP2PClient(
|
|
144
|
+
const p2pClient = await createP2PClient(config, store, new AztecKVTxPool(store, telemetry), archiver);
|
|
164
145
|
|
|
165
146
|
// now create the merkle trees and the world state synchronizer
|
|
166
|
-
const
|
|
167
|
-
const worldStateConfig: WorldStateConfig = getWorldStateConfig();
|
|
168
|
-
const worldStateSynchronizer = new ServerWorldStateSynchronizer(store, merkleTrees, archiver, worldStateConfig);
|
|
147
|
+
const worldStateSynchronizer = await createWorldStateSynchronizer(config, store, archiver);
|
|
169
148
|
|
|
170
149
|
// start both and wait for them to sync from the block source
|
|
171
150
|
await Promise.all([p2pClient.start(), worldStateSynchronizer.start()]);
|
|
@@ -176,18 +155,9 @@ export class AztecNodeService implements AztecNode {
|
|
|
176
155
|
new TxProofValidator(proofVerifier),
|
|
177
156
|
);
|
|
178
157
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
const prover = config
|
|
182
|
-
? undefined
|
|
183
|
-
: await TxProver.new(
|
|
184
|
-
config,
|
|
185
|
-
worldStateSynchronizer,
|
|
186
|
-
telemetry,
|
|
187
|
-
await archiver
|
|
188
|
-
.getBlock(-1)
|
|
189
|
-
.then(b => b?.header ?? worldStateSynchronizer.getCommitted().buildInitialHeader()),
|
|
190
|
-
);
|
|
158
|
+
const simulationProvider = await createSimulationProvider(config, log);
|
|
159
|
+
|
|
160
|
+
const prover = await createProverClient(config, worldStateSynchronizer, archiver, telemetry);
|
|
191
161
|
|
|
192
162
|
if (!prover && !config.disableSequencer) {
|
|
193
163
|
throw new Error("Can't start a sequencer without a prover");
|
|
@@ -241,6 +211,10 @@ export class AztecNodeService implements AztecNode {
|
|
|
241
211
|
return this.prover;
|
|
242
212
|
}
|
|
243
213
|
|
|
214
|
+
public getBlockSource(): L2BlockSource {
|
|
215
|
+
return this.blockSource;
|
|
216
|
+
}
|
|
217
|
+
|
|
244
218
|
/**
|
|
245
219
|
* Method to return the currently deployed L1 contract addresses.
|
|
246
220
|
* @returns - The currently deployed L1 contract addresses.
|
|
@@ -284,6 +258,10 @@ export class AztecNodeService implements AztecNode {
|
|
|
284
258
|
return await this.blockSource.getBlockNumber();
|
|
285
259
|
}
|
|
286
260
|
|
|
261
|
+
public async getProvenBlockNumber(): Promise<number> {
|
|
262
|
+
return await this.blockSource.getProvenBlockNumber();
|
|
263
|
+
}
|
|
264
|
+
|
|
287
265
|
/**
|
|
288
266
|
* Method to fetch the version of the package.
|
|
289
267
|
* @returns The node package version
|
|
@@ -363,8 +341,7 @@ export class AztecNodeService implements AztecNode {
|
|
|
363
341
|
// We first check if the tx is in pending (instead of first checking if it is mined) because if we first check
|
|
364
342
|
// for mined and then for pending there could be a race condition where the tx is mined between the two checks
|
|
365
343
|
// and we would incorrectly return a TxReceipt with status DROPPED
|
|
366
|
-
|
|
367
|
-
if (pendingTx) {
|
|
344
|
+
if (this.p2pClient.getTxStatus(txHash) === 'pending') {
|
|
368
345
|
txReceipt = new TxReceipt(txHash, TxStatus.PENDING, '');
|
|
369
346
|
}
|
|
370
347
|
|
|
@@ -397,17 +374,17 @@ export class AztecNodeService implements AztecNode {
|
|
|
397
374
|
* Method to retrieve pending txs.
|
|
398
375
|
* @returns - The pending txs.
|
|
399
376
|
*/
|
|
400
|
-
public
|
|
401
|
-
return
|
|
377
|
+
public getPendingTxs() {
|
|
378
|
+
return Promise.resolve(this.p2pClient!.getTxs('pending'));
|
|
402
379
|
}
|
|
403
380
|
|
|
404
381
|
/**
|
|
405
|
-
* Method to retrieve a single
|
|
382
|
+
* Method to retrieve a single tx from the mempool or unfinalised chain.
|
|
406
383
|
* @param txHash - The transaction hash to return.
|
|
407
|
-
* @returns - The
|
|
384
|
+
* @returns - The tx if it exists.
|
|
408
385
|
*/
|
|
409
|
-
public
|
|
410
|
-
return
|
|
386
|
+
public getTxByHash(txHash: TxHash) {
|
|
387
|
+
return Promise.resolve(this.p2pClient!.getTxByHash(txHash));
|
|
411
388
|
}
|
|
412
389
|
|
|
413
390
|
/**
|
|
@@ -712,18 +689,11 @@ export class AztecNodeService implements AztecNode {
|
|
|
712
689
|
}
|
|
713
690
|
|
|
714
691
|
/**
|
|
715
|
-
* Returns the currently committed block header.
|
|
692
|
+
* Returns the currently committed block header, or the initial header if no blocks have been produced.
|
|
716
693
|
* @returns The current committed block header.
|
|
717
694
|
*/
|
|
718
695
|
public async getHeader(): Promise<Header> {
|
|
719
|
-
|
|
720
|
-
if (block) {
|
|
721
|
-
return block.header;
|
|
722
|
-
}
|
|
723
|
-
|
|
724
|
-
// No block was not found so we build the initial header.
|
|
725
|
-
const committedDb = await this.#getWorldState('latest');
|
|
726
|
-
return await committedDb.buildInitialHeader();
|
|
696
|
+
return (await this.getBlock(-1))?.header ?? (await this.#getWorldState('latest')).getInitialHeader();
|
|
727
697
|
}
|
|
728
698
|
|
|
729
699
|
/**
|
|
@@ -756,7 +726,7 @@ export class AztecNodeService implements AztecNode {
|
|
|
756
726
|
new WASMSimulator(),
|
|
757
727
|
this.telemetry,
|
|
758
728
|
);
|
|
759
|
-
const processor =
|
|
729
|
+
const processor = publicProcessorFactory.create(prevHeader, newGlobalVariables);
|
|
760
730
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
761
731
|
const [processedTxs, failedTxs, returns] = await processor.process([tx]);
|
|
762
732
|
// REFACTOR: Consider returning the error/revert rather than throwing
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type DebugLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { type SimulationProvider } from '@aztec/simulator';
|
|
3
|
-
import { type AztecNodeConfig } from './config.js';
|
|
4
|
-
export declare function getSimulationProvider(config: AztecNodeConfig, logger?: DebugLogger): Promise<SimulationProvider>;
|
|
5
|
-
//# sourceMappingURL=simulator-factory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simulator-factory.d.ts","sourceRoot":"","sources":["../../src/aztec-node/simulator-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAuB,KAAK,kBAAkB,EAAiB,MAAM,kBAAkB,CAAC;AAI/F,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,eAAe,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,kBAAkB,CAAC,CAe7B"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { NativeACVMSimulator, WASMSimulator } from '@aztec/simulator';
|
|
2
|
-
import * as fs from 'fs/promises';
|
|
3
|
-
export async function getSimulationProvider(config, logger) {
|
|
4
|
-
if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
|
|
5
|
-
try {
|
|
6
|
-
await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
|
|
7
|
-
await fs.mkdir(config.acvmWorkingDirectory, { recursive: true });
|
|
8
|
-
logger?.info(`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`);
|
|
9
|
-
return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath);
|
|
10
|
-
}
|
|
11
|
-
catch {
|
|
12
|
-
logger?.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
logger?.info('Using WASM ACVM simulation');
|
|
16
|
-
return new WASMSimulator();
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltdWxhdG9yLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zaW11bGF0b3ItZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsbUJBQW1CLEVBQTJCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9GLE9BQU8sS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSWxDLE1BQU0sQ0FBQyxLQUFLLFVBQVUscUJBQXFCLENBQ3pDLE1BQXVCLEVBQ3ZCLE1BQW9CO0lBRXBCLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUM7WUFDSCxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFELE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRSxNQUFNLEVBQUUsSUFBSSxDQUNWLHdCQUF3QixNQUFNLENBQUMsY0FBYywwQkFBMEIsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQ3JHLENBQUM7WUFDRixPQUFPLElBQUksbUJBQW1CLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsTUFBTSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsTUFBTSxDQUFDLGNBQWMsd0JBQXdCLENBQUMsQ0FBQztRQUMxRixDQUFDO0lBQ0gsQ0FBQztJQUNELE1BQU0sRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztJQUMzQyxPQUFPLElBQUksYUFBYSxFQUFFLENBQUM7QUFDN0IsQ0FBQyJ9
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { type DebugLogger } from '@aztec/foundation/log';
|
|
2
|
-
import { NativeACVMSimulator, type SimulationProvider, WASMSimulator } from '@aztec/simulator';
|
|
3
|
-
|
|
4
|
-
import * as fs from 'fs/promises';
|
|
5
|
-
|
|
6
|
-
import { type AztecNodeConfig } from './config.js';
|
|
7
|
-
|
|
8
|
-
export async function getSimulationProvider(
|
|
9
|
-
config: AztecNodeConfig,
|
|
10
|
-
logger?: DebugLogger,
|
|
11
|
-
): Promise<SimulationProvider> {
|
|
12
|
-
if (config.acvmBinaryPath && config.acvmWorkingDirectory) {
|
|
13
|
-
try {
|
|
14
|
-
await fs.access(config.acvmBinaryPath, fs.constants.R_OK);
|
|
15
|
-
await fs.mkdir(config.acvmWorkingDirectory, { recursive: true });
|
|
16
|
-
logger?.info(
|
|
17
|
-
`Using native ACVM at ${config.acvmBinaryPath} and working directory ${config.acvmWorkingDirectory}`,
|
|
18
|
-
);
|
|
19
|
-
return new NativeACVMSimulator(config.acvmWorkingDirectory, config.acvmBinaryPath);
|
|
20
|
-
} catch {
|
|
21
|
-
logger?.warn(`Failed to access ACVM at ${config.acvmBinaryPath}, falling back to WASM`);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
logger?.info('Using WASM ACVM simulation');
|
|
25
|
-
return new WASMSimulator();
|
|
26
|
-
}
|