Skip to content

Commit 7417051

Browse files
committed
chore: track attestation failures for all validators (#18098)
This PR tracks attestation metrics for all validators
1 parent 5f9ad90 commit 7417051

File tree

3 files changed

+22
-19
lines changed

3 files changed

+22
-19
lines changed

yarn-project/telemetry-client/src/attributes.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,6 @@ export const TX_COLLECTION_METHOD = 'aztec.tx_collection.method';
124124

125125
/** Scope of L1 transaction (sequencer, prover, or other) */
126126
export const L1_TX_SCOPE = 'aztec.l1_tx.scope';
127+
128+
/** Generic error type attribute */
129+
export const IS_COMMITTEE_MEMBER = 'aztec.is_committee_member';

yarn-project/validator-client/src/metrics.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,15 +85,17 @@ export class ValidatorMetrics {
8585
this.successfulAttestationsCount.add(num);
8686
}
8787

88-
public incFailedAttestationsBadProposal(num: number, reason: string) {
88+
public incFailedAttestationsBadProposal(num: number, reason: string, inCommittee: boolean) {
8989
this.failedAttestationsBadProposalCount.add(num, {
9090
[Attributes.ERROR_TYPE]: reason,
91+
[Attributes.IS_COMMITTEE_MEMBER]: inCommittee,
9192
});
9293
}
9394

94-
public incFailedAttestationsNodeIssue(num: number, reason: string) {
95+
public incFailedAttestationsNodeIssue(num: number, reason: string, inCommittee: boolean) {
9596
this.failedAttestationsNodeIssueCount.add(num, {
9697
[Attributes.ERROR_TYPE]: reason,
98+
[Attributes.IS_COMMITTEE_MEMBER]: inCommittee,
9799
});
98100
}
99101
}

yarn-project/validator-client/src/validator.ts

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -289,23 +289,21 @@ export class ValidatorClient extends (EventEmitter as new () => WatcherEmitter)
289289
if (!validationResult.isValid) {
290290
this.log.warn(`Proposal validation failed: ${validationResult.reason}`, proposalInfo);
291291

292-
// Only track attestation failure metrics if we're actually in the committee
293-
if (partOfCommittee) {
294-
const reason = validationResult.reason || 'unknown';
295-
// Classify failure reason: bad proposal vs node issue
296-
const badProposalReasons: BlockProposalValidationFailureReason[] = [
297-
'invalid_proposal',
298-
'state_mismatch',
299-
'failed_txs',
300-
'in_hash_mismatch',
301-
'parent_block_wrong_slot',
302-
];
303-
304-
if (badProposalReasons.includes(reason as BlockProposalValidationFailureReason)) {
305-
this.metrics.incFailedAttestationsBadProposal(1, reason);
306-
} else {
307-
this.metrics.incFailedAttestationsNodeIssue(1, reason);
308-
}
292+
const reason = validationResult.reason || 'unknown';
293+
// Classify failure reason: bad proposal vs node issue
294+
const badProposalReasons: BlockProposalValidationFailureReason[] = [
295+
'invalid_proposal',
296+
'state_mismatch',
297+
'failed_txs',
298+
'in_hash_mismatch',
299+
'parent_block_wrong_slot',
300+
];
301+
302+
if (badProposalReasons.includes(reason as BlockProposalValidationFailureReason)) {
303+
this.metrics.incFailedAttestationsBadProposal(1, reason, partOfCommittee);
304+
} else {
305+
// Node issues so we can't attest
306+
this.metrics.incFailedAttestationsNodeIssue(1, reason, partOfCommittee);
309307
}
310308

311309
// Slash invalid block proposals (can happen even when not in committee)

0 commit comments

Comments
 (0)