Skip to content

Commit b6ab9ce

Browse files
committed
feat: slash attesters signing over bad checkpoints
1 parent cc2e612 commit b6ab9ce

32 files changed

Lines changed: 628 additions & 51 deletions

spartan/aztec-node/templates/_pod-template.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,10 @@ spec:
253253
- name: SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY
254254
value: {{ .Values.node.slash.attestDescendantOfInvalidPenalty | quote }}
255255
{{- end }}
256+
{{- if .Values.node.slash.attestInvalidCheckpointProposalPenalty }}
257+
- name: SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY
258+
value: {{ .Values.node.slash.attestInvalidCheckpointProposalPenalty | quote }}
259+
{{- end }}
256260
{{- if .Values.node.slash.unknownPenalty }}
257261
- name: SLASH_UNKNOWN_PENALTY
258262
value: {{ .Values.node.slash.unknownPenalty | quote }}

spartan/aztec-node/values.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ node:
155155
invalidBlockPenalty: ""
156156
proposeInvalidAttestationsPenalty: ""
157157
attestDescendantOfInvalidPenalty: ""
158+
attestInvalidCheckpointProposalPenalty: ""
158159
unknownPenalty: ""
159160
# Slasher behavior configuration
160161
gracePeriodL2Slots: ""

spartan/environments/network-defaults.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ slasher: &slasher
133133
SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY: 10e18
134134
# Penalty for attesting to a descendant of an invalid block.
135135
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10e18
136+
# Penalty for attesting to an invalid checkpoint proposal.
137+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10e18
136138
# Penalty for proposing two different block or checkpoint proposal for the same position.
137139
SLASH_DUPLICATE_PROPOSAL_PENALTY: 0
138140
# Penalty for signing attestations for different proposals at the same slot.
@@ -242,6 +244,7 @@ networks:
242244
SLASH_DUPLICATE_PROPOSAL_PENALTY: 10e18
243245
SLASH_DUPLICATE_ATTESTATION_PENALTY: 10e18
244246
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10e18
247+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10e18
245248
SLASH_UNKNOWN_PENALTY: 10e18
246249
SLASH_INVALID_BLOCK_PENALTY: 10e18
247250
SLASH_GRACE_PERIOD_L2_SLOTS: 0
@@ -287,6 +290,7 @@ networks:
287290
SLASH_DUPLICATE_PROPOSAL_PENALTY: 10e18
288291
SLASH_DUPLICATE_ATTESTATION_PENALTY: 10e18
289292
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 10e18
293+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10e18
290294
SLASH_UNKNOWN_PENALTY: 10e18
291295
SLASH_INVALID_BLOCK_PENALTY: 10e18
292296
SLASH_GRACE_PERIOD_L2_SLOTS: 64
@@ -346,6 +350,7 @@ networks:
346350
SLASH_DUPLICATE_PROPOSAL_PENALTY: 2000e18
347351
SLASH_DUPLICATE_ATTESTATION_PENALTY: 2000e18
348352
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY: 2000e18
353+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 2000e18
349354
SLASH_UNKNOWN_PENALTY: 2000e18
350355
SLASH_INVALID_BLOCK_PENALTY: 2000e18
351356
SLASH_GRACE_PERIOD_L2_SLOTS: 1200

spartan/scripts/deploy_network.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@ SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY = ${SLASH_PROPOSE_INVALID_ATTESTATION
592592
SLASH_DUPLICATE_PROPOSAL_PENALTY = ${SLASH_DUPLICATE_PROPOSAL_PENALTY:-null}
593593
SLASH_DUPLICATE_ATTESTATION_PENALTY = ${SLASH_DUPLICATE_ATTESTATION_PENALTY:-null}
594594
SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY = ${SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY:-null}
595+
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY = ${SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY:-null}
595596
SLASH_UNKNOWN_PENALTY = ${SLASH_UNKNOWN_PENALTY:-null}
596597
SLASH_INVALID_BLOCK_PENALTY = ${SLASH_INVALID_BLOCK_PENALTY:-null}
597598
SLASH_OFFENSE_EXPIRATION_ROUNDS = ${SLASH_OFFENSE_EXPIRATION_ROUNDS:-null}

spartan/terraform/deploy-aztec-infra/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,7 @@ locals {
206206
"validator.slash.duplicateProposalPenalty" = var.SLASH_DUPLICATE_PROPOSAL_PENALTY
207207
"validator.slash.duplicateAttestationPenalty" = var.SLASH_DUPLICATE_ATTESTATION_PENALTY
208208
"validator.slash.attestDescendantOfInvalidPenalty" = var.SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY
209+
"validator.slash.attestInvalidCheckpointProposalPenalty" = var.SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY
209210
"validator.slash.unknownPenalty" = var.SLASH_UNKNOWN_PENALTY
210211
"validator.slash.invalidBlockPenalty" = var.SLASH_INVALID_BLOCK_PENALTY
211212
"validator.slash.offenseExpirationRounds" = var.SLASH_OFFENSE_EXPIRATION_ROUNDS

spartan/terraform/deploy-aztec-infra/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,12 @@ variable "SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY" {
502502
nullable = true
503503
}
504504

505+
variable "SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY" {
506+
description = "The slash attest invalid checkpoint proposal penalty"
507+
type = string
508+
nullable = true
509+
}
510+
505511
variable "SLASH_UNKNOWN_PENALTY" {
506512
description = "The slash unknown penalty"
507513
type = string

yarn-project/foundation/src/config/env_var.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ export type EnvVar =
250250
| 'SLASH_OVERRIDE_PAYLOAD'
251251
| 'SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY'
252252
| 'SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY'
253+
| 'SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY'
253254
| 'SLASH_UNKNOWN_PENALTY'
254255
| 'SLASH_GRACE_PERIOD_L2_SLOTS'
255256
| 'SLASH_OFFENSE_EXPIRATION_ROUNDS'

yarn-project/p2p/src/client/interface.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import type {
1818
DuplicateAttestationInfo,
1919
DuplicateProposalInfo,
2020
P2PBlockReceivedCallback,
21+
P2PCheckpointAttestationCallback,
2122
P2PCheckpointReceivedCallback,
2223
} from '../services/service.js';
2324

@@ -109,6 +110,9 @@ export type P2P = P2PClient & {
109110
*/
110111
registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
111112

113+
/** Registers a callback invoked when a valid checkpoint attestation is accepted into the pool. */
114+
registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
115+
112116
/**
113117
* Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
114118
* @param tx - The transaction.

yarn-project/p2p/src/client/p2p_client.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,10 @@ export class P2PClient extends WithTracer implements P2P {
421421
this.p2pService.registerDuplicateAttestationCallback(callback);
422422
}
423423

424+
public registerCheckpointAttestationCallback(callback: (attestation: CheckpointAttestation) => void): void {
425+
this.p2pService.registerCheckpointAttestationCallback(callback);
426+
}
427+
424428
public async getPendingTxs(limit?: number, after?: TxHash): Promise<Tx[]> {
425429
if (limit !== undefined && limit <= 0) {
426430
throw new TypeError('limit must be greater than 0');

yarn-project/p2p/src/services/dummy_service.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import type { GoodByeReason } from './reqresp/protocols/goodbye.js';
2525
import { ReqRespStatus } from './reqresp/status.js';
2626
import {
2727
type P2PBlockReceivedCallback,
28+
type P2PCheckpointAttestationCallback,
2829
type P2PCheckpointReceivedCallback,
2930
type P2PDuplicateAttestationCallback,
3031
type P2PDuplicateProposalCallback,
@@ -103,6 +104,8 @@ export class DummyP2PService implements P2PService {
103104
*/
104105
public registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void {}
105106

107+
public registerCheckpointAttestationCallback(_callback: P2PCheckpointAttestationCallback): void {}
108+
106109
/**
107110
* Sends a request to a peer.
108111
* @param _protocol - The protocol to send the request on.

0 commit comments

Comments
 (0)