Skip to content

Commit 0daa54d

Browse files
authored
chore: Update Noir to nightly-2026-04-10 (#22393)
Automated update of Noir submodule to latest nightly. **Current**: unknown **New**: nightly-2026-04-10 [View changes in noir-lang/noir](noir-lang/noir@c09ce9a...nightly-2026-04-10)
2 parents 446d015 + 994817d commit 0daa54d

57 files changed

Lines changed: 274 additions & 214 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

avm-transpiler/Cargo.lock

Lines changed: 13 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

barretenberg/acir_tests/bootstrap.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,6 @@ function build {
108108
rm -rf acir_tests/{diamond_deps_0,workspace,workspace_default_member,regression_7323}
109109
# These use folding, which is not currently supported.
110110
rm -rf acir_tests/{fold_call_witness_condition,fold_after_inlined_calls,fold_complex_outputs,fold_basic_nested_call,fold_numeric_generic_poseidon,fold_fibonacci,fold_basic,fold_2_to_17,fold_distinct_return}
111-
# These are breaking with:
112-
# Failed to solve program: 'Failed to solve blackbox function: embedded_curve_add, reason: Infinite input: embedded_curve_add(infinity, infinity)'
113-
rm -rf acir_tests/{regression_5045,regression_7744}
114111
# The following test fails because it uses CallData/ReturnData with UltraBuilder, which is not supported
115112
rm -rf acir_tests/{regression_7612,regression_7143,databus_composite_calldata,databus_two_calldata_simple,databus_two_calldata,databus}
116113
# Merge the internal test programs with the acir tests.

barretenberg/cpp/pil/vm2/constants_gen.pil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ namespace constants;
165165
pol UPDATES_DELAYED_PUBLIC_MUTABLE_METADATA_BIT_SIZE = 144;
166166
pol GRUMPKIN_ONE_X = 1;
167167
pol GRUMPKIN_ONE_Y = 17631683881184975370165255887551781615748388533673675138860;
168-
pol DOM_SEP__NOTE_HASH_NONCE = 1721808740;
169-
pol DOM_SEP__UNIQUE_NOTE_HASH = 226850429;
170168
pol DOM_SEP__SILOED_NOTE_HASH = 3361878420;
169+
pol DOM_SEP__UNIQUE_NOTE_HASH = 226850429;
170+
pol DOM_SEP__NOTE_HASH_NONCE = 1721808740;
171171
pol DOM_SEP__SILOED_NULLIFIER = 57496191;
172172
pol DOM_SEP__PUBLIC_LEAF_SLOT = 1247650290;
173173
pol DOM_SEP__PUBLIC_STORAGE_MAP_SLOT = 4015149901;

barretenberg/cpp/src/barretenberg/vm2/common/aztec_constants.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,9 @@
257257
#define UPDATES_DELAYED_PUBLIC_MUTABLE_VALUES_LEN 3
258258
#define UPDATES_DELAYED_PUBLIC_MUTABLE_METADATA_BIT_SIZE 144
259259
#define DEFAULT_MAX_DEBUG_LOG_MEMORY_READS 125000
260-
#define DOM_SEP__NOTE_HASH_NONCE 1721808740UL
261-
#define DOM_SEP__UNIQUE_NOTE_HASH 226850429UL
262260
#define DOM_SEP__SILOED_NOTE_HASH 3361878420UL
261+
#define DOM_SEP__UNIQUE_NOTE_HASH 226850429UL
262+
#define DOM_SEP__NOTE_HASH_NONCE 1721808740UL
263263
#define DOM_SEP__SILOED_NULLIFIER 57496191UL
264264
#define DOM_SEP__PUBLIC_LEAF_SLOT 1247650290UL
265265
#define DOM_SEP__PUBLIC_STORAGE_MAP_SLOT 4015149901UL

barretenberg/cpp/src/barretenberg/vm2/generated/relations/note_hash_tree_check_impl.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ void note_hash_tree_checkImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
1818
const auto constants_NOTE_HASH_TREE_HEIGHT = FF(42);
1919
const auto constants_AVM_PUBLIC_INPUTS_PREVIOUS_NON_REVERTIBLE_ACCUMULATED_DATA_NULLIFIERS_ROW_IDX = FF(169);
2020
const auto constants_AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_NOTE_HASHES_ROW_IDX = FF(386);
21-
const auto constants_DOM_SEP__NOTE_HASH_NONCE = FF(1721808740);
22-
const auto constants_DOM_SEP__UNIQUE_NOTE_HASH = FF(226850429);
2321
const auto constants_DOM_SEP__SILOED_NOTE_HASH = FF(3361878420UL);
22+
const auto constants_DOM_SEP__UNIQUE_NOTE_HASH = FF(226850429);
23+
const auto constants_DOM_SEP__NOTE_HASH_NONCE = FF(1721808740);
2424
const auto note_hash_tree_check_READ = (FF(1) - in.get(C::note_hash_tree_check_write));
2525
const auto note_hash_tree_check_PREV_LEAF_VALUE_UNIQUE_NOTE_HASH_DIFF =
2626
(in.get(C::note_hash_tree_check_prev_leaf_value) - in.get(C::note_hash_tree_check_unique_note_hash));

noir-projects/aztec-nr/aztec/Nargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@ type = "lib"
77
[dependencies]
88
protocol_types = { path = "../../noir-protocol-circuits/crates/types" }
99
sha256 = { tag = "v0.3.0", git = "https://github.com/noir-lang/sha256" }
10-
poseidon = { tag = "v0.2.6", git = "https://github.com/noir-lang/poseidon" }
10+
poseidon = { tag = "v0.3.0", git = "https://github.com/noir-lang/poseidon" }

noir-projects/aztec-nr/aztec/src/context/public_context.nr

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,9 @@ impl PublicContext {
131131
///
132132
pub fn note_hash_exists(_self: Self, note_hash: Field, leaf_index: u64) -> bool {
133133
// Safety: AVM opcodes are constrained by the AVM itself
134-
unsafe { avm::note_hash_exists(note_hash, leaf_index) } == 1
134+
unsafe {
135+
avm::note_hash_exists(note_hash, leaf_index)
136+
}
135137
}
136138

137139
/// Checks if a specific L1-to-L2 message exists in the L1-to-L2 message tree at a particular leaf index.
@@ -153,7 +155,9 @@ impl PublicContext {
153155
///
154156
pub fn l1_to_l2_msg_exists(_self: Self, msg_hash: Field, msg_leaf_index: Field) -> bool {
155157
// Safety: AVM opcodes are constrained by the AVM itself TODO(alvaro): Make l1l2msg leaf index a u64 upstream
156-
unsafe { avm::l1_to_l2_msg_exists(msg_hash, msg_leaf_index as u64) } == 1
158+
unsafe {
159+
avm::l1_to_l2_msg_exists(msg_hash, msg_leaf_index as u64)
160+
}
157161
}
158162

159163
/// Returns `true` if an `unsiloed_nullifier` has been emitted by `contract_address`.
@@ -204,7 +208,9 @@ impl PublicContext {
204208
pub fn nullifier_exists_unsafe(_self: Self, unsiloed_nullifier: Field, contract_address: AztecAddress) -> bool {
205209
let siloed_nullifier = compute_siloed_nullifier(contract_address, unsiloed_nullifier);
206210
// Safety: AVM opcodes are constrained by the AVM itself
207-
unsafe { avm::nullifier_exists(siloed_nullifier) } == 1
211+
unsafe {
212+
avm::nullifier_exists(siloed_nullifier)
213+
}
208214
}
209215

210216
/// Consumes a message sent from Ethereum (L1) to Aztec (L2) -- effectively marking it as "read".
@@ -662,7 +668,9 @@ impl PublicContext {
662668
///
663669
pub fn is_static_call(_self: Self) -> bool {
664670
// Safety: AVM opcodes are constrained by the AVM itself
665-
unsafe { avm::is_static_call() } == 1
671+
unsafe {
672+
avm::is_static_call()
673+
}
666674
}
667675

668676
/// Reads raw field values from public storage. Reads N consecutive storage slots starting from the given slot.

noir-projects/aztec-nr/aztec/src/keys/ecdh_shared_secret.nr

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ use std::{embedded_curve_ops::multi_scalar_mul, ops::Neg};
1919
///
2020
/// See also: https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman
2121
pub fn derive_ecdh_shared_secret(secret: Scalar, public_key: Point) -> Point {
22-
multi_scalar_mul([public_key], [secret])
22+
// TODO(F-553): Drop the `.to_embedded()` / `.into()` round-trip once the custom `Point` wrapper is removed and we
23+
// use `EmbeddedCurvePoint` directly.
24+
multi_scalar_mul([public_key.to_embedded()], [secret]).into()
2325
}
2426

2527
/// Computes an app-siloed shared secret from a raw ECDH shared secret point and a contract address.
@@ -76,8 +78,8 @@ unconstrained fn test_shared_secret_computation_in_both_directions() {
7678
let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };
7779
let secret_b = Scalar { lo: 0x3456, hi: 0x4567 };
7880

79-
let pk_a = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a);
80-
let pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b);
81+
let pk_a: Point = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a).into();
82+
let pk_b: Point = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b).into();
8183

8284
let shared_secret = derive_ecdh_shared_secret(secret_a, pk_b);
8385
let shared_secret_alt = derive_ecdh_shared_secret(secret_b, pk_a);
@@ -90,8 +92,8 @@ unconstrained fn test_shared_secret_computation_from_address_in_both_directions(
9092
let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };
9193
let secret_b = Scalar { lo: 0x3456, hi: 0x4567 };
9294

93-
let mut pk_a = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a);
94-
let mut pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b);
95+
let mut pk_a: Point = std::embedded_curve_ops::fixed_base_scalar_mul(secret_a).into();
96+
let mut pk_b: Point = std::embedded_curve_ops::fixed_base_scalar_mul(secret_b).into();
9597

9698
let address_b = AztecAddress::from_field(pk_b.x);
9799

@@ -118,7 +120,7 @@ unconstrained fn test_shared_secret_computation_from_address_in_both_directions(
118120
#[test]
119121
unconstrained fn test_app_siloed_shared_secret_differs_per_contract() {
120122
let secret_a = Scalar { lo: 0x1234, hi: 0x2345 };
121-
let pk_b = std::embedded_curve_ops::fixed_base_scalar_mul(Scalar { lo: 0x3456, hi: 0x4567 });
123+
let pk_b: Point = std::embedded_curve_ops::fixed_base_scalar_mul(Scalar { lo: 0x3456, hi: 0x4567 }).into();
122124

123125
let shared_secret = derive_ecdh_shared_secret(secret_a, pk_b);
124126

noir-projects/aztec-nr/aztec/src/keys/ephemeral.nr

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ pub fn generate_ephemeral_key_pair() -> (Scalar, Point) {
1717
// TODO(#12757): compute the key pair without constraining eph_sk twice (once in from_field, once in the black box
1818
// called by fixed_base_scalar_mul).
1919
let eph_sk = EmbeddedCurveScalar::from_field(randomness);
20-
let eph_pk = fixed_base_scalar_mul(eph_sk);
20+
// TODO(F-553): Drop the `.into()` once the custom `Point` wrapper is removed and we use `EmbeddedCurvePoint`
21+
// directly. Applies to the other `fixed_base_scalar_mul(...).into()` call sites in this file as well.
22+
let eph_pk: Point = fixed_base_scalar_mul(eph_sk).into();
2123

2224
(eph_sk, eph_pk)
2325
}
@@ -35,7 +37,7 @@ pub fn generate_positive_ephemeral_key_pair() -> (Scalar, Point) {
3537
// anyway, and so the recipient already trusts them to not disclose this information. We can therefore assume that
3638
// the sender will cooperate in the random value generation.
3739
let eph_sk = unsafe { generate_secret_key_for_positive_public_key() };
38-
let eph_pk = fixed_base_scalar_mul(eph_sk);
40+
let eph_pk: Point = fixed_base_scalar_mul(eph_sk).into();
3941

4042
assert(get_sign_of_point(eph_pk), "Got an ephemeral public key with a negative y coordinate");
4143

@@ -51,7 +53,7 @@ unconstrained fn generate_secret_key_for_positive_public_key() -> EmbeddedCurveS
5153

5254
// @todo Need to draw randomness from the full domain of Fq not only Fr
5355
sk = EmbeddedCurveScalar::from_field(random());
54-
let pk = fixed_base_scalar_mul(sk);
56+
let pk: Point = fixed_base_scalar_mul(sk).into();
5557
if get_sign_of_point(pk) {
5658
break;
5759
}

noir-projects/aztec-nr/aztec/src/macros/aztec/compute_note_hash_and_nullifier.nr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ comptime fn generate_contract_library_method_compute_note_hash() -> Quoted {
6565
} else {
6666
// Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the
6767
// `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we
68-
// know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying note type, and
69-
// compute the note hash (non-siloed).
68+
// know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying
69+
// note type, and compute the note hash (non-siloed).
7070

7171
// We resolve the log format calls here so that the resulting Quoted values can be spliced into the quote
7272
// block below.
@@ -174,8 +174,8 @@ comptime fn generate_contract_library_method_compute_note_nullifier() -> Quoted
174174
} else {
175175
// Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the
176176
// `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we
177-
// know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying note type, and
178-
// compute the inner nullifier (non-siloed).
177+
// know it we call the correct `unpack` method from the `Packable` trait to obtain the underlying
178+
// note type, and compute the inner nullifier (non-siloed).
179179

180180
// We resolve the log format calls here so that the resulting Quoted values can be spliced into the quote
181181
// block below.

0 commit comments

Comments
 (0)