@aztec/aztec-node 0.0.1-commit.29c6b1a3 → 0.0.1-commit.2c0ee1788
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/block_response_helpers.d.ts +21 -0
- package/dest/aztec-node/block_response_helpers.d.ts.map +1 -0
- package/dest/aztec-node/block_response_helpers.js +88 -0
- package/dest/aztec-node/config.d.ts +8 -5
- package/dest/aztec-node/config.d.ts.map +1 -1
- package/dest/aztec-node/config.js +11 -3
- package/dest/aztec-node/node_metrics.d.ts +1 -1
- package/dest/aztec-node/node_metrics.d.ts.map +1 -1
- package/dest/aztec-node/node_metrics.js +8 -4
- package/dest/aztec-node/server.d.ts +69 -92
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +870 -400
- package/dest/sentinel/factory.d.ts +4 -3
- package/dest/sentinel/factory.d.ts.map +1 -1
- package/dest/sentinel/factory.js +1 -1
- package/dest/sentinel/sentinel.d.ts +7 -4
- package/dest/sentinel/sentinel.d.ts.map +1 -1
- package/dest/sentinel/sentinel.js +69 -37
- package/dest/sentinel/store.d.ts +2 -2
- package/dest/sentinel/store.d.ts.map +1 -1
- package/dest/sentinel/store.js +11 -7
- package/package.json +26 -25
- package/src/aztec-node/block_response_helpers.ts +131 -0
- package/src/aztec-node/config.ts +25 -9
- package/src/aztec-node/node_metrics.ts +12 -5
- package/src/aztec-node/server.ts +1049 -530
- package/src/sentinel/factory.ts +4 -8
- package/src/sentinel/sentinel.ts +82 -37
- package/src/sentinel/store.ts +12 -12
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { type BlockData, type BlockDataWithCheckpointContext, type CheckpointedL2Block, type CommitteeAttestation, L2Block } from '@aztec/stdlib/block';
|
|
3
|
+
import type { CheckpointData, PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
4
|
+
import { type BlockIncludeOptions, type BlockResponse, type CheckpointIncludeOptions, type CheckpointResponse } from '@aztec/stdlib/interfaces/client';
|
|
5
|
+
/** Projects a full {@link L2Block} into a {@link BlockResponse}, attaching L1 / attestation context when provided. */
|
|
6
|
+
export declare function blockResponseFromL2Block(block: L2Block, options: BlockIncludeOptions, context?: {
|
|
7
|
+
l1?: BlockDataWithCheckpointContext['l1'];
|
|
8
|
+
attestations?: CommitteeAttestation[];
|
|
9
|
+
}): Promise<BlockResponse>;
|
|
10
|
+
/** Projects metadata-only {@link BlockData} into a {@link BlockResponse}. */
|
|
11
|
+
export declare function blockResponseFromBlockData(data: BlockData, blockNumber: BlockNumber, options: BlockIncludeOptions, context?: {
|
|
12
|
+
l1?: BlockDataWithCheckpointContext['l1'];
|
|
13
|
+
attestations?: CommitteeAttestation[];
|
|
14
|
+
}): BlockResponse;
|
|
15
|
+
/** Projects a {@link CheckpointedL2Block} into a {@link BlockResponse}. */
|
|
16
|
+
export declare function blockResponseFromCheckpointedL2Block(cp: CheckpointedL2Block, options: BlockIncludeOptions): Promise<BlockResponse>;
|
|
17
|
+
/** Projects a {@link PublishedCheckpoint} into a {@link CheckpointResponse}. */
|
|
18
|
+
export declare function checkpointResponseFromPublishedCheckpoint(pc: PublishedCheckpoint, options: CheckpointIncludeOptions): Promise<CheckpointResponse>;
|
|
19
|
+
/** Projects metadata-only {@link CheckpointData} into a {@link CheckpointResponse}. `includeBlocks` is ignored (no blocks loaded). */
|
|
20
|
+
export declare function checkpointResponseFromCheckpointData(cd: CheckpointData, options: CheckpointIncludeOptions): CheckpointResponse;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcmVzcG9uc2VfaGVscGVycy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F6dGVjLW5vZGUvYmxvY2tfcmVzcG9uc2VfaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLEtBQUssOEJBQThCLEVBQ25DLEtBQUssbUJBQW1CLEVBQ3hCLEtBQUssb0JBQW9CLEVBQ3pCLE9BQU8sRUFDUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFDTCxLQUFLLG1CQUFtQixFQUN4QixLQUFLLGFBQWEsRUFDbEIsS0FBSyx3QkFBd0IsRUFDN0IsS0FBSyxrQkFBa0IsRUFFeEIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxzSEFBc0g7QUFDdEgsd0JBQXNCLHdCQUF3QixDQUM1QyxLQUFLLEVBQUUsT0FBTyxFQUNkLE9BQU8sRUFBRSxtQkFBbUIsRUFDNUIsT0FBTyxDQUFDLEVBQUU7SUFBRSxFQUFFLENBQUMsRUFBRSw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUFDLFlBQVksQ0FBQyxFQUFFLG9CQUFvQixFQUFFLENBQUE7Q0FBRSxHQUM3RixPQUFPLENBQUMsYUFBYSxDQUFDLENBbUJ4QjtBQUVELDZFQUE2RTtBQUM3RSx3QkFBZ0IsMEJBQTBCLENBQ3hDLElBQUksRUFBRSxTQUFTLEVBQ2YsV0FBVyxFQUFFLFdBQVcsRUFDeEIsT0FBTyxFQUFFLG1CQUFtQixFQUM1QixPQUFPLENBQUMsRUFBRTtJQUFFLEVBQUUsQ0FBQyxFQUFFLDhCQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQUMsWUFBWSxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQTtDQUFFLEdBQzdGLGFBQWEsQ0FnQmY7QUFFRCwyRUFBMkU7QUFDM0Usd0JBQWdCLG9DQUFvQyxDQUNsRCxFQUFFLEVBQUUsbUJBQW1CLEVBQ3ZCLE9BQU8sRUFBRSxtQkFBbUIsR0FDM0IsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUV4QjtBQUVELGdGQUFnRjtBQUNoRix3QkFBc0IseUNBQXlDLENBQzdELEVBQUUsRUFBRSxtQkFBbUIsRUFDdkIsT0FBTyxFQUFFLHdCQUF3QixHQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0E0QjdCO0FBRUQsc0lBQXNJO0FBQ3RJLHdCQUFnQixvQ0FBb0MsQ0FDbEQsRUFBRSxFQUFFLGNBQWMsRUFDbEIsT0FBTyxFQUFFLHdCQUF3QixHQUNoQyxrQkFBa0IsQ0FpQnBCIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block_response_helpers.d.ts","sourceRoot":"","sources":["../../src/aztec-node/block_response_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,OAAO,EACR,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EAExB,MAAM,iCAAiC,CAAC;AAEzC,sHAAsH;AACtH,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,8BAA8B,CAAC,IAAI,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAC7F,OAAO,CAAC,aAAa,CAAC,CAmBxB;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,mBAAmB,EAC5B,OAAO,CAAC,EAAE;IAAE,EAAE,CAAC,EAAE,8BAA8B,CAAC,IAAI,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;CAAE,GAC7F,aAAa,CAgBf;AAED,2EAA2E;AAC3E,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,mBAAmB,EACvB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,gFAAgF;AAChF,wBAAsB,yCAAyC,CAC7D,EAAE,EAAE,mBAAmB,EACvB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,kBAAkB,CAAC,CA4B7B;AAED,sIAAsI;AACtI,wBAAgB,oCAAoC,CAClD,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,wBAAwB,GAChC,kBAAkB,CAiBpB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
|
+
import { l1PublishInfoFromL1PublishedData } from '@aztec/stdlib/interfaces/client';
|
|
3
|
+
/** Projects a full {@link L2Block} into a {@link BlockResponse}, attaching L1 / attestation context when provided. */ export async function blockResponseFromL2Block(block, options, context) {
|
|
4
|
+
const response = {
|
|
5
|
+
header: block.header,
|
|
6
|
+
archive: block.archive,
|
|
7
|
+
hash: await block.hash(),
|
|
8
|
+
checkpointNumber: block.checkpointNumber,
|
|
9
|
+
indexWithinCheckpoint: block.indexWithinCheckpoint,
|
|
10
|
+
number: block.number
|
|
11
|
+
};
|
|
12
|
+
if (options.includeTransactions) {
|
|
13
|
+
response.body = block.body;
|
|
14
|
+
}
|
|
15
|
+
if (options.includeL1PublishInfo) {
|
|
16
|
+
response.l1 = l1PublishInfoFromL1PublishedData(context?.l1);
|
|
17
|
+
}
|
|
18
|
+
if (options.includeAttestations) {
|
|
19
|
+
response.attestations = context?.attestations ?? [];
|
|
20
|
+
}
|
|
21
|
+
return response;
|
|
22
|
+
}
|
|
23
|
+
/** Projects metadata-only {@link BlockData} into a {@link BlockResponse}. */ export function blockResponseFromBlockData(data, blockNumber, options, context) {
|
|
24
|
+
const response = {
|
|
25
|
+
header: data.header,
|
|
26
|
+
archive: data.archive,
|
|
27
|
+
hash: data.blockHash,
|
|
28
|
+
checkpointNumber: data.checkpointNumber,
|
|
29
|
+
indexWithinCheckpoint: data.indexWithinCheckpoint,
|
|
30
|
+
number: blockNumber
|
|
31
|
+
};
|
|
32
|
+
if (options.includeL1PublishInfo) {
|
|
33
|
+
response.l1 = l1PublishInfoFromL1PublishedData(context?.l1);
|
|
34
|
+
}
|
|
35
|
+
if (options.includeAttestations) {
|
|
36
|
+
response.attestations = context?.attestations ?? [];
|
|
37
|
+
}
|
|
38
|
+
return response;
|
|
39
|
+
}
|
|
40
|
+
/** Projects a {@link CheckpointedL2Block} into a {@link BlockResponse}. */ export function blockResponseFromCheckpointedL2Block(cp, options) {
|
|
41
|
+
return blockResponseFromL2Block(cp.block, options, {
|
|
42
|
+
l1: cp.l1,
|
|
43
|
+
attestations: cp.attestations
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** Projects a {@link PublishedCheckpoint} into a {@link CheckpointResponse}. */ export async function checkpointResponseFromPublishedCheckpoint(pc, options) {
|
|
47
|
+
const response = {
|
|
48
|
+
number: pc.checkpoint.number,
|
|
49
|
+
header: pc.checkpoint.header,
|
|
50
|
+
archive: pc.checkpoint.archive,
|
|
51
|
+
checkpointOutHash: pc.checkpoint.getCheckpointOutHash(),
|
|
52
|
+
startBlock: pc.checkpoint.blocks[0]?.number ?? BlockNumber.ZERO,
|
|
53
|
+
blockCount: pc.checkpoint.blocks.length,
|
|
54
|
+
feeAssetPriceModifier: pc.checkpoint.feeAssetPriceModifier
|
|
55
|
+
};
|
|
56
|
+
if (options.includeBlocks) {
|
|
57
|
+
response.blocks = await Promise.all(pc.checkpoint.blocks.map((block)=>blockResponseFromL2Block(block, {
|
|
58
|
+
includeTransactions: options.includeTransactions,
|
|
59
|
+
includeL1PublishInfo: false,
|
|
60
|
+
includeAttestations: false
|
|
61
|
+
})));
|
|
62
|
+
}
|
|
63
|
+
if (options.includeL1PublishInfo) {
|
|
64
|
+
response.l1 = l1PublishInfoFromL1PublishedData(pc.l1);
|
|
65
|
+
}
|
|
66
|
+
if (options.includeAttestations) {
|
|
67
|
+
response.attestations = pc.attestations;
|
|
68
|
+
}
|
|
69
|
+
return response;
|
|
70
|
+
}
|
|
71
|
+
/** Projects metadata-only {@link CheckpointData} into a {@link CheckpointResponse}. `includeBlocks` is ignored (no blocks loaded). */ export function checkpointResponseFromCheckpointData(cd, options) {
|
|
72
|
+
const response = {
|
|
73
|
+
number: cd.checkpointNumber,
|
|
74
|
+
header: cd.header,
|
|
75
|
+
archive: cd.archive,
|
|
76
|
+
checkpointOutHash: cd.checkpointOutHash,
|
|
77
|
+
startBlock: cd.startBlock,
|
|
78
|
+
blockCount: cd.blockCount,
|
|
79
|
+
feeAssetPriceModifier: cd.feeAssetPriceModifier
|
|
80
|
+
};
|
|
81
|
+
if (options.includeL1PublishInfo) {
|
|
82
|
+
response.l1 = l1PublishInfoFromL1PublishedData(cd.l1);
|
|
83
|
+
}
|
|
84
|
+
if (options.includeAttestations) {
|
|
85
|
+
response.attestations = cd.attestations;
|
|
86
|
+
}
|
|
87
|
+
return response;
|
|
88
|
+
}
|
|
@@ -2,14 +2,15 @@ import { type ArchiverConfig } from '@aztec/archiver/config';
|
|
|
2
2
|
import { type GenesisStateConfig } from '@aztec/ethereum/config';
|
|
3
3
|
import { type L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
4
4
|
import { type ConfigMappingsType } from '@aztec/foundation/config';
|
|
5
|
-
import { type DataStoreConfig } from '@aztec/kv-store/config';
|
|
6
5
|
import { type KeyStore } from '@aztec/node-keystore';
|
|
7
6
|
import { type SharedNodeConfig } from '@aztec/node-lib/config';
|
|
8
7
|
import { type P2PConfig } from '@aztec/p2p/config';
|
|
9
8
|
import { type ProverClientUserConfig } from '@aztec/prover-client/config';
|
|
10
|
-
import { type
|
|
9
|
+
import { type ProverNodeConfig } from '@aztec/prover-node/config';
|
|
10
|
+
import { type SequencerClientConfig, type SequencerTxSenderConfig, sequencerClientConfigMappings } from '@aztec/sequencer-client/config';
|
|
11
11
|
import { type NodeRPCConfig } from '@aztec/stdlib/config';
|
|
12
12
|
import type { SlasherConfig } from '@aztec/stdlib/interfaces/server';
|
|
13
|
+
import { type DataStoreConfig } from '@aztec/stdlib/kv-store';
|
|
13
14
|
import { type ValidatorClientConfig } from '@aztec/validator-client/config';
|
|
14
15
|
import { type WorldStateConfig } from '@aztec/world-state/config';
|
|
15
16
|
import { type SentinelConfig } from '../sentinel/config.js';
|
|
@@ -17,7 +18,7 @@ export { sequencerClientConfigMappings, type SequencerClientConfig };
|
|
|
17
18
|
/**
|
|
18
19
|
* The configuration the aztec node.
|
|
19
20
|
*/
|
|
20
|
-
export type AztecNodeConfig = ArchiverConfig & SequencerClientConfig & ValidatorClientConfig & ProverClientUserConfig & WorldStateConfig & Pick<ProverClientUserConfig, 'bbBinaryPath' | 'bbWorkingDirectory' | 'realProofs'> & P2PConfig & DataStoreConfig & SentinelConfig & SharedNodeConfig & GenesisStateConfig & NodeRPCConfig & SlasherConfig & {
|
|
21
|
+
export type AztecNodeConfig = ArchiverConfig & SequencerClientConfig & ValidatorClientConfig & ProverClientUserConfig & WorldStateConfig & Pick<ProverClientUserConfig, 'bbBinaryPath' | 'bbWorkingDirectory' | 'realProofs'> & P2PConfig & DataStoreConfig & SentinelConfig & SharedNodeConfig & GenesisStateConfig & NodeRPCConfig & SlasherConfig & ProverNodeConfig & {
|
|
21
22
|
/** L1 contracts addresses */
|
|
22
23
|
l1Contracts: L1ContractAddresses;
|
|
23
24
|
/** Whether the validator is disabled for this node */
|
|
@@ -26,6 +27,8 @@ export type AztecNodeConfig = ArchiverConfig & SequencerClientConfig & Validator
|
|
|
26
27
|
skipArchiverInitialSync: boolean;
|
|
27
28
|
/** A flag to force verification of tx Chonk proofs. Only used for testnet */
|
|
28
29
|
debugForceTxProofVerification: boolean;
|
|
30
|
+
/** Whether to enable the prover node as a subsystem. */
|
|
31
|
+
enableProverNode: boolean;
|
|
29
32
|
};
|
|
30
33
|
export declare const aztecNodeConfigMappings: ConfigMappingsType<AztecNodeConfig>;
|
|
31
34
|
/**
|
|
@@ -33,5 +36,5 @@ export declare const aztecNodeConfigMappings: ConfigMappingsType<AztecNodeConfig
|
|
|
33
36
|
* @returns A valid aztec node config.
|
|
34
37
|
*/
|
|
35
38
|
export declare function getConfigEnvVars(): AztecNodeConfig;
|
|
36
|
-
export declare function createKeyStoreForValidator(config:
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
export declare function createKeyStoreForValidator(config: SequencerTxSenderConfig & SequencerClientConfig & SharedNodeConfig): KeyStore | undefined;
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUEwQixNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUE4QixNQUFNLHdCQUF3QixDQUFDO0FBQzdGLE9BQU8sRUFBRSxLQUFLLG1CQUFtQixFQUE4QixNQUFNLHVDQUF1QyxDQUFDO0FBQzdHLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUE4QyxNQUFNLDBCQUEwQixDQUFDO0FBRS9HLE9BQU8sRUFDTCxLQUFLLFFBQVEsRUFJZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUE0QixNQUFNLHdCQUF3QixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxLQUFLLFNBQVMsRUFBcUIsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsS0FBSyxzQkFBc0IsRUFBOEIsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RyxPQUFPLEVBQ0wsS0FBSyxnQkFBZ0IsRUFHdEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyx1QkFBdUIsRUFDNUIsNkJBQTZCLEVBQzlCLE1BQU0sZ0NBQWdDLENBQUM7QUFHeEMsT0FBTyxFQUFFLEtBQUssYUFBYSxFQUF5QixNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsS0FBSyxxQkFBcUIsRUFBaUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRyxPQUFPLEVBQUUsS0FBSyxnQkFBZ0IsRUFBNEIsTUFBTSwyQkFBMkIsQ0FBQztBQUk1RixPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQTBCLE1BQU0sdUJBQXVCLENBQUM7QUFFcEYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztBQUVyRTs7R0FFRztBQUNILE1BQU0sTUFBTSxlQUFlLEdBQUcsY0FBYyxHQUMxQyxxQkFBcUIsR0FDckIscUJBQXFCLEdBQ3JCLHNCQUFzQixHQUN0QixnQkFBZ0IsR0FDaEIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLGNBQWMsR0FBRyxvQkFBb0IsR0FBRyxZQUFZLENBQUMsR0FDbEYsU0FBUyxHQUNULGVBQWUsR0FDZixjQUFjLEdBQ2QsZ0JBQWdCLEdBQ2hCLGtCQUFrQixHQUNsQixhQUFhLEdBQ2IsYUFBYSxHQUNiLGdCQUFnQixHQUFHO0lBQ2pCLDZCQUE2QjtJQUM3QixXQUFXLEVBQUUsbUJBQW1CLENBQUM7SUFDakMsc0RBQXNEO0lBQ3RELGdCQUFnQixFQUFFLE9BQU8sQ0FBQztJQUMxQixpR0FBaUc7SUFDakcsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO0lBQ2pDLDZFQUE2RTtJQUM3RSw2QkFBNkIsRUFBRSxPQUFPLENBQUM7SUFDdkMsd0RBQXdEO0lBQ3hELGdCQUFnQixFQUFFLE9BQU8sQ0FBQztDQUMzQixDQUFDO0FBRUosZUFBTyxNQUFNLHVCQUF1QixFQUFFLGtCQUFrQixDQUFDLGVBQWUsQ0F3Q3ZFLENBQUM7QUFFRjs7O0dBR0c7QUFDSCx3QkFBZ0IsZ0JBQWdCLElBQUksZUFBZSxDQUVsRDtBQXNFRCx3QkFBZ0IsMEJBQTBCLENBQ3hDLE1BQU0sRUFBRSx1QkFBdUIsR0FBRyxxQkFBcUIsR0FBRyxnQkFBZ0IsR0FDekUsUUFBUSxHQUFHLFNBQVMsQ0FNdEIifQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/aztec-node/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,uCAAuC,CAAC;AAC7G,OAAO,EAAE,KAAK,kBAAkB,EAA8C,MAAM,0BAA0B,CAAC;AAE/G,OAAO,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/aztec-node/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,KAAK,kBAAkB,EAA8B,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,KAAK,mBAAmB,EAA8B,MAAM,uCAAuC,CAAC;AAC7G,OAAO,EAAE,KAAK,kBAAkB,EAA8C,MAAM,0BAA0B,CAAC;AAE/G,OAAO,EACL,KAAK,QAAQ,EAId,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,wBAAwB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,mBAAmB,CAAC;AACtE,OAAO,EAAE,KAAK,sBAAsB,EAA8B,MAAM,6BAA6B,CAAC;AACtG,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,6BAA6B,EAC9B,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,KAAK,aAAa,EAAyB,MAAM,sBAAsB,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,KAAK,qBAAqB,EAAiC,MAAM,gCAAgC,CAAC;AAC3G,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,2BAA2B,CAAC;AAI5F,OAAO,EAAE,KAAK,cAAc,EAA0B,MAAM,uBAAuB,CAAC;AAEpF,OAAO,EAAE,6BAA6B,EAAE,KAAK,qBAAqB,EAAE,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,cAAc,GAC1C,qBAAqB,GACrB,qBAAqB,GACrB,sBAAsB,GACtB,gBAAgB,GAChB,IAAI,CAAC,sBAAsB,EAAE,cAAc,GAAG,oBAAoB,GAAG,YAAY,CAAC,GAClF,SAAS,GACT,eAAe,GACf,cAAc,GACd,gBAAgB,GAChB,kBAAkB,GAClB,aAAa,GACb,aAAa,GACb,gBAAgB,GAAG;IACjB,6BAA6B;IAC7B,WAAW,EAAE,mBAAmB,CAAC;IACjC,sDAAsD;IACtD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iGAAiG;IACjG,uBAAuB,EAAE,OAAO,CAAC;IACjC,6EAA6E;IAC7E,6BAA6B,EAAE,OAAO,CAAC;IACvC,wDAAwD;IACxD,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,eAAO,MAAM,uBAAuB,EAAE,kBAAkB,CAAC,eAAe,CAwCvE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,eAAe,CAElD;AAsED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,uBAAuB,GAAG,qBAAqB,GAAG,gBAAgB,GACzE,QAAQ,GAAG,SAAS,CAMtB"}
|
|
@@ -3,15 +3,16 @@ import { genesisStateConfigMappings } from '@aztec/ethereum/config';
|
|
|
3
3
|
import { l1ContractAddressesMapping } from '@aztec/ethereum/l1-contract-addresses';
|
|
4
4
|
import { booleanConfigHelper, getConfigFromMappings } from '@aztec/foundation/config';
|
|
5
5
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
6
|
-
import { dataConfigMappings } from '@aztec/kv-store/config';
|
|
7
6
|
import { ethPrivateKeySchema, keyStoreConfigMappings } from '@aztec/node-keystore';
|
|
8
7
|
import { sharedNodeConfigMappings } from '@aztec/node-lib/config';
|
|
9
8
|
import { p2pConfigMappings } from '@aztec/p2p/config';
|
|
10
9
|
import { proverClientConfigMappings } from '@aztec/prover-client/config';
|
|
10
|
+
import { proverNodeConfigMappings, specificProverNodeConfigMappings } from '@aztec/prover-node/config';
|
|
11
11
|
import { sequencerClientConfigMappings } from '@aztec/sequencer-client/config';
|
|
12
12
|
import { slasherConfigMappings } from '@aztec/slasher';
|
|
13
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
14
14
|
import { nodeRpcConfigMappings } from '@aztec/stdlib/config';
|
|
15
|
+
import { dataConfigMappings } from '@aztec/stdlib/kv-store';
|
|
15
16
|
import { validatorClientConfigMappings } from '@aztec/validator-client/config';
|
|
16
17
|
import { worldStateConfigMappings } from '@aztec/world-state/config';
|
|
17
18
|
import { privateKeyToAddress } from 'viem/accounts';
|
|
@@ -22,6 +23,7 @@ export const aztecNodeConfigMappings = {
|
|
|
22
23
|
...keyStoreConfigMappings,
|
|
23
24
|
...archiverConfigMappings,
|
|
24
25
|
...sequencerClientConfigMappings,
|
|
26
|
+
...proverNodeConfigMappings,
|
|
25
27
|
...validatorClientConfigMappings,
|
|
26
28
|
...proverClientConfigMappings,
|
|
27
29
|
...worldStateConfigMappings,
|
|
@@ -31,6 +33,7 @@ export const aztecNodeConfigMappings = {
|
|
|
31
33
|
...genesisStateConfigMappings,
|
|
32
34
|
...nodeRpcConfigMappings,
|
|
33
35
|
...slasherConfigMappings,
|
|
36
|
+
...specificProverNodeConfigMappings,
|
|
34
37
|
l1Contracts: {
|
|
35
38
|
description: 'The deployed L1 contract addresses',
|
|
36
39
|
nested: l1ContractAddressesMapping
|
|
@@ -49,6 +52,11 @@ export const aztecNodeConfigMappings = {
|
|
|
49
52
|
env: 'DEBUG_FORCE_TX_PROOF_VERIFICATION',
|
|
50
53
|
description: 'Whether to skip waiting for the archiver to be fully synced before starting other services.',
|
|
51
54
|
...booleanConfigHelper(false)
|
|
55
|
+
},
|
|
56
|
+
enableProverNode: {
|
|
57
|
+
env: 'ENABLE_PROVER_NODE',
|
|
58
|
+
description: 'Whether to enable the prover node as a subsystem.',
|
|
59
|
+
...booleanConfigHelper(false)
|
|
52
60
|
}
|
|
53
61
|
};
|
|
54
62
|
/**
|
|
@@ -67,7 +75,7 @@ function createKeyStoreFromWeb3Signer(config) {
|
|
|
67
75
|
feeRecipient: config.feeRecipient ?? AztecAddress.ZERO,
|
|
68
76
|
coinbase: config.coinbase ?? config.validatorAddresses[0],
|
|
69
77
|
remoteSigner: config.web3SignerUrl,
|
|
70
|
-
publisher: config.
|
|
78
|
+
publisher: config.sequencerPublisherAddresses ?? []
|
|
71
79
|
});
|
|
72
80
|
const keyStore = {
|
|
73
81
|
schemaVersion: 1,
|
|
@@ -86,7 +94,7 @@ function createKeyStoreFromPrivateKeys(config) {
|
|
|
86
94
|
}
|
|
87
95
|
const coinbase = config.coinbase ?? EthAddress.fromString(privateKeyToAddress(ethPrivateKeys[0]));
|
|
88
96
|
const feeRecipient = config.feeRecipient ?? AztecAddress.ZERO;
|
|
89
|
-
const publisherKeys = config.
|
|
97
|
+
const publisherKeys = config.sequencerPublisherPrivateKeys ? config.sequencerPublisherPrivateKeys.map((k)=>ethPrivateKeySchema.parse(k.getValue())) : [];
|
|
90
98
|
validatorKeyStores.push({
|
|
91
99
|
attester: ethPrivateKeys,
|
|
92
100
|
feeRecipient: feeRecipient,
|
|
@@ -9,4 +9,4 @@ export declare class NodeMetrics {
|
|
|
9
9
|
recordSnapshot(durationMs: number): void;
|
|
10
10
|
recordSnapshotError(): void;
|
|
11
11
|
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZV9tZXRyaWNzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9ub2RlX21ldHJpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlMLEtBQUssZUFBZSxFQUdyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLHFCQUFhLFdBQVc7SUFDdEIsT0FBTyxDQUFDLGNBQWMsQ0FBZ0I7SUFDdEMsT0FBTyxDQUFDLGlCQUFpQixDQUFZO0lBRXJDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBZ0I7SUFDMUMsT0FBTyxDQUFDLGdCQUFnQixDQUFZO0lBRXBDLFlBQVksTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLFNBQWMsRUFVdEQ7SUFFRCxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxRQU9qRDtJQUVELGNBQWMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxRQU1oQztJQUVELG1CQUFtQixTQUVsQjtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node_metrics.d.ts","sourceRoot":"","sources":["../../src/aztec-node/node_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"node_metrics.d.ts","sourceRoot":"","sources":["../../src/aztec-node/node_metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAAY;IAErC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,gBAAgB,CAAY;IAEpC,YAAY,MAAM,EAAE,eAAe,EAAE,IAAI,SAAc,EAUtD;IAED,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,QAOjD;IAED,cAAc,CAAC,UAAU,EAAE,MAAM,QAMhC;IAED,mBAAmB,SAElB;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Attributes, Metrics } from '@aztec/telemetry-client';
|
|
1
|
+
import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
|
|
2
2
|
export class NodeMetrics {
|
|
3
3
|
receiveTxCount;
|
|
4
4
|
receiveTxDuration;
|
|
@@ -6,11 +6,15 @@ export class NodeMetrics {
|
|
|
6
6
|
snapshotDuration;
|
|
7
7
|
constructor(client, name = 'AztecNode'){
|
|
8
8
|
const meter = client.getMeter(name);
|
|
9
|
-
this.receiveTxCount = meter
|
|
9
|
+
this.receiveTxCount = createUpDownCounterWithDefault(meter, Metrics.NODE_RECEIVE_TX_COUNT, {
|
|
10
|
+
[Attributes.OK]: [
|
|
11
|
+
true,
|
|
12
|
+
false
|
|
13
|
+
]
|
|
14
|
+
});
|
|
10
15
|
this.receiveTxDuration = meter.createHistogram(Metrics.NODE_RECEIVE_TX_DURATION);
|
|
11
16
|
this.snapshotDuration = meter.createHistogram(Metrics.NODE_SNAPSHOT_DURATION);
|
|
12
|
-
this.snapshotErrorCount = meter
|
|
13
|
-
this.snapshotErrorCount.add(0);
|
|
17
|
+
this.snapshotErrorCount = createUpDownCounterWithDefault(meter, Metrics.NODE_SNAPSHOT_ERROR_COUNT);
|
|
14
18
|
}
|
|
15
19
|
receivedTx(durationMs, isAccepted) {
|
|
16
20
|
this.receiveTxDuration.record(Math.ceil(durationMs), {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type BlobClientInterface } from '@aztec/blob-client/client';
|
|
2
|
-
import { ARCHIVE_HEIGHT, type L1_TO_L2_MSG_TREE_HEIGHT, type NOTE_HASH_TREE_HEIGHT
|
|
2
|
+
import { ARCHIVE_HEIGHT, type L1_TO_L2_MSG_TREE_HEIGHT, type NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
|
|
3
3
|
import { type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
4
4
|
import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
|
|
5
5
|
import { BlockNumber, CheckpointNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
@@ -8,31 +8,33 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
8
8
|
import { type Logger } from '@aztec/foundation/log';
|
|
9
9
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
10
10
|
import { MembershipWitness, SiblingPath } from '@aztec/foundation/trees';
|
|
11
|
+
import { KeystoreManager } from '@aztec/node-keystore';
|
|
11
12
|
import { type P2P, type P2PClientDeps } from '@aztec/p2p';
|
|
13
|
+
import { type ProverNode, type ProverNodeDeps } from '@aztec/prover-node';
|
|
12
14
|
import { SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
|
|
13
|
-
import { EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
|
|
15
|
+
import { AttestationsBlockWatcher, EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
|
|
14
16
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
15
|
-
import { BlockHash, type BlockParameter, type DataInBlock,
|
|
16
|
-
import type { PublishedCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
17
|
+
import { BlockHash, type BlockParameter, type DataInBlock, type L2BlockSource } from '@aztec/stdlib/block';
|
|
17
18
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress, NodeInfo, ProtocolContractAddresses } from '@aztec/stdlib/contract';
|
|
18
|
-
import { GasFees } from '@aztec/stdlib/gas';
|
|
19
|
-
import {
|
|
19
|
+
import { GasFees, type ManaUsageEstimate } from '@aztec/stdlib/gas';
|
|
20
|
+
import type { AztecNode, AztecNodeAdmin, AztecNodeAdminConfig, AztecNodeDebug, BlockIncludeOptions, BlockResponse, ChainTip, ChainTips, CheckpointIncludeOptions, CheckpointParameter, CheckpointResponse, GetContractClassLogsResponse, GetPublicLogsResponse } from '@aztec/stdlib/interfaces/client';
|
|
20
21
|
import { type AllowedElement, type ClientProtocolCircuitVerifier, type L2LogsSource, type Service, type WorldStateSyncStatus, type WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
21
|
-
import type { LogFilter, SiloedTag, Tag, TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
22
|
+
import type { DebugLogStore, LogFilter, SiloedTag, Tag, TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
22
23
|
import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
23
|
-
import {
|
|
24
|
-
import type { Offense, SlashPayloadRound } from '@aztec/stdlib/slashing';
|
|
25
|
-
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
24
|
+
import type { Offense } from '@aztec/stdlib/slashing';
|
|
26
25
|
import { MerkleTreeId, NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
27
|
-
import { type BlockHeader, type GlobalVariableBuilder as GlobalVariableBuilderInterface, type IndexedTxEffect, PublicSimulationOutput, Tx, type TxHash, TxReceipt, type TxValidationResult } from '@aztec/stdlib/tx';
|
|
26
|
+
import { type BlockHeader, type FeeProvider, type GlobalVariableBuilder as GlobalVariableBuilderInterface, type IndexedTxEffect, PublicSimulationOutput, Tx, type TxHash, TxReceipt, type TxValidationResult } from '@aztec/stdlib/tx';
|
|
28
27
|
import type { SingleValidatorStats, ValidatorsStats } from '@aztec/stdlib/validators';
|
|
28
|
+
import type { GenesisData } from '@aztec/stdlib/world-state';
|
|
29
29
|
import { type TelemetryClient, type Traceable, type Tracer } from '@aztec/telemetry-client';
|
|
30
|
+
import { ValidatorClient } from '@aztec/validator-client';
|
|
31
|
+
import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
|
|
30
32
|
import { Sentinel } from '../sentinel/sentinel.js';
|
|
31
33
|
import { type AztecNodeConfig } from './config.js';
|
|
32
34
|
/**
|
|
33
35
|
* The aztec node.
|
|
34
36
|
*/
|
|
35
|
-
export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
37
|
+
export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, AztecNodeDebug, Traceable {
|
|
36
38
|
#private;
|
|
37
39
|
protected config: AztecNodeConfig;
|
|
38
40
|
protected readonly p2pClient: P2P;
|
|
@@ -42,25 +44,48 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
42
44
|
protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
|
|
43
45
|
protected readonly worldStateSynchronizer: WorldStateSynchronizer;
|
|
44
46
|
protected readonly sequencer: SequencerClient | undefined;
|
|
47
|
+
protected readonly proverNode: ProverNode | undefined;
|
|
45
48
|
protected readonly slasherClient: SlasherClientInterface | undefined;
|
|
46
49
|
protected readonly validatorsSentinel: Sentinel | undefined;
|
|
47
50
|
protected readonly epochPruneWatcher: EpochPruneWatcher | undefined;
|
|
51
|
+
protected readonly attestationsBlockWatcher: AttestationsBlockWatcher | undefined;
|
|
48
52
|
protected readonly l1ChainId: number;
|
|
49
53
|
protected readonly version: number;
|
|
50
54
|
protected readonly globalVariableBuilder: GlobalVariableBuilderInterface;
|
|
55
|
+
protected readonly feeProvider: FeeProvider;
|
|
51
56
|
protected readonly epochCache: EpochCacheInterface;
|
|
52
57
|
protected readonly packageVersion: string;
|
|
53
|
-
private
|
|
58
|
+
private peerProofVerifier;
|
|
59
|
+
private rpcProofVerifier;
|
|
54
60
|
private telemetry;
|
|
55
61
|
private log;
|
|
56
62
|
private blobClient?;
|
|
63
|
+
private validatorClient?;
|
|
64
|
+
private keyStoreManager?;
|
|
65
|
+
private debugLogStore;
|
|
57
66
|
private metrics;
|
|
58
67
|
private initialHeaderHashPromise;
|
|
59
68
|
private isUploadingSnapshot;
|
|
60
69
|
readonly tracer: Tracer;
|
|
61
|
-
constructor(config: AztecNodeConfig, p2pClient: P2P, blockSource: L2BlockSource & Partial<Service>, logsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource, worldStateSynchronizer: WorldStateSynchronizer, sequencer: SequencerClient | undefined, slasherClient: SlasherClientInterface | undefined, validatorsSentinel: Sentinel | undefined, epochPruneWatcher: EpochPruneWatcher | undefined, l1ChainId: number, version: number, globalVariableBuilder: GlobalVariableBuilderInterface, epochCache: EpochCacheInterface, packageVersion: string,
|
|
70
|
+
constructor(config: AztecNodeConfig, p2pClient: P2P, blockSource: L2BlockSource & Partial<Service>, logsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource, worldStateSynchronizer: WorldStateSynchronizer, sequencer: SequencerClient | undefined, proverNode: ProverNode | undefined, slasherClient: SlasherClientInterface | undefined, validatorsSentinel: Sentinel | undefined, epochPruneWatcher: EpochPruneWatcher | undefined, attestationsBlockWatcher: AttestationsBlockWatcher | undefined, l1ChainId: number, version: number, globalVariableBuilder: GlobalVariableBuilderInterface, feeProvider: FeeProvider, epochCache: EpochCacheInterface, packageVersion: string, peerProofVerifier: ClientProtocolCircuitVerifier, rpcProofVerifier: ClientProtocolCircuitVerifier, telemetry?: TelemetryClient, log?: Logger, blobClient?: BlobClientInterface | undefined, validatorClient?: ValidatorClient | undefined, keyStoreManager?: KeystoreManager | undefined, debugLogStore?: DebugLogStore);
|
|
71
|
+
/** @internal Exposed for testing — returns the RPC proof verifier. */
|
|
72
|
+
getProofVerifier(): ClientProtocolCircuitVerifier;
|
|
62
73
|
getWorldStateSyncStatus(): Promise<WorldStateSyncStatus>;
|
|
74
|
+
getChainTips(): Promise<ChainTips>;
|
|
63
75
|
getL2Tips(): Promise<import("@aztec/stdlib/block").L2Tips>;
|
|
76
|
+
getBlockHeader(number: BlockNumber | 'latest'): Promise<BlockHeader | undefined>;
|
|
77
|
+
getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<import("@aztec/stdlib/block").CheckpointedL2Block[]>;
|
|
78
|
+
getCheckpointsDataForEpoch(epoch: EpochNumber): Promise<import("@aztec/stdlib/checkpoint").CheckpointData[]>;
|
|
79
|
+
getBlockNumber(tip?: ChainTip): Promise<BlockNumber>;
|
|
80
|
+
getCheckpointNumber(tip?: ChainTip): Promise<CheckpointNumber>;
|
|
81
|
+
private isChainTip;
|
|
82
|
+
private resolveBlockParameter;
|
|
83
|
+
private resolveCheckpointParameter;
|
|
84
|
+
getBlock<Opts extends BlockIncludeOptions = {}>(param: BlockParameter, options?: Opts): Promise<BlockResponse<Opts> | undefined>;
|
|
85
|
+
getBlocks<Opts extends BlockIncludeOptions = {}>(from: BlockNumber, limit: number, options?: Opts): Promise<BlockResponse<Opts>[]>;
|
|
86
|
+
getCheckpoint<Opts extends CheckpointIncludeOptions = {}>(param: CheckpointParameter, options?: Opts): Promise<CheckpointResponse<Opts> | undefined>;
|
|
87
|
+
getCheckpoints<Opts extends CheckpointIncludeOptions = {}>(from: CheckpointNumber, limit: number, options?: Opts): Promise<CheckpointResponse<Opts>[]>;
|
|
88
|
+
private buildGenesisBlockResponse;
|
|
64
89
|
/**
|
|
65
90
|
* initializes the Aztec Node, wait for component to sync.
|
|
66
91
|
* @param config - The configuration to be used by the aztec node.
|
|
@@ -71,16 +96,21 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
71
96
|
logger?: Logger;
|
|
72
97
|
publisher?: SequencerPublisher;
|
|
73
98
|
dateProvider?: DateProvider;
|
|
74
|
-
p2pClientDeps?: P2PClientDeps
|
|
99
|
+
p2pClientDeps?: P2PClientDeps;
|
|
100
|
+
proverNodeDeps?: Partial<ProverNodeDeps>;
|
|
101
|
+
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
75
102
|
}, options?: {
|
|
76
|
-
|
|
103
|
+
genesis?: GenesisData;
|
|
77
104
|
dontStartSequencer?: boolean;
|
|
105
|
+
dontStartProverNode?: boolean;
|
|
78
106
|
}): Promise<AztecNodeService>;
|
|
79
107
|
/**
|
|
80
108
|
* Returns the sequencer client instance.
|
|
81
109
|
* @returns The sequencer client instance.
|
|
82
110
|
*/
|
|
83
111
|
getSequencer(): SequencerClient | undefined;
|
|
112
|
+
/** Returns the prover node subsystem, if enabled. */
|
|
113
|
+
getProverNode(): ProverNode | undefined;
|
|
84
114
|
getBlockSource(): L2BlockSource;
|
|
85
115
|
getContractDataSource(): ContractDataSource;
|
|
86
116
|
getP2P(): P2P;
|
|
@@ -97,47 +127,10 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
97
127
|
*/
|
|
98
128
|
isReady(): Promise<boolean>;
|
|
99
129
|
getNodeInfo(): Promise<NodeInfo>;
|
|
100
|
-
/**
|
|
101
|
-
* Get a block specified by its block number, block hash, or 'latest'.
|
|
102
|
-
* @param block - The block parameter (block number, block hash, or 'latest').
|
|
103
|
-
* @returns The requested block.
|
|
104
|
-
*/
|
|
105
|
-
getBlock(block: BlockParameter): Promise<L2Block | undefined>;
|
|
106
|
-
/**
|
|
107
|
-
* Get a block specified by its hash.
|
|
108
|
-
* @param blockHash - The block hash being requested.
|
|
109
|
-
* @returns The requested block.
|
|
110
|
-
*/
|
|
111
|
-
getBlockByHash(blockHash: Fr): Promise<L2Block | undefined>;
|
|
112
|
-
private buildInitialBlock;
|
|
113
|
-
/**
|
|
114
|
-
* Get a block specified by its archive root.
|
|
115
|
-
* @param archive - The archive root being requested.
|
|
116
|
-
* @returns The requested block.
|
|
117
|
-
*/
|
|
118
|
-
getBlockByArchive(archive: Fr): Promise<L2Block | undefined>;
|
|
119
|
-
/**
|
|
120
|
-
* Method to request blocks. Will attempt to return all requested blocks but will return only those available.
|
|
121
|
-
* @param from - The start of the range of blocks to return.
|
|
122
|
-
* @param limit - The maximum number of blocks to obtain.
|
|
123
|
-
* @returns The blocks requested.
|
|
124
|
-
*/
|
|
125
|
-
getBlocks(from: BlockNumber, limit: number): Promise<L2Block[]>;
|
|
126
|
-
getCheckpoints(from: CheckpointNumber, limit: number): Promise<PublishedCheckpoint[]>;
|
|
127
|
-
getCheckpointedBlocks(from: BlockNumber, limit: number): Promise<import("@aztec/stdlib/block").CheckpointedL2Block[]>;
|
|
128
|
-
/**
|
|
129
|
-
* Method to fetch the current min L2 fees.
|
|
130
|
-
* @returns The current min L2 fees.
|
|
131
|
-
*/
|
|
132
130
|
getCurrentMinFees(): Promise<GasFees>;
|
|
131
|
+
/** Returns predicted min fees for the current slot and next N slots. */
|
|
132
|
+
getPredictedMinFees(manaUsage?: ManaUsageEstimate): Promise<GasFees[]>;
|
|
133
133
|
getMaxPriorityFees(): Promise<GasFees>;
|
|
134
|
-
/**
|
|
135
|
-
* Method to fetch the latest block number synchronized by the node.
|
|
136
|
-
* @returns The block number.
|
|
137
|
-
*/
|
|
138
|
-
getBlockNumber(): Promise<BlockNumber>;
|
|
139
|
-
getProvenBlockNumber(): Promise<BlockNumber>;
|
|
140
|
-
getCheckpointedBlockNumber(): Promise<BlockNumber>;
|
|
141
134
|
/**
|
|
142
135
|
* Method to fetch the version of the package.
|
|
143
136
|
* @returns The node package version
|
|
@@ -205,13 +198,11 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
205
198
|
* @returns - The txs if it exists.
|
|
206
199
|
*/
|
|
207
200
|
getTxsByHash(txHashes: TxHash[]): Promise<Tx[]>;
|
|
208
|
-
findLeavesIndexes(
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
getL1ToL2MessageMembershipWitness(block: BlockParameter, l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
|
|
214
|
-
getL1ToL2MessageBlock(l1ToL2Message: Fr): Promise<BlockNumber | undefined>;
|
|
201
|
+
findLeavesIndexes(referenceBlock: BlockParameter, treeId: MerkleTreeId, leafValues: Fr[]): Promise<(DataInBlock<bigint> | undefined)[]>;
|
|
202
|
+
getBlockHashMembershipWitness(referenceBlock: BlockParameter, blockHash: BlockHash): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
|
|
203
|
+
getNoteHashMembershipWitness(referenceBlock: BlockParameter, noteHash: Fr): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
|
|
204
|
+
getL1ToL2MessageMembershipWitness(referenceBlock: BlockParameter, l1ToL2Message: Fr): Promise<[bigint, SiblingPath<typeof L1_TO_L2_MSG_TREE_HEIGHT>] | undefined>;
|
|
205
|
+
getL1ToL2MessageCheckpoint(l1ToL2Message: Fr): Promise<CheckpointNumber | undefined>;
|
|
215
206
|
/**
|
|
216
207
|
* Returns whether an L1 to L2 message is synced by archiver and if it's ready to be included in a block.
|
|
217
208
|
* @param l1ToL2Message - The L1 to L2 message to check.
|
|
@@ -224,33 +215,10 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
224
215
|
* @returns The L2 to L1 messages (empty array if the epoch is not found).
|
|
225
216
|
*/
|
|
226
217
|
getL2ToL1Messages(epoch: EpochNumber): Promise<Fr[][][][]>;
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
232
|
-
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
233
|
-
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
234
|
-
* @returns The low nullifier membership witness (if found).
|
|
235
|
-
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
236
|
-
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
237
|
-
* we are trying to prove non-inclusion for.
|
|
238
|
-
*
|
|
239
|
-
* Note: This function returns the membership witness of the nullifier itself and not the low nullifier when
|
|
240
|
-
* the nullifier already exists in the tree. This is because the `getPreviousValueIndex` function returns the
|
|
241
|
-
* index of the nullifier itself when it already exists in the tree.
|
|
242
|
-
* TODO: This is a confusing behavior and we should eventually address that.
|
|
243
|
-
*/
|
|
244
|
-
getLowNullifierMembershipWitness(block: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
245
|
-
getPublicDataWitness(block: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
|
|
246
|
-
getPublicStorageAt(block: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
247
|
-
getBlockHeader(block?: BlockParameter): Promise<BlockHeader | undefined>;
|
|
248
|
-
/**
|
|
249
|
-
* Get a block header specified by its archive root.
|
|
250
|
-
* @param archive - The archive root being requested.
|
|
251
|
-
* @returns The requested block header.
|
|
252
|
-
*/
|
|
253
|
-
getBlockHeaderByArchive(archive: Fr): Promise<BlockHeader | undefined>;
|
|
218
|
+
getNullifierMembershipWitness(referenceBlock: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
219
|
+
getLowNullifierMembershipWitness(referenceBlock: BlockParameter, nullifier: Fr): Promise<NullifierMembershipWitness | undefined>;
|
|
220
|
+
getPublicDataWitness(referenceBlock: BlockParameter, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
|
|
221
|
+
getPublicStorageAt(referenceBlock: BlockParameter, contract: AztecAddress, slot: Fr): Promise<Fr>;
|
|
254
222
|
/**
|
|
255
223
|
* Simulates the public part of a transaction with the current state.
|
|
256
224
|
* @param tx - The transaction to simulate.
|
|
@@ -267,10 +235,19 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
267
235
|
getValidatorsStats(): Promise<ValidatorsStats>;
|
|
268
236
|
getValidatorStats(validatorAddress: EthAddress, fromSlot?: SlotNumber, toSlot?: SlotNumber): Promise<SingleValidatorStats | undefined>;
|
|
269
237
|
startSnapshotUpload(location: string): Promise<void>;
|
|
270
|
-
rollbackTo(targetBlock: BlockNumber, force?: boolean): Promise<void>;
|
|
238
|
+
rollbackTo(targetBlock: BlockNumber, force?: boolean, resumeSync?: boolean): Promise<void>;
|
|
271
239
|
pauseSync(): Promise<void>;
|
|
272
240
|
resumeSync(): Promise<void>;
|
|
273
|
-
getSlashPayloads(): Promise<SlashPayloadRound[]>;
|
|
274
241
|
getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
|
|
242
|
+
reloadKeystore(): Promise<void>;
|
|
243
|
+
mineBlock(): Promise<void>;
|
|
244
|
+
/**
|
|
245
|
+
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
246
|
+
* @param block - The block parameter (block number, block hash, or 'latest') at which to get the data.
|
|
247
|
+
* @returns An instance of a committed MerkleTreeOperations
|
|
248
|
+
*/
|
|
249
|
+
protected getWorldState(block: BlockParameter): Promise<import("@aztec/world-state").MerkleTreeReadOperations>;
|
|
250
|
+
/** Resolves any {@link BlockParameter} variant to a concrete block number. */
|
|
251
|
+
protected resolveBlockNumber(block: BlockParameter): Promise<BlockNumber>;
|
|
275
252
|
}
|
|
276
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFDckcsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLHdCQUF3QixFQUM3QixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHFCQUFxQixFQUMxQixLQUFLLHVCQUF1QixFQUM3QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBYyxLQUFLLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJMUUsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6RyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQUUsWUFBWSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBT3pFLE9BQU8sRUFBRSxLQUFLLEdBQUcsRUFBRSxLQUFLLGFBQWEsRUFBb0QsTUFBTSxZQUFZLENBQUM7QUFFNUcsT0FBTyxFQUF5QixlQUFlLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTFHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIsS0FBSyxzQkFBc0IsRUFHNUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLGNBQWMsRUFBRSxLQUFLLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwSCxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sS0FBSyxFQUNWLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBQzNCLFFBQVEsRUFDUix5QkFBeUIsRUFDMUIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFNUMsT0FBTyxFQUNMLEtBQUssU0FBUyxFQUNkLEtBQUssY0FBYyxFQUNuQixLQUFLLG9CQUFvQixFQUV6QixLQUFLLDRCQUE0QixFQUNqQyxLQUFLLHFCQUFxQixFQUMzQixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxLQUFLLGNBQWMsRUFDbkIsS0FBSyw2QkFBNkIsRUFDbEMsS0FBSyxZQUFZLEVBQ2pCLEtBQUssT0FBTyxFQUNaLEtBQUssb0JBQW9CLEVBQ3pCLEtBQUssc0JBQXNCLEVBRTVCLE1BQU0saUNBQWlDLENBQUM7QUFDekMsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkYsT0FBTyxFQUFhLEtBQUssbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekUsT0FBTyxLQUFLLEVBQXlCLGtCQUFrQixFQUE4QixNQUFNLHFCQUFxQixDQUFDO0FBQ2pILE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsS0FBSyxXQUFXLEVBQ2hCLEtBQUsscUJBQXFCLElBQUksOEJBQThCLEVBQzVELEtBQUssZUFBZSxFQUNwQixzQkFBc0IsRUFDdEIsRUFBRSxFQUNGLEtBQUssTUFBTSxFQUNYLFNBQVMsRUFFVCxLQUFLLGtCQUFrQixFQUN4QixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFFTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxTQUFTLEVBQ2QsS0FBSyxNQUFNLEVBR1osTUFBTSx5QkFBeUIsQ0FBQztBQWVqQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEtBQUssZUFBZSxFQUE4QixNQUFNLGFBQWEsQ0FBQztBQUcvRTs7R0FFRztBQUNILHFCQUFhLGdCQUFpQixZQUFXLFNBQVMsRUFBRSxjQUFjLEVBQUUsU0FBUzs7SUFVekUsU0FBUyxDQUFDLE1BQU0sRUFBRSxlQUFlO0lBQ2pDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUc7SUFDakMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFDaEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWTtJQUMzQyxTQUFTLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQjtJQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLG1CQUFtQjtJQUMzRCxTQUFTLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQjtJQUNqRSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxlQUFlLEdBQUcsU0FBUztJQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxzQkFBc0IsR0FBRyxTQUFTO0lBQ3BFLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxHQUFHLFNBQVM7SUFDM0QsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsR0FBRyxTQUFTO0lBQ25FLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU07SUFDcEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTTtJQUNsQyxTQUFTLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFLDhCQUE4QjtJQUN4RSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxtQkFBbUI7SUFDbEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTTtJQUN6QyxPQUFPLENBQUMsYUFBYTtJQUNyQixPQUFPLENBQUMsU0FBUztJQUNqQixPQUFPLENBQUMsR0FBRztJQUNYLE9BQU8sQ0FBQyxVQUFVLENBQUM7SUE1QnJCLE9BQU8sQ0FBQyxPQUFPLENBQWM7SUFDN0IsT0FBTyxDQUFDLHdCQUF3QixDQUE2QztJQUc3RSxPQUFPLENBQUMsbUJBQW1CLENBQVM7SUFFcEMsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNZLE1BQU0sRUFBRSxlQUFlLEVBQ2QsU0FBUyxFQUFFLEdBQUcsRUFDZCxXQUFXLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFDN0MsVUFBVSxFQUFFLFlBQVksRUFDeEIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsU0FBUyxFQUFFLGVBQWUsR0FBRyxTQUFTLEVBQ3RDLGFBQWEsRUFBRSxzQkFBc0IsR0FBRyxTQUFTLEVBQ2pELGtCQUFrQixFQUFFLFFBQVEsR0FBRyxTQUFTLEVBQ3hDLGlCQUFpQixFQUFFLGlCQUFpQixHQUFHLFNBQVMsRUFDaEQsU0FBUyxFQUFFLE1BQU0sRUFDakIsT0FBTyxFQUFFLE1BQU0sRUFDZixxQkFBcUIsRUFBRSw4QkFBOEIsRUFDckQsVUFBVSxFQUFFLG1CQUFtQixFQUMvQixjQUFjLEVBQUUsTUFBTSxFQUNqQyxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLFNBQVMsR0FBRSxlQUFzQyxFQUNqRCxHQUFHLFNBQXVCLEVBQzFCLFVBQVUsQ0FBQyxpQ0FBcUIsRUFPekM7SUFFWSx1QkFBdUIsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FHcEU7SUFFTSxTQUFTLGtEQUVmO0lBRUQ7Ozs7T0FJRztJQUNILE9BQW9CLGFBQWEsQ0FDL0IsV0FBVyxFQUFFLGVBQWUsRUFDNUIsSUFBSSxHQUFFO1FBQ0osU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNoQixTQUFTLENBQUMsRUFBRSxrQkFBa0IsQ0FBQztRQUMvQixZQUFZLENBQUMsRUFBRSxZQUFZLENBQUM7UUFDNUIsYUFBYSxDQUFDLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QyxFQUNOLE9BQU8sR0FBRTtRQUNQLG1CQUFtQixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztLQUN6QixHQUNMLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQTBUM0I7SUFFRDs7O09BR0c7SUFDSSxZQUFZLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FFakQ7SUFFTSxjQUFjLElBQUksYUFBYSxDQUVyQztJQUVNLHFCQUFxQixJQUFJLGtCQUFrQixDQUVqRDtJQUVNLE1BQU0sSUFBSSxHQUFHLENBRW5CO0lBRUQ7OztPQUdHO0lBQ0ksc0JBQXNCLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBRTVEO0lBRU0sYUFBYSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBRWxEO0lBRVkscUJBQXFCLElBQUksT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBRTlEO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxxQkFFYjtJQUVZLFdBQVcsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBb0I1QztJQUVEOzs7O09BSUc7SUFDVSxRQUFRLENBQUMsS0FBSyxFQUFFLGNBQWMsR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQVN6RTtJQUVEOzs7O09BSUc7SUFDVSxjQUFjLENBQUMsU0FBUyxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQU12RTtJQUVELE9BQU8sQ0FBQyxpQkFBaUI7SUFLekI7Ozs7T0FJRztJQUNVLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FFeEU7SUFFRDs7Ozs7T0FLRztJQUNVLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBRTNFO0lBRVksY0FBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBRWpHO0lBRVkscUJBQXFCLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnRUFFbEU7SUFFRDs7O09BR0c7SUFDVSxpQkFBaUIsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpEO0lBRVksa0JBQWtCLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQU1sRDtJQUVEOzs7T0FHRztJQUNVLGNBQWMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBRWxEO0lBRVksb0JBQW9CLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUV4RDtJQUVZLDBCQUEwQixJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFOUQ7SUFFRDs7O09BR0c7SUFDSSxjQUFjLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV2QztJQUVEOzs7T0FHRztJQUNJLFVBQVUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRW5DO0lBRUQ7OztPQUdHO0lBQ0ksVUFBVSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFbkM7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsQ0FFeEU7SUFFTSxXQUFXLENBQUMsT0FBTyxFQUFFLFlBQVksR0FBRyxPQUFPLENBQUMsMkJBQTJCLEdBQUcsU0FBUyxDQUFDLENBRTFGO0lBRVksb0JBQW9CLENBQy9CLElBQUksRUFBRSxTQUFTLEVBQUUsRUFDakIsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUNiLGNBQWMsQ0FBQyxFQUFFLFNBQVMsR0FDekIsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FjNUI7SUFFWSwrQkFBK0IsQ0FDMUMsZUFBZSxFQUFFLFlBQVksRUFDN0IsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUNYLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFDYixjQUFjLENBQUMsRUFBRSxTQUFTLEdBQ3pCLE9BQU8sQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLENBYzVCO0lBRUQ7Ozs7T0FJRztJQUNILGFBQWEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUUvRDtJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUU3RTtJQUVEOzs7T0FHRztJQUNVLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxpQkFFekI7SUFtQlksWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQXFCNUQ7SUFFTSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxDQUV2RTtJQUVEOztPQUVHO0lBQ1UsSUFBSSxrQkFhaEI7SUFFRDs7O09BR0c7SUFDSSxhQUFhLElBQUksbUJBQW1CLEdBQUcsU0FBUyxDQUV0RDtJQUVEOzs7OztPQUtHO0lBQ0ksYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBRWxFO0lBRU0saUJBQWlCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUUxQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUUxRDtJQUVEOzs7O09BSUc7SUFDVSxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUUzRDtJQUVZLGlCQUFpQixDQUM1QixLQUFLLEVBQUUsY0FBYyxFQUNyQixNQUFNLEVBQUUsWUFBWSxFQUNwQixVQUFVLEVBQUUsRUFBRSxFQUFFLEdBQ2YsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0F5RDlDO0lBRVksdUJBQXVCLENBQ2xDLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFNBQVMsRUFBRSxNQUFNLEdBQ2hCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLENBR3BEO0lBRVksc0JBQXNCLENBQ2pDLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFNBQVMsRUFBRSxNQUFNLEdBQ2hCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLENBR3BEO0lBRVksMkJBQTJCLENBQ3RDLEtBQUssRUFBRSxjQUFjLEVBQ3JCLE9BQU8sRUFBRSxFQUFFLEdBQ1YsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sY0FBYyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBTS9EO0lBRVksNEJBQTRCLENBQ3ZDLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFFBQVEsRUFBRSxFQUFFLEdBQ1gsT0FBTyxDQUFDLGlCQUFpQixDQUFDLE9BQU8scUJBQXFCLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FTdEU7SUFFWSxpQ0FBaUMsQ0FDNUMsS0FBSyxFQUFFLGNBQWMsRUFDckIsYUFBYSxFQUFFLEVBQUUsR0FDaEIsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxPQUFPLHdCQUF3QixDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FTN0U7SUFFWSxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBS3RGO0lBRUQ7Ozs7T0FJRztJQUNVLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUd0RTtJQUVEOzs7O09BSUc7SUFDVSxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQW1CdEU7SUFFWSxxQkFBcUIsQ0FDaEMsS0FBSyxFQUFFLGNBQWMsRUFDckIsU0FBUyxFQUFFLE1BQU0sR0FDaEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLGNBQWMsQ0FBQyxDQUFDLENBRzdDO0lBRVksd0JBQXdCLENBQ25DLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFNBQVMsRUFBRSxNQUFNLEdBQ2hCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyx1QkFBdUIsQ0FBQyxDQUFDLENBR3REO0lBRVksNkJBQTZCLENBQ3hDLEtBQUssRUFBRSxjQUFjLEVBQ3JCLFNBQVMsRUFBRSxFQUFFLEdBQ1osT0FBTyxDQUFDLDBCQUEwQixHQUFHLFNBQVMsQ0FBQyxDQWNqRDtJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDVSxnQ0FBZ0MsQ0FDM0MsS0FBSyxFQUFFLGNBQWMsRUFDckIsU0FBUyxFQUFFLEVBQUUsR0FDWixPQUFPLENBQUMsMEJBQTBCLEdBQUcsU0FBUyxDQUFDLENBY2pEO0lBRUssb0JBQW9CLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0FhdEc7SUFFWSxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBYXBHO0lBRVksY0FBYyxDQUFDLEtBQUssR0FBRSxjQUF5QixHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBaUI5RjtJQUVEOzs7O09BSUc7SUFDVSx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBRWxGO0lBRUQ7OztRQUdJO0lBSVMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsVUFBUSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQXdFcEc7SUFFWSxTQUFTLENBQ3BCLEVBQUUsRUFBRSxFQUFFLEVBQ04sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsR0FBRTtRQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUFDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFBO0tBQU8sR0FDbEcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBbUI3QjtJQUVNLFNBQVMsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FJaEQ7SUFFWSxTQUFTLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FlM0U7SUFFTSw0QkFBNEIsSUFBSSxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FPeEU7SUFFTSxrQ0FBa0MsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUU3RTtJQUVNLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FFcEQ7SUFFTSxpQkFBaUIsQ0FDdEIsZ0JBQWdCLEVBQUUsVUFBVSxFQUM1QixRQUFRLENBQUMsRUFBRSxVQUFVLEVBQ3JCLE1BQU0sQ0FBQyxFQUFFLFVBQVUsR0FDbEIsT0FBTyxDQUFDLG9CQUFvQixHQUFHLFNBQVMsQ0FBQyxDQUUzQztJQUVZLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTBDaEU7SUFFWSxVQUFVLENBQUMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWtDaEY7SUFFWSxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUl0QztJQUVNLFVBQVUsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBS2pDO0lBRU0sZ0JBQWdCLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FLdEQ7SUFFTSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLEtBQUssR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBUzdFO0NBb0VGIn0=
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXp0ZWMtbm9kZS9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLEtBQUssbUJBQW1CLEVBQWtDLE1BQU0sMkJBQTJCLENBQUM7QUFFckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLHdCQUF3QixFQUFFLEtBQUsscUJBQXFCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM3RyxPQUFPLEVBQWMsS0FBSyxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTFFLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFekcsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RSxPQUFPLEVBQWlCLGVBQWUsRUFBaUMsTUFBTSxzQkFBc0IsQ0FBQztBQUdyRyxPQUFPLEVBQ0wsS0FBSyxHQUFHLEVBQ1IsS0FBSyxhQUFhLEVBSW5CLE1BQU0sWUFBWSxDQUFDO0FBRXBCLE9BQU8sRUFBRSxLQUFLLFVBQVUsRUFBRSxLQUFLLGNBQWMsRUFBb0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RixPQUFPLEVBR0wsZUFBZSxFQUNmLEtBQUssa0JBQWtCLEVBQ3hCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxFQUNM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
|