Skip to content

docs: threat model for node - #24465

Merged
spalladino merged 2 commits into
merge-train/spartan-v5from
spl/threat-model-doc
Jul 7, 2026
Merged

docs: threat model for node#24465
spalladino merged 2 commits into
merge-train/spartan-v5from
spl/threat-model-doc

Conversation

@spalladino

Copy link
Copy Markdown
Contributor

Adds a new THREAT_MODEL.md doc. This document describes the threat model of the Aztec L2 network: how transactions flow from users into the proven chain, what each participant can and cannot do, and the properties the implementation must uphold. It is intended as a guideline for the security of the node implementation (yarn-project) and its interaction with the L1 rollup contracts (l1-contracts).

In scope: transaction dissemination and the mempool, the p2p layer, block and checkpoint production, committee attestation, L1 checkpoint submission and sync, epoch proving, slashing, and the escape hatch.

Out of scope: client-side private execution and proving (PXE, wallets), hardening of a node's public RPC interface, the cryptographic soundness of the proving system itself (treated as an assumption below), and L1 governance internals.

Adds a new `THREAT_MODEL.md` doc. This document describes the threat model of the Aztec L2 network: how transactions flow from users into the proven
chain, what each participant can and cannot do, and the properties the implementation must uphold. It is intended as a
guideline for the security of the node implementation (`yarn-project`) and its interaction with the L1 rollup
contracts (`l1-contracts`).

**In scope**: transaction dissemination and the mempool, the p2p layer, block and checkpoint production, committee
attestation, L1 checkpoint submission and sync, epoch proving, slashing, and the escape hatch.

**Out of scope**: client-side private execution and proving (PXE, wallets), hardening of a node's public RPC interface,
the cryptographic soundness of the proving system itself (treated as an assumption below), and L1 governance internals.
@spalladino spalladino changed the title doc: threat model for node docs: threat model for node Jul 2, 2026
Comment thread yarn-project/THREAT_MODEL.md Outdated
| Malicious proposer | Censor txs; waste its own slot and the next one (pipelining); post an unattested/badly-attested checkpoint to L1; equivocate | Convince honest nodes of an invalid state transition; corrupt state beyond slot N+1; brick other nodes' sync | Re-execution before attestation/adoption; pipeline depth capped at 2; delayed attestation verification + permissionless invalidation; slashing (§5) |
| Committee minority (< quorum, not proposer) | Withhold their own attestations; equivocate (slashable) | Prevent a slot from being attested; get honest members slashed | Quorum only needs ⌊2n/3⌋+1 of n; equivocation slashing |
| Committee quorum (≥ ⌊2n/3⌋+1 malicious) | Post invalid-but-attested checkpoints that nodes follow blindly; withhold tx data; halt the pending chain until the epoch prune | Get invalid state proven or exited on L1 (A2); avoid slashing for data withholding / attested-invalid | Unprovable state → prune at proof-window expiry; archiver preemptive unwind; slashing incl. `DATA_WITHHOLDING` |
| Malicious prover | Nothing by proving (proofs are verified); grief by *not* proving | Prove an invalid transition (A2); steal fees/rewards via forged proof calldata | Proof verification; fees bound to attested headers (see §4.4); A4 for liveness |

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.

I know we've talked about this a thousand times (maybe look for "training wheels" on Slack). Isn't there a mechanism today (but IIRC we don't want it in the future) where the committee/some part of the system would still not accept a new state if it differs from what the validators saw?

@spalladino spalladino Jul 2, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The committee can be seen as "training wheels" for the proving system, since a state transition cannot be deemed valid in L1 unless it's both proven and attested to. I've added a mention of that now.

@spalladino
spalladino merged commit 1737dfb into merge-train/spartan-v5 Jul 7, 2026
12 checks passed
@spalladino
spalladino deleted the spl/threat-model-doc branch July 7, 2026 20:47
AztecBot added a commit that referenced this pull request Jul 8, 2026
Restores yarn-project/p2p/README.md, yarn-project/p2p/src/services/reqresp/README.md,
and yarn-project/slasher/README.md to their post-#24465 state. Per feedback, the revert
should only remove the threat model doc itself, not the incidental doc cleanups
(stale BLOCK protocol references, missing DUPLICATE_ATTESTATION entry) bundled into
the same squashed commit.
spalladino pushed a commit that referenced this pull request Jul 8, 2026
Removes `yarn-project/THREAT_MODEL.md`, added in
[#24465](#24465).

Per discussion in #team-alpha: detailed threat models and invariants may
make it easier for attackers to find bugs, so the team wants this
content pulled from the public repo for now. It will be re-added to
LabsBox/ClaudeBox (private/internal) — see
[claudebox#1357](AztecProtocol/claudebox#1357) —
and can come back here once the team is finding fewer bugs.

Only the threat model doc itself is removed here — the incidental doc
cleanups bundled into the same squashed commit (stale BLOCK protocol
references in `yarn-project/p2p/README.md` and
`yarn-project/p2p/src/services/reqresp/README.md`, and the missing
`DUPLICATE_ATTESTATION` entry in `yarn-project/slasher/README.md`) are
kept as-is.
PhilWindle pushed a commit that referenced this pull request Jul 21, 2026
Removes `yarn-project/THREAT_MODEL.md`, added in
[#24465](#24465).

Per discussion in #team-alpha: detailed threat models and invariants may
make it easier for attackers to find bugs, so the team wants this
content pulled from the public repo for now. It will be re-added to
LabsBox/ClaudeBox (private/internal) — see
[claudebox#1357](AztecProtocol/claudebox#1357) —
and can come back here once the team is finding fewer bugs.

Only the threat model doc itself is removed here — the incidental doc
cleanups bundled into the same squashed commit (stale BLOCK protocol
references in `yarn-project/p2p/README.md` and
`yarn-project/p2p/src/services/reqresp/README.md`, and the missing
`DUPLICATE_ATTESTATION` entry in `yarn-project/slasher/README.md`) are
kept as-is.

(cherry picked from commit 4d02692)
PhilWindle pushed a commit that referenced this pull request Jul 21, 2026
Removes `yarn-project/THREAT_MODEL.md`, added in
[#24465](#24465).

Per discussion in #team-alpha: detailed threat models and invariants may
make it easier for attackers to find bugs, so the team wants this
content pulled from the public repo for now. It will be re-added to
LabsBox/ClaudeBox (private/internal) — see
[claudebox#1357](AztecProtocol/claudebox#1357) —
and can come back here once the team is finding fewer bugs.

Only the threat model doc itself is removed here — the incidental doc
cleanups bundled into the same squashed commit (stale BLOCK protocol
references in `yarn-project/p2p/README.md` and
`yarn-project/p2p/src/services/reqresp/README.md`, and the missing
`DUPLICATE_ATTESTATION` entry in `yarn-project/slasher/README.md`) are
kept as-is.

(cherry picked from commit 4d02692)
rangozd pushed a commit to rangozd/aztec-packages that referenced this pull request Aug 5, 2026
Clean forward-port of AztecProtocol#24596 (merge-train
spartan-v5, merge d2f4c4d, parents 42eea48..1737dfb) onto
cb/private-port-next-7. Source base 42eea48 is AztecProtocol#24576's merge (block 4),
so it stacks directly on block 4.

Zero conflicts; tree touches exactly the 5 source-diff files: one code change
(prover-client checkpoint-sub-tree-orchestrator empty-addTxs log demoted
warn -> verbose, AztecProtocol#24593) + 4 docs (new yarn-project/THREAT_MODEL.md and
p2p/reqresp/slasher READMEs, AztecProtocol#24465). No noir/circuit/pinned surfaces.

Bundles sub-PRs AztecProtocol#24593 AztecProtocol#24465.

Tracker: AztecProtocol/aztec-packages-private#588
rangozd pushed a commit to rangozd/aztec-packages that referenced this pull request Aug 5, 2026
…ol#24610)

Removes `yarn-project/THREAT_MODEL.md`, added in
[AztecProtocol#24465](AztecProtocol#24465).

Per discussion in #team-alpha: detailed threat models and invariants may
make it easier for attackers to find bugs, so the team wants this
content pulled from the public repo for now. It will be re-added to
LabsBox/ClaudeBox (private/internal) — see
[claudebox#1357](AztecProtocol/claudebox#1357) —
and can come back here once the team is finding fewer bugs.

Only the threat model doc itself is removed here — the incidental doc
cleanups bundled into the same squashed commit (stale BLOCK protocol
references in `yarn-project/p2p/README.md` and
`yarn-project/p2p/src/services/reqresp/README.md`, and the missing
`DUPLICATE_ATTESTATION` entry in `yarn-project/slasher/README.md`) are
kept as-is.

(cherry picked from commit 4d02692)
rangozd pushed a commit to rangozd/aztec-packages that referenced this pull request Aug 5, 2026
…Protocol#24934)

Forward-ports the small **cli / bot / docs** commits of the v5-next →
next backlog, plus an owner checklist for the spartan-config and
standard-contract-repin commits (both need an explicit v6 decision — see
below).

## Applied (clean cherry-picks, chronological)
- perf(bot): parallelize independent bot factory setup steps (AztecProtocol#24581)
- docs: revert threat model for node (AztecProtocol#24465) (AztecProtocol#24610)
- feat(cli): support funding accounts in validator-keys
new/set-funding-account (AztecProtocol#24476)

## ⚠️ Needs owner conflict-resolution (conflict against reshaped `next`;
not included here)
Cherry-pick onto this branch and resolve:
- [x] `git cherry-pick -x 38202d9` — chore(spartan): restore 7 day
mainnet slash grace period (AztecProtocol#24804)
- [x] `git cherry-pick -x c3a2a85` — chore: re-pin handshake registry
with owner-bound nullifiers (AztecProtocol#24893)

Part of the manual v5-next → next backlog sweep. Draft until conflicts
are resolved and CI is green.
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