Skip to content

docs(slashing): align operator and slasher docs with AZIP-7#23494

Merged
PhilWindle merged 11 commits into
merge-train/spartanfrom
phil/a-970-azip7-docs
May 29, 2026
Merged

docs(slashing): align operator and slasher docs with AZIP-7#23494
PhilWindle merged 11 commits into
merge-train/spartanfrom
phil/a-970-azip7-docs

Conversation

@PhilWindle

Copy link
Copy Markdown
Collaborator

Summary

Closes A-970.

Refresh the operator-facing slashing-configuration guide and the slasher README to match the AZIP-7 end-state, now that the implementation work for AZIP-7 has landed across the Slashing Post-Alpha Improvements project.

Operator docs (`docs/docs-operate/operators/sequencer-management/slashing-configuration.md`):

  • Remove the obsolete "Valid Epoch Not Proven" section. `SLASH_PRUNE_PENALTY` is gone with it.
  • Rewrite "Data Withholding" for the end-of-slot detection rule and add the matching `SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS` env var.
  • Update "Inactivity" to mention end-of-epoch evaluation (no longer waits for proven) and re-execution-based fault attribution.
  • Flip the descendant offense section to proposer-fault framing to match the rename in refactor(slasher): rename ATTESTED_DESCENDANT_OF_INVALID -> PROPOSED_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS #23468.
  • Add sections for the new offenses: broadcasted invalid block proposal, broadcasted invalid checkpoint proposal, attesting to an invalid checkpoint proposal, duplicate proposal, duplicate attestation.
  • Sync the env-vars block and the offense-detection bullet list with the current set of watchers.
  • Convert touched section headings to sentence case per docs style.

Slasher README (`yarn-project/slasher/README.md`):

  • Add a note under `BROADCASTED_INVALID_CHECKPOINT_PROPOSAL` to make the AZIP-7 "submitting block proposal after checkpoint" mapping explicit. That AZIP offense is detected via the existing invalid-checkpoint watcher (a late block makes the prior checkpoint retroactively invalid) rather than having its own offense type.

Stacked on #23468 (the `ATTESTED_DESCENDANT_OF_INVALID` → `PROPOSED_DESCENDANT_OF_CHECKPOINT_WITH_INVALID_ATTESTATIONS` rename) because the new env var name only exists once that PR lands.

Test plan

  • `cd docs && yarn spellcheck` (clean)
  • Visual review of the rewritten "Slashable offenses" section against the AZIP-7 spec

…DESCENDANT_OF_INVALID

Rename the slashing offence and its associated config knob, env var, helm
value, and terraform variable to reflect that the slash now targets the
proposer that publishes a descendant checkpoint to L1, not its attestors.

Breaking for operators: SLASH_ATTEST_DESCENDANT_OF_INVALID_PENALTY ->
SLASH_PROPOSE_DESCENDANT_OF_INVALID_PENALTY (see v5.0.0 changelog).
…OINT_WITH_INVALID_ATTESTATIONS

Rename the offence (and its config knob, env var, helm value, terraform
variable, etc.) from the previous shorter PROPOSED_DESCENDANT_OF_INVALID
form to spell out the exact condition: a descendant of a checkpoint that
had invalid (or insufficient) attestations.
Refresh the operator-facing slashing-configuration guide to match the
AZIP-7 end-state: remove the obsolete Valid Epoch Not Proven section,
rewrite Data Withholding for the end-of-slot check, flip the descendant
offense to proposer-fault framing to match the rename, and add sections
for the new offenses (broadcasted invalid block / checkpoint, attesting
to an invalid checkpoint, duplicate proposal, duplicate attestation).
Sync the env var defaults and the watchers list with the current set.

Also add a note under BROADCASTED_INVALID_CHECKPOINT_PROPOSAL in the
slasher README to make the AZIP-7 "submitting block proposal after
checkpoint" mapping explicit, since it is detected via the existing
invalid-checkpoint watcher rather than its own offense type.
Base automatically changed from phil/a-1073-rename-attested-descendant-of-invalid to merge-train/spartan May 22, 2026 10:07
Refresh the operator-facing slashing-configuration guide to match the
AZIP-7 end-state: remove the obsolete Valid Epoch Not Proven section,
rewrite Data Withholding for the end-of-slot check, flip the descendant
offense to proposer-fault framing to match the rename, and add sections
for the new offenses (broadcasted invalid block / checkpoint, attesting
to an invalid checkpoint, duplicate proposal, duplicate attestation).
Sync the env var defaults and the watchers list with the current set.

Also add a note under BROADCASTED_INVALID_CHECKPOINT_PROPOSAL in the
slasher README to make the AZIP-7 "submitting block proposal after
checkpoint" mapping explicit, since it is detected via the existing
invalid-checkpoint watcher rather than its own offense type.
@PhilWindle PhilWindle force-pushed the phil/a-970-azip7-docs branch from 6af7aac to 4091621 Compare May 22, 2026 10:47
- Measured per epoch by the Sentinel for validators on the committee during that epoch.
- Evaluated at the end of each epoch (plus a small buffer) without waiting for the epoch to be proven on L1, so inactive validators can be slashed regardless of prover availability.
- Block re-execution is used to attribute fault between proposers and attestors based on what actually happened in each slot, rather than using attestation count as a proxy.
- A validator is considered inactive for an epoch if their failure ratio meets or exceeds `SLASH_INACTIVITY_TARGET_PERCENTAGE` (default 0.8, meaning 80% or more duties missed).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we really want to mention the default value in the docs?

Comment thread docs/docs-operate/operators/sequencer-management/slashing-configuration.md Outdated

**Detection criteria**: Detected at the P2P layer by the AttestationPool, which tracks proposals by position (slot plus `indexWithinCheckpoint` for blocks, or slot for checkpoints). A second proposal for the same position with a different archive flags the duplicate.

**Proposed penalty**: 1% of stake

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2.5%


**Detection criteria**: Detected at the P2P layer when conflicting attestations are observed from the same signer for the same slot.

**Proposed penalty**: 1% of stake

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2.5%

Comment thread docs/docs-operate/operators/sequencer-management/slashing-configuration.md Outdated
Comment thread docs/docs-operate/operators/sequencer-management/slashing-configuration.md Outdated
@PhilWindle PhilWindle merged commit 73e45e4 into merge-train/spartan May 29, 2026
14 checks passed
@PhilWindle PhilWindle deleted the phil/a-970-azip7-docs branch May 29, 2026 09:12
danielntmd pushed a commit to danielntmd/aztec-packages that referenced this pull request Jun 4, 2026
BEGIN_COMMIT_OVERRIDE
test(e2e): unskip pipelining related e2e tests (AztecProtocol#23642)
fix(archiver): prune blocks without proposed checkpoint by end of build
slot (AztecProtocol#23606)
test: migrate benchmarks to pipelining setup (AztecProtocol#23647)
fix(p2p): fall back to archiver in BLOCK_TXS response validation
(AztecProtocol#23624)
docs(slashing): align operator and slasher docs with AZIP-7 (AztecProtocol#23494)
fix(p2p): do not penalize peers that signal a missing block with Fr.ZERO
(AztecProtocol#23672)
chore: adjust metrics deployment (AztecProtocol#23676)
fix(cheat-codes): warpL2TimeAtLeastBy advances relative to leading clock
(AztecProtocol#23675)
chore: tighten node pool sizes (AztecProtocol#23678)
chore: remove archival nodes (AztecProtocol#23630)
chore: merge blob sink duties into RPC node (AztecProtocol#23631)
fix: sync avm-transpiler Cargo.lock with noir submodule (AztecProtocol#23683)
fix(spartan): set validator lag env vars in tps-scenario (AztecProtocol#23684)
fix: make world-state hash queries reorg-aware to close getWorldState
race (AztecProtocol#23677)
fix: pin noir submodule to next's version on merge-train/spartan
(AztecProtocol#23690)
fix: ensure image ref is used by bench runner (AztecProtocol#23682)
fix(ci): retry aztec-nr nargo dependency clone on transient network
flake (AztecProtocol#23653)
chore: run one-off jobs on network nodes (AztecProtocol#23701)
fix: simulate proposals inside target slot (AztecProtocol#23692)
chore: smaller eth-devnet (AztecProtocol#23704)
chore: enable testnet autoscaling (AztecProtocol#23705)
feat(api)!: redesign node log retrieval API around tag-based queries
(AztecProtocol#23625)
fix(sequencer): set own proposed checkpoint locally instead of via p2p
loopback (AztecProtocol#23659)
END_COMMIT_OVERRIDE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants