Skip to content

Commit 343bc07

Browse files
committed
Merge remote-tracking branch 'origin/next' into lw/out_hash_per_epoch
2 parents de34a37 + 4d4705f commit 343bc07

File tree

294 files changed

+13752
-11406
lines changed

Some content is hidden

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

294 files changed

+13752
-11406
lines changed

barretenberg/cpp/pil/vm2/bytecode/bc_retrieval.pil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ pol commit current_class_id;
5454
// contract class members.
5555
// See barretenberg/cpp/src/barretenberg/vm2/common/aztec_types.hpp
5656
pol commit artifact_hash;
57-
pol commit private_function_root;
57+
pol commit private_functions_root;
5858
// Note that bytecode_id is used as public_bytecode_commitment!
5959

6060
// current state
@@ -128,12 +128,12 @@ should_retrieve = sel * (1 - error);
128128
should_retrieve {
129129
current_class_id,
130130
artifact_hash,
131-
private_function_root,
131+
private_functions_root,
132132
/*public_bytecode_commitment=*/ bytecode_id
133133
} in class_id_derivation.sel {
134134
class_id_derivation.class_id,
135135
class_id_derivation.artifact_hash,
136-
class_id_derivation.private_function_root,
136+
class_id_derivation.private_functions_root,
137137
class_id_derivation.public_bytecode_commitment
138138
};
139139

@@ -161,7 +161,7 @@ sel * (1 - instance_exists) * (current_class_id - 0) = 0;
161161
#[ARTIFACT_HASH_IS_ZERO_IF_ERROR]
162162
error * (artifact_hash - 0) = 0;
163163
#[PRIVATE_FUNCTION_ROOT_IS_ZERO_IF_ERROR]
164-
error * (private_function_root - 0) = 0;
164+
error * (private_functions_root - 0) = 0;
165165
#[BYTECODE_ID_IS_ZERO_IF_ERROR]
166166
error * (bytecode_id - 0) = 0;
167167

barretenberg/cpp/pil/vm2/bytecode/class_id_derivation.pil

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ namespace class_id_derivation;
1414

1515
// Members of Contract Class Id, looked up with bc_retrieval
1616
pol commit artifact_hash;
17-
pol commit private_function_root;
17+
pol commit private_functions_root;
1818
pol commit public_bytecode_commitment; // This is constrained via executions's lookup to instr_fetching, which looks up bc_decomposition <-> bc_hashing
1919
// The result of
20-
// H(GENERATOR_INDEX__CONTRACT_LEAF, artifact_hash, private_function_root, public_bytecode_commitment)
20+
// H(GENERATOR_INDEX__CONTRACT_LEAF, artifact_hash, private_functions_root, public_bytecode_commitment)
2121
pol commit class_id;
2222

2323
// TODO: We need these temporarily while we dont allow for aliases in the lookup tuple.
@@ -28,7 +28,7 @@ namespace class_id_derivation;
2828

2929
// Since the inputs to poseidon2 have to be chunks of 3, we need two lookups if we want to do this in a single row
3030
#[CLASS_ID_POSEIDON2_0]
31-
sel { gen_index_contract_leaf, artifact_hash, private_function_root, class_id, const_two }
31+
sel { gen_index_contract_leaf, artifact_hash, private_functions_root, class_id, const_two }
3232
in poseidon2_hash.start { poseidon2_hash.input_0, poseidon2_hash.input_1, poseidon2_hash.input_2, poseidon2_hash.output, poseidon2_hash.num_perm_rounds_rem };
3333

3434
#[CLASS_ID_POSEIDON2_1]

barretenberg/cpp/scripts/test_chonk_standalone_vks_havent_changed.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ cd ..
1313
# - Generate a hash for versioning: sha256sum bb-chonk-inputs.tar.gz
1414
# - Upload the compressed results: aws s3 cp bb-chonk-inputs.tar.gz s3://aztec-ci-artifacts/protocol/bb-chonk-inputs-[hash(0:8)].tar.gz
1515
# Note: In case of the "Test suite failed to run ... Unexpected token 'with' " error, need to run: docker pull aztecprotocol/build:3.0
16-
pinned_short_hash="79b094d8"
16+
pinned_short_hash="d99ed82f"
1717
pinned_chonk_inputs_url="https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/protocol/bb-chonk-inputs-${pinned_short_hash}.tar.gz"
1818

1919
function compress_and_upload {

barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_merge_recursive_verifier.test.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ template <class RecursiveBuilder> class BoomerangRecursiveMergeVerifierTest : pu
9191
auto merge_transcript = std::make_shared<StdlibTranscript<RecursiveBuilder>>();
9292
RecursiveMergeVerifier verifier{ settings, merge_transcript };
9393
const stdlib::Proof<RecursiveBuilder> stdlib_merge_proof(outer_circuit, merge_proof);
94-
[[maybe_unused]] auto [pairing_points, recursive_merged_table_commitments, degree_check_verified] =
94+
[[maybe_unused]] auto [pairing_points,
95+
recursive_merged_table_commitments,
96+
degree_check_verified,
97+
concatenation_check_verified] =
9598
verifier.verify_proof(stdlib_merge_proof, recursive_merge_commitments);
9699

97100
// Check for a failure flag in the recursive verifier circuit

barretenberg/cpp/src/barretenberg/chonk/chonk.test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ HEAVY_TEST(ChonkKernelCapacity, MaxCapacityPassing)
316316
{
317317
bb::srs::init_file_crs_factory(bb::srs::bb_crs_path());
318318

319-
const size_t NUM_APP_CIRCUITS = 27;
319+
const size_t NUM_APP_CIRCUITS = 31;
320320
auto [proof, vk] = ChonkTests::accumulate_and_prove_ivc(NUM_APP_CIRCUITS);
321321

322322
bool verified = Chonk::verify(proof, vk);

barretenberg/cpp/src/barretenberg/chonk/mock_circuit_producer.hpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,8 @@ class PrivateFunctionExecutionMockCircuitProducer {
167167
{
168168
const bool is_kernel = is_kernel_flags[circuit_counter++];
169169
const bool use_large_circuit = large_first_app && (circuit_counter == 1); // first circuit is size 2^19
170+
// Check if this is one of the trailing kernels (reset, tail, hiding)
171+
const bool is_trailing_kernel = (ivc.num_circuits_accumulated >= ivc.get_num_circuits() - NUM_TRAILING_KERNELS);
170172

171173
ClientCircuit circuit{ ivc.goblin.op_queue };
172174
// if the number of gates is specified we just add a number of arithmetic gates
@@ -179,8 +181,12 @@ class PrivateFunctionExecutionMockCircuitProducer {
179181
} else {
180182
// If the number of gates is not specified we create a structured mock circuit
181183
if (is_kernel) {
182-
GoblinMockCircuits::construct_mock_folding_kernel(circuit); // construct mock base logic
183-
mock_databus.populate_kernel_databus(circuit); // populate databus inputs/outputs
184+
// For trailing kernels (reset, tail, hiding), skip the expensive mock kernel logic to match real Noir
185+
// flows. These kernels are simpler and mainly contain the completion logic added by Chonk.
186+
if (!is_trailing_kernel) {
187+
GoblinMockCircuits::construct_mock_folding_kernel(circuit); // construct mock base logic
188+
}
189+
mock_databus.populate_kernel_databus(circuit); // populate databus inputs/outputs
184190
} else {
185191
GoblinMockCircuits::construct_mock_app_circuit(circuit, use_large_circuit); // construct mock app
186192
mock_databus.populate_app_databus(circuit); // populate databus outputs
@@ -214,9 +220,18 @@ class PrivateFunctionExecutionMockCircuitProducer {
214220
}
215221
} else {
216222
if (is_kernel) {
217-
BB_ASSERT_EQ(log2_dyadic_size,
218-
18UL,
219-
"There has been a change in the number of gates of a mock kernel circuit.");
223+
// Trailing kernels (reset, tail, hiding) are simpler than regular kernels
224+
if (is_trailing_kernel) {
225+
// Trailing kernels should be significantly smaller, with hiding kernel < 2^16
226+
BB_ASSERT_LTE(log2_dyadic_size,
227+
16UL,
228+
"Trailing kernel circuit size has exceeded expected bound (should be <= 2^16).");
229+
vinfo("Log number of gates in a trailing kernel circuit is: ", log2_dyadic_size);
230+
} else {
231+
BB_ASSERT_EQ(log2_dyadic_size,
232+
18UL,
233+
"There has been a change in the number of gates of a mock kernel circuit.");
234+
}
220235
} else {
221236
BB_ASSERT_EQ(log2_dyadic_size,
222237
use_large_circuit ? 19UL : 17UL,

barretenberg/cpp/src/barretenberg/constants.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static constexpr uint32_t NUM_LIBRA_COMMITMENTS = 3;
4848
// extra evaluations
4949
static constexpr uint32_t NUM_SMALL_IPA_EVALUATIONS = 4;
5050

51-
static constexpr uint32_t MERGE_PROOF_SIZE = 49; // used to ensure mock proofs are generated correctly
51+
static constexpr uint32_t MERGE_PROOF_SIZE = 42; // used to ensure mock proofs are generated correctly
5252

5353
// There are 5 distinguished wires in ECCVM that have to be opened as univariates to establish the connection between
5454
// ECCVM and Translator

barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.cpp

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -66,17 +66,13 @@ void create_ec_add_constraint(Builder& builder, const EcAdd& input, bool has_val
6666
// Step 2.
6767
cycle_group_ct result = input1_point + input2_point;
6868

69-
if (!predicate.is_constant()) {
70-
cycle_group_ct to_be_asserted_equal = cycle_group_ct::conditional_assign(predicate, input_result, result);
71-
result.assert_equal(to_be_asserted_equal);
72-
} else {
73-
// The assert_equal method standardizes both points before comparing, so if either of them is the point at
74-
// infinity, the coordinates will be assigned to be (0,0). This is OK as long as Noir developers do not use the
75-
// coordinates of a point at infinity (otherwise input_result might be the point at infinity different from (0,
76-
// 0, true), and the fact that assert_equal passes doesn't imply anything for the original coordinates of
77-
// input_result).
78-
result.assert_equal(input_result);
79-
}
69+
// The assert_equal method standardizes both points before comparing, so if either of them is the point at
70+
// infinity, the coordinates will be assigned to be (0,0). This is OK as long as Noir developers do not use the
71+
// coordinates of a point at infinity (otherwise input_result might be the point at infinity different from (0,
72+
// 0, true), and the fact that assert_equal passes doesn't imply anything for the original coordinates of
73+
// input_result).
74+
cycle_group_ct to_be_asserted_equal = cycle_group_ct::conditional_assign(predicate, input_result, result);
75+
result.assert_equal(to_be_asserted_equal);
8076
}
8177

8278
template void create_ec_add_constraint<bb::UltraCircuitBuilder>(bb::UltraCircuitBuilder& builder,

barretenberg/cpp/src/barretenberg/dsl/acir_format/ec_operations.test.cpp

Lines changed: 41 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -56,83 +56,47 @@ template <typename Builder_, InputConstancy Constancy> class EcOperationsTesting
5656
GrumpkinPoint result = input1 + input2;
5757
BB_ASSERT(result != GrumpkinPoint::one()); // Ensure that tampering works correctly
5858

59-
if constexpr (Constancy == InputConstancy::None) {
60-
std::vector<uint32_t> input1_indices = add_to_witness_and_track_indices(witness_values, input1);
61-
std::vector<uint32_t> input2_indices = add_to_witness_and_track_indices(witness_values, input2);
62-
std::vector<uint32_t> result_indices = add_to_witness_and_track_indices(witness_values, result);
63-
64-
uint32_t predicate_index = static_cast<uint32_t>(witness_values.size());
65-
witness_values.emplace_back(FF::one()); // predicate
66-
67-
ec_add_constraint = EcAdd{
68-
.input1_x = WitnessOrConstant<FF>::from_index(input1_indices[0]),
69-
.input1_y = WitnessOrConstant<FF>::from_index(input1_indices[1]),
70-
.input1_infinite = WitnessOrConstant<FF>::from_index(input1_indices[2]),
71-
.input2_x = WitnessOrConstant<FF>::from_index(input2_indices[0]),
72-
.input2_y = WitnessOrConstant<FF>::from_index(input2_indices[1]),
73-
.input2_infinite = WitnessOrConstant<FF>::from_index(input2_indices[2]),
74-
.predicate = WitnessOrConstant<FF>::from_index(predicate_index),
75-
.result_x = result_indices[0],
76-
.result_y = result_indices[1],
77-
.result_infinite = result_indices[2],
78-
};
79-
} else if constexpr (Constancy == InputConstancy::Input1) {
80-
std::vector<uint32_t> input2_indices = add_to_witness_and_track_indices(witness_values, input2);
81-
std::vector<uint32_t> result_indices = add_to_witness_and_track_indices(witness_values, result);
82-
83-
uint32_t predicate_index = static_cast<uint32_t>(witness_values.size());
84-
witness_values.emplace_back(FF::one()); // predicate
85-
86-
ec_add_constraint = EcAdd{
87-
.input1_x = WitnessOrConstant<FF>::from_constant(input1.x),
88-
.input1_y = WitnessOrConstant<FF>::from_constant(input1.y),
89-
.input1_infinite = WitnessOrConstant<FF>::from_constant(input1.is_point_at_infinity() ? FF(1) : FF(0)),
90-
.input2_x = WitnessOrConstant<FF>::from_index(input2_indices[0]),
91-
.input2_y = WitnessOrConstant<FF>::from_index(input2_indices[1]),
92-
.input2_infinite = WitnessOrConstant<FF>::from_index(input2_indices[2]),
93-
.predicate = WitnessOrConstant<FF>::from_index(predicate_index),
94-
.result_x = result_indices[0],
95-
.result_y = result_indices[1],
96-
.result_infinite = result_indices[2],
97-
};
98-
} else if constexpr (Constancy == InputConstancy::Input2) {
99-
std::vector<uint32_t> input1_indices = add_to_witness_and_track_indices(witness_values, input1);
100-
std::vector<uint32_t> result_indices = add_to_witness_and_track_indices(witness_values, result);
101-
102-
uint32_t predicate_index = static_cast<uint32_t>(witness_values.size());
103-
witness_values.emplace_back(FF::one()); // predicate
104-
105-
ec_add_constraint = EcAdd{
106-
.input1_x = WitnessOrConstant<FF>::from_index(input1_indices[0]),
107-
.input1_y = WitnessOrConstant<FF>::from_index(input1_indices[1]),
108-
.input1_infinite = WitnessOrConstant<FF>::from_index(input1_indices[2]),
109-
.input2_x = WitnessOrConstant<FF>::from_constant(input2.x),
110-
.input2_y = WitnessOrConstant<FF>::from_constant(input2.y),
111-
.input2_infinite = WitnessOrConstant<FF>::from_constant(input2.is_point_at_infinity() ? FF(1) : FF(0)),
112-
.predicate = WitnessOrConstant<FF>::from_index(predicate_index),
113-
.result_x = result_indices[0],
114-
.result_y = result_indices[1],
115-
.result_infinite = result_indices[2],
116-
};
117-
} else if constexpr (Constancy == InputConstancy::Both) {
118-
std::vector<uint32_t> result_indices = add_to_witness_and_track_indices(witness_values, result);
119-
120-
uint32_t predicate_index = static_cast<uint32_t>(witness_values.size());
121-
witness_values.emplace_back(FF::one()); // predicate
122-
123-
ec_add_constraint = EcAdd{
124-
.input1_x = WitnessOrConstant<FF>::from_constant(input1.x),
125-
.input1_y = WitnessOrConstant<FF>::from_constant(input1.y),
126-
.input1_infinite = WitnessOrConstant<FF>::from_constant(input1.is_point_at_infinity() ? FF(1) : FF(0)),
127-
.input2_x = WitnessOrConstant<FF>::from_constant(input2.x),
128-
.input2_y = WitnessOrConstant<FF>::from_constant(input2.y),
129-
.input2_infinite = WitnessOrConstant<FF>::from_constant(input2.is_point_at_infinity() ? FF(1) : FF(0)),
130-
.predicate = WitnessOrConstant<FF>::from_index(predicate_index),
131-
.result_x = result_indices[0],
132-
.result_y = result_indices[1],
133-
.result_infinite = result_indices[2],
134-
};
135-
}
59+
// Helper to add a point: either as witness or constant
60+
auto construct_point = [&](const GrumpkinPoint& point, bool as_constant) -> std::vector<WitnessOrConstant<FF>> {
61+
if (as_constant) {
62+
// Point is constant
63+
return { WitnessOrConstant<FF>::from_constant(point.x),
64+
WitnessOrConstant<FF>::from_constant(point.y),
65+
WitnessOrConstant<FF>::from_constant(point.is_point_at_infinity() ? FF(1) : FF(0)) };
66+
}
67+
// Point is witness
68+
std::vector<uint32_t> point_indices = add_to_witness_and_track_indices(witness_values, point);
69+
return { WitnessOrConstant<FF>::from_index(point_indices[0]),
70+
WitnessOrConstant<FF>::from_index(point_indices[1]),
71+
WitnessOrConstant<FF>::from_index(point_indices[2]) };
72+
};
73+
74+
// Determine which inputs are constants based on the Constancy template parameter
75+
constexpr bool input1_is_constant = (Constancy == InputConstancy::Input1 || Constancy == InputConstancy::Both);
76+
constexpr bool input2_is_constant = (Constancy == InputConstancy::Input2 || Constancy == InputConstancy::Both);
77+
78+
// Add inputs according to constancy template parameter
79+
auto input1_fields = construct_point(input1, input1_is_constant);
80+
auto input2_fields = construct_point(input2, input2_is_constant);
81+
82+
// Construct result and predicate as witnesses
83+
std::vector<uint32_t> result_indices = add_to_witness_and_track_indices(witness_values, result);
84+
uint32_t predicate_index = static_cast<uint32_t>(witness_values.size());
85+
witness_values.emplace_back(FF::one()); // predicate
86+
87+
// Build the constraint
88+
ec_add_constraint = EcAdd{
89+
.input1_x = input1_fields[0],
90+
.input1_y = input1_fields[1],
91+
.input1_infinite = input1_fields[2],
92+
.input2_x = input2_fields[0],
93+
.input2_y = input2_fields[1],
94+
.input2_infinite = input2_fields[2],
95+
.predicate = WitnessOrConstant<FF>::from_index(predicate_index),
96+
.result_x = result_indices[0],
97+
.result_y = result_indices[1],
98+
.result_infinite = result_indices[2],
99+
};
136100
}
137101

138102
static void override_witness(AcirConstraint& constraint,

barretenberg/cpp/src/barretenberg/dsl/acir_format/ecdsa_constraints.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,8 @@ void create_ecdsa_verify_constraints(typename Curve::Builder& builder,
108108
stdlib::ecdsa_verify_signature<Builder, Curve, Fq, Fr, G1>(hashed_message, public_key, { r, s });
109109

110110
// Step 5.
111-
if (!input.predicate.is_constant) {
112-
// Ensure the circuit is satisfied when predicate is witness false
113-
signature_result.assert_equal(bool_ct::conditional_assign(predicate, result, signature_result));
114-
} else {
115-
signature_result.assert_equal(result);
116-
}
111+
// Ensure the circuit is satisfied when predicate is witness false
112+
signature_result.assert_equal(bool_ct::conditional_assign(predicate, result, signature_result));
117113
}
118114

119115
/**

0 commit comments

Comments
 (0)