@aztec-labs/validator-client 6.0.0-rc.1 → 6.0.0-rc.3
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/proposal_handler.d.ts +24 -6
- package/dest/proposal_handler.d.ts.map +1 -1
- package/dest/proposal_handler.js +182 -38
- package/dest/streaming_inbox_checks.d.ts +1 -1
- package/dest/streaming_inbox_checks.d.ts.map +1 -1
- package/dest/streaming_inbox_checks.js +13 -7
- package/dest/validator.d.ts +5 -1
- package/dest/validator.d.ts.map +1 -1
- package/dest/validator.js +59 -25
- package/package.json +19 -19
- package/src/proposal_handler.ts +236 -42
- package/src/streaming_inbox_checks.ts +15 -6
- package/src/validator.ts +68 -28
package/dest/validator.d.ts
CHANGED
|
@@ -93,12 +93,16 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
93
93
|
* @returns Checkpoint attestations if valid, undefined otherwise
|
|
94
94
|
*/
|
|
95
95
|
attestToCheckpointProposal(proposal: ValidatedCheckpointProposalCore, _proposalSender: PeerId): Promise<CheckpointAttestation[] | undefined>;
|
|
96
|
+
/** Records successful attestations and each attester's epoch participation, counting an (attester, epoch) once. */
|
|
97
|
+
private recordAttestationParticipation;
|
|
96
98
|
/**
|
|
97
99
|
* Checks if we should attest to a slot based on equivocation prevention rules.
|
|
98
100
|
* @returns true if we should attest, false if we should skip
|
|
99
101
|
*/
|
|
100
102
|
private shouldAttestToSlot;
|
|
101
103
|
private createCheckpointAttestationsFromProposal;
|
|
104
|
+
/** Whether the attestation deadline for the proposal's slot has passed, logging which step overran it if so. */
|
|
105
|
+
private isPastAttestationDeadline;
|
|
102
106
|
/**
|
|
103
107
|
* Uploads blobs for a checkpoint to the filestore (fire and forget).
|
|
104
108
|
*/
|
|
@@ -135,4 +139,4 @@ export declare class ValidatorClient extends ValidatorClient_base implements Val
|
|
|
135
139
|
private handleAuthRequest;
|
|
136
140
|
}
|
|
137
141
|
export {};
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFMUUsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFlLHFCQUFxQixFQUFFLFVBQVUsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRXhILE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFakUsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBR3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFJVixHQUFHLEVBQ0gsTUFBTSxFQUNQLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUlMLEtBQUssT0FBTyxFQUNaLEtBQUssY0FBYyxFQUVwQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sS0FBSyxFQUFFLCtCQUErQixFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RyxPQUFPLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWxGLE9BQU8sS0FBSyxFQUNWLFdBQVcsRUFDWCxTQUFTLEVBQ1QseUJBQXlC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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,gCAAgC,CAAC;AAE1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAe,qBAAqB,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/dest/validator.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getBlobsPerL1Block } from '@aztec-labs/blob-lib';
|
|
2
2
|
import { CheckpointNumber } from '@aztec-labs/foundation/branded-types';
|
|
3
|
+
import { compactArray } from '@aztec-labs/foundation/collection';
|
|
3
4
|
import { FifoSet } from '@aztec-labs/foundation/fifo-set';
|
|
4
5
|
import { createLogger } from '@aztec-labs/foundation/log';
|
|
5
6
|
import { RunningPromise } from '@aztec-labs/foundation/running-promise';
|
|
@@ -285,22 +286,14 @@ const MAX_TRACKED_BAD_ATTESTATIONS = 10_000;
|
|
|
285
286
|
if (!validationResult.isValid) {
|
|
286
287
|
const reason = validationResult.reason || 'unknown';
|
|
287
288
|
this.log.warn(`Block proposal validation failed: ${reason}`, proposalInfo);
|
|
288
|
-
//
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
'state_mismatch',
|
|
292
|
-
'failed_txs',
|
|
293
|
-
'parent_block_wrong_slot',
|
|
294
|
-
'duplicate_txs',
|
|
295
|
-
'invalid_embedded_txs'
|
|
296
|
-
];
|
|
297
|
-
if (badProposalReasons.includes(reason)) {
|
|
289
|
+
// A slashable reject is a bad proposal, not a node issue, so branch the metric on the slashable set. A separate
|
|
290
|
+
// reason list would need every slashable reason (e.g. global_variables_mismatch) kept in sync by hand.
|
|
291
|
+
if (SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT[reason]) {
|
|
298
292
|
this.metrics.incFailedAttestationsBadProposal(1, reason, partOfCommittee);
|
|
299
293
|
} else {
|
|
300
|
-
// Node issues so we can't validate
|
|
301
294
|
this.metrics.incFailedAttestationsNodeIssue(1, reason, partOfCommittee);
|
|
302
295
|
}
|
|
303
|
-
if (!escapeHatchOpen && validationResult.reason && SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT
|
|
296
|
+
if (!escapeHatchOpen && validationResult.reason && SLASHABLE_BLOCK_PROPOSAL_VALIDATION_RESULT[validationResult.reason]) {
|
|
304
297
|
this.log.info(`Detected invalid block proposal offense`, {
|
|
305
298
|
...proposalInfo,
|
|
306
299
|
amount: this.config.slashBroadcastedInvalidBlockPenalty,
|
|
@@ -396,17 +389,6 @@ const MAX_TRACKED_BAD_ATTESTATIONS = 10_000;
|
|
|
396
389
|
inCommittee: partOfCommittee,
|
|
397
390
|
fishermanMode: this.config.fishermanMode || false
|
|
398
391
|
});
|
|
399
|
-
this.metrics.incSuccessfulAttestations(inCommittee.length);
|
|
400
|
-
// Track epoch participation per attester: count each (attester, epoch) pair at most once
|
|
401
|
-
const proposalEpoch = getEpochAtSlot(proposalSlotNumber, this.epochCache.getL1Constants());
|
|
402
|
-
for (const attester of inCommittee){
|
|
403
|
-
const key = attester.toString();
|
|
404
|
-
const lastEpoch = this.lastAttestedEpochByAttester.get(key);
|
|
405
|
-
if (lastEpoch === undefined || proposalEpoch > lastEpoch) {
|
|
406
|
-
this.lastAttestedEpochByAttester.set(key, proposalEpoch);
|
|
407
|
-
this.metrics.incAttestedEpochCount(attester);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
392
|
// Determine which validators should attest
|
|
411
393
|
let attestors;
|
|
412
394
|
if (partOfCommittee) {
|
|
@@ -427,9 +409,28 @@ const MAX_TRACKED_BAD_ATTESTATIONS = 10_000;
|
|
|
427
409
|
...proposalInfo,
|
|
428
410
|
attestors: attestors.map((a)=>a.toString())
|
|
429
411
|
});
|
|
412
|
+
this.recordAttestationParticipation(inCommittee, proposalSlotNumber);
|
|
430
413
|
return undefined;
|
|
431
414
|
}
|
|
432
|
-
|
|
415
|
+
const attestations = await this.createCheckpointAttestationsFromProposal(proposal, attestors, checkpointNumber);
|
|
416
|
+
// Counted from the attestations actually kept, so one refused for equivocation, discarded past the deadline, or
|
|
417
|
+
// signed by another HA node is not reported as this node's participation.
|
|
418
|
+
if (attestations) {
|
|
419
|
+
this.recordAttestationParticipation(compactArray(attestations.map((attestation)=>attestation.getSender())), proposalSlotNumber);
|
|
420
|
+
}
|
|
421
|
+
return attestations;
|
|
422
|
+
}
|
|
423
|
+
/** Records successful attestations and each attester's epoch participation, counting an (attester, epoch) once. */ recordAttestationParticipation(attesters, slot) {
|
|
424
|
+
this.metrics.incSuccessfulAttestations(attesters.length);
|
|
425
|
+
const epoch = getEpochAtSlot(slot, this.epochCache.getL1Constants());
|
|
426
|
+
for (const attester of attesters){
|
|
427
|
+
const key = attester.toString();
|
|
428
|
+
const lastEpoch = this.lastAttestedEpochByAttester.get(key);
|
|
429
|
+
if (lastEpoch === undefined || epoch > lastEpoch) {
|
|
430
|
+
this.lastAttestedEpochByAttester.set(key, epoch);
|
|
431
|
+
this.metrics.incAttestedEpochCount(attester);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
433
434
|
}
|
|
434
435
|
/**
|
|
435
436
|
* Checks if we should attest to a slot based on equivocation prevention rules.
|
|
@@ -451,12 +452,45 @@ const MAX_TRACKED_BAD_ATTESTATIONS = 10_000;
|
|
|
451
452
|
if (!this.shouldAttestToSlot(proposal.slotNumber)) {
|
|
452
453
|
return undefined;
|
|
453
454
|
}
|
|
455
|
+
// Deadline check, for the same reason and in the same place. Validation can run up to the attestation deadline
|
|
456
|
+
// and past it — the archiver sync waits are bounded by the deadline, and the Inbox endpoint gate keeps a minimum
|
|
457
|
+
// window beyond it on purpose — so it is re-read here, with nothing left between it and the signature. Finishing
|
|
458
|
+
// a late validation is still worth doing for telemetry; signing on it is not. Both the peer path and the
|
|
459
|
+
// proposer's own `collectOwnAttestations` sign through here, so this is the one place that covers both.
|
|
460
|
+
//
|
|
461
|
+
// The cutoff is the deadline itself, not the deadline widened by `maxGossipClockDisparityMs`. The deadline is the
|
|
462
|
+
// sender's obligation; that tolerance is the receiver's allowance for clock skew and propagation delay on
|
|
463
|
+
// messages sent in time, and a sender that spends it leaves none for the network. Signing late for the sake of
|
|
464
|
+
// inactivity-slashing credit is a poor trade too: a late attestation only counts if it still reaches peers inside
|
|
465
|
+
// their tolerance, and one further out is dropped, or penalized as stale, by every peer.
|
|
466
|
+
if (this.isPastAttestationDeadline(proposal, 'validation')) {
|
|
467
|
+
return undefined;
|
|
468
|
+
}
|
|
454
469
|
const attestations = await this.validationService.attestToCheckpointProposal(proposal, attestors, checkpointNumber);
|
|
455
|
-
// Track the proposal we attested to (to prevent equivocation)
|
|
470
|
+
// Track the proposal we attested to (to prevent equivocation). This is recorded even when the signature is
|
|
471
|
+
// discarded below: the attestors have signed for this slot, so a second proposal for it must still be refused.
|
|
456
472
|
this.lastAttestedProposal = proposal;
|
|
473
|
+
// Signing is not instant: a remote signer or HA coordination can take seconds. A signature produced past the
|
|
474
|
+
// deadline is discarded rather than stored and gossiped, for the reasons above.
|
|
475
|
+
if (this.isPastAttestationDeadline(proposal, 'signing')) {
|
|
476
|
+
return undefined;
|
|
477
|
+
}
|
|
457
478
|
await this.p2pClient.addOwnCheckpointAttestations(attestations);
|
|
458
479
|
return attestations;
|
|
459
480
|
}
|
|
481
|
+
/** Whether the attestation deadline for the proposal's slot has passed, logging which step overran it if so. */ isPastAttestationDeadline(proposal, step) {
|
|
482
|
+
const attestationDeadline = this.proposalHandler.getAttestationDeadline(proposal.slotNumber);
|
|
483
|
+
if (+attestationDeadline > this.dateProvider.now()) {
|
|
484
|
+
return false;
|
|
485
|
+
}
|
|
486
|
+
this.log.warn(`Attestation deadline for slot ${proposal.slotNumber} passed during ${step}, not attesting`, {
|
|
487
|
+
slot: proposal.slotNumber,
|
|
488
|
+
archive: proposal.archive.toString(),
|
|
489
|
+
attestationDeadline: attestationDeadline.toISOString(),
|
|
490
|
+
step
|
|
491
|
+
});
|
|
492
|
+
return true;
|
|
493
|
+
}
|
|
460
494
|
/**
|
|
461
495
|
* Uploads blobs for a checkpoint to the filestore (fire and forget).
|
|
462
496
|
*/ async uploadBlobsForCheckpoint(proposal, proposalInfo) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec-labs/validator-client",
|
|
3
|
-
"version": "6.0.0-rc.
|
|
3
|
+
"version": "6.0.0-rc.3",
|
|
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-labs/archiver": "6.0.0-rc.
|
|
68
|
-
"@aztec-labs/blob-client": "6.0.0-rc.
|
|
69
|
-
"@aztec-labs/blob-lib": "6.0.0-rc.
|
|
70
|
-
"@aztec-labs/constants": "6.0.0-rc.
|
|
71
|
-
"@aztec-labs/epoch-cache": "6.0.0-rc.
|
|
72
|
-
"@aztec-labs/ethereum": "6.0.0-rc.
|
|
73
|
-
"@aztec-labs/foundation": "6.0.0-rc.
|
|
74
|
-
"@aztec-labs/node-keystore": "6.0.0-rc.
|
|
75
|
-
"@aztec-labs/p2p": "6.0.0-rc.
|
|
76
|
-
"@aztec-labs/prover-client": "6.0.0-rc.
|
|
77
|
-
"@aztec-labs/simulator": "6.0.0-rc.
|
|
78
|
-
"@aztec-labs/slasher": "6.0.0-rc.
|
|
79
|
-
"@aztec-labs/stdlib": "6.0.0-rc.
|
|
80
|
-
"@aztec-labs/telemetry-client": "6.0.0-rc.
|
|
81
|
-
"@aztec-labs/validator-ha-signer": "6.0.0-rc.
|
|
82
|
-
"@aztec-labs/world-state": "6.0.0-rc.
|
|
67
|
+
"@aztec-labs/archiver": "6.0.0-rc.3",
|
|
68
|
+
"@aztec-labs/blob-client": "6.0.0-rc.3",
|
|
69
|
+
"@aztec-labs/blob-lib": "6.0.0-rc.3",
|
|
70
|
+
"@aztec-labs/constants": "6.0.0-rc.3",
|
|
71
|
+
"@aztec-labs/epoch-cache": "6.0.0-rc.3",
|
|
72
|
+
"@aztec-labs/ethereum": "6.0.0-rc.3",
|
|
73
|
+
"@aztec-labs/foundation": "6.0.0-rc.3",
|
|
74
|
+
"@aztec-labs/node-keystore": "6.0.0-rc.3",
|
|
75
|
+
"@aztec-labs/p2p": "6.0.0-rc.3",
|
|
76
|
+
"@aztec-labs/prover-client": "6.0.0-rc.3",
|
|
77
|
+
"@aztec-labs/simulator": "6.0.0-rc.3",
|
|
78
|
+
"@aztec-labs/slasher": "6.0.0-rc.3",
|
|
79
|
+
"@aztec-labs/stdlib": "6.0.0-rc.3",
|
|
80
|
+
"@aztec-labs/telemetry-client": "6.0.0-rc.3",
|
|
81
|
+
"@aztec-labs/validator-ha-signer": "6.0.0-rc.3",
|
|
82
|
+
"@aztec-labs/world-state": "6.0.0-rc.3",
|
|
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.3"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@aztec-labs/noir-protocol-circuits-types": "6.0.0-rc.
|
|
90
|
-
"@aztec-labs/protocol-contracts": "6.0.0-rc.
|
|
89
|
+
"@aztec-labs/noir-protocol-circuits-types": "6.0.0-rc.3",
|
|
90
|
+
"@aztec-labs/protocol-contracts": "6.0.0-rc.3",
|
|
91
91
|
"@electric-sql/pglite": "^0.3.14",
|
|
92
92
|
"@jest/globals": "^30.0.0",
|
|
93
93
|
"@types/jest": "^30.0.0",
|