Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
566d7f5
refactor(p2p): merge FastTxCollection into TxCollection with sequenti…
fcarreiro May 13, 2026
a7a0d8c
refactor(publisher): bundle-level simulate; drop per-action enqueue s…
spalladino May 13, 2026
4b52402
Merge branch 'next' into merge-train/spartan
May 13, 2026
ad97697
Merge branch 'next' into merge-train/spartan
May 13, 2026
460a87e
refactor(stdlib): remove deprecated RevertCode/TxExecutionResult alia…
spalladino May 13, 2026
1eaca4b
Merge branch 'next' into merge-train/spartan
May 14, 2026
498b961
test(e2e): fix race in 'proposer invalidates multiple checkpoints' (#…
spalladino May 14, 2026
437eacb
fix: clean up old jobs regardless of pending status (#23260)
alexghr May 14, 2026
db4bd98
refactor(p2p): remove unused sendBatchRequest (#23273)
fcarreiro May 14, 2026
6eedaa5
chore(p2p): remove proposal_tx_collector leftovers (#23276)
fcarreiro May 14, 2026
816aef3
feat: slash truncated checkpoint proposals (#23250)
alexghr May 14, 2026
55df962
refactor: remove unused map in attestation pool (#23284)
alexghr May 14, 2026
e52eb69
Merge branch 'next' into merge-train/spartan
May 14, 2026
85f9c92
Merge branch 'next' into merge-train/spartan
May 14, 2026
8a6316f
Merge branch 'next' into merge-train/spartan
May 14, 2026
71d3b16
Merge branch 'next' into merge-train/spartan
May 14, 2026
78c6e81
chore(p2p): assert last block in checkpoint proposal is correct (#23274)
spalladino May 14, 2026
0da3480
refactor(l1-tx-utils): use DateProvider for fail-fast timeout check (…
spalladino May 14, 2026
9759aa6
Merge branch 'next' into merge-train/spartan
May 15, 2026
fff23f9
feat(sandbox): support proposer pipelining in local network (#23277)
spalladino May 15, 2026
7551378
Merge branch 'next' into merge-train/spartan
May 15, 2026
3ba6dbe
test(e2e): fix race in broadcasted_invalid_block_proposal_slash under…
AztecBot May 15, 2026
e0f2339
fix(archiver): atomic getter for L2 tips (#23295)
spalladino May 15, 2026
0291cc2
fix(sequencer): use targetSlot in tryVoteWhenEscapeHatchOpen under pi…
spalladino May 15, 2026
1c09902
fix(world-state): make fork close idempotent for pruned forks (#23298)
spalladino May 15, 2026
943ca27
test(e2e): migrate passing tests to proposer pipelining (#23275)
spalladino May 15, 2026
111f72d
chore: update dashboard (#23312)
alexghr May 15, 2026
fc2a31c
Merge branch 'next' into merge-train/spartan
May 15, 2026
69f57fe
chore: Revert "feat(sandbox): support proposer pipelining in local ne…
alexghr May 15, 2026
fed608b
test: slash on bad attestation (#23184)
alexghr May 15, 2026
58acdae
feat(slasher): per-slot data-withholding watcher (A-523, A-525) (#23116)
PhilWindle May 15, 2026
a948115
test(e2e): enable pipelining on e2e debug trace (#23301)
spalladino May 15, 2026
bf608d1
test(e2e): enable pipelining on l1-to-l2 test (#23300)
spalladino May 15, 2026
6b43dbd
test(e2e): batch 3 of pipelining e2e test migration
spalladino May 16, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 16 additions & 8 deletions .test_patterns.yml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,10 @@ tests:
error_regex: "Error: Timeout of 2000ms exceeded"
owners:
- *martin
- regex: "kv-store/.*store\\.test"
error_regex: "guards against too many cursors"
owners:
- *palla
- regex: "ethereum/src/test/tx_delayer.test.ts"
error_regex: "delays a transaction until a given L1 timestamp"
owners:
Expand All @@ -172,6 +176,18 @@ tests:
error_regex: "ContractFunctionExecutionError: The contract function"
owners:
- *mitch
# Under proposer pipelining each validator votes in its own slot and the votes
# don't aggregate into the same round, so the slashing quorum (3) is never
# reached within the 414s budget; the test consistently times out at the docker
# outer 600s (exit 124). The publisher refactor lands all vote-offenses tx's
# on L1 successfully — voteCount on the slasher proposer simply stays at 1
# per round. This is a slashing-payload aggregation issue independent of
# publisher work; skip until the slashing team addresses it separately.
- regex: "e2e_p2p/valid_epoch_pruned_slash.test.ts"
skip: true
owners:
- *mitch
- *palla
- regex: "archiver/src/archiver/archiver.test.ts"
error_regex: "Received number of calls: 1"
owners:
Expand All @@ -185,14 +201,6 @@ tests:
- *phil
- *palla

# http://ci.aztec-labs.com/64a972aafaa40dd0
# ProvingBroker › Retries › does not retry if job is stale — kv-store closes
# before the broker's final reportProvingJobError write lands.
- regex: "prover-client/src/proving_broker/proving_broker.test.ts"
error_regex: "does not retry if job is stale|Store is closed"
owners:
- *alex

# Nightly GKE tests
- regex: "spartan/bootstrap.sh"
owners:
Expand Down
11 changes: 5 additions & 6 deletions l1-contracts/src/core/slashing/SlashingProposer.sol
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,11 @@ import {SafeCast} from "@oz/utils/math/SafeCast.sol";
*
* About SLASH_OFFSET_IN_ROUNDS:
* - This offset gives us time to detect an offense and then vote on it in a later
* round. For instance, an `VALID_EPOCH_PRUNED` offense for epoch N is only triggered after
* `PROOF_SUBMISSION_WINDOW` epochs. Consider the following:
* - Epoch 1 is valid
* - At the end of epoch 3, the proof for 1 has not landed, so epoch 1 is pruned
* - Network decides to slash the committee of epoch 1
* - This means that only starting from epoch 4 we should be voting for slashing the committee of epoch 1
* round. For instance, a `DATA_WITHHOLDING` offense for slot S is only triggered after
* `DATA_WITHHOLDING_TOLERANCE_SLOTS` slots. Consider:
* - Slot S publishes a checkpoint
* - At slot S + tolerance, observers find missing data and want to slash the attesters
* - Voting on that slash needs to happen in a round that starts after detection
* - In terms of voting, this parameter means that in round R we are voting for the committee of epochs starting
* from (R - SLASH_OFFSET_IN_ROUNDS) * ROUND_SIZE_IN_EPOCHS.
* - For example, with SLASH_OFFSET_IN_ROUNDS=2, ROUND_SIZE=10, and EPOCH_DURATION=2
Expand Down
12 changes: 8 additions & 4 deletions spartan/aztec-node/templates/_pod-template.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -217,14 +217,14 @@ spec:
- name: SLASH_VALIDATORS_NEVER
value: {{ join "," .Values.node.slash.validatorsNever | quote }}
{{- end }}
{{- if .Values.node.slash.prunePenalty }}
- name: SLASH_PRUNE_PENALTY
value: {{ .Values.node.slash.prunePenalty | quote }}
{{- end }}
{{- if .Values.node.slash.dataWithholdingPenalty }}
- name: SLASH_DATA_WITHHOLDING_PENALTY
value: {{ .Values.node.slash.dataWithholdingPenalty | quote }}
{{- end }}
{{- if .Values.node.slash.dataWithholdingToleranceSlots }}
- name: SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS
value: {{ .Values.node.slash.dataWithholdingToleranceSlots | quote }}
{{- end }}
{{- if .Values.node.slash.inactivityPenalty }}
- name: SLASH_INACTIVITY_PENALTY
value: {{ .Values.node.slash.inactivityPenalty | quote }}
Expand All @@ -237,6 +237,10 @@ spec:
- name: SLASH_INVALID_BLOCK_PENALTY
value: {{ .Values.node.slash.invalidBlockPenalty | quote }}
{{- end }}
{{- if .Values.node.slash.invalidCheckpointProposalPenalty }}
- name: SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY
value: {{ .Values.node.slash.invalidCheckpointProposalPenalty | quote }}
{{- end }}
{{- if .Values.node.slash.proposeInvalidAttestationsPenalty }}
- name: SLASH_PROPOSE_INVALID_ATTESTATIONS_PENALTY
value: {{ .Values.node.slash.proposeInvalidAttestationsPenalty | quote }}
Expand Down
3 changes: 2 additions & 1 deletion spartan/aztec-node/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,12 @@ node:
validatorsAlways: []
validatorsNever: []
# Penalty amounts for different offense types
prunePenalty: ""
dataWithholdingPenalty: ""
dataWithholdingToleranceSlots: ""
inactivityPenalty: ""
inactivityTargetPercentage: ""
invalidBlockPenalty: ""
invalidCheckpointProposalPenalty: ""
proposeInvalidAttestationsPenalty: ""
attestDescendantOfInvalidPenalty: ""
attestInvalidCheckpointProposalPenalty: ""
Expand Down
12 changes: 7 additions & 5 deletions spartan/environments/network-defaults.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,10 +119,10 @@ slasher: &slasher
SLASH_MAX_PAYLOAD_SIZE: 80
# Rounds to look back when executing slashes.
SLASH_EXECUTE_ROUNDS_LOOK_BACK: 4
# Penalty for slashing validators of a valid pruned epoch.
SLASH_PRUNE_PENALTY: 10e18
# Penalty for data withholding.
SLASH_DATA_WITHHOLDING_PENALTY: 10e18
# Number of full L2 slots to wait after a checkpoint's slot before declaring its txs missing.
SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS: 3
# Missed attestation percentage to trigger inactivity slash (0, 1].
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9
# Consecutive epochs a validator must be inactive before slashing.
Expand All @@ -143,6 +143,8 @@ slasher: &slasher
SLASH_UNKNOWN_PENALTY: 10e18
# Penalty for broadcasting an invalid block.
SLASH_INVALID_BLOCK_PENALTY: 10e18
# Penalty for broadcasting an invalid checkpoint proposal.
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0
# L2 slots grace period before considering an offense expired.
SLASH_GRACE_PERIOD_L2_SLOTS: 0

Expand Down Expand Up @@ -235,7 +237,6 @@ networks:
PUBLIC_OTEL_EXPORTER_OTLP_METRICS_ENDPOINT: ""
PUBLIC_OTEL_COLLECT_FROM: ""
# Slasher penalties
SLASH_PRUNE_PENALTY: 10e18
SLASH_DATA_WITHHOLDING_PENALTY: 10e18
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1
Expand All @@ -247,6 +248,7 @@ networks:
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10e18
SLASH_UNKNOWN_PENALTY: 10e18
SLASH_INVALID_BLOCK_PENALTY: 10e18
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0
SLASH_GRACE_PERIOD_L2_SLOTS: 0
ENABLE_VERSION_CHECK: true

Expand Down Expand Up @@ -281,7 +283,6 @@ networks:
P2P_MAX_PENDING_TX_COUNT: 1000
P2P_TX_POOL_DELETE_TXS_AFTER_REORG: true
# Slasher penalties
SLASH_PRUNE_PENALTY: 10e18
SLASH_DATA_WITHHOLDING_PENALTY: 10e18
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.9
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 1
Expand All @@ -293,6 +294,7 @@ networks:
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 10e18
SLASH_UNKNOWN_PENALTY: 10e18
SLASH_INVALID_BLOCK_PENALTY: 10e18
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0
SLASH_GRACE_PERIOD_L2_SLOTS: 64
ENABLE_VERSION_CHECK: true

Expand Down Expand Up @@ -341,7 +343,6 @@ networks:
PUBLIC_OTEL_COLLECT_FROM: ""
ENABLE_VERSION_CHECK: false
# Slasher penalties - more lenient initially
SLASH_PRUNE_PENALTY: 0
SLASH_DATA_WITHHOLDING_PENALTY: 0
SLASH_INACTIVITY_TARGET_PERCENTAGE: 0.8
SLASH_INACTIVITY_CONSECUTIVE_EPOCH_THRESHOLD: 2
Expand All @@ -353,4 +354,5 @@ networks:
SLASH_ATTEST_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 2000e18
SLASH_UNKNOWN_PENALTY: 2000e18
SLASH_INVALID_BLOCK_PENALTY: 2000e18
SLASH_INVALID_CHECKPOINT_PROPOSAL_PENALTY: 0
SLASH_GRACE_PERIOD_L2_SLOTS: 1200
Loading
Loading