@aztec/aztec-node 2.0.0-nightly.20250821 → 2.0.0-nightly.20250823
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/server.d.ts +10 -9
- package/dest/aztec-node/server.d.ts.map +1 -1
- package/dest/aztec-node/server.js +24 -15
- package/dest/sentinel/sentinel.d.ts +3 -2
- package/dest/sentinel/sentinel.d.ts.map +1 -1
- package/dest/sentinel/sentinel.js +6 -5
- package/dest/test/index.d.ts +31 -0
- package/dest/test/index.d.ts.map +1 -0
- package/dest/test/index.js +1 -0
- package/package.json +25 -24
- package/src/aztec-node/server.ts +46 -34
- package/src/sentinel/sentinel.ts +7 -6
- package/src/test/index.ts +32 -0
|
@@ -9,7 +9,7 @@ import { DateProvider } from '@aztec/foundation/timer';
|
|
|
9
9
|
import { MembershipWitness, SiblingPath } from '@aztec/foundation/trees';
|
|
10
10
|
import { type P2P, type P2PClientDeps } from '@aztec/p2p';
|
|
11
11
|
import { SequencerClient, type SequencerPublisher } from '@aztec/sequencer-client';
|
|
12
|
-
import { EpochPruneWatcher,
|
|
12
|
+
import { EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
|
|
13
13
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
14
14
|
import { type InBlock, type L2Block, type L2BlockNumber, type L2BlockSource, type PublishedL2Block } from '@aztec/stdlib/block';
|
|
15
15
|
import type { ContractClassPublic, ContractDataSource, ContractInstanceWithAddress, NodeInfo, ProtocolContractAddresses } from '@aztec/stdlib/contract';
|
|
@@ -19,7 +19,7 @@ import { type ClientProtocolCircuitVerifier, type L2LogsSource, type Service, ty
|
|
|
19
19
|
import type { LogFilter, PrivateLog, TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
20
20
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
21
21
|
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
22
|
-
import type {
|
|
22
|
+
import type { Offense, SlashPayloadRound } from '@aztec/stdlib/slashing';
|
|
23
23
|
import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
|
|
24
24
|
import { MerkleTreeId, NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
25
25
|
import { type BlockHeader, type GlobalVariableBuilder as GlobalVariableBuilderInterface, type IndexedTxEffect, PublicSimulationOutput, Tx, type TxHash, TxReceipt, type TxValidationResult } from '@aztec/stdlib/tx';
|
|
@@ -40,14 +40,14 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
40
40
|
protected readonly l1ToL2MessageSource: L1ToL2MessageSource;
|
|
41
41
|
protected readonly worldStateSynchronizer: WorldStateSynchronizer;
|
|
42
42
|
protected readonly sequencer: SequencerClient | undefined;
|
|
43
|
-
protected readonly slasherClient:
|
|
43
|
+
protected readonly slasherClient: SlasherClientInterface | undefined;
|
|
44
44
|
protected readonly validatorsSentinel: Sentinel | undefined;
|
|
45
45
|
protected readonly epochPruneWatcher: EpochPruneWatcher | undefined;
|
|
46
46
|
protected readonly l1ChainId: number;
|
|
47
47
|
protected readonly version: number;
|
|
48
48
|
protected readonly globalVariableBuilder: GlobalVariableBuilderInterface;
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
protected readonly epochCache: EpochCacheInterface;
|
|
50
|
+
protected readonly packageVersion: string;
|
|
51
51
|
private proofVerifier;
|
|
52
52
|
private telemetry;
|
|
53
53
|
private log;
|
|
@@ -55,7 +55,7 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
55
55
|
private isUploadingSnapshot;
|
|
56
56
|
private txQueue;
|
|
57
57
|
readonly tracer: Tracer;
|
|
58
|
-
constructor(config: AztecNodeConfig, p2pClient: P2P, blockSource: L2BlockSource & Partial<Service>, logsSource: L2LogsSource, contractDataSource: ContractDataSource, l1ToL2MessageSource: L1ToL2MessageSource, worldStateSynchronizer: WorldStateSynchronizer, sequencer: SequencerClient | undefined, slasherClient:
|
|
58
|
+
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, proofVerifier: ClientProtocolCircuitVerifier, telemetry?: TelemetryClient, log?: Logger);
|
|
59
59
|
getWorldStateSyncStatus(): Promise<WorldStateSyncStatus>;
|
|
60
60
|
getL2Tips(): Promise<import("@aztec/stdlib/block").L2Tips>;
|
|
61
61
|
/**
|
|
@@ -183,13 +183,13 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
183
183
|
getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]>;
|
|
184
184
|
getPendingTxCount(): Promise<number>;
|
|
185
185
|
/**
|
|
186
|
-
* Method to retrieve a single tx from the mempool or
|
|
186
|
+
* Method to retrieve a single tx from the mempool or unfinalized chain.
|
|
187
187
|
* @param txHash - The transaction hash to return.
|
|
188
188
|
* @returns - The tx if it exists.
|
|
189
189
|
*/
|
|
190
190
|
getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
|
|
191
191
|
/**
|
|
192
|
-
* Method to retrieve txs from the mempool or
|
|
192
|
+
* Method to retrieve txs from the mempool or unfinalized chain.
|
|
193
193
|
* @param txHash - The transaction hash to return.
|
|
194
194
|
* @returns - The txs if it exists.
|
|
195
195
|
*/
|
|
@@ -311,6 +311,7 @@ export declare class AztecNodeService implements AztecNode, AztecNodeAdmin, Trac
|
|
|
311
311
|
rollbackTo(targetBlock: number, force?: boolean): Promise<void>;
|
|
312
312
|
pauseSync(): Promise<void>;
|
|
313
313
|
resumeSync(): Promise<void>;
|
|
314
|
-
|
|
314
|
+
getSlashPayloads(): Promise<SlashPayloadRound[]>;
|
|
315
|
+
getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]>;
|
|
315
316
|
}
|
|
316
317
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,uBAAuB,EAAwB,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EACL,cAAc,EAEd,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAc,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EACL,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/aztec-node/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { BBCircuitVerifier, QueuedIVCVerifier, TestCircuitVerifier } from '@azte
|
|
|
9
9
|
import { createBlobSinkClient } from '@aztec/blob-sink/client';
|
|
10
10
|
import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
|
|
11
11
|
import { EpochCache } from '@aztec/epoch-cache';
|
|
12
|
-
import {
|
|
12
|
+
import { NULL_KEY, RegistryContract, RollupContract, createEthereumChain, createExtendedL1Client, getPublicClient } from '@aztec/ethereum';
|
|
13
13
|
import { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs';
|
|
14
14
|
import { compactArray, pick } from '@aztec/foundation/collection';
|
|
15
15
|
import { EthAddress } from '@aztec/foundation/eth-address';
|
|
@@ -25,7 +25,7 @@ import { createP2PClient, getDefaultAllowedSetupFunctions } from '@aztec/p2p';
|
|
|
25
25
|
import { ProtocolContractAddress } from '@aztec/protocol-contracts';
|
|
26
26
|
import { BlockBuilder, GlobalVariableBuilder, SequencerClient, createValidatorForAcceptingTxs } from '@aztec/sequencer-client';
|
|
27
27
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
28
|
-
import { AttestationsBlockWatcher, EpochPruneWatcher,
|
|
28
|
+
import { AttestationsBlockWatcher, EpochPruneWatcher, createSlasher } from '@aztec/slasher';
|
|
29
29
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
30
30
|
import { L2BlockHash } from '@aztec/stdlib/block';
|
|
31
31
|
import { computePublicDataTreeLeafSlot } from '@aztec/stdlib/hash';
|
|
@@ -188,7 +188,7 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
188
188
|
}
|
|
189
189
|
let epochPruneWatcher;
|
|
190
190
|
if (config.slashPruneEnabled) {
|
|
191
|
-
epochPruneWatcher = new EpochPruneWatcher(archiver, archiver, epochCache, p2pClient.getTxProvider(), blockBuilder, config.slashPrunePenalty
|
|
191
|
+
epochPruneWatcher = new EpochPruneWatcher(archiver, archiver, epochCache, p2pClient.getTxProvider(), blockBuilder, config.slashPrunePenalty);
|
|
192
192
|
await epochPruneWatcher.start();
|
|
193
193
|
watchers.push(epochPruneWatcher);
|
|
194
194
|
}
|
|
@@ -212,21 +212,20 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
212
212
|
watchers.push(validatorClient);
|
|
213
213
|
}
|
|
214
214
|
log.verbose(`All Aztec Node subsystems synced`);
|
|
215
|
-
const { slasherPrivateKey, l1RpcUrls } = config;
|
|
216
|
-
const slasherPrivateKeyString = slasherPrivateKey.getValue();
|
|
217
|
-
const slasherL1Client = slasherPrivateKeyString && slasherPrivateKeyString !== NULL_KEY ? createExtendedL1Client(l1RpcUrls, slasherPrivateKeyString, ethereumChain.chainInfo) : getPublicClient(config);
|
|
218
|
-
const slasherL1TxUtils = isExtendedClient(slasherL1Client) ? new L1TxUtils(slasherL1Client, log, dateProvider, config) : undefined;
|
|
219
|
-
const slasherClient = await SlasherClient.new(config, config.l1Contracts, slasherL1TxUtils, slasherL1Client, watchers, dateProvider);
|
|
220
|
-
await slasherClient.start();
|
|
221
215
|
// Validator enabled, create/start relevant service
|
|
222
216
|
let sequencer;
|
|
217
|
+
let slasherClient;
|
|
223
218
|
if (!config.disableValidator) {
|
|
224
219
|
// This shouldn't happen, validators need a publisher private key.
|
|
225
220
|
const { publisherPrivateKey } = config;
|
|
226
221
|
if (!publisherPrivateKey?.getValue() || publisherPrivateKey?.getValue() === NULL_KEY) {
|
|
227
222
|
throw new Error('A publisher private key is required to run a validator');
|
|
228
223
|
}
|
|
229
|
-
|
|
224
|
+
// We create a slasher only if we have a sequencer, since all slashing actions go through the sequencer publisher
|
|
225
|
+
// as they are executed when the node is selected as proposer.
|
|
226
|
+
slasherClient = await createSlasher(config, config.l1Contracts, getPublicClient(config), watchers, dateProvider, epochCache);
|
|
227
|
+
await slasherClient.start();
|
|
228
|
+
const l1Client = createExtendedL1Client(config.l1RpcUrls, publisherPrivateKey.getValue(), ethereumChain.chainInfo);
|
|
230
229
|
const l1TxUtils = new L1TxUtilsWithBlobs(l1Client, log, dateProvider, config);
|
|
231
230
|
sequencer = await SequencerClient.new(config, {
|
|
232
231
|
// if deps were provided, they should override the defaults,
|
|
@@ -458,14 +457,14 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
458
457
|
return this.p2pClient.getPendingTxCount();
|
|
459
458
|
}
|
|
460
459
|
/**
|
|
461
|
-
* Method to retrieve a single tx from the mempool or
|
|
460
|
+
* Method to retrieve a single tx from the mempool or unfinalized chain.
|
|
462
461
|
* @param txHash - The transaction hash to return.
|
|
463
462
|
* @returns - The tx if it exists.
|
|
464
463
|
*/ getTxByHash(txHash) {
|
|
465
464
|
return Promise.resolve(this.p2pClient.getTxByHashFromPool(txHash));
|
|
466
465
|
}
|
|
467
466
|
/**
|
|
468
|
-
* Method to retrieve txs from the mempool or
|
|
467
|
+
* Method to retrieve txs from the mempool or unfinalized chain.
|
|
469
468
|
* @param txHash - The transaction hash to return.
|
|
470
469
|
* @returns - The txs if it exists.
|
|
471
470
|
*/ async getTxsByHash(txHashes) {
|
|
@@ -869,11 +868,21 @@ import { NodeMetrics } from './node_metrics.js';
|
|
|
869
868
|
this.blockSource.resume();
|
|
870
869
|
return Promise.resolve();
|
|
871
870
|
}
|
|
872
|
-
|
|
871
|
+
getSlashPayloads() {
|
|
873
872
|
if (!this.slasherClient) {
|
|
874
|
-
throw new Error(
|
|
873
|
+
throw new Error(`Slasher client not enabled`);
|
|
874
|
+
}
|
|
875
|
+
return this.slasherClient.getSlashPayloads();
|
|
876
|
+
}
|
|
877
|
+
getSlashOffenses(round) {
|
|
878
|
+
if (!this.slasherClient) {
|
|
879
|
+
throw new Error(`Slasher client not enabled`);
|
|
880
|
+
}
|
|
881
|
+
if (round === 'all') {
|
|
882
|
+
return this.slasherClient.getPendingOffenses();
|
|
883
|
+
} else {
|
|
884
|
+
return this.slasherClient.gatherOffensesForRound(round === 'current' ? undefined : BigInt(round));
|
|
875
885
|
}
|
|
876
|
-
return Promise.resolve(this.slasherClient.getMonitoredPayloads());
|
|
877
886
|
}
|
|
878
887
|
/**
|
|
879
888
|
* Returns an instance of MerkleTreeOperations having first ensured the world state is fully synched
|
|
@@ -3,7 +3,8 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
3
3
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
4
4
|
import { type L2TipsStore } from '@aztec/kv-store/stores';
|
|
5
5
|
import type { P2PClient } from '@aztec/p2p';
|
|
6
|
-
import
|
|
6
|
+
import { type WantToSlashArgs, type Watcher, type WatcherEmitter } from '@aztec/slasher';
|
|
7
|
+
import type { SlasherConfig } from '@aztec/slasher/config';
|
|
7
8
|
import { type L2BlockSource, L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/stdlib/block';
|
|
8
9
|
import type { SingleValidatorStats, ValidatorStats, ValidatorStatusHistory, ValidatorStatusInSlot, ValidatorStatusType, ValidatorsEpochPerformance, ValidatorsStats } from '@aztec/stdlib/validators';
|
|
9
10
|
import { SentinelStore } from './store.js';
|
|
@@ -35,7 +36,7 @@ export declare class Sentinel extends Sentinel_base implements L2BlockStreamEven
|
|
|
35
36
|
protected handleChainProven(event: L2BlockStreamEvent): Promise<void>;
|
|
36
37
|
protected computeProvenPerformance(epoch: bigint): Promise<ValidatorsEpochPerformance>;
|
|
37
38
|
protected updateProvenPerformance(epoch: bigint, performance: ValidatorsEpochPerformance): Promise<void>;
|
|
38
|
-
protected handleProvenPerformance(performance: ValidatorsEpochPerformance): void;
|
|
39
|
+
protected handleProvenPerformance(epoch: bigint, performance: ValidatorsEpochPerformance): void;
|
|
39
40
|
shouldSlash({ validator, amount }: WantToSlashArgs): Promise<boolean>;
|
|
40
41
|
/**
|
|
41
42
|
* Process data for two L2 slots ago.
|
|
@@ -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;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAqB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"sentinel.d.ts","sourceRoot":"","sources":["../../src/sentinel/sentinel.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@ import { EthAddress } from '@aztec/foundation/eth-address';
|
|
|
3
3
|
import { createLogger } from '@aztec/foundation/log';
|
|
4
4
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
5
5
|
import { L2TipsMemoryStore } from '@aztec/kv-store/stores';
|
|
6
|
-
import {
|
|
7
|
-
import { WANT_TO_SLASH_EVENT } from '@aztec/slasher
|
|
6
|
+
import { OffenseType } from '@aztec/slasher';
|
|
7
|
+
import { WANT_TO_SLASH_EVENT } from '@aztec/slasher';
|
|
8
8
|
import { L2BlockStream, getAttestationsFromPublishedL2Block } from '@aztec/stdlib/block';
|
|
9
9
|
import { getEpochAtSlot, getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
|
|
10
10
|
import EventEmitter from 'node:events';
|
|
@@ -88,7 +88,7 @@ export class Sentinel extends EventEmitter {
|
|
|
88
88
|
const performance = await this.computeProvenPerformance(epoch);
|
|
89
89
|
this.logger.info(`Proven performance for epoch ${epoch}`, performance);
|
|
90
90
|
await this.updateProvenPerformance(epoch, performance);
|
|
91
|
-
this.handleProvenPerformance(performance);
|
|
91
|
+
this.handleProvenPerformance(epoch, performance);
|
|
92
92
|
}
|
|
93
93
|
async computeProvenPerformance(epoch) {
|
|
94
94
|
const headers = await this.archiver.getBlockHeadersForEpoch(epoch);
|
|
@@ -133,14 +133,15 @@ export class Sentinel extends EventEmitter {
|
|
|
133
133
|
updateProvenPerformance(epoch, performance) {
|
|
134
134
|
return this.store.updateProvenPerformance(epoch, performance);
|
|
135
135
|
}
|
|
136
|
-
handleProvenPerformance(performance) {
|
|
136
|
+
handleProvenPerformance(epoch, performance) {
|
|
137
137
|
const criminals = Object.entries(performance).filter(([_, { missed, total }])=>{
|
|
138
138
|
return missed / total >= this.config.slashInactivityCreateTargetPercentage;
|
|
139
139
|
}).map(([address])=>address);
|
|
140
140
|
const args = criminals.map((address)=>({
|
|
141
141
|
validator: EthAddress.fromString(address),
|
|
142
142
|
amount: this.config.slashInactivityCreatePenalty,
|
|
143
|
-
|
|
143
|
+
offenseType: OffenseType.INACTIVITY,
|
|
144
|
+
epochOrSlot: epoch
|
|
144
145
|
}));
|
|
145
146
|
this.logger.info(`Criminals: ${criminals.length}`, {
|
|
146
147
|
args
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { P2P } from '@aztec/p2p';
|
|
3
|
+
import { SequencerClient } from '@aztec/sequencer-client';
|
|
4
|
+
import { EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
|
|
5
|
+
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
6
|
+
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
7
|
+
import type { L2LogsSource, Service, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
8
|
+
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
9
|
+
import type { GlobalVariableBuilder as GlobalVariableBuilderInterface } from '@aztec/stdlib/tx';
|
|
10
|
+
import type { AztecNodeConfig } from '../aztec-node/config.js';
|
|
11
|
+
import { AztecNodeService } from '../aztec-node/server.js';
|
|
12
|
+
import { Sentinel } from '../sentinel/sentinel.js';
|
|
13
|
+
export declare class TestAztecNodeService extends AztecNodeService {
|
|
14
|
+
config: AztecNodeConfig;
|
|
15
|
+
p2pClient: P2P;
|
|
16
|
+
blockSource: L2BlockSource & Partial<Service>;
|
|
17
|
+
logsSource: L2LogsSource;
|
|
18
|
+
contractDataSource: ContractDataSource;
|
|
19
|
+
l1ToL2MessageSource: L1ToL2MessageSource;
|
|
20
|
+
worldStateSynchronizer: WorldStateSynchronizer;
|
|
21
|
+
sequencer: SequencerClient | undefined;
|
|
22
|
+
slasherClient: SlasherClientInterface | undefined;
|
|
23
|
+
validatorsSentinel: Sentinel | undefined;
|
|
24
|
+
epochPruneWatcher: EpochPruneWatcher | undefined;
|
|
25
|
+
l1ChainId: number;
|
|
26
|
+
version: number;
|
|
27
|
+
globalVariableBuilder: GlobalVariableBuilderInterface;
|
|
28
|
+
epochCache: EpochCacheInterface;
|
|
29
|
+
packageVersion: string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,qBAAqB,IAAI,8BAA8B,EAAE,MAAM,kBAAkB,CAAC;AAEhG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,gBAAgB;IACjD,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,EAAE,GAAG,CAAC;IACf,WAAW,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,UAAU,EAAE,YAAY,CAAC;IACzB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,sBAAsB,EAAE,sBAAsB,CAAC;IAC/C,SAAS,EAAE,eAAe,GAAG,SAAS,CAAC;IACvC,aAAa,EAAE,sBAAsB,GAAG,SAAS,CAAC;IAClD,kBAAkB,EAAE,QAAQ,GAAG,SAAS,CAAC;IACzC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,8BAA8B,CAAC;IACtD,UAAU,EAAE,mBAAmB,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { AztecNodeService } from '../aztec-node/server.js';
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/aztec-node",
|
|
3
|
-
"version": "2.0.0-nightly.
|
|
3
|
+
"version": "2.0.0-nightly.20250823",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
7
7
|
".": "./dest/index.js",
|
|
8
8
|
"./config": "./dest/aztec-node/config.js",
|
|
9
|
-
"./sentinel": "./dest/aztec-node/sentinel.js"
|
|
9
|
+
"./sentinel": "./dest/aztec-node/sentinel.js",
|
|
10
|
+
"./test": "./dest/test/index.js"
|
|
10
11
|
},
|
|
11
12
|
"bin": "./dest/bin/index.js",
|
|
12
13
|
"typedocOptions": {
|
|
@@ -65,28 +66,28 @@
|
|
|
65
66
|
]
|
|
66
67
|
},
|
|
67
68
|
"dependencies": {
|
|
68
|
-
"@aztec/archiver": "2.0.0-nightly.
|
|
69
|
-
"@aztec/bb-prover": "2.0.0-nightly.
|
|
70
|
-
"@aztec/blob-sink": "2.0.0-nightly.
|
|
71
|
-
"@aztec/constants": "2.0.0-nightly.
|
|
72
|
-
"@aztec/epoch-cache": "2.0.0-nightly.
|
|
73
|
-
"@aztec/ethereum": "2.0.0-nightly.
|
|
74
|
-
"@aztec/foundation": "2.0.0-nightly.
|
|
75
|
-
"@aztec/kv-store": "2.0.0-nightly.
|
|
76
|
-
"@aztec/l1-artifacts": "2.0.0-nightly.
|
|
77
|
-
"@aztec/merkle-tree": "2.0.0-nightly.
|
|
78
|
-
"@aztec/node-lib": "2.0.0-nightly.
|
|
79
|
-
"@aztec/noir-protocol-circuits-types": "2.0.0-nightly.
|
|
80
|
-
"@aztec/p2p": "2.0.0-nightly.
|
|
81
|
-
"@aztec/protocol-contracts": "2.0.0-nightly.
|
|
82
|
-
"@aztec/prover-client": "2.0.0-nightly.
|
|
83
|
-
"@aztec/sequencer-client": "2.0.0-nightly.
|
|
84
|
-
"@aztec/simulator": "2.0.0-nightly.
|
|
85
|
-
"@aztec/slasher": "2.0.0-nightly.
|
|
86
|
-
"@aztec/stdlib": "2.0.0-nightly.
|
|
87
|
-
"@aztec/telemetry-client": "2.0.0-nightly.
|
|
88
|
-
"@aztec/validator-client": "2.0.0-nightly.
|
|
89
|
-
"@aztec/world-state": "2.0.0-nightly.
|
|
69
|
+
"@aztec/archiver": "2.0.0-nightly.20250823",
|
|
70
|
+
"@aztec/bb-prover": "2.0.0-nightly.20250823",
|
|
71
|
+
"@aztec/blob-sink": "2.0.0-nightly.20250823",
|
|
72
|
+
"@aztec/constants": "2.0.0-nightly.20250823",
|
|
73
|
+
"@aztec/epoch-cache": "2.0.0-nightly.20250823",
|
|
74
|
+
"@aztec/ethereum": "2.0.0-nightly.20250823",
|
|
75
|
+
"@aztec/foundation": "2.0.0-nightly.20250823",
|
|
76
|
+
"@aztec/kv-store": "2.0.0-nightly.20250823",
|
|
77
|
+
"@aztec/l1-artifacts": "2.0.0-nightly.20250823",
|
|
78
|
+
"@aztec/merkle-tree": "2.0.0-nightly.20250823",
|
|
79
|
+
"@aztec/node-lib": "2.0.0-nightly.20250823",
|
|
80
|
+
"@aztec/noir-protocol-circuits-types": "2.0.0-nightly.20250823",
|
|
81
|
+
"@aztec/p2p": "2.0.0-nightly.20250823",
|
|
82
|
+
"@aztec/protocol-contracts": "2.0.0-nightly.20250823",
|
|
83
|
+
"@aztec/prover-client": "2.0.0-nightly.20250823",
|
|
84
|
+
"@aztec/sequencer-client": "2.0.0-nightly.20250823",
|
|
85
|
+
"@aztec/simulator": "2.0.0-nightly.20250823",
|
|
86
|
+
"@aztec/slasher": "2.0.0-nightly.20250823",
|
|
87
|
+
"@aztec/stdlib": "2.0.0-nightly.20250823",
|
|
88
|
+
"@aztec/telemetry-client": "2.0.0-nightly.20250823",
|
|
89
|
+
"@aztec/validator-client": "2.0.0-nightly.20250823",
|
|
90
|
+
"@aztec/world-state": "2.0.0-nightly.20250823",
|
|
90
91
|
"koa": "^2.16.1",
|
|
91
92
|
"koa-router": "^12.0.0",
|
|
92
93
|
"tslib": "^2.4.0",
|
package/src/aztec-node/server.ts
CHANGED
|
@@ -12,14 +12,12 @@ import {
|
|
|
12
12
|
import { EpochCache, type EpochCacheInterface } from '@aztec/epoch-cache';
|
|
13
13
|
import {
|
|
14
14
|
type L1ContractAddresses,
|
|
15
|
-
L1TxUtils,
|
|
16
15
|
NULL_KEY,
|
|
17
16
|
RegistryContract,
|
|
18
17
|
RollupContract,
|
|
19
18
|
createEthereumChain,
|
|
20
19
|
createExtendedL1Client,
|
|
21
20
|
getPublicClient,
|
|
22
|
-
isExtendedClient,
|
|
23
21
|
} from '@aztec/ethereum';
|
|
24
22
|
import { L1TxUtilsWithBlobs } from '@aztec/ethereum/l1-tx-utils-with-blobs';
|
|
25
23
|
import { compactArray, pick } from '@aztec/foundation/collection';
|
|
@@ -42,7 +40,13 @@ import {
|
|
|
42
40
|
createValidatorForAcceptingTxs,
|
|
43
41
|
} from '@aztec/sequencer-client';
|
|
44
42
|
import { PublicProcessorFactory } from '@aztec/simulator/server';
|
|
45
|
-
import {
|
|
43
|
+
import {
|
|
44
|
+
AttestationsBlockWatcher,
|
|
45
|
+
EpochPruneWatcher,
|
|
46
|
+
type SlasherClientInterface,
|
|
47
|
+
type Watcher,
|
|
48
|
+
createSlasher,
|
|
49
|
+
} from '@aztec/slasher';
|
|
46
50
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
47
51
|
import {
|
|
48
52
|
type InBlock,
|
|
@@ -80,7 +84,7 @@ import {
|
|
|
80
84
|
import type { LogFilter, PrivateLog, TxScopedL2Log } from '@aztec/stdlib/logs';
|
|
81
85
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
82
86
|
import { P2PClientType } from '@aztec/stdlib/p2p';
|
|
83
|
-
import type {
|
|
87
|
+
import type { Offense, SlashPayloadRound } from '@aztec/stdlib/slashing';
|
|
84
88
|
import type { NullifierLeafPreimage, PublicDataTreeLeaf, PublicDataTreeLeafPreimage } from '@aztec/stdlib/trees';
|
|
85
89
|
import { MerkleTreeId, NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
86
90
|
import {
|
|
@@ -137,14 +141,14 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
137
141
|
protected readonly l1ToL2MessageSource: L1ToL2MessageSource,
|
|
138
142
|
protected readonly worldStateSynchronizer: WorldStateSynchronizer,
|
|
139
143
|
protected readonly sequencer: SequencerClient | undefined,
|
|
140
|
-
protected readonly slasherClient:
|
|
144
|
+
protected readonly slasherClient: SlasherClientInterface | undefined,
|
|
141
145
|
protected readonly validatorsSentinel: Sentinel | undefined,
|
|
142
146
|
protected readonly epochPruneWatcher: EpochPruneWatcher | undefined,
|
|
143
147
|
protected readonly l1ChainId: number,
|
|
144
148
|
protected readonly version: number,
|
|
145
149
|
protected readonly globalVariableBuilder: GlobalVariableBuilderInterface,
|
|
146
|
-
|
|
147
|
-
|
|
150
|
+
protected readonly epochCache: EpochCacheInterface,
|
|
151
|
+
protected readonly packageVersion: string,
|
|
148
152
|
private proofVerifier: ClientProtocolCircuitVerifier,
|
|
149
153
|
private telemetry: TelemetryClient = getTelemetryClient(),
|
|
150
154
|
private log = createLogger('node'),
|
|
@@ -306,7 +310,6 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
306
310
|
p2pClient.getTxProvider(),
|
|
307
311
|
blockBuilder,
|
|
308
312
|
config.slashPrunePenalty,
|
|
309
|
-
config.slashPruneMaxPenalty,
|
|
310
313
|
);
|
|
311
314
|
await epochPruneWatcher.start();
|
|
312
315
|
watchers.push(epochPruneWatcher);
|
|
@@ -336,28 +339,10 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
336
339
|
|
|
337
340
|
log.verbose(`All Aztec Node subsystems synced`);
|
|
338
341
|
|
|
339
|
-
const { slasherPrivateKey, l1RpcUrls } = config;
|
|
340
|
-
const slasherPrivateKeyString = slasherPrivateKey.getValue();
|
|
341
|
-
const slasherL1Client =
|
|
342
|
-
slasherPrivateKeyString && slasherPrivateKeyString !== NULL_KEY
|
|
343
|
-
? createExtendedL1Client(l1RpcUrls, slasherPrivateKeyString, ethereumChain.chainInfo)
|
|
344
|
-
: getPublicClient(config);
|
|
345
|
-
const slasherL1TxUtils = isExtendedClient(slasherL1Client)
|
|
346
|
-
? new L1TxUtils(slasherL1Client, log, dateProvider, config)
|
|
347
|
-
: undefined;
|
|
348
|
-
|
|
349
|
-
const slasherClient = await SlasherClient.new(
|
|
350
|
-
config,
|
|
351
|
-
config.l1Contracts,
|
|
352
|
-
slasherL1TxUtils,
|
|
353
|
-
slasherL1Client,
|
|
354
|
-
watchers,
|
|
355
|
-
dateProvider,
|
|
356
|
-
);
|
|
357
|
-
await slasherClient.start();
|
|
358
|
-
|
|
359
342
|
// Validator enabled, create/start relevant service
|
|
360
343
|
let sequencer: SequencerClient | undefined;
|
|
344
|
+
let slasherClient: SlasherClientInterface | undefined;
|
|
345
|
+
|
|
361
346
|
if (!config.disableValidator) {
|
|
362
347
|
// This shouldn't happen, validators need a publisher private key.
|
|
363
348
|
const { publisherPrivateKey } = config;
|
|
@@ -365,7 +350,23 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
365
350
|
throw new Error('A publisher private key is required to run a validator');
|
|
366
351
|
}
|
|
367
352
|
|
|
368
|
-
|
|
353
|
+
// We create a slasher only if we have a sequencer, since all slashing actions go through the sequencer publisher
|
|
354
|
+
// as they are executed when the node is selected as proposer.
|
|
355
|
+
slasherClient = await createSlasher(
|
|
356
|
+
config,
|
|
357
|
+
config.l1Contracts,
|
|
358
|
+
getPublicClient(config),
|
|
359
|
+
watchers,
|
|
360
|
+
dateProvider,
|
|
361
|
+
epochCache,
|
|
362
|
+
);
|
|
363
|
+
await slasherClient.start();
|
|
364
|
+
|
|
365
|
+
const l1Client = createExtendedL1Client(
|
|
366
|
+
config.l1RpcUrls,
|
|
367
|
+
publisherPrivateKey.getValue(),
|
|
368
|
+
ethereumChain.chainInfo,
|
|
369
|
+
);
|
|
369
370
|
const l1TxUtils = new L1TxUtilsWithBlobs(l1Client, log, dateProvider, config);
|
|
370
371
|
|
|
371
372
|
sequencer = await SequencerClient.new(config, {
|
|
@@ -671,7 +672,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
671
672
|
}
|
|
672
673
|
|
|
673
674
|
/**
|
|
674
|
-
* Method to retrieve a single tx from the mempool or
|
|
675
|
+
* Method to retrieve a single tx from the mempool or unfinalized chain.
|
|
675
676
|
* @param txHash - The transaction hash to return.
|
|
676
677
|
* @returns - The tx if it exists.
|
|
677
678
|
*/
|
|
@@ -680,7 +681,7 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
680
681
|
}
|
|
681
682
|
|
|
682
683
|
/**
|
|
683
|
-
* Method to retrieve txs from the mempool or
|
|
684
|
+
* Method to retrieve txs from the mempool or unfinalized chain.
|
|
684
685
|
* @param txHash - The transaction hash to return.
|
|
685
686
|
* @returns - The txs if it exists.
|
|
686
687
|
*/
|
|
@@ -1220,11 +1221,22 @@ export class AztecNodeService implements AztecNode, AztecNodeAdmin, Traceable {
|
|
|
1220
1221
|
return Promise.resolve();
|
|
1221
1222
|
}
|
|
1222
1223
|
|
|
1223
|
-
public
|
|
1224
|
+
public getSlashPayloads(): Promise<SlashPayloadRound[]> {
|
|
1225
|
+
if (!this.slasherClient) {
|
|
1226
|
+
throw new Error(`Slasher client not enabled`);
|
|
1227
|
+
}
|
|
1228
|
+
return this.slasherClient.getSlashPayloads();
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
public getSlashOffenses(round: bigint | 'all' | 'current'): Promise<Offense[]> {
|
|
1224
1232
|
if (!this.slasherClient) {
|
|
1225
|
-
throw new Error(
|
|
1233
|
+
throw new Error(`Slasher client not enabled`);
|
|
1234
|
+
}
|
|
1235
|
+
if (round === 'all') {
|
|
1236
|
+
return this.slasherClient.getPendingOffenses();
|
|
1237
|
+
} else {
|
|
1238
|
+
return this.slasherClient.gatherOffensesForRound(round === 'current' ? undefined : BigInt(round));
|
|
1226
1239
|
}
|
|
1227
|
-
return Promise.resolve(this.slasherClient.getMonitoredPayloads());
|
|
1228
1240
|
}
|
|
1229
1241
|
|
|
1230
1242
|
/**
|
package/src/sentinel/sentinel.ts
CHANGED
|
@@ -5,9 +5,9 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
5
5
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
6
6
|
import { L2TipsMemoryStore, type L2TipsStore } from '@aztec/kv-store/stores';
|
|
7
7
|
import type { P2PClient } from '@aztec/p2p';
|
|
8
|
-
import {
|
|
9
|
-
import
|
|
10
|
-
import {
|
|
8
|
+
import { OffenseType } from '@aztec/slasher';
|
|
9
|
+
import { WANT_TO_SLASH_EVENT, type WantToSlashArgs, type Watcher, type WatcherEmitter } from '@aztec/slasher';
|
|
10
|
+
import type { SlasherConfig } from '@aztec/slasher/config';
|
|
11
11
|
import {
|
|
12
12
|
type L2BlockSource,
|
|
13
13
|
L2BlockStream,
|
|
@@ -126,7 +126,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
126
126
|
this.logger.info(`Proven performance for epoch ${epoch}`, performance);
|
|
127
127
|
|
|
128
128
|
await this.updateProvenPerformance(epoch, performance);
|
|
129
|
-
this.handleProvenPerformance(performance);
|
|
129
|
+
this.handleProvenPerformance(epoch, performance);
|
|
130
130
|
}
|
|
131
131
|
|
|
132
132
|
protected async computeProvenPerformance(epoch: bigint) {
|
|
@@ -169,7 +169,7 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
169
169
|
return this.store.updateProvenPerformance(epoch, performance);
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
protected handleProvenPerformance(performance: ValidatorsEpochPerformance) {
|
|
172
|
+
protected handleProvenPerformance(epoch: bigint, performance: ValidatorsEpochPerformance) {
|
|
173
173
|
const criminals = Object.entries(performance)
|
|
174
174
|
.filter(([_, { missed, total }]) => {
|
|
175
175
|
return missed / total >= this.config.slashInactivityCreateTargetPercentage;
|
|
@@ -179,7 +179,8 @@ export class Sentinel extends (EventEmitter as new () => WatcherEmitter) impleme
|
|
|
179
179
|
const args = criminals.map(address => ({
|
|
180
180
|
validator: EthAddress.fromString(address),
|
|
181
181
|
amount: this.config.slashInactivityCreatePenalty,
|
|
182
|
-
|
|
182
|
+
offenseType: OffenseType.INACTIVITY,
|
|
183
|
+
epochOrSlot: epoch,
|
|
183
184
|
}));
|
|
184
185
|
|
|
185
186
|
this.logger.info(`Criminals: ${criminals.length}`, { args });
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { EpochCacheInterface } from '@aztec/epoch-cache';
|
|
2
|
+
import type { P2P } from '@aztec/p2p';
|
|
3
|
+
import { SequencerClient } from '@aztec/sequencer-client';
|
|
4
|
+
import { EpochPruneWatcher, type SlasherClientInterface } from '@aztec/slasher';
|
|
5
|
+
import type { L2BlockSource } from '@aztec/stdlib/block';
|
|
6
|
+
import type { ContractDataSource } from '@aztec/stdlib/contract';
|
|
7
|
+
import type { L2LogsSource, Service, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
8
|
+
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
9
|
+
import type { GlobalVariableBuilder as GlobalVariableBuilderInterface } from '@aztec/stdlib/tx';
|
|
10
|
+
|
|
11
|
+
import type { AztecNodeConfig } from '../aztec-node/config.js';
|
|
12
|
+
import { AztecNodeService } from '../aztec-node/server.js';
|
|
13
|
+
import { Sentinel } from '../sentinel/sentinel.js';
|
|
14
|
+
|
|
15
|
+
export declare class TestAztecNodeService extends AztecNodeService {
|
|
16
|
+
declare public config: AztecNodeConfig;
|
|
17
|
+
declare public p2pClient: P2P;
|
|
18
|
+
declare public blockSource: L2BlockSource & Partial<Service>;
|
|
19
|
+
declare public logsSource: L2LogsSource;
|
|
20
|
+
declare public contractDataSource: ContractDataSource;
|
|
21
|
+
declare public l1ToL2MessageSource: L1ToL2MessageSource;
|
|
22
|
+
declare public worldStateSynchronizer: WorldStateSynchronizer;
|
|
23
|
+
declare public sequencer: SequencerClient | undefined;
|
|
24
|
+
declare public slasherClient: SlasherClientInterface | undefined;
|
|
25
|
+
declare public validatorsSentinel: Sentinel | undefined;
|
|
26
|
+
declare public epochPruneWatcher: EpochPruneWatcher | undefined;
|
|
27
|
+
declare public l1ChainId: number;
|
|
28
|
+
declare public version: number;
|
|
29
|
+
declare public globalVariableBuilder: GlobalVariableBuilderInterface;
|
|
30
|
+
declare public epochCache: EpochCacheInterface;
|
|
31
|
+
declare public packageVersion: string;
|
|
32
|
+
}
|