@aztec/validator-client 5.2.0-nightly.20260813 → 5.2.0-nightly.20260815
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/factory.d.ts +2 -2
- package/dest/factory.d.ts.map +1 -1
- package/dest/factory.js +1 -13
- package/dest/proposal_handler.d.ts +14 -7
- package/dest/proposal_handler.d.ts.map +1 -1
- package/dest/proposal_handler.js +13 -14
- package/dest/validator.d.ts +4 -4
- package/dest/validator.d.ts.map +1 -1
- package/dest/validator.js +2 -14
- package/package.json +19 -19
- package/src/factory.ts +1 -13
- package/src/proposal_handler.ts +23 -14
- package/src/validator.ts +7 -18
package/dest/factory.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { BlobClientInterface } from '@aztec/blob-client/client';
|
|
|
2
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
3
3
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
4
4
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
5
|
-
import {
|
|
5
|
+
import type { P2PClient } from '@aztec/p2p';
|
|
6
6
|
import type { L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
|
|
7
7
|
import type { CheckpointReexecutionTracker } from '@aztec/stdlib/checkpoint';
|
|
8
8
|
import type { ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
@@ -38,4 +38,4 @@ export declare function createValidatorClient(config: ValidatorClientFullConfig,
|
|
|
38
38
|
reexecutionTracker: CheckpointReexecutionTracker;
|
|
39
39
|
slashingProtectionDb?: SlashingProtectionDatabase;
|
|
40
40
|
}): Promise<ValidatorClient> | undefined;
|
|
41
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDNUMsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0UsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RyxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRW5FLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbkYsT0FBTyxLQUFLLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpELHdCQUFnQixxQkFBcUIsQ0FDbkMsTUFBTSxFQUFFLHlCQUF5QixFQUNqQyxJQUFJLEVBQUU7SUFDSixrQkFBa0IsRUFBRSwwQkFBMEIsQ0FBQztJQUMvQyxVQUFVLEVBQUUsc0JBQXNCLENBQUM7SUFDbkMsV0FBVyxFQUFFLGFBQWEsR0FBRyxXQUFXLENBQUM7SUFDekMsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7SUFDekMsU0FBUyxFQUFFLFNBQVMsQ0FBQztJQUNyQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztJQUNoQyxZQUFZLEVBQUUsWUFBWSxDQUFDO0lBQzNCLFNBQVMsRUFBRSxlQUFlLENBQUM7SUFDM0Isa0JBQWtCLEVBQUUsNEJBQTRCLENBQUM7Q0FDbEQsbUJBdUJGO0FBRUQsd0JBQWdCLHFCQUFxQixDQUNuQyxNQUFNLEVBQUUseUJBQXlCLEVBQ2pDLElBQUksRUFBRTtJQUNKLGtCQUFrQixFQUFFLDBCQUEwQixDQUFDO0lBQy9DLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQztJQUNuQyxTQUFTLEVBQUUsU0FBUyxDQUFDO0lBQ3JCLFdBQVcsRUFBRSxhQUFhLEdBQUcsV0FBVyxDQUFDO0lBQ3pDLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDO0lBQ3pDLFNBQVMsRUFBRSxlQUFlLENBQUM7SUFDM0IsWUFBWSxFQUFFLFlBQVksQ0FBQztJQUMzQixVQUFVLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLGVBQWUsRUFBRSxlQUFlLEdBQUcsU0FBUyxDQUFDO0lBQzdDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQztJQUNoQyxrQkFBa0IsRUFBRSw0QkFBNEIsQ0FBQztJQUNqRCxvQkFBb0IsQ0FBQyxFQUFFLDBCQUEwQixDQUFDO0NBQ25ELHdDQXVCRiJ9
|
package/dest/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzG,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAEnF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,UAAU,EAAE,sBAAsB,CAAC;IACnC,WAAW,EAAE,aAAa,GAAG,WAAW,CAAC;IACzC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,mBAAmB,CAAC;IAChC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,kBAAkB,EAAE,4BAA4B,CAAC;CAClD,mBAuBF;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE;IACJ,kBAAkB,EAAE,0BAA0B,CAAC;IAC/C,UAAU,EAAE,sBAAsB,CAAC;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,aAAa,GAAG,WAAW,CAAC;IACzC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,SAAS,EAAE,eAAe,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,EAAE,eAAe,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,mBAAmB,CAAC;IAChC,kBAAkB,EAAE,4BAA4B,CAAC;IACjD,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;CACnD,wCAuBF"}
|
package/dest/factory.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { BlockProposalValidator } from '@aztec/p2p';
|
|
2
1
|
import { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
3
|
-
import { DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS } from './config.js';
|
|
4
2
|
import { ValidatorMetrics } from './metrics.js';
|
|
5
3
|
import { ProposalHandler } from './proposal_handler.js';
|
|
6
4
|
import { ValidatorClient } from './validator.js';
|
|
@@ -10,17 +8,7 @@ export function createProposalHandler(config, deps) {
|
|
|
10
8
|
l1Constants: deps.epochCache.getL1Constants(),
|
|
11
9
|
blockDuration: config.blockDurationMs / 1000
|
|
12
10
|
});
|
|
13
|
-
|
|
14
|
-
txsPermitted: !config.disableTransactions,
|
|
15
|
-
maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
|
|
16
|
-
maxBlocksPerCheckpoint: config.maxBlocksPerCheckpoint,
|
|
17
|
-
signatureContext: {
|
|
18
|
-
chainId: config.l1ChainId,
|
|
19
|
-
rollupAddress: config.rollupAddress
|
|
20
|
-
},
|
|
21
|
-
clockDisparityMs: config.maxGossipClockDisparityMs ?? DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS
|
|
22
|
-
});
|
|
23
|
-
return new ProposalHandler(deps.checkpointsBuilder, deps.worldState, deps.blockSource, deps.l1ToL2MessageSource, deps.p2pClient.getTxProvider(), blockProposalValidator, deps.epochCache, consensusTimetable, config, deps.blobClient, deps.reexecutionTracker, metrics, deps.dateProvider, deps.telemetry, undefined);
|
|
11
|
+
return new ProposalHandler(deps.checkpointsBuilder, deps.worldState, deps.blockSource, deps.l1ToL2MessageSource, deps.p2pClient.getTxProvider(), deps.epochCache, consensusTimetable, config, deps.blobClient, deps.reexecutionTracker, metrics, deps.dateProvider, deps.telemetry, undefined);
|
|
24
12
|
}
|
|
25
13
|
export function createValidatorClient(config, deps) {
|
|
26
14
|
if (config.disableValidator || !deps.keyStoreManager) {
|
|
@@ -6,12 +6,11 @@ import { Fr } from '@aztec/foundation/curves/bn254';
|
|
|
6
6
|
import type { LogData } from '@aztec/foundation/log';
|
|
7
7
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
8
8
|
import type { P2P, PeerId } from '@aztec/p2p';
|
|
9
|
-
import { BlockProposalValidator } from '@aztec/p2p/msg_validators';
|
|
10
9
|
import type { L2Block, L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
|
|
11
10
|
import type { CheckpointReexecutionTracker } from '@aztec/stdlib/checkpoint';
|
|
12
11
|
import type { ITxProvider, ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
13
12
|
import { type L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
14
|
-
import type { BlockProposal, CheckpointProposalCore } from '@aztec/stdlib/p2p';
|
|
13
|
+
import type { BlockProposal, CheckpointProposalCore, ValidatedBlockProposal, ValidatedCheckpointProposalCore } from '@aztec/stdlib/p2p';
|
|
15
14
|
import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
16
15
|
import type { FailedTx, Tx } from '@aztec/stdlib/tx';
|
|
17
16
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
@@ -65,7 +64,6 @@ export declare class ProposalHandler {
|
|
|
65
64
|
private blockSource;
|
|
66
65
|
private l1ToL2MessageSource;
|
|
67
66
|
private txProvider;
|
|
68
|
-
private blockProposalValidator;
|
|
69
67
|
private epochCache;
|
|
70
68
|
private timetable;
|
|
71
69
|
private config;
|
|
@@ -90,7 +88,7 @@ export declare class ProposalHandler {
|
|
|
90
88
|
private readonly slotsWithInvalidProposals;
|
|
91
89
|
/** Slots at which a proposal equivocation was observed; suppresses attested-to-invalid-proposal slashing. */
|
|
92
90
|
private readonly slotsWithProposalEquivocation;
|
|
93
|
-
constructor(checkpointsBuilder: FullNodeCheckpointsBuilder, worldState: WorldStateSynchronizer, blockSource: L2BlockSource & L2BlockSink, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: ITxProvider,
|
|
91
|
+
constructor(checkpointsBuilder: FullNodeCheckpointsBuilder, worldState: WorldStateSynchronizer, blockSource: L2BlockSource & L2BlockSink, l1ToL2MessageSource: L1ToL2MessageSource, txProvider: ITxProvider, epochCache: EpochCache, timetable: ConsensusTimetable, config: ValidatorClientFullConfig, blobClient: BlobClientInterface, reexecutionTracker: CheckpointReexecutionTracker, metrics?: ValidatorMetrics | undefined, dateProvider?: DateProvider, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
|
|
94
92
|
updateConfig(config: Partial<ValidatorClientFullConfig>): void;
|
|
95
93
|
setCheckpointProposalValidationFailureCallback(callback?: CheckpointProposalValidationFailureCallback): void;
|
|
96
94
|
/**
|
|
@@ -122,7 +120,14 @@ export declare class ProposalHandler {
|
|
|
122
120
|
* @param getOwnValidatorAddresses - Returns current validator addresses for own-proposal detection
|
|
123
121
|
*/
|
|
124
122
|
register(p2pClient: P2P, shouldReexecute: boolean, archiver?: Pick<Archiver, 'addProposedCheckpoint' | 'getProposedCheckpointData'>, getOwnValidatorAddresses?: () => string[]): ProposalHandler;
|
|
125
|
-
|
|
123
|
+
/**
|
|
124
|
+
* Processes a block proposal: collects its txs and, if requested, re-executes them to check the resulting
|
|
125
|
+
* block against the proposal. Expects the proposal to have already passed p2p ingress validation (signature
|
|
126
|
+
* context, signature, expected proposer, index within checkpoint, tx field checks, and the receive-window
|
|
127
|
+
* timeliness check) — none of those are re-applied here, and only deterministic properties of the payload
|
|
128
|
+
* are validated before processing.
|
|
129
|
+
*/
|
|
130
|
+
handleBlockProposal(proposal: ValidatedBlockProposal, proposalSender: PeerId, shouldReexecute: boolean): Promise<BlockProposalValidationResult>;
|
|
126
131
|
private collectProposalTxs;
|
|
127
132
|
private validateNewBlockInSlot;
|
|
128
133
|
private getParentBlock;
|
|
@@ -147,8 +152,10 @@ export declare class ProposalHandler {
|
|
|
147
152
|
* Validates a checkpoint proposal, caches the result, and uploads blobs if configured.
|
|
148
153
|
* Returns a cached result if the same proposal (archive + slot) was already validated.
|
|
149
154
|
* Used by both the all-nodes callback (via register) and the validator client (via delegation).
|
|
155
|
+
* Expects the proposal to have already passed p2p ingress validation (expected proposer and receive-window
|
|
156
|
+
* timeliness); only deterministic properties of the signed payload are checked here.
|
|
150
157
|
*/
|
|
151
|
-
handleCheckpointProposal(proposal:
|
|
158
|
+
handleCheckpointProposal(proposal: ValidatedCheckpointProposalCore, proposalInfo: LogData): Promise<CheckpointProposalValidationResult>;
|
|
152
159
|
/**
|
|
153
160
|
* Validates a checkpoint proposal by building the full checkpoint and comparing it with the proposal.
|
|
154
161
|
* @returns Validation result with isValid flag and reason if invalid.
|
|
@@ -163,4 +170,4 @@ export declare class ProposalHandler {
|
|
|
163
170
|
private setProposedCheckpoint;
|
|
164
171
|
}
|
|
165
172
|
export {};
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfaGFuZGxlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3Bvc2FsX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdyRSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRCxPQUFPLEVBQ0wsV0FBVyxFQUNYLGdCQUFnQixFQUVoQixVQUFVLEVBQ1gsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHckQsT0FBTyxFQUFFLFlBQVksRUFBUyxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDOUMsT0FBTyxLQUFLLEVBQWEsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEtBQUssRUFBRSw0QkFBNEIsRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUlqRyxPQUFPLEtBQUssRUFDVixXQUFXLEVBRVgseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxLQUFLLG1CQUFtQixFQUd6QixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sS0FBSyxFQUNWLGFBQWEsRUFFYixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNoQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlC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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proposal_handler.d.ts","sourceRoot":"","sources":["../src/proposal_handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAGrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EACL,WAAW,EACX,gBAAgB,EAEhB,UAAU,EACX,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAS,MAAM,yBAAyB,CAAC;AAE9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"proposal_handler.d.ts","sourceRoot":"","sources":["../src/proposal_handler.ts"],"names":[],"mappings":"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"}
|
package/dest/proposal_handler.js
CHANGED
|
@@ -146,7 +146,6 @@ const MAX_TRACKED_INVALID_PROPOSAL_SLOTS = 1000;
|
|
|
146
146
|
blockSource;
|
|
147
147
|
l1ToL2MessageSource;
|
|
148
148
|
txProvider;
|
|
149
|
-
blockProposalValidator;
|
|
150
149
|
epochCache;
|
|
151
150
|
timetable;
|
|
152
151
|
config;
|
|
@@ -165,13 +164,12 @@ const MAX_TRACKED_INVALID_PROPOSAL_SLOTS = 1000;
|
|
|
165
164
|
checkpointProposalValidationFailureCallback;
|
|
166
165
|
/** Slots at which a slashable invalid block or checkpoint proposal was observed. */ slotsWithInvalidProposals;
|
|
167
166
|
/** Slots at which a proposal equivocation was observed; suppresses attested-to-invalid-proposal slashing. */ slotsWithProposalEquivocation;
|
|
168
|
-
constructor(checkpointsBuilder, worldState, blockSource, l1ToL2MessageSource, txProvider,
|
|
167
|
+
constructor(checkpointsBuilder, worldState, blockSource, l1ToL2MessageSource, txProvider, epochCache, timetable, config, blobClient, reexecutionTracker, metrics, dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('validator:proposal-handler')){
|
|
169
168
|
this.checkpointsBuilder = checkpointsBuilder;
|
|
170
169
|
this.worldState = worldState;
|
|
171
170
|
this.blockSource = blockSource;
|
|
172
171
|
this.l1ToL2MessageSource = l1ToL2MessageSource;
|
|
173
172
|
this.txProvider = txProvider;
|
|
174
|
-
this.blockProposalValidator = blockProposalValidator;
|
|
175
173
|
this.epochCache = epochCache;
|
|
176
174
|
this.timetable = timetable;
|
|
177
175
|
this.config = config;
|
|
@@ -337,7 +335,13 @@ const MAX_TRACKED_INVALID_PROPOSAL_SLOTS = 1000;
|
|
|
337
335
|
p2pClient.registerAllNodesCheckpointProposalHandler(checkpointHandler);
|
|
338
336
|
return this;
|
|
339
337
|
}
|
|
340
|
-
|
|
338
|
+
/**
|
|
339
|
+
* Processes a block proposal: collects its txs and, if requested, re-executes them to check the resulting
|
|
340
|
+
* block against the proposal. Expects the proposal to have already passed p2p ingress validation (signature
|
|
341
|
+
* context, signature, expected proposer, index within checkpoint, tx field checks, and the receive-window
|
|
342
|
+
* timeliness check) — none of those are re-applied here, and only deterministic properties of the payload
|
|
343
|
+
* are validated before processing.
|
|
344
|
+
*/ async handleBlockProposal(proposal, proposalSender, shouldReexecute) {
|
|
341
345
|
const slotNumber = proposal.slotNumber;
|
|
342
346
|
const proposer = proposal.getSender();
|
|
343
347
|
// Reject proposals with invalid signatures
|
|
@@ -358,16 +362,9 @@ const MAX_TRACKED_INVALID_PROPOSAL_SLOTS = 1000;
|
|
|
358
362
|
...proposalInfo,
|
|
359
363
|
txHashes: proposal.txHashes.map((t)=>t.toString())
|
|
360
364
|
});
|
|
361
|
-
//
|
|
362
|
-
//
|
|
363
|
-
|
|
364
|
-
if (validationResult.result !== 'accept') {
|
|
365
|
-
this.log.warn(`Proposal is not valid, skipping processing`, proposalInfo);
|
|
366
|
-
return {
|
|
367
|
-
isValid: false,
|
|
368
|
-
reason: 'invalid_proposal'
|
|
369
|
-
};
|
|
370
|
-
}
|
|
365
|
+
// The receive-window check from p2p ingress is deliberately not re-applied here: its outcome depends on
|
|
366
|
+
// the wall clock at evaluation time, so re-running it turned node-local processing latency into an
|
|
367
|
+
// invalid-proposal verdict against an honest proposer, which then fed the invalid-block slashing path.
|
|
371
368
|
// A tx can only appear once in a block: the second copy would emit nullifiers already emitted by the
|
|
372
369
|
// first. This is not a relaying-peer fault, so it passes gossip validation and is classified here as
|
|
373
370
|
// proposer misbehavior. Tx collection also reconciles a deduplicated hash set against the full list,
|
|
@@ -934,6 +931,8 @@ const MAX_TRACKED_INVALID_PROPOSAL_SLOTS = 1000;
|
|
|
934
931
|
* Validates a checkpoint proposal, caches the result, and uploads blobs if configured.
|
|
935
932
|
* Returns a cached result if the same proposal (archive + slot) was already validated.
|
|
936
933
|
* Used by both the all-nodes callback (via register) and the validator client (via delegation).
|
|
934
|
+
* Expects the proposal to have already passed p2p ingress validation (expected proposer and receive-window
|
|
935
|
+
* timeliness); only deterministic properties of the signed payload are checked here.
|
|
937
936
|
*/ async handleCheckpointProposal(proposal, proposalInfo) {
|
|
938
937
|
const slot = proposal.slotNumber;
|
|
939
938
|
const payloadHash = proposal.getPayloadHash();
|
package/dest/validator.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ import type { CommitteeAttestationsAndSigners, L2BlockSink, L2BlockSource } from
|
|
|
14
14
|
import type { CheckpointReexecutionTracker } from '@aztec/stdlib/checkpoint';
|
|
15
15
|
import type { ITxProvider, Validator, ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
16
16
|
import type { L1ToL2MessageSource } from '@aztec/stdlib/messaging';
|
|
17
|
-
import { type BlockProposal, type BlockProposalOptions, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore, type CheckpointProposalOptions } from '@aztec/stdlib/p2p';
|
|
17
|
+
import { type BlockProposal, type BlockProposalOptions, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore, type CheckpointProposalOptions, type ValidatedBlockProposal, type ValidatedCheckpointProposalCore } from '@aztec/stdlib/p2p';
|
|
18
18
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
19
19
|
import type { BlockHeader, Tx } from '@aztec/stdlib/tx';
|
|
20
20
|
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
@@ -84,14 +84,14 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
84
84
|
* Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
85
85
|
* @returns true if the proposal is valid, false otherwise
|
|
86
86
|
*/
|
|
87
|
-
validateBlockProposal(proposal:
|
|
87
|
+
validateBlockProposal(proposal: ValidatedBlockProposal, proposalSender: PeerId): Promise<boolean>;
|
|
88
88
|
/**
|
|
89
89
|
* Validate and attest to a checkpoint proposal from a peer.
|
|
90
90
|
* The proposal is received as CheckpointProposalCore (without lastBlock) since
|
|
91
91
|
* the lastBlock is extracted and processed separately via the block handler.
|
|
92
92
|
* @returns Checkpoint attestations if valid, undefined otherwise
|
|
93
93
|
*/
|
|
94
|
-
attestToCheckpointProposal(proposal:
|
|
94
|
+
attestToCheckpointProposal(proposal: ValidatedCheckpointProposalCore, _proposalSender: PeerId): Promise<CheckpointAttestation[] | undefined>;
|
|
95
95
|
/**
|
|
96
96
|
* Checks if we should attest to a slot based on equivocation prevention rules.
|
|
97
97
|
* @returns true if we should attest, false if we should skip
|
|
@@ -134,4 +134,4 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
134
134
|
private handleAuthRequest;
|
|
135
135
|
}
|
|
136
136
|
export {};
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFckUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFlLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFNUQsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBR2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBMEUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV0SCxPQUFPLEVBSUwsS0FBSyxPQUFPLEVBQ1osS0FBSyxjQUFjLEVBRXBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsK0JBQStCLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZHLE9BQU8sS0FBSyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFN0UsT0FBTyxLQUFLLEVBQ1YsV0FBVyxFQUNYLFNBQVMsRUFDVCx5QkFBeUIs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
|
package/dest/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAe,qBAAqB,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AACnH,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE5D,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGhF,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAA0E,GAAG,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtH,OAAO,EAIL,KAAK,OAAO,EACZ,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,+BAA+B,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAE7E,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,yBAAyB,EACzB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,sBAAsB,EAC3B,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/dest/validator.js
CHANGED
|
@@ -5,7 +5,7 @@ import { createLogger } from '@aztec/foundation/log';
|
|
|
5
5
|
import { RunningPromise } from '@aztec/foundation/running-promise';
|
|
6
6
|
import { sleep } from '@aztec/foundation/sleep';
|
|
7
7
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
8
|
-
import { AuthRequest, AuthResponse,
|
|
8
|
+
import { AuthRequest, AuthResponse, ReqRespSubProtocol } from '@aztec/p2p';
|
|
9
9
|
import { OffenseType, WANT_TO_CLEAR_SLASH_EVENT, WANT_TO_SLASH_EVENT, getOffenseTypeName } from '@aztec/slasher';
|
|
10
10
|
import { getEpochAtSlot } from '@aztec/stdlib/epoch-helpers';
|
|
11
11
|
import { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
@@ -14,7 +14,6 @@ import { getTelemetryClient } from '@aztec/telemetry-client';
|
|
|
14
14
|
import { createHASigner, createLocalSignerWithProtection, createSignerFromSharedDb } from '@aztec/validator-ha-signer/factory';
|
|
15
15
|
import { DutyType } from '@aztec/validator-ha-signer/types';
|
|
16
16
|
import { EventEmitter } from 'events';
|
|
17
|
-
import { DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS } from './config.js';
|
|
18
17
|
import { ValidationService } from './duties/validation_service.js';
|
|
19
18
|
import { HAKeyStore } from './key_store/ha_key_store.js';
|
|
20
19
|
import { NodeKeystoreAdapter } from './key_store/node_keystore_adapter.js';
|
|
@@ -119,18 +118,7 @@ const MAX_TRACKED_BAD_ATTESTATIONS = 10_000;
|
|
|
119
118
|
l1Constants: epochCache.getL1Constants(),
|
|
120
119
|
blockDuration: config.blockDurationMs / 1000
|
|
121
120
|
});
|
|
122
|
-
const
|
|
123
|
-
txsPermitted: !config.disableTransactions,
|
|
124
|
-
maxTxsPerBlock: config.validateMaxTxsPerBlock,
|
|
125
|
-
maxBlocksPerCheckpoint: config.maxBlocksPerCheckpoint,
|
|
126
|
-
skipSlotValidation: config.skipProposalSlotValidation,
|
|
127
|
-
signatureContext: {
|
|
128
|
-
chainId: config.l1ChainId,
|
|
129
|
-
rollupAddress: config.rollupAddress
|
|
130
|
-
},
|
|
131
|
-
clockDisparityMs: config.maxGossipClockDisparityMs ?? DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS
|
|
132
|
-
});
|
|
133
|
-
const proposalHandler = new ProposalHandler(checkpointsBuilder, worldState, blockSource, l1ToL2MessageSource, txProvider, blockProposalValidator, epochCache, consensusTimetable, config, blobClient, reexecutionTracker, metrics, dateProvider, telemetry, undefined);
|
|
121
|
+
const proposalHandler = new ProposalHandler(checkpointsBuilder, worldState, blockSource, l1ToL2MessageSource, txProvider, epochCache, consensusTimetable, config, blobClient, reexecutionTracker, metrics, dateProvider, telemetry, undefined);
|
|
134
122
|
const nodeKeystoreAdapter = NodeKeystoreAdapter.fromKeyStoreManager(keyStoreManager);
|
|
135
123
|
let slashingProtectionSigner;
|
|
136
124
|
if (slashingProtectionDb) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/validator-client",
|
|
3
|
-
"version": "5.2.0-nightly.
|
|
3
|
+
"version": "5.2.0-nightly.20260815",
|
|
4
4
|
"main": "dest/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -64,30 +64,30 @@
|
|
|
64
64
|
]
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@aztec/blob-client": "5.2.0-nightly.
|
|
68
|
-
"@aztec/blob-lib": "5.2.0-nightly.
|
|
69
|
-
"@aztec/constants": "5.2.0-nightly.
|
|
70
|
-
"@aztec/epoch-cache": "5.2.0-nightly.
|
|
71
|
-
"@aztec/ethereum": "5.2.0-nightly.
|
|
72
|
-
"@aztec/foundation": "5.2.0-nightly.
|
|
73
|
-
"@aztec/node-keystore": "5.2.0-nightly.
|
|
74
|
-
"@aztec/noir-protocol-circuits-types": "5.2.0-nightly.
|
|
75
|
-
"@aztec/p2p": "5.2.0-nightly.
|
|
76
|
-
"@aztec/protocol-contracts": "5.2.0-nightly.
|
|
77
|
-
"@aztec/prover-client": "5.2.0-nightly.
|
|
78
|
-
"@aztec/simulator": "5.2.0-nightly.
|
|
79
|
-
"@aztec/slasher": "5.2.0-nightly.
|
|
80
|
-
"@aztec/stdlib": "5.2.0-nightly.
|
|
81
|
-
"@aztec/telemetry-client": "5.2.0-nightly.
|
|
82
|
-
"@aztec/validator-ha-signer": "5.2.0-nightly.
|
|
67
|
+
"@aztec/blob-client": "5.2.0-nightly.20260815",
|
|
68
|
+
"@aztec/blob-lib": "5.2.0-nightly.20260815",
|
|
69
|
+
"@aztec/constants": "5.2.0-nightly.20260815",
|
|
70
|
+
"@aztec/epoch-cache": "5.2.0-nightly.20260815",
|
|
71
|
+
"@aztec/ethereum": "5.2.0-nightly.20260815",
|
|
72
|
+
"@aztec/foundation": "5.2.0-nightly.20260815",
|
|
73
|
+
"@aztec/node-keystore": "5.2.0-nightly.20260815",
|
|
74
|
+
"@aztec/noir-protocol-circuits-types": "5.2.0-nightly.20260815",
|
|
75
|
+
"@aztec/p2p": "5.2.0-nightly.20260815",
|
|
76
|
+
"@aztec/protocol-contracts": "5.2.0-nightly.20260815",
|
|
77
|
+
"@aztec/prover-client": "5.2.0-nightly.20260815",
|
|
78
|
+
"@aztec/simulator": "5.2.0-nightly.20260815",
|
|
79
|
+
"@aztec/slasher": "5.2.0-nightly.20260815",
|
|
80
|
+
"@aztec/stdlib": "5.2.0-nightly.20260815",
|
|
81
|
+
"@aztec/telemetry-client": "5.2.0-nightly.20260815",
|
|
82
|
+
"@aztec/validator-ha-signer": "5.2.0-nightly.20260815",
|
|
83
83
|
"koa": "^2.16.1",
|
|
84
84
|
"koa-router": "^13.1.1",
|
|
85
85
|
"tslib": "^2.4.0",
|
|
86
86
|
"viem": "npm:@aztec/viem@2.38.2"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@aztec/archiver": "5.2.0-nightly.
|
|
90
|
-
"@aztec/world-state": "5.2.0-nightly.
|
|
89
|
+
"@aztec/archiver": "5.2.0-nightly.20260815",
|
|
90
|
+
"@aztec/world-state": "5.2.0-nightly.20260815",
|
|
91
91
|
"@electric-sql/pglite": "^0.3.14",
|
|
92
92
|
"@jest/globals": "^30.0.0",
|
|
93
93
|
"@types/jest": "^30.0.0",
|
package/src/factory.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { BlobClientInterface } from '@aztec/blob-client/client';
|
|
|
2
2
|
import type { EpochCache } from '@aztec/epoch-cache';
|
|
3
3
|
import type { DateProvider } from '@aztec/foundation/timer';
|
|
4
4
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
5
|
-
import {
|
|
5
|
+
import type { P2PClient } from '@aztec/p2p';
|
|
6
6
|
import type { L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
|
|
7
7
|
import type { CheckpointReexecutionTracker } from '@aztec/stdlib/checkpoint';
|
|
8
8
|
import type { ValidatorClientFullConfig, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
|
|
@@ -12,7 +12,6 @@ import type { TelemetryClient } from '@aztec/telemetry-client';
|
|
|
12
12
|
import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
|
|
13
13
|
|
|
14
14
|
import type { FullNodeCheckpointsBuilder } from './checkpoint_builder.js';
|
|
15
|
-
import { DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS } from './config.js';
|
|
16
15
|
import { ValidatorMetrics } from './metrics.js';
|
|
17
16
|
import { ProposalHandler } from './proposal_handler.js';
|
|
18
17
|
import { ValidatorClient } from './validator.js';
|
|
@@ -37,23 +36,12 @@ export function createProposalHandler(
|
|
|
37
36
|
l1Constants: deps.epochCache.getL1Constants(),
|
|
38
37
|
blockDuration: config.blockDurationMs / 1000,
|
|
39
38
|
});
|
|
40
|
-
const blockProposalValidator = new BlockProposalValidator(deps.epochCache, consensusTimetable, {
|
|
41
|
-
txsPermitted: !config.disableTransactions,
|
|
42
|
-
maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
|
|
43
|
-
maxBlocksPerCheckpoint: config.maxBlocksPerCheckpoint,
|
|
44
|
-
signatureContext: {
|
|
45
|
-
chainId: config.l1ChainId,
|
|
46
|
-
rollupAddress: config.rollupAddress,
|
|
47
|
-
},
|
|
48
|
-
clockDisparityMs: config.maxGossipClockDisparityMs ?? DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS,
|
|
49
|
-
});
|
|
50
39
|
return new ProposalHandler(
|
|
51
40
|
deps.checkpointsBuilder,
|
|
52
41
|
deps.worldState,
|
|
53
42
|
deps.blockSource,
|
|
54
43
|
deps.l1ToL2MessageSource,
|
|
55
44
|
deps.p2pClient.getTxProvider(),
|
|
56
|
-
blockProposalValidator,
|
|
57
45
|
deps.epochCache,
|
|
58
46
|
consensusTimetable,
|
|
59
47
|
config,
|
package/src/proposal_handler.ts
CHANGED
|
@@ -20,7 +20,6 @@ import { retryUntil } from '@aztec/foundation/retry';
|
|
|
20
20
|
import { DateProvider, Timer } from '@aztec/foundation/timer';
|
|
21
21
|
import { isErrorClass } from '@aztec/foundation/types';
|
|
22
22
|
import type { P2P, PeerId } from '@aztec/p2p';
|
|
23
|
-
import { BlockProposalValidator } from '@aztec/p2p/msg_validators';
|
|
24
23
|
import type { BlockData, L2Block, L2BlockSink, L2BlockSource } from '@aztec/stdlib/block';
|
|
25
24
|
import type { CheckpointReexecutionTracker, ReexecutionOutcome } from '@aztec/stdlib/checkpoint';
|
|
26
25
|
import { getPreviousCheckpointOutHashes, validateCheckpoint } from '@aztec/stdlib/checkpoint';
|
|
@@ -37,7 +36,13 @@ import {
|
|
|
37
36
|
accumulateCheckpointOutHashes,
|
|
38
37
|
computeInHashFromL1ToL2Messages,
|
|
39
38
|
} from '@aztec/stdlib/messaging';
|
|
40
|
-
import type {
|
|
39
|
+
import type {
|
|
40
|
+
BlockProposal,
|
|
41
|
+
CheckpointAttestation,
|
|
42
|
+
CheckpointProposalCore,
|
|
43
|
+
ValidatedBlockProposal,
|
|
44
|
+
ValidatedCheckpointProposalCore,
|
|
45
|
+
} from '@aztec/stdlib/p2p';
|
|
41
46
|
import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
42
47
|
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
43
48
|
import type { CheckpointGlobalVariables, FailedTx, Tx, TxHash } from '@aztec/stdlib/tx';
|
|
@@ -248,7 +253,6 @@ export class ProposalHandler {
|
|
|
248
253
|
private blockSource: L2BlockSource & L2BlockSink,
|
|
249
254
|
private l1ToL2MessageSource: L1ToL2MessageSource,
|
|
250
255
|
private txProvider: ITxProvider,
|
|
251
|
-
private blockProposalValidator: BlockProposalValidator,
|
|
252
256
|
private epochCache: EpochCache,
|
|
253
257
|
private timetable: ConsensusTimetable,
|
|
254
258
|
private config: ValidatorClientFullConfig,
|
|
@@ -328,7 +332,7 @@ export class ProposalHandler {
|
|
|
328
332
|
|
|
329
333
|
// Non-validator handler that processes or re-executes for monitoring but does not attest.
|
|
330
334
|
// Returns boolean indicating whether the proposal was valid.
|
|
331
|
-
const blockHandler = async (proposal:
|
|
335
|
+
const blockHandler = async (proposal: ValidatedBlockProposal, proposalSender: PeerId): Promise<boolean> => {
|
|
332
336
|
try {
|
|
333
337
|
const { slotNumber, blockNumber } = proposal;
|
|
334
338
|
const result = await this.handleBlockProposal(proposal, proposalSender, shouldReexecute);
|
|
@@ -378,7 +382,7 @@ export class ProposalHandler {
|
|
|
378
382
|
// Runs for all nodes (validators and non-validators). Validators get the cached result in the
|
|
379
383
|
// validator-specific callback (attestToCheckpointProposal) which runs after this one.
|
|
380
384
|
const checkpointHandler = async (
|
|
381
|
-
proposal:
|
|
385
|
+
proposal: ValidatedCheckpointProposalCore,
|
|
382
386
|
_sender: PeerId,
|
|
383
387
|
): Promise<CheckpointAttestation[] | undefined> => {
|
|
384
388
|
try {
|
|
@@ -446,8 +450,15 @@ export class ProposalHandler {
|
|
|
446
450
|
return this;
|
|
447
451
|
}
|
|
448
452
|
|
|
453
|
+
/**
|
|
454
|
+
* Processes a block proposal: collects its txs and, if requested, re-executes them to check the resulting
|
|
455
|
+
* block against the proposal. Expects the proposal to have already passed p2p ingress validation (signature
|
|
456
|
+
* context, signature, expected proposer, index within checkpoint, tx field checks, and the receive-window
|
|
457
|
+
* timeliness check) — none of those are re-applied here, and only deterministic properties of the payload
|
|
458
|
+
* are validated before processing.
|
|
459
|
+
*/
|
|
449
460
|
async handleBlockProposal(
|
|
450
|
-
proposal:
|
|
461
|
+
proposal: ValidatedBlockProposal,
|
|
451
462
|
proposalSender: PeerId,
|
|
452
463
|
shouldReexecute: boolean,
|
|
453
464
|
): Promise<BlockProposalValidationResult> {
|
|
@@ -472,13 +483,9 @@ export class ProposalHandler {
|
|
|
472
483
|
txHashes: proposal.txHashes.map(t => t.toString()),
|
|
473
484
|
});
|
|
474
485
|
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
|
|
478
|
-
if (validationResult.result !== 'accept') {
|
|
479
|
-
this.log.warn(`Proposal is not valid, skipping processing`, proposalInfo);
|
|
480
|
-
return { isValid: false, reason: 'invalid_proposal' };
|
|
481
|
-
}
|
|
486
|
+
// The receive-window check from p2p ingress is deliberately not re-applied here: its outcome depends on
|
|
487
|
+
// the wall clock at evaluation time, so re-running it turned node-local processing latency into an
|
|
488
|
+
// invalid-proposal verdict against an honest proposer, which then fed the invalid-block slashing path.
|
|
482
489
|
|
|
483
490
|
// A tx can only appear once in a block: the second copy would emit nullifiers already emitted by the
|
|
484
491
|
// first. This is not a relaying-peer fault, so it passes gossip validation and is classified here as
|
|
@@ -1054,9 +1061,11 @@ export class ProposalHandler {
|
|
|
1054
1061
|
* Validates a checkpoint proposal, caches the result, and uploads blobs if configured.
|
|
1055
1062
|
* Returns a cached result if the same proposal (archive + slot) was already validated.
|
|
1056
1063
|
* Used by both the all-nodes callback (via register) and the validator client (via delegation).
|
|
1064
|
+
* Expects the proposal to have already passed p2p ingress validation (expected proposer and receive-window
|
|
1065
|
+
* timeliness); only deterministic properties of the signed payload are checked here.
|
|
1057
1066
|
*/
|
|
1058
1067
|
async handleCheckpointProposal(
|
|
1059
|
-
proposal:
|
|
1068
|
+
proposal: ValidatedCheckpointProposalCore,
|
|
1060
1069
|
proposalInfo: LogData,
|
|
1061
1070
|
): Promise<CheckpointProposalValidationResult> {
|
|
1062
1071
|
const slot = proposal.slotNumber;
|
package/src/validator.ts
CHANGED
|
@@ -12,7 +12,7 @@ import { sleep } from '@aztec/foundation/sleep';
|
|
|
12
12
|
import { DateProvider } from '@aztec/foundation/timer';
|
|
13
13
|
import type { KeystoreManager } from '@aztec/node-keystore';
|
|
14
14
|
import type { DuplicateAttestationInfo, DuplicateProposalInfo, OversizedProposalInfo, P2P, PeerId } from '@aztec/p2p';
|
|
15
|
-
import { AuthRequest, AuthResponse,
|
|
15
|
+
import { AuthRequest, AuthResponse, ReqRespSubProtocol } from '@aztec/p2p';
|
|
16
16
|
import {
|
|
17
17
|
OffenseType,
|
|
18
18
|
WANT_TO_CLEAR_SLASH_EVENT,
|
|
@@ -40,6 +40,8 @@ import {
|
|
|
40
40
|
type CheckpointProposalCore,
|
|
41
41
|
type CheckpointProposalOptions,
|
|
42
42
|
type CoordinationSignatureContext,
|
|
43
|
+
type ValidatedBlockProposal,
|
|
44
|
+
type ValidatedCheckpointProposalCore,
|
|
43
45
|
} from '@aztec/stdlib/p2p';
|
|
44
46
|
import type { CheckpointHeader } from '@aztec/stdlib/rollup';
|
|
45
47
|
import { ConsensusTimetable } from '@aztec/stdlib/timetable';
|
|
@@ -58,7 +60,6 @@ import { EventEmitter } from 'events';
|
|
|
58
60
|
import type { TypedDataDefinition } from 'viem';
|
|
59
61
|
|
|
60
62
|
import type { FullNodeCheckpointsBuilder } from './checkpoint_builder.js';
|
|
61
|
-
import { DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS } from './config.js';
|
|
62
63
|
import { ValidationService } from './duties/validation_service.js';
|
|
63
64
|
import { HAKeyStore } from './key_store/ha_key_store.js';
|
|
64
65
|
import type { ExtendedValidatorKeyStore } from './key_store/interface.js';
|
|
@@ -221,24 +222,12 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
221
222
|
l1Constants: epochCache.getL1Constants(),
|
|
222
223
|
blockDuration: config.blockDurationMs / 1000,
|
|
223
224
|
});
|
|
224
|
-
const blockProposalValidator = new BlockProposalValidator(epochCache, consensusTimetable, {
|
|
225
|
-
txsPermitted: !config.disableTransactions,
|
|
226
|
-
maxTxsPerBlock: config.validateMaxTxsPerBlock,
|
|
227
|
-
maxBlocksPerCheckpoint: config.maxBlocksPerCheckpoint,
|
|
228
|
-
skipSlotValidation: config.skipProposalSlotValidation,
|
|
229
|
-
signatureContext: {
|
|
230
|
-
chainId: config.l1ChainId,
|
|
231
|
-
rollupAddress: config.rollupAddress,
|
|
232
|
-
},
|
|
233
|
-
clockDisparityMs: config.maxGossipClockDisparityMs ?? DEFAULT_MAX_GOSSIP_CLOCK_DISPARITY_MS,
|
|
234
|
-
});
|
|
235
225
|
const proposalHandler = new ProposalHandler(
|
|
236
226
|
checkpointsBuilder,
|
|
237
227
|
worldState,
|
|
238
228
|
blockSource,
|
|
239
229
|
l1ToL2MessageSource,
|
|
240
230
|
txProvider,
|
|
241
|
-
blockProposalValidator,
|
|
242
231
|
epochCache,
|
|
243
232
|
consensusTimetable,
|
|
244
233
|
config,
|
|
@@ -387,7 +376,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
387
376
|
this.log.debug(`Registering validator handlers for p2p client`);
|
|
388
377
|
|
|
389
378
|
// Block proposal handler - validates but does NOT attest (validators only attest to checkpoints)
|
|
390
|
-
const blockHandler = (block:
|
|
379
|
+
const blockHandler = (block: ValidatedBlockProposal, proposalSender: PeerId): Promise<boolean> =>
|
|
391
380
|
this.validateBlockProposal(block, proposalSender);
|
|
392
381
|
this.p2pClient.registerBlockProposalHandler(blockHandler);
|
|
393
382
|
|
|
@@ -395,7 +384,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
395
384
|
// The checkpoint is received as CheckpointProposalCore since the lastBlock is extracted
|
|
396
385
|
// and processed separately via the block handler above.
|
|
397
386
|
const checkpointHandler = (
|
|
398
|
-
checkpoint:
|
|
387
|
+
checkpoint: ValidatedCheckpointProposalCore,
|
|
399
388
|
proposalSender: PeerId,
|
|
400
389
|
): Promise<CheckpointAttestation[] | undefined> => this.attestToCheckpointProposal(checkpoint, proposalSender);
|
|
401
390
|
this.p2pClient.registerValidatorCheckpointProposalHandler(checkpointHandler);
|
|
@@ -431,7 +420,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
431
420
|
* Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
|
|
432
421
|
* @returns true if the proposal is valid, false otherwise
|
|
433
422
|
*/
|
|
434
|
-
async validateBlockProposal(proposal:
|
|
423
|
+
async validateBlockProposal(proposal: ValidatedBlockProposal, proposalSender: PeerId): Promise<boolean> {
|
|
435
424
|
const slotNumber = proposal.slotNumber;
|
|
436
425
|
|
|
437
426
|
// Note: During escape hatch, we still want to "validate" proposals for observability,
|
|
@@ -529,7 +518,7 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
|
|
|
529
518
|
* @returns Checkpoint attestations if valid, undefined otherwise
|
|
530
519
|
*/
|
|
531
520
|
async attestToCheckpointProposal(
|
|
532
|
-
proposal:
|
|
521
|
+
proposal: ValidatedCheckpointProposalCore,
|
|
533
522
|
_proposalSender: PeerId,
|
|
534
523
|
): Promise<CheckpointAttestation[] | undefined> {
|
|
535
524
|
const proposalSlotNumber = proposal.slotNumber;
|