Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f655893
refactor(archiver)!: simplify L2BlockSource block lookups (#22809)
spalladino May 5, 2026
cb1fa2b
chore(lint): allow branded primitive types as keys in collections (#2…
spalladino May 5, 2026
fa098ff
test(e2e): test missed l1 publishing under pipelining (#22926)
spalladino May 5, 2026
b23fb63
chore(p2p): drop unused ENR xxhash versioning path
spypsy May 5, 2026
96cb8eb
Merge branch 'next' into merge-train/spartan
May 5, 2026
c536816
fix: dedup attestation pool by payload hash (#22871)
spalladino May 5, 2026
a9c6ad7
chore: notify slack users directly (#22944)
alexghr May 5, 2026
a706039
Merge branch 'next' into merge-train/spartan
May 5, 2026
4006d84
Merge branch 'next' into merge-train/spartan
May 5, 2026
270105c
feat: merge-train/spartan (#22940)
AztecBot May 5, 2026
b7113e6
chore: skip zero-init and reserve copy_cycle vectors (#22963)
ledwards2225 May 5, 2026
56702c2
Merge branch 'next' into merge-train/barretenberg
May 5, 2026
90af740
feat(protocol-fuzzer): local setup, configurable artifacts, and bridg…
May 6, 2026
1211a03
feat(protocol-fuzzer): local repo setup (no docker) (#22387)
rkarabut May 6, 2026
21d659d
Merge branch 'next' into merge-train/barretenberg
May 6, 2026
36d6ec8
feat: Multi app per kernel (#22640)
federicobarbacovi May 6, 2026
024b01b
refactor(avm)!: consolidate revertible/non-revertible append selector…
jeanmon May 6, 2026
a864dec
chore(p2p): drop unused ENR xxhash versioning path (#22943)
PhilWindle May 6, 2026
38115ab
Merge branch 'next' into merge-train/avm
May 6, 2026
22231d5
Merge branch 'next' into merge-train/barretenberg
May 6, 2026
b8f76f3
chore: Update Security.md with bug bounty
Rumata888 May 6, 2026
42e2e67
feat: Improve add_scaled_batch (#22981)
federicobarbacovi May 6, 2026
72c125c
feat: merge-train/avm (#22986)
AztecBot May 6, 2026
420fd55
feat: merge-train/barretenberg (#22969)
ledwards2225 May 6, 2026
d06c141
chore: Update Noir to nightly-2026-05-05
AztecBot May 6, 2026
b3031a2
chore: Update Noir to nightly-2026-05-05 (#22911)
TomAFrench May 6, 2026
3c1f643
chore: Update Security.md with bug bounty (#22993)
Rumata888 May 6, 2026
f8ac6da
Merge branch 'next' into merge-train/barretenberg
May 6, 2026
b355f06
Merge branch 'next' into merge-train/barretenberg
May 6, 2026
1f9d87b
fix(bb): allocate gemini masking poly with virtual size == dyadic (#2…
AztecBot May 6, 2026
65cc326
docs(barretenberg): document Prover.toml fixture regen for proof-leng…
ledwards2225 May 7, 2026
b30fe8f
feat: merge-train/barretenberg (#23011)
AztecBot May 7, 2026
4914b33
chore: merge origin/next into merge-train/fairies
AztecBot May 7, 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
6 changes: 4 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ We welcome external submissions in the meantime. To submit a vulnerability, plea

## Reporting Security Vulnerabilities

- **Do not** open public GitHub issues or pull requests for suspected security vulnerabilities.
Please use [Aztec Network Bug Bounty](https://cantina.xyz/bounties/80e74370-10d8-4e52-8e4b-7294deb7c9ee) to submit vulnerabilities. If the vulnerability is not in scope of the bug bounty program, please use the following procedure.

Instead, please use the [Private Vulnerability Reporting](https://github.com/AztecProtocol/aztec-packages/security/advisories/new) process on GitHub.
**Do not** open public GitHub issues or pull requests for suspected security vulnerabilities.

Instead, please use the [Private Vulnerability Reporting](https://github.com/AztecProtocol/aztec-packages/security/advisories/new) process on GitHub.

- Navigate to the "Security" tab of this repository.
- Click "Report a vulnerability" on the left sidebar.
Expand Down
21 changes: 21 additions & 0 deletions barretenberg/cpp/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,27 @@ Key constants to watch:

If C++ static_asserts fail after your changes, update both the assert values AND the corresponding Noir constants, then run `yarn remake-constants`.

## Prover.toml Fixtures

Proof-length-affecting changes (e.g. `CHONK_PROOF_LENGTH` bumps from MegaFlavor entity additions) make the committed `Prover.toml` fixtures stale. `nargo execute --program-dir <crate>` then fails with `Type Array { length: N, typ: Field } is expected to have length N but value Vec(...)`.

Regenerate via the e2e prover full test with fake proofs:

```bash
cd yarn-project
AZTEC_GENERATE_TEST_DATA=1 FAKE_PROOFS=1 yarn workspace @aztec/end-to-end test full.test
```

`FAKE_PROOFS=1` skips real proving — runs in ~2 min (orchestrator + witness generation only). Writes 12 `Prover.toml` files under `noir-projects/noir-protocol-circuits/crates/<circuit>/Prover.toml`.

For circuits not exercised by `full.test.ts` (`rollup-tx-merge`, `rollup-block-root`, `rollup-block-root-single-tx`, `rollup-block-merge`, `rollup-checkpoint-root`, `rollup-block-root-first-empty-tx`), additionally run:

```bash
AZTEC_GENERATE_TEST_DATA=1 yarn workspace @aztec/prover-client test orchestrator_single_checkpoint
```

Verify with `nargo execute --program-dir noir-projects/noir-protocol-circuits/crates/<crate>` for any previously-failing crate; should print `Circuit witness successfully solved`.

## Verification Keys

**IMPORTANT**: When making barretenberg changes that could affect verification keys, you must verify that VKs haven't changed unexpectedly, or
Expand Down
44 changes: 21 additions & 23 deletions barretenberg/cpp/pil/vm2/precomputed.pil
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ pol constant sel_mem_tag_out_of_range;
// - instruction size (in bytes): instr_size
// - Selector on whether the instruction has a tag: sel_has_tag
// - Selector on whether operand op2 is a tag: sel_tag_is_op2
//
//
// Used by the instruction fetching subtrace to decode raw bytecode.
// Selectors for operands decomposition into bytes (required by instr_fetching.pil)
// This table is populated by a map generated by a cpp test defined in op_decomposition.test.cpp.
Expand Down Expand Up @@ -361,22 +361,23 @@ pol constant addressing_gas;
// properties: which tree operations are allowed, public-input offsets, revert behavior.
// Used by the transaction trace to enforce phase-based constraints.
//
// Example trace (idx encodes the TransactionPhase enum; abbreviated column names):
// idx | sel_phase | is_call | is_teardown | is_collect_fee | is_tree_padding | is_cleanup | is_revertible | nr_null | nr_note | nr_l2l1 | r_null | r_note | r_l2l1 | next_on_revert
// ----+-----------+---------+-------------+----------------+-----------------+------------+---------------+---------+---------+---------+--------+--------+--------+---------------
// 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 (NR_NULLIFIER_INSERTION)
// 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 (NR_NOTE_INSERTION)
// 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 (NR_L2_TO_L1_MESSAGE)
// 3 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (SETUP)
// 4 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 8 (R_NULLIFIER_INSERTION)
// 5 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 8 (R_NOTE_INSERTION)
// 6 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 8 (R_L2_TO_L1_MESSAGE)
// 7 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 8 (APP_LOGIC)
// 8 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 9 (TEARDOWN)
// 9 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (COLLECT_GAS_FEES)
// 10 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (TREE_PADDING)
// 11 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (CLEANUP)
// 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (beyond phase range)
// Example trace (idx encodes the TransactionPhase enum; abbreviated column names).
// Whether an append is revertible or not is determined by `is_revertible`.
// idx | sel_phase | is_call | is_teardown | is_collect_fee | is_tree_padding | is_cleanup | is_revertible | append_null | append_note | append_l2l1 | next_on_revert
// ----+-----------+---------+-------------+----------------+-----------------+------------+---------------+-------------+-------------+-------------+---------------
// 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 (NR_NULLIFIER_INSERTION)
// 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 (NR_NOTE_INSERTION)
// 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 (NR_L2_TO_L1_MESSAGE)
// 3 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (SETUP)
// 4 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 8 (R_NULLIFIER_INSERTION)
// 5 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 8 (R_NOTE_INSERTION)
// 6 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 8 (R_L2_TO_L1_MESSAGE)
// 7 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 8 (APP_LOGIC)
// 8 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 9 (TEARDOWN)
// 9 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (COLLECT_GAS_FEES)
// 10 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 (TREE_PADDING)
// 11 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 (CLEANUP)
// 12 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 (beyond phase range)

// Phase Table for Tx Trace
pol constant sel_phase; // Selector for phase table
Expand All @@ -389,12 +390,9 @@ pol constant is_cleanup;
pol constant is_revertible;
pol constant read_pi_start_offset;
pol constant read_pi_length_offset;
pol constant sel_non_revertible_append_note_hash;
pol constant sel_non_revertible_append_nullifier;
pol constant sel_non_revertible_append_l2_l1_msg;
pol constant sel_revertible_append_note_hash;
pol constant sel_revertible_append_nullifier;
pol constant sel_revertible_append_l2_l1_msg;
pol constant sel_append_note_hash;
pol constant sel_append_nullifier;
pol constant sel_append_l2_l1_msg;
pol constant next_phase_on_revert;

// ===== Section 12: Keccak round constants =====
Expand Down
44 changes: 19 additions & 25 deletions barretenberg/cpp/pil/vm2/tx.pil
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,9 @@ namespace tx;
is_revertible,
read_pi_start_offset,
read_pi_length_offset,
sel_non_revertible_append_note_hash,
sel_non_revertible_append_nullifier,
sel_non_revertible_append_l2_l1_msg,
sel_revertible_append_note_hash,
sel_revertible_append_nullifier,
sel_revertible_append_l2_l1_msg,
sel_append_note_hash,
sel_append_nullifier,
sel_append_l2_l1_msg,
next_phase_on_revert
}
in
Expand All @@ -228,12 +225,9 @@ namespace tx;
precomputed.is_revertible,
precomputed.read_pi_start_offset,
precomputed.read_pi_length_offset,
precomputed.sel_non_revertible_append_note_hash,
precomputed.sel_non_revertible_append_nullifier,
precomputed.sel_non_revertible_append_l2_l1_msg,
precomputed.sel_revertible_append_note_hash,
precomputed.sel_revertible_append_nullifier,
precomputed.sel_revertible_append_l2_l1_msg,
precomputed.sel_append_note_hash,
precomputed.sel_append_nullifier,
precomputed.sel_append_l2_l1_msg,
precomputed.next_phase_on_revert
};

Expand Down Expand Up @@ -465,18 +459,16 @@ namespace tx;
/***************************************************************************
* Private Side Effect Insertions
**************************************************************************/
pol commit sel_revertible_append_note_hash; // @boolean
pol commit sel_non_revertible_append_note_hash; // @boolean
pol commit sel_revertible_append_nullifier; // @boolean
pol commit sel_non_revertible_append_nullifier; // @boolean
pol commit sel_revertible_append_l2_l1_msg; // @boolean
pol commit sel_non_revertible_append_l2_l1_msg; // @boolean
// The 6 above selectors are booleans thanks to #[READ_PHASE_SPEC] on active rows.
pol commit sel_append_note_hash; // @boolean
pol commit sel_append_nullifier; // @boolean
pol commit sel_append_l2_l1_msg; // @boolean
// The 3 above selectors are booleans thanks to #[READ_PHASE_SPEC] on active rows.
// Furthermore, phase spec guarantees that they are mutually exclusive.
// Whether such an append is revertible or not is determined by `is_revertible`.

// A tree selector means we need to get the tree value
pol commit is_tree_insert_phase; // @boolean on active rows (follows from mutual exclusivity of the 6 above selectors)
is_tree_insert_phase = sel_revertible_append_note_hash + sel_non_revertible_append_note_hash + sel_revertible_append_nullifier + sel_non_revertible_append_nullifier;
pol commit is_tree_insert_phase; // @boolean on active rows (follows from mutual exclusivity of the above selectors)
is_tree_insert_phase = sel_append_note_hash + sel_append_nullifier;
pol commit leaf_value;
// Shared column to track the inverse of the remaining side effects for note hashes, nullifiers, and L2 to L1 messages
pol commit remaining_side_effects_inv;
Expand All @@ -491,7 +483,7 @@ namespace tx;

// ===== NOTE HASHES =====
pol commit sel_try_note_hash_append; // @boolean (follows from definition)
sel_try_note_hash_append = (sel - is_padded) * (sel_revertible_append_note_hash + sel_non_revertible_append_note_hash);
sel_try_note_hash_append = (sel - is_padded) * sel_append_note_hash;

// If we are at the maximum emitted note hashes, we must revert
pol REMAINING_NOTE_HASH_WRITES = constants.MAX_NOTE_HASHES_PER_TX - prev_num_note_hashes_emitted;
Expand All @@ -509,7 +501,9 @@ namespace tx;
prev_note_hash_tree_size,
prev_note_hash_tree_root,
precomputed.zero, // Already siloed. (No need to pass address.)
sel_revertible_append_note_hash, // Not unique for revertible note hashes.
is_revertible, // Used as `sel_unique`: revertible note hashes need to be made unique with a nonce.
// On rows where sel_note_hash_append == 1 (NR_NOTE_INSERTION or R_NOTE_INSERTION),
// is_revertible is exactly the discriminator we want.
prev_num_note_hashes_emitted,
discard, // from tx_discard.pil virtual trace
next_note_hash_tree_root
Expand All @@ -532,7 +526,7 @@ namespace tx;

// ===== NULLIFIERS =====
pol commit sel_try_nullifier_append; // @boolean (follows from definition)
sel_try_nullifier_append = (sel - is_padded) * (sel_revertible_append_nullifier + sel_non_revertible_append_nullifier);
sel_try_nullifier_append = (sel - is_padded) * sel_append_nullifier;

pol commit nullifier_limit_error; // @boolean
nullifier_limit_error * (1 - nullifier_limit_error) = 0;
Expand Down Expand Up @@ -594,7 +588,7 @@ namespace tx;

// ===== L2 - L1 Messages =====
pol commit sel_try_l2_l1_msg_append; // @boolean (follows from definition)
sel_try_l2_l1_msg_append = (sel - is_padded) * (sel_revertible_append_l2_l1_msg + sel_non_revertible_append_l2_l1_msg);
sel_try_l2_l1_msg_append = (sel - is_padded) * sel_append_l2_l1_msg;

pol commit l2_l1_msg_contract_address;
pol commit l2_l1_msg_recipient;
Expand Down
6 changes: 3 additions & 3 deletions barretenberg/cpp/pil/vm2/tx_context.pil
Original file line number Diff line number Diff line change
Expand Up @@ -330,12 +330,12 @@ namespace tx;
NOT_LAST_ROW * (1 - is_teardown') * (da_gas_limit - da_gas_limit') = 0;

// Selectors to allow prev => next state changes in the different phases
pol SEL_CAN_EMIT_NOTE_HASH = is_public_call_request + sel_non_revertible_append_note_hash + sel_revertible_append_note_hash;
pol SEL_CAN_EMIT_NULLIFIER = is_public_call_request + sel_non_revertible_append_nullifier + sel_revertible_append_nullifier;
pol SEL_CAN_EMIT_NOTE_HASH = is_public_call_request + sel_append_note_hash;
pol SEL_CAN_EMIT_NULLIFIER = is_public_call_request + sel_append_nullifier;
pol SEL_CAN_WRITE_PUBLIC_DATA = is_public_call_request + is_collect_fee;
pol SEL_CAN_WRITE_WRITTEN_PUBLIC_DATA_SLOTS = is_public_call_request;
pol SEL_CAN_EMIT_PUBLIC_LOG = is_public_call_request;
pol SEL_CAN_EMIT_L2_L1_MSG = is_public_call_request + sel_non_revertible_append_l2_l1_msg + sel_revertible_append_l2_l1_msg;
pol SEL_CAN_EMIT_L2_L1_MSG = is_public_call_request + sel_append_l2_l1_msg;
// The 6 above selectors are booleans on active rows due to #[READ_PHASE_SPEC] and
// mutual exclusivity of the selectors on the right-hand side.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,12 +140,12 @@ class BatchedHonkTranslatorTests : public ::testing::Test {
m.add_entry(round, "ECC_OP_WIRE_" + std::to_string(i), G);
}
// DataBus entities:
for (const auto& label : { "CALLDATA",
"CALLDATA_READ_COUNTS",
"SECONDARY_CALLDATA",
"SECONDARY_CALLDATA_READ_COUNTS",
"RETURN_DATA",
"RETURN_DATA_READ_COUNTS" }) {
for (const auto& label : { "KERNEL_CALLDATA",
"KERNEL_CALLDATA_READ_COUNTS",
"APP_CALLDATA",
"APP_CALLDATA_READ_COUNTS",
"RETURNDATA",
"RETURNDATA_READ_COUNTS" }) {
m.add_entry(round, label, G);
}
m.add_challenge(round, "eta");
Expand All @@ -160,9 +160,9 @@ class BatchedHonkTranslatorTests : public ::testing::Test {

// ── Round 2: MegaZK logderiv inverses + Z_PERM + translator Oink ─────────
m.add_entry(round, "LOOKUP_INVERSES", G);
m.add_entry(round, "CALLDATA_INVERSES", G);
m.add_entry(round, "SECONDARY_CALLDATA_INVERSES", G);
m.add_entry(round, "RETURN_DATA_INVERSES", G);
m.add_entry(round, "KERNEL_CALLDATA_INVERSES", G);
m.add_entry(round, "APP_CALLDATA_INVERSES", G);
m.add_entry(round, "RETURNDATA_INVERSES", G);
m.add_entry(round, "Z_PERM", G);
// Translator Oink: vk_hash, masking commitment, 10 wire commitments
m.add_entry(round, "vk_hash", Fr);
Expand Down
Loading
Loading