@aztec/aztec-node 0.0.1-commit.b655e406 → 0.0.1-commit.c7c42ec
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 +5 -2
- package/dest/aztec-node/config.d.ts.map +1 -1
- package/dest/aztec-node/config.js +7 -1
- 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/server.d.ts +36 -47
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +91 -51
- package/dest/bin/index.d.ts +1 -1
- package/dest/index.d.ts +1 -1
- package/dest/sentinel/config.d.ts +1 -1
- package/dest/sentinel/factory.d.ts +1 -1
- package/dest/sentinel/index.d.ts +1 -1
- package/dest/sentinel/sentinel.d.ts +20 -19
- package/dest/sentinel/sentinel.d.ts.map +1 -1
- package/dest/sentinel/sentinel.js +23 -16
- package/dest/sentinel/store.d.ts +6 -5
- package/dest/sentinel/store.d.ts.map +1 -1
- package/dest/sentinel/store.js +3 -2
- package/dest/test/index.d.ts +1 -1
- package/package.json +28 -27
- package/src/aztec-node/config.ts +12 -8
- package/src/aztec-node/server.ts +150 -96
- package/src/sentinel/sentinel.ts +47 -35
- package/src/sentinel/store.ts +11 -10
|
@@ -6,29 +6,35 @@ function _ts_decorate(decorators, target, key, desc) {
|
|
|
6
6
|
}
|
|
7
7
|
import { createArchiver } from '@aztec/archiver';
|
|
8
8
|
import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@aztec/bb-prover';
|
|
9
|
-
import {
|
|
9
|
+
import { createBlobClient } from '@aztec/blob-client/client';
|
|
10
|
+
import { createReadOnlyFileStoreBlobClients, createWritableFileStoreBlobClient } from '@aztec/blob-client/filestore';
|
|
10
11
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
11
12
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
12
|
-
import {
|
|
13
|
+
import { createEthereumChain } from '@aztec/ethereum/chain';
|
|
14
|
+
import { getPublicClient } from '@aztec/ethereum/client';
|
|
15
|
+
import { RegistryContract, RollupContract } from '@aztec/ethereum/contracts';
|
|
16
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
13
17
|
import { compactArray, pick } from '@aztec/foundation/collection';
|
|
18
|
+
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
14
19
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
15
|
-
import { Fr } from '@aztec/foundation/fields';
|
|
16
20
|
import { BadRequestError } from '@aztec/foundation/json-rpc';
|
|
17
21
|
import { createLogger } from '@aztec/foundation/log';
|
|
18
|
-
import { SerialQueue } from '@aztec/foundation/queue';
|
|
19
22
|
import { count } from '@aztec/foundation/string';
|
|
20
23
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
21
24
|
import { MembershipWitness } from '@aztec/foundation/trees';
|
|
22
25
|
import { KeystoreManager, loadKeystores, mergeKeystores } from '@aztec/node-keystore';
|
|
23
26
|
import { trySnapshotSync, uploadSnapshot } from '@aztec/node-lib/actions';
|
|
24
|
-
import { createL1TxUtilsWithBlobsFromEthSigner } from '@aztec/node-lib/factories';
|
|
27
|
+
import { createForwarderL1TxUtilsFromEthSigner, createL1TxUtilsWithBlobsFromEthSigner } from '@aztec/node-lib/factories';
|
|
25
28
|
import { createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
|
|
26
29
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
27
30
|
import { BlockBuilder, GlobalVariableBuilder, SequencerClient, createValidatorForAcceptingTxs } from '@aztec/sequencer-client';
|
|
31
|
+
import { CheckpointsBuilder } from '@aztec/sequencer-client';
|
|
28
32
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
29
33
|
import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
|
|
34
|
+
import { CollectionLimitsConfig, PublicSimulatorConfig } from '@aztec/stdlib/avm';
|
|
30
35
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
31
36
|
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
37
|
+
import { GasFees } from '@aztec/stdlib/gas';
|
|
32
38
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
33
39
|
import { AztecNodeAdminConfigSchema } from '@aztec/stdlib/interfaces/client';
|
|
34
40
|
import { tryStop } from '@aztec/stdlib/interfaces/server';
|
|
@@ -66,13 +72,12 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
66
72
|
proofVerifier;
|
|
67
73
|
telemetry;
|
|
68
74
|
log;
|
|
75
|
+
blobClient;
|
|
69
76
|
metrics;
|
|
70
77
|
// Prevent two snapshot operations to happen simultaneously
|
|
71
78
|
isUploadingSnapshot;
|
|
72
|
-
// Serial queue to ensure that we only send one tx at a time
|
|
73
|
-
txQueue;
|
|
74
79
|
tracer;
|
|
75
|
-
constructor(config, p2pClient, blockSource, logsSource, contractDataSource, l1ToL2MessageSource, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, l1ChainId, version, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry = getTelemetryClient(), log = createLogger('node')){
|
|
80
|
+
constructor(config, p2pClient, blockSource, logsSource, contractDataSource, l1ToL2MessageSource, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, l1ChainId, version, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry = getTelemetryClient(), log = createLogger('node'), blobClient){
|
|
76
81
|
this.config = config;
|
|
77
82
|
this.p2pClient = p2pClient;
|
|
78
83
|
this.blockSource = blockSource;
|
|
@@ -92,11 +97,10 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
92
97
|
this.proofVerifier = proofVerifier;
|
|
93
98
|
this.telemetry = telemetry;
|
|
94
99
|
this.log = log;
|
|
100
|
+
this.blobClient = blobClient;
|
|
95
101
|
this.isUploadingSnapshot = false;
|
|
96
|
-
this.txQueue = new SerialQueue();
|
|
97
102
|
this.metrics = new NodeMetrics(telemetry, 'AztecNodeService');
|
|
98
103
|
this.tracer = telemetry.getTracer('AztecNodeService');
|
|
99
|
-
this.txQueue.start();
|
|
100
104
|
this.log.info(`Aztec Node version: ${this.packageVersion}`);
|
|
101
105
|
this.log.info(`Aztec Node started on chain 0x${l1ChainId.toString(16)}`, config.l1Contracts);
|
|
102
106
|
}
|
|
@@ -119,9 +123,6 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
119
123
|
const packageVersion = getPackageVersion() ?? '';
|
|
120
124
|
const telemetry = deps.telemetry ?? getTelemetryClient();
|
|
121
125
|
const dateProvider = deps.dateProvider ?? new DateProvider();
|
|
122
|
-
const blobSinkClient = deps.blobSinkClient ?? createBlobSinkClient(config, {
|
|
123
|
-
logger: createLogger('node:blob-sink:client')
|
|
124
|
-
});
|
|
125
126
|
const ethereumChain = createEthereumChain(config.l1RpcUrls, config.l1ChainId);
|
|
126
127
|
// Build a key store from file if given or from environment otherwise
|
|
127
128
|
let keyStoreManager;
|
|
@@ -152,7 +153,9 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
152
153
|
}
|
|
153
154
|
const publicClient = createPublicClient({
|
|
154
155
|
chain: ethereumChain.chainInfo,
|
|
155
|
-
transport: fallback(config.l1RpcUrls.map((url)=>http(url
|
|
156
|
+
transport: fallback(config.l1RpcUrls.map((url)=>http(url, {
|
|
157
|
+
batch: false
|
|
158
|
+
}))),
|
|
156
159
|
pollingInterval: config.viemPollingIntervalMS
|
|
157
160
|
});
|
|
158
161
|
const l1ContractsAddresses = await RegistryContract.collectAddresses(publicClient, config.l1Contracts.registryAddress, config.rollupVersion ?? 'canonical');
|
|
@@ -171,13 +174,27 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
171
174
|
if (config.rollupVersion !== Number(rollupVersionFromRollup)) {
|
|
172
175
|
log.warn(`Registry looked up and returned a rollup with version (${config.rollupVersion}), but this does not match with version detected from the rollup directly: (${rollupVersionFromRollup}).`);
|
|
173
176
|
}
|
|
177
|
+
const blobFileStoreMetadata = {
|
|
178
|
+
l1ChainId: config.l1ChainId,
|
|
179
|
+
rollupVersion: config.rollupVersion,
|
|
180
|
+
rollupAddress: config.l1Contracts.rollupAddress.toString()
|
|
181
|
+
};
|
|
182
|
+
const [fileStoreClients, fileStoreUploadClient] = await Promise.all([
|
|
183
|
+
createReadOnlyFileStoreBlobClients(config.blobFileStoreUrls, blobFileStoreMetadata, log),
|
|
184
|
+
createWritableFileStoreBlobClient(config.blobFileStoreUploadUrl, blobFileStoreMetadata, log)
|
|
185
|
+
]);
|
|
186
|
+
const blobClient = deps.blobClient ?? createBlobClient(config, {
|
|
187
|
+
logger: createLogger('node:blob-client:client'),
|
|
188
|
+
fileStoreClients,
|
|
189
|
+
fileStoreUploadClient
|
|
190
|
+
});
|
|
174
191
|
// attempt snapshot sync if possible
|
|
175
192
|
await trySnapshotSync(config, log);
|
|
176
193
|
const epochCache = await EpochCache.create(config.l1Contracts.rollupAddress, config, {
|
|
177
194
|
dateProvider
|
|
178
195
|
});
|
|
179
196
|
const archiver = await createArchiver(config, {
|
|
180
|
-
|
|
197
|
+
blobClient,
|
|
181
198
|
epochCache,
|
|
182
199
|
telemetry,
|
|
183
200
|
dateProvider
|
|
@@ -186,7 +203,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
186
203
|
});
|
|
187
204
|
// now create the merkle trees and the world state synchronizer
|
|
188
205
|
const worldStateSynchronizer = await createWorldStateSynchronizer(config, archiver, options.prefilledPublicData, telemetry);
|
|
189
|
-
const circuitVerifier = config.realProofs ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier();
|
|
206
|
+
const circuitVerifier = config.realProofs || config.debugForceTxProofVerification ? await BBCircuitVerifier.new(config) : new TestCircuitVerifier(config.proverTestVerificationDelayMs);
|
|
190
207
|
if (!config.realProofs) {
|
|
191
208
|
log.warn(`Aztec node is accepting fake proofs`);
|
|
192
209
|
}
|
|
@@ -211,7 +228,8 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
211
228
|
blockBuilder,
|
|
212
229
|
blockSource: archiver,
|
|
213
230
|
l1ToL2MessageSource: archiver,
|
|
214
|
-
keyStoreManager
|
|
231
|
+
keyStoreManager,
|
|
232
|
+
fileStoreBlobUploadClient: fileStoreUploadClient
|
|
215
233
|
});
|
|
216
234
|
// If we have a validator client, register it as a source of offenses for the slasher,
|
|
217
235
|
// and have it register callbacks on the p2p client *before* we start it, otherwise messages
|
|
@@ -266,13 +284,20 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
266
284
|
// Validator enabled, create/start relevant service
|
|
267
285
|
let sequencer;
|
|
268
286
|
let slasherClient;
|
|
269
|
-
if (!config.disableValidator) {
|
|
287
|
+
if (!config.disableValidator && validatorClient) {
|
|
270
288
|
// We create a slasher only if we have a sequencer, since all slashing actions go through the sequencer publisher
|
|
271
289
|
// as they are executed when the node is selected as proposer.
|
|
272
290
|
const validatorAddresses = keyStoreManager ? NodeKeystoreAdapter.fromKeyStoreManager(keyStoreManager).getAddresses() : [];
|
|
273
291
|
slasherClient = await createSlasher(config, config.l1Contracts, getPublicClient(config), watchers, dateProvider, epochCache, validatorAddresses, undefined);
|
|
274
292
|
await slasherClient.start();
|
|
275
|
-
const l1TxUtils = await
|
|
293
|
+
const l1TxUtils = config.publisherForwarderAddress ? await createForwarderL1TxUtilsFromEthSigner(publicClient, keyStoreManager.createAllValidatorPublisherSigners(), config.publisherForwarderAddress, {
|
|
294
|
+
...config,
|
|
295
|
+
scope: 'sequencer'
|
|
296
|
+
}, {
|
|
297
|
+
telemetry,
|
|
298
|
+
logger: log.createChild('l1-tx-utils'),
|
|
299
|
+
dateProvider
|
|
300
|
+
}) : await createL1TxUtilsWithBlobsFromEthSigner(publicClient, keyStoreManager.createAllValidatorPublisherSigners(), {
|
|
276
301
|
...config,
|
|
277
302
|
scope: 'sequencer'
|
|
278
303
|
}, {
|
|
@@ -281,6 +306,11 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
281
306
|
dateProvider
|
|
282
307
|
});
|
|
283
308
|
// Create and start the sequencer client
|
|
309
|
+
const checkpointsBuilder = new CheckpointsBuilder({
|
|
310
|
+
...config,
|
|
311
|
+
l1GenesisTime,
|
|
312
|
+
slotDuration: Number(slotDuration)
|
|
313
|
+
}, archiver, dateProvider, telemetry);
|
|
284
314
|
sequencer = await SequencerClient.new(config, {
|
|
285
315
|
...deps,
|
|
286
316
|
epochCache,
|
|
@@ -289,12 +319,12 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
289
319
|
p2pClient,
|
|
290
320
|
worldStateSynchronizer,
|
|
291
321
|
slasherClient,
|
|
292
|
-
|
|
322
|
+
checkpointsBuilder,
|
|
293
323
|
l2BlockSource: archiver,
|
|
294
324
|
l1ToL2MessageSource: archiver,
|
|
295
325
|
telemetry,
|
|
296
326
|
dateProvider,
|
|
297
|
-
|
|
327
|
+
blobClient,
|
|
298
328
|
nodeKeyStore: keyStoreManager
|
|
299
329
|
});
|
|
300
330
|
}
|
|
@@ -304,7 +334,13 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
304
334
|
} else if (sequencer) {
|
|
305
335
|
log.warn(`Sequencer created but not started`);
|
|
306
336
|
}
|
|
307
|
-
|
|
337
|
+
const globalVariableBuilder = new GlobalVariableBuilder({
|
|
338
|
+
...config,
|
|
339
|
+
rollupVersion: BigInt(config.rollupVersion),
|
|
340
|
+
l1GenesisTime,
|
|
341
|
+
slotDuration: Number(slotDuration)
|
|
342
|
+
});
|
|
343
|
+
return new AztecNodeService(config, p2pClient, archiver, archiver, archiver, archiver, worldStateSynchronizer, sequencer, slasherClient, validatorsSentinel, epochPruneWatcher, ethereumChain.chainInfo.id, config.rollupVersion, globalVariableBuilder, epochCache, packageVersion, proofVerifier, telemetry, log, blobClient);
|
|
308
344
|
}
|
|
309
345
|
/**
|
|
310
346
|
* Returns the sequencer client instance.
|
|
@@ -399,6 +435,15 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
399
435
|
*/ async getCurrentBaseFees() {
|
|
400
436
|
return await this.globalVariableBuilder.getCurrentBaseFees();
|
|
401
437
|
}
|
|
438
|
+
async getMaxPriorityFees() {
|
|
439
|
+
for await (const tx of this.p2pClient.iteratePendingTxs()){
|
|
440
|
+
return tx.getGasSettings().maxPriorityFeesPerGas;
|
|
441
|
+
}
|
|
442
|
+
return GasFees.from({
|
|
443
|
+
feePerDaGas: 0n,
|
|
444
|
+
feePerL2Gas: 0n
|
|
445
|
+
});
|
|
446
|
+
}
|
|
402
447
|
/**
|
|
403
448
|
* Method to fetch the latest block number synchronized by the node.
|
|
404
449
|
* @returns The block number.
|
|
@@ -432,22 +477,11 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
432
477
|
getContract(address) {
|
|
433
478
|
return this.contractDataSource.getContract(address);
|
|
434
479
|
}
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
* @param from - The block number from which to begin retrieving logs.
|
|
438
|
-
* @param limit - The maximum number of blocks to retrieve logs from.
|
|
439
|
-
* @returns An array of private logs from the specified range of blocks.
|
|
440
|
-
*/ getPrivateLogs(from, limit) {
|
|
441
|
-
return this.logsSource.getPrivateLogs(from, limit);
|
|
480
|
+
getPrivateLogsByTags(tags) {
|
|
481
|
+
return this.logsSource.getPrivateLogsByTags(tags);
|
|
442
482
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
* @param tags - The tags to filter the logs by.
|
|
446
|
-
* @param logsPerTag - The maximum number of logs to return for each tag. By default no limit is set
|
|
447
|
-
* @returns For each received tag, an array of matching logs is returned. An empty array implies no logs match
|
|
448
|
-
* that tag.
|
|
449
|
-
*/ getLogsByTags(tags, logsPerTag) {
|
|
450
|
-
return this.logsSource.getLogsByTags(tags, logsPerTag);
|
|
483
|
+
getPublicLogsByTagsFromContract(contractAddress, tags) {
|
|
484
|
+
return this.logsSource.getPublicLogsByTagsFromContract(contractAddress, tags);
|
|
451
485
|
}
|
|
452
486
|
/**
|
|
453
487
|
* Gets public logs based on the provided filter.
|
|
@@ -467,7 +501,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
467
501
|
* Method to submit a transaction to the p2p pool.
|
|
468
502
|
* @param tx - The transaction to be submitted.
|
|
469
503
|
*/ async sendTx(tx) {
|
|
470
|
-
await this
|
|
504
|
+
await this.#sendTx(tx);
|
|
471
505
|
}
|
|
472
506
|
async #sendTx(tx) {
|
|
473
507
|
const timer = new Timer();
|
|
@@ -508,7 +542,6 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
508
542
|
* Method to stop the aztec node.
|
|
509
543
|
*/ async stop() {
|
|
510
544
|
this.log.info(`Stopping Aztec Node`);
|
|
511
|
-
await this.txQueue.end();
|
|
512
545
|
await tryStop(this.validatorsSentinel);
|
|
513
546
|
await tryStop(this.epochPruneWatcher);
|
|
514
547
|
await tryStop(this.slasherClient);
|
|
@@ -517,6 +550,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
517
550
|
await tryStop(this.p2pClient);
|
|
518
551
|
await tryStop(this.worldStateSynchronizer);
|
|
519
552
|
await tryStop(this.blockSource);
|
|
553
|
+
await tryStop(this.blobClient);
|
|
520
554
|
await tryStop(this.telemetry);
|
|
521
555
|
this.log.info(`Stopped Aztec Node`);
|
|
522
556
|
}
|
|
@@ -572,7 +606,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
572
606
|
// Now we obtain the block hashes from the archive tree by calling await `committedDb.getLeafValue(treeId, index)`
|
|
573
607
|
// (note that block number corresponds to the leaf index in the archive tree).
|
|
574
608
|
const blockHashes = await Promise.all(uniqueBlockNumbers.map((blockNumber)=>{
|
|
575
|
-
return committedDb.getLeafValue(MerkleTreeId.ARCHIVE, blockNumber);
|
|
609
|
+
return committedDb.getLeafValue(MerkleTreeId.ARCHIVE, BigInt(blockNumber));
|
|
576
610
|
}));
|
|
577
611
|
// If any of the block hashes are undefined, we throw an error.
|
|
578
612
|
for(let i = 0; i < uniqueBlockNumbers.length; i++){
|
|
@@ -580,7 +614,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
580
614
|
throw new Error(`Block hash is undefined for block number ${uniqueBlockNumbers[i]}`);
|
|
581
615
|
}
|
|
582
616
|
}
|
|
583
|
-
// Create
|
|
617
|
+
// Create DataInBlock objects by combining indices, blockNumbers and blockHashes and return them.
|
|
584
618
|
return maybeIndices.map((index, i)=>{
|
|
585
619
|
if (index === undefined) {
|
|
586
620
|
return undefined;
|
|
@@ -595,7 +629,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
595
629
|
return undefined;
|
|
596
630
|
}
|
|
597
631
|
return {
|
|
598
|
-
l2BlockNumber: Number(blockNumber),
|
|
632
|
+
l2BlockNumber: BlockNumber(Number(blockNumber)),
|
|
599
633
|
l2BlockHash: L2BlockHash.fromField(blockHash),
|
|
600
634
|
data: index
|
|
601
635
|
};
|
|
@@ -654,7 +688,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
654
688
|
}
|
|
655
689
|
async getL1ToL2MessageBlock(l1ToL2Message) {
|
|
656
690
|
const messageIndex = await this.l1ToL2MessageSource.getL1ToL2MessageIndex(l1ToL2Message);
|
|
657
|
-
return messageIndex ? InboxLeaf.
|
|
691
|
+
return messageIndex ? BlockNumber.fromCheckpointNumber(InboxLeaf.checkpointNumberFromIndex(messageIndex)) : undefined;
|
|
658
692
|
}
|
|
659
693
|
/**
|
|
660
694
|
* Returns whether an L1 to L2 message is synced by archiver and if it's ready to be included in a block.
|
|
@@ -772,7 +806,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
772
806
|
* Returns the currently committed block header, or the initial header if no blocks have been produced.
|
|
773
807
|
* @returns The current committed block header.
|
|
774
808
|
*/ async getBlockHeader(blockNumber = 'latest') {
|
|
775
|
-
return blockNumber ===
|
|
809
|
+
return blockNumber === BlockNumber.ZERO || blockNumber === 'latest' && await this.blockSource.getBlockNumber() === BlockNumber.ZERO ? this.worldStateSynchronizer.getCommitted().getInitialHeader() : this.blockSource.getBlockHeader(blockNumber === 'latest' ? blockNumber : blockNumber);
|
|
776
810
|
}
|
|
777
811
|
/**
|
|
778
812
|
* Get a block header specified by its hash.
|
|
@@ -800,7 +834,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
800
834
|
throw new BadRequestError(`Transaction total gas limit ${txGasLimit + teardownGasLimit} (${txGasLimit} + ${teardownGasLimit}) exceeds maximum gas limit ${this.config.rpcSimulatePublicMaxGasLimit} for simulation`);
|
|
801
835
|
}
|
|
802
836
|
const txHash = tx.getTxHash();
|
|
803
|
-
const blockNumber = await this.blockSource.getBlockNumber() + 1;
|
|
837
|
+
const blockNumber = BlockNumber(await this.blockSource.getBlockNumber() + 1);
|
|
804
838
|
// If sequencer is not initialized, we just set these values to zero for simulation.
|
|
805
839
|
const coinbase = EthAddress.ZERO;
|
|
806
840
|
const feeRecipient = AztecAddress.ZERO;
|
|
@@ -813,11 +847,17 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
813
847
|
});
|
|
814
848
|
const merkleTreeFork = await this.worldStateSynchronizer.fork();
|
|
815
849
|
try {
|
|
816
|
-
const
|
|
850
|
+
const config = PublicSimulatorConfig.from({
|
|
817
851
|
skipFeeEnforcement,
|
|
818
|
-
|
|
819
|
-
|
|
852
|
+
collectDebugLogs: true,
|
|
853
|
+
collectHints: false,
|
|
854
|
+
collectCallMetadata: true,
|
|
855
|
+
collectStatistics: false,
|
|
856
|
+
collectionLimits: CollectionLimitsConfig.from({
|
|
857
|
+
maxDebugLogMemoryReads: this.config.rpcSimulatePublicMaxDebugLogMemoryReads
|
|
858
|
+
})
|
|
820
859
|
});
|
|
860
|
+
const processor = publicProcessorFactory.create(merkleTreeFork, newGlobalVariables, config);
|
|
821
861
|
// REFACTOR: Consider merging ProcessReturnValues into ProcessedTx
|
|
822
862
|
const [processedTxs, failedTxs, _usedTxs, returns] = await processor.process([
|
|
823
863
|
tx
|
|
@@ -840,7 +880,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
840
880
|
const verifier = isSimulation ? undefined : this.proofVerifier;
|
|
841
881
|
// We accept transactions if they are not expired by the next slot (checked based on the IncludeByTimestamp field)
|
|
842
882
|
const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
|
|
843
|
-
const blockNumber = await this.blockSource.getBlockNumber() + 1;
|
|
883
|
+
const blockNumber = BlockNumber(await this.blockSource.getBlockNumber() + 1);
|
|
844
884
|
const validator = createValidatorForAcceptingTxs(db, this.contractDataSource, verifier, {
|
|
845
885
|
timestamp: nextSlotTimestamp,
|
|
846
886
|
blockNumber,
|
|
@@ -1000,7 +1040,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
1000
1040
|
if (typeof blockNumber === 'number' && blockNumber < INITIAL_L2_BLOCK_NUM - 1) {
|
|
1001
1041
|
throw new Error('Invalid block number to get world state for: ' + blockNumber);
|
|
1002
1042
|
}
|
|
1003
|
-
let blockSyncedTo =
|
|
1043
|
+
let blockSyncedTo = BlockNumber.ZERO;
|
|
1004
1044
|
try {
|
|
1005
1045
|
// Attempt to sync the world state if necessary
|
|
1006
1046
|
blockSyncedTo = await this.#syncWorldState();
|
|
@@ -1023,7 +1063,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
1023
1063
|
* @returns A promise that fulfils once the world state is synced
|
|
1024
1064
|
*/ async #syncWorldState() {
|
|
1025
1065
|
const blockSourceHeight = await this.blockSource.getBlockNumber();
|
|
1026
|
-
return this.worldStateSynchronizer.syncImmediate(blockSourceHeight);
|
|
1066
|
+
return await this.worldStateSynchronizer.syncImmediate(blockSourceHeight);
|
|
1027
1067
|
}
|
|
1028
1068
|
}
|
|
1029
1069
|
_ts_decorate([
|
package/dest/bin/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --no-warnings
|
|
2
2
|
export {};
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iaW4vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
package/dest/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export * from './aztec-node/config.js';
|
|
2
2
|
export * from './aztec-node/server.js';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsd0JBQXdCLENBQUMifQ==
|
|
@@ -5,4 +5,4 @@ export type SentinelConfig = {
|
|
|
5
5
|
sentinelEnabled: boolean;
|
|
6
6
|
};
|
|
7
7
|
export declare const sentinelConfigMappings: ConfigMappingsType<SentinelConfig>;
|
|
8
|
-
//# sourceMappingURL=
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VudGluZWwvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGtCQUFrQixFQUEyQyxNQUFNLDBCQUEwQixDQUFDO0FBRTVHLE1BQU0sTUFBTSxjQUFjLEdBQUc7SUFDM0IsNkJBQTZCLEVBQUUsTUFBTSxDQUFDO0lBQ3RDLCtDQUErQyxFQUFFLE1BQU0sQ0FBQztJQUN4RCxlQUFlLEVBQUUsT0FBTyxDQUFDO0NBQzFCLENBQUM7QUFFRixlQUFPLE1BQU0sc0JBQXNCLEVBQUUsa0JBQWtCLENBQUMsY0FBYyxDQTRCckUsQ0FBQyJ9
|
|
@@ -6,4 +6,4 @@ import type { SlasherConfig } from '@aztec/stdlib/interfaces/server';
|
|
|
6
6
|
import type { SentinelConfig } from './config.js';
|
|
7
7
|
import { Sentinel } from './sentinel.js';
|
|
8
8
|
export declare function createSentinel(epochCache: EpochCache, archiver: L2BlockSource, p2p: P2PClient, config: SentinelConfig & DataStoreConfig & SlasherConfig, logger?: import("@aztec/foundation/log").Logger): Promise<Sentinel | undefined>;
|
|
9
|
-
//# sourceMappingURL=
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlbnRpbmVsL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFckQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzVDLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXJFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3pDLHdCQUFzQixjQUFjLENBQ2xDLFVBQVUsRUFBRSxVQUFVLEVBQ3RCLFFBQVEsRUFBRSxhQUFhLEVBQ3ZCLEdBQUcsRUFBRSxTQUFTLEVBQ2QsTUFBTSxFQUFFLGNBQWMsR0FBRyxlQUFlLEdBQUcsYUFBYSxFQUN4RCxNQUFNLHlDQUFnQyxHQUNyQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQWlCL0IifQ==
|
package/dest/sentinel/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export { Sentinel } from './sentinel.js';
|
|
2
2
|
export type { ValidatorsStats, ValidatorStats, ValidatorStatusHistory, ValidatorStatusInSlot, } from '@aztec/stdlib/validators';
|
|
3
|
-
//# sourceMappingURL=
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLFlBQVksRUFDVixlQUFlLEVBQ2YsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixxQkFBcUIsR0FDdEIsTUFBTSwwQkFBMEIsQ0FBQyJ9
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
2
|
+
import { BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
3
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
4
5
|
import { type L2TipsStore } from '@aztec/kv-store/stores';
|
|
@@ -19,10 +20,10 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
19
20
|
protected runningPromise: RunningPromise;
|
|
20
21
|
protected blockStream: L2BlockStream;
|
|
21
22
|
protected l2TipsStore: L2TipsStore;
|
|
22
|
-
protected initialSlot:
|
|
23
|
-
protected lastProcessedSlot:
|
|
24
|
-
protected slotNumberToBlock: Map<
|
|
25
|
-
blockNumber:
|
|
23
|
+
protected initialSlot: SlotNumber | undefined;
|
|
24
|
+
protected lastProcessedSlot: SlotNumber | undefined;
|
|
25
|
+
protected slotNumberToBlock: Map<SlotNumber, {
|
|
26
|
+
blockNumber: BlockNumber;
|
|
26
27
|
archive: string;
|
|
27
28
|
attestors: EthAddress[];
|
|
28
29
|
}>;
|
|
@@ -34,15 +35,15 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
34
35
|
stop(): Promise<void>;
|
|
35
36
|
handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void>;
|
|
36
37
|
protected handleChainProven(event: L2BlockStreamEvent): Promise<void>;
|
|
37
|
-
protected computeProvenPerformance(epoch:
|
|
38
|
+
protected computeProvenPerformance(epoch: EpochNumber): Promise<ValidatorsEpochPerformance>;
|
|
38
39
|
/**
|
|
39
40
|
* Checks if a validator has been inactive for the specified number of consecutive epochs for which we have data on it.
|
|
40
41
|
* @param validator The validator address to check
|
|
41
42
|
* @param currentEpoch Epochs strictly before the current one are evaluated only
|
|
42
43
|
* @param requiredConsecutiveEpochs Number of consecutive epochs required for slashing
|
|
43
44
|
*/
|
|
44
|
-
protected checkPastInactivity(validator: EthAddress, currentEpoch:
|
|
45
|
-
protected handleProvenPerformance(epoch:
|
|
45
|
+
protected checkPastInactivity(validator: EthAddress, currentEpoch: EpochNumber, requiredConsecutiveEpochs: number): Promise<boolean>;
|
|
46
|
+
protected handleProvenPerformance(epoch: EpochNumber, performance: ValidatorsEpochPerformance): Promise<void>;
|
|
46
47
|
/**
|
|
47
48
|
* Process data for two L2 slots ago.
|
|
48
49
|
* Note that we do not process historical data, since we rely on p2p data for processing,
|
|
@@ -54,38 +55,38 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
54
55
|
* We also don't move past the archiver last synced L2 slot, as we don't want to process data that is not yet available.
|
|
55
56
|
* Last, we check the p2p is synced with the archiver, so it has pulled all attestations from it.
|
|
56
57
|
*/
|
|
57
|
-
protected isReadyToProcess(currentSlot:
|
|
58
|
+
protected isReadyToProcess(currentSlot: SlotNumber): Promise<SlotNumber | false>;
|
|
58
59
|
/**
|
|
59
60
|
* Gathers committee and proposer data for a given slot, computes slot stats,
|
|
60
61
|
* and updates overall stats.
|
|
61
62
|
*/
|
|
62
|
-
protected processSlot(slot:
|
|
63
|
+
protected processSlot(slot: SlotNumber): Promise<void>;
|
|
63
64
|
/** Computes activity for a given slot. */
|
|
64
|
-
protected getSlotActivity(slot:
|
|
65
|
+
protected getSlotActivity(slot: SlotNumber, epoch: EpochNumber, proposer: EthAddress, committee: EthAddress[]): Promise<{
|
|
65
66
|
[k: string]: ValidatorStatusInSlot | undefined;
|
|
66
67
|
}>;
|
|
67
68
|
/** Push the status for each slot for each validator. */
|
|
68
|
-
protected updateValidators(slot:
|
|
69
|
+
protected updateValidators(slot: SlotNumber, stats: Record<`0x${string}`, ValidatorStatusInSlot | undefined>): Promise<void>;
|
|
69
70
|
/** Computes stats to be returned based on stored data. */
|
|
70
|
-
computeStats({ fromSlot, toSlot, validators
|
|
71
|
-
fromSlot?:
|
|
72
|
-
toSlot?:
|
|
71
|
+
computeStats({ fromSlot, toSlot, validators }?: {
|
|
72
|
+
fromSlot?: SlotNumber;
|
|
73
|
+
toSlot?: SlotNumber;
|
|
73
74
|
validators?: EthAddress[];
|
|
74
75
|
}): Promise<ValidatorsStats>;
|
|
75
76
|
/** Computes stats for a single validator. */
|
|
76
|
-
getValidatorStats(validatorAddress: EthAddress, fromSlot?:
|
|
77
|
-
protected computeStatsForValidator(address: `0x${string}`, allHistory: ValidatorStatusHistory, fromSlot?:
|
|
77
|
+
getValidatorStats(validatorAddress: EthAddress, fromSlot?: SlotNumber, toSlot?: SlotNumber): Promise<SingleValidatorStats | undefined>;
|
|
78
|
+
protected computeStatsForValidator(address: `0x${string}`, allHistory: ValidatorStatusHistory, fromSlot?: SlotNumber, toSlot?: SlotNumber): ValidatorStats;
|
|
78
79
|
protected computeMissed(history: ValidatorStatusHistory, computeOverPrefix: ValidatorStatusType | undefined, filter: ValidatorStatusInSlot[]): {
|
|
79
80
|
currentStreak: number;
|
|
80
81
|
rate: number | undefined;
|
|
81
82
|
count: number;
|
|
82
83
|
total: number;
|
|
83
84
|
};
|
|
84
|
-
protected computeFromSlot(slot:
|
|
85
|
+
protected computeFromSlot(slot: SlotNumber | undefined): {
|
|
85
86
|
timestamp: bigint;
|
|
86
|
-
slot:
|
|
87
|
+
slot: SlotNumber;
|
|
87
88
|
date: string;
|
|
88
89
|
} | undefined;
|
|
89
90
|
}
|
|
90
91
|
export {};
|
|
91
|
-
//# sourceMappingURL=
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VudGluZWwuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZW50aW5lbC9zZW50aW5lbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV2RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBcUIsS0FBSyxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RSxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxFQUlMLEtBQUssT0FBTyxFQUNaLEtBQUssY0FBYyxFQUNwQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsYUFBYSxFQUNiLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUsseUJBQXlCLEVBRS9CLE1BQU0scUJBQXFCLENBQUM7QUFFN0IsT0FBTyxLQUFLLEVBQ1Ysb0JBQW9CLEVBQ3BCLGNBQWMsRUFDZCxzQkFBc0IsRUFDdEIscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNoQixNQUFNLDBCQUEwQixDQUFDO0FBSWxDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBRTNDLHFCQUFhLFFBQVMsU0FBUSxhQUEyQyxZQUFXLHlCQUF5QixFQUFFLE9BQU87SUFZbEgsU0FBUyxDQUFDLFVBQVUsRUFBRSxVQUFVO0lBQ2hDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsYUFBYTtJQUNqQyxTQUFTLENBQUMsR0FBRyxFQUFFLFNBQVM7SUFDeEIsU0FBUyxDQUFDLEtBQUssRUFBRSxhQUFhO0lBQzlCLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUNwQixhQUFhLEVBQ2IsaUNBQWlDLEdBQUcsd0JBQXdCLEdBQUcsMENBQTBDLENBQzFHO0lBQ0QsU0FBUyxDQUFDLE1BQU07SUFuQmxCLFNBQVMsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDO0lBQ3pDLFNBQVMsQ0FBQyxXQUFXLEVBQUcsYUFBYSxDQUFDO0lBQ3RDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDO0lBRW5DLFNBQVMsQ0FBQyxXQUFXLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUM5QyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQztJQUVwRCxTQUFTLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLFVBQVUsRUFBRTtRQUFFLFdBQVcsRUFBRSxXQUFXLENBQUM7UUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxDQUFBO0tBQUUsQ0FBQyxDQUN4RztJQUVaLFlBQ1ksVUFBVSxFQUFFLFVBQVUsRUFDdEIsUUFBUSxFQUFFLGFBQWEsRUFDdkIsR0FBRyxFQUFFLFNBQVMsRUFDZCxLQUFLLEVBQUUsYUFBYSxFQUNwQixNQUFNLEVBQUUsSUFBSSxDQUNwQixhQUFhLEVBQ2IsaUNBQWlDLEdBQUcsd0JBQXdCLEdBQUcsMENBQTBDLENBQzFHLEVBQ1MsTUFBTSx5Q0FBZ0MsRUFNakQ7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsUUFFakQ7SUFFWSxLQUFLLGtCQUdqQjtJQUVELGtIQUFrSDtJQUNsSCxVQUFnQixJQUFJLGtCQUtuQjtJQUVNLElBQUksa0JBRVY7SUFFWSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTJCNUU7SUFFRCxVQUFnQixpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLGlCQW9CMUQ7SUFFRCxVQUFnQix3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQXlCaEc7SUFFRDs7Ozs7T0FLRztJQUNILFVBQWdCLG1CQUFtQixDQUNqQyxTQUFTLEVBQUUsVUFBVSxFQUNyQixZQUFZLEVBQUUsV0FBVyxFQUN6Qix5QkFBeUIsRUFBRSxNQUFNLEdBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0F1QmxCO0lBRUQsVUFBZ0IsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLGlCQWtDbEc7SUFFRDs7OztPQUlHO0lBQ1UsSUFBSSxrQkFpQmhCO0lBRUQ7Ozs7T0FJRztJQUNILFVBQWdCLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FxQ3JGO0lBRUQ7OztPQUdHO0lBQ0gsVUFBZ0IsV0FBVyxDQUFDLElBQUksRUFBRSxVQUFVLGlCQWEzQztJQUVELDBDQUEwQztJQUMxQyxVQUFnQixlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRTs7T0EyRGxIO0lBRUQsd0RBQXdEO0lBQ3hELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxNQUFNLEVBQUUsRUFBRSxxQkFBcUIsR0FBRyxTQUFTLENBQUMsaUJBRTNHO0lBRUQsMERBQTBEO0lBQzdDLFlBQVksQ0FBQyxFQUN4QixRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDWCxHQUFFO1FBQUUsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQUMsVUFBVSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUE7S0FBTyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FtQjNHO0lBRUQsNkNBQTZDO0lBQ2hDLGlCQUFpQixDQUM1QixnQkFBZ0IsRUFBRSxVQUFVLEVBQzVCLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFDckIsTUFBTSxDQUFDLEVBQUUsVUFBVSxHQUNsQixPQUFPLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLENBa0MzQztJQUVELFNBQVMsQ0FBQyx3QkFBd0IsQ0FDaEMsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEVBQ3RCLFVBQVUsRUFBRSxzQkFBc0IsRUFDbEMsUUFBUSxDQUFDLEVBQUUsVUFBVSxFQUNyQixNQUFNLENBQUMsRUFBRSxVQUFVLEdBQ2xCLGNBQWMsQ0FjaEI7SUFFRCxTQUFTLENBQUMsYUFBYSxDQUNyQixPQUFPLEVBQUUsc0JBQXNCLEVBQy9CLGlCQUFpQixFQUFFLG1CQUFtQixHQUFHLFNBQVMsRUFDbEQsTUFBTSxFQUFFLHFCQUFxQixFQUFFOzs7OztNQVVoQztJQUVELFNBQVMsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxTQUFTOzs7O2tCQU1yRDtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"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"}
|