Skip to content

Commit c71b04c

Browse files
authored
feat: merge-train/barretenberg (#22821)
BEGIN_COMMIT_OVERRIDE chore: poly audit response (#22782) fix: BN254 G2 msgpack serialization in barretenberg-rs (#22360) chore: rm dummy values from mega wires (#22453) END_COMMIT_OVERRIDE
2 parents 2c96ec4 + 6fd6515 commit c71b04c

59 files changed

Lines changed: 718 additions & 762 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.

barretenberg/cpp/scripts/test_chonk_standalone_vks_havent_changed.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ script_path="$root/barretenberg/cpp/scripts/test_chonk_standalone_vks_havent_cha
2121
# - Generate a hash for versioning: sha256sum bb-chonk-inputs.tar.gz
2222
# - 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
2323
# Note: In case of the "Test suite failed to run ... Unexpected token 'with' " error, need to run: docker pull aztecprotocol/build:3.0
24-
pinned_short_hash="4e8b472a"
24+
pinned_short_hash="ae9c2d06"
2525
pinned_chonk_inputs_url="https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/protocol/bb-chonk-inputs-${pinned_short_hash}.tar.gz"
2626

2727
function update_pinned_hash_in_script {

barretenberg/cpp/src/barretenberg/bbapi/bbapi_chonk.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,7 +312,7 @@ ChonkStats::Response ChonkStats::execute([[maybe_unused]] BBApiRequest& request)
312312

313313
// Create and finalize circuit
314314
auto builder = acir_format::create_circuit<MegaCircuitBuilder>(program, metadata);
315-
builder.finalize_circuit(/*ensure_nonzero=*/true);
315+
builder.finalize_circuit();
316316

317317
// Set response values
318318
response.acir_opcodes = program.constraints.num_acir_opcodes;

barretenberg/cpp/src/barretenberg/bbapi/bbapi_ultra_honk.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ CircuitStats::Response _stats(std::vector<uint8_t>&& bytecode, bool include_gate
176176

177177
acir_format::AcirProgram program{ std::move(constraint_system), {} };
178178
auto builder = acir_format::create_circuit<Circuit>(program, metadata);
179-
builder.finalize_circuit(/*ensure_nonzero=*/true);
179+
builder.finalize_circuit();
180180

181181
response.num_gates = static_cast<uint32_t>(builder.get_finalized_total_circuit_size());
182182
response.num_gates_dyadic = static_cast<uint32_t>(builder.get_circuit_subgroup_size(response.num_gates));

barretenberg/cpp/src/barretenberg/benchmark/ultra_bench/mock_circuits.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ void generate_basic_arithmetic_circuit_with_target_gates(Builder& builder, size_
2626
stdlib::field_t c(&builder);
2727
// Ensure the circuit is filled but finalisation doesn't make the circuit size go to the next power of two
2828
const size_t GATE_COUNT_BUFFER = 1000; // Since we're using an estimate, let's add an error term in case.
29-
size_t current_gates = builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false);
29+
size_t current_gates = builder.get_num_finalized_gates_inefficient();
3030

3131
if (target_gate_count <= current_gates + GATE_COUNT_BUFFER) {
3232
throw_or_abort("Target gate count is too low.");
@@ -41,7 +41,7 @@ void generate_basic_arithmetic_circuit_with_target_gates(Builder& builder, size_
4141
b = c * c;
4242
}
4343

44-
size_t est_gate_count = builder.get_num_finalized_gates_inefficient(/*ensure_nonzero=*/false);
44+
size_t est_gate_count = builder.get_num_finalized_gates_inefficient();
4545
BB_ASSERT_LTE(est_gate_count,
4646
target_gate_count - GATE_COUNT_BUFFER,
4747
"Check that the finalized gate count won't exceed the desired gate count.");

barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_bigfield.test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ TEST(boomerang_bigfield, test_graph_description_mult_madd_function)
387387
}
388388
fq_ct f = fq_ct::mult_madd(mul_left, mul_right, to_add);
389389
fix_bigfield_element(f);
390-
builder.finalize_circuit(false);
390+
builder.finalize_circuit();
391391
auto graph = StaticAnalyzer(builder);
392392
auto variables_in_one_gate = graph.get_variables_in_one_gate();
393393
EXPECT_EQ(variables_in_one_gate.size(), 0);
@@ -412,7 +412,7 @@ TEST(boomerang_bigfield, test_graph_description_constructor_high_low_bits)
412412
fq_ct::create_from_u512_as_witness(&builder, uint512_t(uint256_t(mul_right_value)));
413413
fq_ct product = mul_left * mul_right;
414414
fix_bigfield_element(product);
415-
builder.finalize_circuit(false);
415+
builder.finalize_circuit();
416416
auto graph = StaticAnalyzer(builder);
417417
auto connected_components = graph.find_connected_components();
418418
auto variables_in_one_gate = graph.get_variables_in_one_gate();

barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ipa_recursive.test.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class BoomerangIPARecursiveTests : public CommitmentTest<NativeCurve> {
9999

100100
RecursiveIPA::reduce_verify(stdlib_claim, stdlib_transcript);
101101
stdlib::recursion::honk::DefaultIO<Builder>::add_default(builder);
102-
builder.finalize_circuit(/*ensure_nonzero=*/true);
102+
builder.finalize_circuit();
103103
return builder;
104104
}
105105
// flag to determine what type of polynomial to generate
@@ -172,7 +172,7 @@ class BoomerangIPARecursiveTests : public CommitmentTest<NativeCurve> {
172172
output_claim.set_public();
173173
output_claim.commitment.fix_witness();
174174
builder.ipa_proof = ipa_proof;
175-
builder.finalize_circuit(/*ensure_nonzero=*/false);
175+
builder.finalize_circuit();
176176
EXPECT_TRUE(CircuitChecker::check(builder));
177177

178178
const OpeningPair<NativeCurve> opening_pair{ bb::fq(output_claim.opening_pair.challenge.get_value()),
@@ -206,7 +206,7 @@ TEST_F(BoomerangIPARecursiveTests, FullRecursiveVerifierMediumRandom)
206206
VerifierCommitmentKey<Curve> stdlib_pcs_vkey(&builder, poly_length, this->vk());
207207
auto result = RecursiveIPA::full_verify_recursive(stdlib_pcs_vkey, stdlib_claim, stdlib_transcript);
208208
EXPECT_TRUE(result);
209-
builder.finalize_circuit(/*ensure_nonzero=*/true);
209+
builder.finalize_circuit();
210210

211211
auto tool = StaticAnalyzer(builder);
212212
auto tool_results = tool.analyze_circuit();
@@ -261,7 +261,7 @@ TEST_F(BoomerangIPARecursiveTests, AccumulationAndFullRecursiveVerifierMediumRan
261261
auto [output_claim, ipa_proof] = RecursiveIPA::accumulate(this->ck(), transcript_1, claim_1, transcript_2, claim_2);
262262
output_claim.set_public();
263263
builder.ipa_proof = ipa_proof;
264-
builder.finalize_circuit(/*ensure_nonzero=*/false);
264+
builder.finalize_circuit();
265265

266266
Builder root_rollup;
267267
// Fully recursively verify this proof to check it.
@@ -274,7 +274,7 @@ TEST_F(BoomerangIPARecursiveTests, AccumulationAndFullRecursiveVerifierMediumRan
274274
Curve::ScalarField::create_from_u512_as_witness(&root_rollup, output_claim.opening_pair.evaluation.get_value());
275275
ipa_claim.commitment = Curve::AffineElement::from_witness(&root_rollup, output_claim.commitment.get_value());
276276
auto result = RecursiveIPA::full_verify_recursive(stdlib_pcs_vkey, ipa_claim, stdlib_verifier_transcript);
277-
root_rollup.finalize_circuit(/*ensure_nonzero=*/true);
277+
root_rollup.finalize_circuit();
278278
EXPECT_TRUE(result);
279279

280280
auto tool = StaticAnalyzer(root_rollup);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@ HEAVY_TEST(ChonkKernelCapacity, MaxCapacityPassing)
405405
{
406406
bb::srs::init_file_crs_factory(bb::srs::bb_crs_path());
407407

408-
const size_t NUM_APP_CIRCUITS = 18;
408+
const size_t NUM_APP_CIRCUITS = 21;
409409
auto [proof, vk] = ChonkTests::accumulate_and_prove_ivc(NUM_APP_CIRCUITS);
410410

411411
bool verified = ChonkTests::verify_chonk(proof, vk);

barretenberg/cpp/src/barretenberg/circuit_checker/mega_circuit_builder.test.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ TEST(MegaCircuitBuilder, EccOpBlockIsFirstInTrace)
228228
auto c = builder.add_variable(builder.get_variable(a) + builder.get_variable(b));
229229
builder.create_add_gate({ a, b, c, 1, 1, -1, 0 });
230230

231-
builder.finalize_circuit(true);
231+
builder.finalize_circuit();
232232
builder.blocks.compute_offsets(MegaFlavor::TRACE_OFFSET);
233233

234234
// Verify ecc_op block starts at offset TRACE_OFFSET + NUM_ZERO_ROWS = NUM_ZERO_ROWS for non-ZK Mega.
@@ -247,23 +247,35 @@ TEST(MegaCircuitBuilder, EccOpBlockIsFirstInTrace)
247247

248248
/**
249249
* @brief Verify that an empty circuit can be finalized and passes circuit checks
250-
* @details Finalization should add required gates to ensure all polynomials are non-zero
251-
* @note This is a "completeness" test; unlikely to be a use-case.
252250
*/
253251
TEST(MegaCircuitBuilder, EmptyCircuitFinalization)
254252
{
255253
auto builder = MegaCircuitBuilder();
256254

257255
// Completely empty circuit - no gates added
258256
EXPECT_EQ(builder.blocks.ecc_op.size(), 0);
257+
EXPECT_FALSE(builder.circuit_finalized);
259258

260-
builder.finalize_circuit(true);
259+
builder.finalize_circuit();
261260

262-
// After finalization, ecc_op block remains empty (no dummy ops needed)
261+
EXPECT_TRUE(builder.circuit_finalized);
262+
263+
// After finalization: only zero_idx arithmetic gates and the corresponding public inputs remain.
264+
// No dummy ecc ops, databus entries, or other gate types are added.
265+
EXPECT_EQ(builder.blocks.arithmetic.size(), 4); // zero_idx setup
266+
EXPECT_EQ(builder.blocks.pub_inputs.size(), 0);
263267
EXPECT_EQ(builder.blocks.ecc_op.size(), 0);
264-
EXPECT_GT(builder.get_calldata().size(), 0) << "Finalization should add databus entries";
265-
EXPECT_GT(builder.get_secondary_calldata().size(), 0);
266-
EXPECT_GT(builder.get_return_data().size(), 0);
268+
EXPECT_EQ(builder.blocks.busread.size(), 0);
269+
EXPECT_EQ(builder.blocks.lookup.size(), 0);
270+
EXPECT_EQ(builder.blocks.delta_range.size(), 0);
271+
EXPECT_EQ(builder.blocks.elliptic.size(), 0);
272+
EXPECT_EQ(builder.blocks.memory.size(), 0);
273+
EXPECT_EQ(builder.blocks.nnf.size(), 0);
274+
EXPECT_EQ(builder.blocks.poseidon2_external.size(), 0);
275+
EXPECT_EQ(builder.blocks.poseidon2_internal.size(), 0);
276+
EXPECT_EQ(builder.get_calldata().size(), 0);
277+
EXPECT_EQ(builder.get_secondary_calldata().size(), 0);
278+
EXPECT_EQ(builder.get_return_data().size(), 0);
267279

268280
EXPECT_TRUE(CircuitChecker::check(builder));
269281
}

barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_builder_nonnative.test.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class UltraCircuitBuilderNonNative : public ::testing::Test {
2424

2525
// Number of NNF gates produced by a single partial multiplication
2626
static constexpr size_t NNF_GATES_PER_PARTIAL_MUL = 4;
27-
// Number of padding gates added to NNF block by finalize_circuit(ensure_nonzero=true)
28-
static constexpr size_t NNF_ENSURE_NONZERO_PADDING = 2;
27+
// Number of padding gates added to NNF block by finalize_circuit()
28+
static constexpr size_t NNF_ENSURE_NONZERO_PADDING = 0;
2929

3030
// Generate 4 random field elements (one per limb)
3131
static std::array<fr, 4> random_limbs()
@@ -548,7 +548,7 @@ TEST_F(UltraCircuitBuilderNonNative, PartialMultiplicationDeduplication)
548548
EXPECT_TRUE(CircuitChecker::check(builder));
549549

550550
// Finalize to check deduplication results
551-
builder.finalize_circuit(/*ensure_nonzero=*/true);
551+
builder.finalize_circuit();
552552

553553
// After finalization, cache should be deduplicated to 1 entry
554554
EXPECT_EQ(builder.cached_partial_non_native_field_multiplications.size(), 1U);
@@ -597,7 +597,7 @@ TEST_F(UltraCircuitBuilderNonNative, PartialMultiplicationDedupeAssertEqual)
597597
EXPECT_TRUE(CircuitChecker::check(builder));
598598

599599
// Finalize to check deduplication
600-
builder.finalize_circuit(/*ensure_nonzero=*/true);
600+
builder.finalize_circuit();
601601

602602
// After finalization, should be deduplicated to 1 entry
603603
EXPECT_EQ(builder.cached_partial_non_native_field_multiplications.size(), 1U);
@@ -630,7 +630,7 @@ TEST_F(UltraCircuitBuilderNonNative, PartialMultiplicationMultipleDistinct)
630630
EXPECT_TRUE(CircuitChecker::check(builder));
631631

632632
// Finalize to check gate counts
633-
builder.finalize_circuit(/*ensure_nonzero=*/true);
633+
builder.finalize_circuit();
634634

635635
// After finalization, all distinct entries should remain (no deduplication)
636636
EXPECT_EQ(builder.cached_partial_non_native_field_multiplications.size(), num_multiplications);
@@ -666,7 +666,7 @@ TEST_F(UltraCircuitBuilderNonNative, ProcessNonNativeFieldMultiplicationsEmptyCa
666666
EXPECT_TRUE(CircuitChecker::check(builder));
667667

668668
// Finalize to inspect NNF block
669-
builder.finalize_circuit(/*ensure_nonzero=*/true);
669+
builder.finalize_circuit();
670670

671671
// Cache should still be empty
672672
EXPECT_EQ(builder.cached_partial_non_native_field_multiplications.size(), 0U);

barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_checker.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ UltraCircuitBuilder_<UltraExecutionTraceBlocks> UltraCircuitChecker::prepare_cir
2323
// Create a copy of the input circuit
2424
UltraCircuitBuilder_<UltraExecutionTraceBlocks> builder{ builder_in };
2525
if (!builder.circuit_finalized) { // avoid warnings about finalizing an already finalized circuit
26-
builder.finalize_circuit(/*ensure_nonzero=*/true); // Test the ensure_nonzero gates as well
26+
builder.finalize_circuit();
2727
}
2828

2929
return builder;
@@ -40,7 +40,7 @@ MegaCircuitBuilder_<bb::fr> UltraCircuitChecker::prepare_circuit<MegaCircuitBuil
4040
builder.op_queue = std::make_shared<ECCOpQueue>(*builder.op_queue);
4141

4242
if (!builder.circuit_finalized) { // avoid warnings about finalizing an already finalized circuit
43-
builder.finalize_circuit(/*ensure_nonzero=*/true); // Test the ensure_nonzero gates as well
43+
builder.finalize_circuit();
4444
}
4545

4646
return builder;

0 commit comments

Comments
 (0)