Skip to content

Commit 1c0a52a

Browse files
authored
feat: merge-train/barretenberg (#17987)
BEGIN_COMMIT_OVERRIDE chore: Simplify default PairingPoints construction and update AcirProgram metadata (#17912) refactor: Remove unused domain_start template parameter from Univariate fix(ci): set AVM_TRANSPILER="" in ci-barretenberg (#17991) feat!: Aggregate multiple pairing points at once (#17664) feat!: Databus consistency checks in CIVC verification (#17559) fix: restore BB_WASM_PATH handling in yarn-project (#17990) fix: Update Mega proof length (#17995) fix(cmake): backwards headers (#17993) chore: Disallow dangerous usage of add_variable and from_witness functions with non-field types (updated) (#17994) fix: Fix merge train failure (#18001) END_COMMIT_OVERRIDE
2 parents db8500e + 700328c commit 1c0a52a

File tree

99 files changed

+697
-619
lines changed

Some content is hidden

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

99 files changed

+697
-619
lines changed

barretenberg/cpp/bootstrap.sh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ function inject_version {
6161
function build_preset() {
6262
local preset=$1
6363
shift
64-
cmake --fresh --preset "$preset"
64+
local avm_transpiler_flag=""
65+
if [ "${AVM_TRANSPILER:-1}" -eq 0 ]; then
66+
avm_transpiler_flag="-DAVM_TRANSPILER_LIB="
67+
fi
68+
cmake --fresh --preset "$preset" $avm_transpiler_flag
6569
cmake --build --preset "$preset" "$@"
6670
}
6771

barretenberg/cpp/scripts/test_civc_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-civc-inputs.tar.gz
1414
# - Upload the compressed results: aws s3 cp bb-civc-inputs.tar.gz s3://aztec-ci-artifacts/protocol/bb-civc-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="6c1efddb"
16+
pinned_short_hash="bd98634a"
1717
pinned_civc_inputs_url="https://aztec-ci-artifacts.s3.us-east-2.amazonaws.com/protocol/bb-civc-inputs-${pinned_short_hash}.tar.gz"
1818

1919
function compress_and_upload {

barretenberg/cpp/src/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ if(WASM)
4949
add_link_options(-Wl,--export-memory,--import-memory,--stack-first,-z,stack-size=1048576,--max-memory=4294967296)
5050
endif()
5151

52-
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${MSGPACK_INCLUDE} ${TRACY_INCLUDE} ${LMDB_INCLUDE} ${LIBDEFLATE_INCLUDE} ${HTTPLIB_INCLUDE} ${NLOHMANN_JSON_INCLUDE})
52+
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${MSGPACK_INCLUDE} ${TRACY_INCLUDE} ${LMDB_INCLUDE} ${LIBDEFLATE_INCLUDE} ${HTTPLIB_INCLUDE} ${BACKWARD_INCLUDE} ${NLOHMANN_JSON_INCLUDE})
5353

5454
# Add avm-transpiler include path when library is provided
5555
if(AVM_TRANSPILER_LIB)

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

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,9 @@ namespace bb::bbapi {
3434

3535
template <typename Flavor> acir_format::ProgramMetadata _create_program_metadata()
3636
{
37-
uint32_t honk_recursion = 0;
37+
bool constexpr has_ipa_claim = IsAnyOf<Flavor, UltraRollupFlavor>;
3838

39-
if constexpr (IsAnyOf<Flavor, UltraFlavor, UltraZKFlavor, UltraKeccakFlavor, UltraKeccakZKFlavor>) {
40-
honk_recursion = 1;
41-
} else if constexpr (IsAnyOf<Flavor, UltraRollupFlavor>) {
42-
honk_recursion = 2;
43-
}
44-
#ifdef STARKNET_GARAGA_FLAVORS
45-
if constexpr (IsAnyOf<Flavor, UltraStarknetFlavor, UltraStarknetZKFlavor>) {
46-
honk_recursion = 1;
47-
}
48-
#endif
49-
50-
return acir_format::ProgramMetadata{ .honk_recursion = honk_recursion };
39+
return acir_format::ProgramMetadata{ .has_ipa_claim = has_ipa_claim };
5140
}
5241

5342
template <typename Flavor, typename Circuit = typename Flavor::CircuitBuilder>

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ namespace bb::mock_circuits {
1818
*/
1919
template <typename Builder> void generate_basic_arithmetic_circuit(Builder& builder, size_t log2_num_gates)
2020
{
21-
stdlib::recursion::PairingPoints<Builder>::add_default_to_public_inputs(builder);
21+
stdlib::recursion::honk::DefaultIO<Builder>::add_default(builder);
2222

2323
stdlib::field_t a(stdlib::witness_t(&builder, fr::random_element()));
2424
stdlib::field_t b(stdlib::witness_t(&builder, fr::random_element()));

barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_dynamic_array.test.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ TEST(boomerang_stdlib_dynamic_array, graph_description_dynamic_array_method_resi
3737

3838
field_ct next_size = field_ct(witness_ct(&builder, (uint256_t)(max_size - 1)));
3939
for (size_t i = 0; i < max_size; ++i) {
40-
array.push(field_ct::from_witness(&builder, i));
40+
array.push(field_ct::from_witness(&builder, typename field_ct::native(i)));
4141
}
4242

4343
array.resize(next_size, 7);
@@ -67,7 +67,7 @@ TEST(boomerang_stdlib_dynamic_array, graph_description_dynamic_array_consistency
6767
DynamicArray_ct array(&builder, max_size);
6868

6969
for (size_t i = 0; i < max_size; ++i) {
70-
array.push(field_ct::from_witness(&builder, i));
70+
array.push(field_ct::from_witness(&builder, typename field_ct::native(i)));
7171
}
7272

7373
for (size_t i = 0; i < max_size; ++i) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
#include "barretenberg/commitment_schemes/shplonk/shplemini.hpp"
66
#include "barretenberg/stdlib/eccvm_verifier/verifier_commitment_key.hpp"
77
#include "barretenberg/stdlib/primitives/curves/grumpkin.hpp"
8-
#include "barretenberg/stdlib/primitives/pairing_points.hpp"
98
#include "barretenberg/stdlib/proof/proof.hpp"
9+
#include "barretenberg/stdlib/special_public_inputs/special_public_inputs.hpp"
1010
#include "barretenberg/transcript/transcript.hpp"
1111
#include "barretenberg/ultra_honk/prover_instance.hpp"
1212

@@ -100,7 +100,7 @@ class BoomerangIPARecursiveTests : public CommitmentTest<NativeCurve> {
100100
auto [stdlib_transcript, stdlib_claim] = create_ipa_claim<log_poly_length>(builder, poly, x);
101101

102102
RecursiveIPA::reduce_verify(stdlib_claim, stdlib_transcript);
103-
stdlib::recursion::PairingPoints<Builder>::add_default_to_public_inputs(builder);
103+
stdlib::recursion::honk::DefaultIO<Builder>::add_default(builder);
104104
builder.finalize_circuit(/*ensure_nonzero=*/true);
105105
return builder;
106106
}

barretenberg/cpp/src/barretenberg/boomerang_value_detection/graph_description_ultra_recursive_verifier.test.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,10 @@ template <typename RecursiveFlavor> class BoomerangRecursiveVerifierTest : publi
7878

7979
builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, fr(1), fr(1), fr(1), fr(-1), fr(0) });
8080
}
81-
PairingPoints<InnerBuilder>::add_default_to_public_inputs(builder);
82-
8381
if constexpr (HasIPAAccumulator<RecursiveFlavor>) {
84-
auto [stdlib_opening_claim, ipa_proof] =
85-
IPA<grumpkin<InnerBuilder>>::create_random_valid_ipa_claim_and_proof(builder);
86-
stdlib_opening_claim.set_public();
87-
builder.ipa_proof = ipa_proof;
82+
RollupIO::add_default(builder);
83+
} else {
84+
DefaultIO<InnerBuilder>::add_default(builder);
8885
}
8986
return builder;
9087
};

barretenberg/cpp/src/barretenberg/circuit_checker/ultra_circuit_builder.test.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -811,10 +811,10 @@ TEST(UltraCircuitBuilder, Rom)
811811
builder.set_ROM_element(rom_id, i, rom_values[i]);
812812
}
813813

814-
uint32_t a_idx = builder.read_ROM_array(rom_id, builder.add_variable(5));
814+
uint32_t a_idx = builder.read_ROM_array(rom_id, builder.add_variable(fr(5)));
815815
EXPECT_EQ(a_idx != rom_values[5], true);
816-
uint32_t b_idx = builder.read_ROM_array(rom_id, builder.add_variable(4));
817-
uint32_t c_idx = builder.read_ROM_array(rom_id, builder.add_variable(1));
816+
uint32_t b_idx = builder.read_ROM_array(rom_id, builder.add_variable(fr(4)));
817+
uint32_t c_idx = builder.read_ROM_array(rom_id, builder.add_variable(fr(1)));
818818

819819
const auto d_value = builder.get_variable(a_idx) + builder.get_variable(b_idx) + builder.get_variable(c_idx);
820820
uint32_t d_idx = builder.add_variable(d_value);
@@ -850,7 +850,7 @@ TEST(UltraCircuitBuilder, RamSimple)
850850
builder.init_RAM_element(ram_id, /*index_value=*/0, ram_value_idx);
851851

852852
// Read from the RAM array we just created (at the 0th index)
853-
uint32_t read_idx = builder.add_variable(0);
853+
uint32_t read_idx = builder.add_variable(fr(0));
854854
uint32_t a_idx = builder.read_RAM_array(ram_id, read_idx);
855855

856856
// Use the result in a simple arithmetic gate
@@ -886,14 +886,14 @@ TEST(UltraCircuitBuilder, Ram)
886886
builder.init_RAM_element(ram_id, i, ram_values[i]);
887887
}
888888

889-
uint32_t a_idx = builder.read_RAM_array(ram_id, builder.add_variable(5));
889+
uint32_t a_idx = builder.read_RAM_array(ram_id, builder.add_variable(fr(5)));
890890
EXPECT_EQ(a_idx != ram_values[5], true);
891891

892-
uint32_t b_idx = builder.read_RAM_array(ram_id, builder.add_variable(4));
893-
uint32_t c_idx = builder.read_RAM_array(ram_id, builder.add_variable(1));
892+
uint32_t b_idx = builder.read_RAM_array(ram_id, builder.add_variable(fr(4)));
893+
uint32_t c_idx = builder.read_RAM_array(ram_id, builder.add_variable(fr(1)));
894894

895-
builder.write_RAM_array(ram_id, builder.add_variable(4), builder.add_variable(500));
896-
uint32_t d_idx = builder.read_RAM_array(ram_id, builder.add_variable(4));
895+
builder.write_RAM_array(ram_id, builder.add_variable(fr(4)), builder.add_variable(fr(500)));
896+
uint32_t d_idx = builder.read_RAM_array(ram_id, builder.add_variable(fr(4)));
897897

898898
EXPECT_EQ(builder.get_variable(d_idx), 500);
899899

@@ -943,10 +943,10 @@ TEST(UltraCircuitBuilder, RangeChecksOnDuplicates)
943943
{
944944
UltraCircuitBuilder builder = UltraCircuitBuilder();
945945

946-
uint32_t a = builder.add_variable(100);
947-
uint32_t b = builder.add_variable(100);
948-
uint32_t c = builder.add_variable(100);
949-
uint32_t d = builder.add_variable(100);
946+
uint32_t a = builder.add_variable(fr(100));
947+
uint32_t b = builder.add_variable(fr(100));
948+
uint32_t c = builder.add_variable(fr(100));
949+
uint32_t d = builder.add_variable(fr(100));
950950

951951
builder.assert_equal(a, b);
952952
builder.assert_equal(a, c);
@@ -979,8 +979,8 @@ TEST(UltraCircuitBuilder, CheckCircuitShowcase)
979979
UltraCircuitBuilder builder = UltraCircuitBuilder();
980980
// check_circuit allows us to check correctness on the go
981981

982-
uint32_t a = builder.add_variable(0xdead);
983-
uint32_t b = builder.add_variable(0xbeef);
982+
uint32_t a = builder.add_variable(fr(0xdead));
983+
uint32_t b = builder.add_variable(fr(0xbeef));
984984
// Let's create 2 gates that will bind these 2 variables to be one these two values
985985
builder.create_poly_gate(
986986
{ a, a, builder.zero_idx(), fr(1), -fr(0xdead) - fr(0xbeef), 0, 0, fr(0xdead) * fr(0xbeef) });
@@ -1003,7 +1003,7 @@ TEST(UltraCircuitBuilder, CheckCircuitShowcase)
10031003
EXPECT_EQ(CircuitChecker::check(builder), false);
10041004

10051005
// But if we force them both back to be 0xbeef...
1006-
uint32_t c = builder.add_variable(0xbeef);
1006+
uint32_t c = builder.add_variable(fr(0xbeef));
10071007
builder.assert_equal(c, b);
10081008

10091009
// The circuit will magically pass again

barretenberg/cpp/src/barretenberg/client_ivc/sumcheck_client_ivc.cpp

Lines changed: 32 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ void SumcheckClientIVC::instantiate_stdlib_verification_queue(
9090
* tables as read from the proof by the Merge verifier
9191
*/
9292
std::tuple<std::optional<SumcheckClientIVC::RecursiveVerifierAccumulator>,
93-
SumcheckClientIVC::PairingPoints,
93+
std::vector<SumcheckClientIVC::PairingPoints>,
9494
SumcheckClientIVC::TableCommitments>
9595
SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks(
9696
ClientCircuit& circuit,
@@ -101,8 +101,8 @@ SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks
101101
{
102102
using MergeCommitments = Goblin::MergeRecursiveVerifier::InputCommitments;
103103

104-
// The pairing points produced by the verification of the decider proof
105-
PairingPoints decider_pairing_points;
104+
// PairingPoints to be returned for aggregation
105+
std::vector<PairingPoints> pairing_points;
106106

107107
// Input commitments to be passed to the merge recursive verification
108108
MergeCommitments merge_commitments{ .T_prev_commitments = T_prev_commitments };
@@ -111,8 +111,6 @@ SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks
111111

112112
std::optional<RecursiveVerifierAccumulator> output_verifier_accumulator;
113113
std::optional<StdlibFF> prev_accum_hash = std::nullopt;
114-
// The decider proof exists if the tail kernel has been accumulated
115-
bool is_hiding_kernel = !decider_proof.empty();
116114

117115
// Update previous accumulator hash so that we can check it against the one extracted from the public inputs
118116
if (verifier_inputs.is_kernel && verifier_inputs.type != QUEUE_TYPE::OINK) {
@@ -152,7 +150,7 @@ SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks
152150

153151
RecursiveDeciderVerifier decider_verifier(accumulation_recursive_transcript);
154152
StdlibProof stdlib_decider_proof(circuit, decider_proof);
155-
decider_pairing_points = decider_verifier.verify_proof(final_verifier_accumulator, stdlib_decider_proof);
153+
pairing_points.emplace_back(decider_verifier.verify_proof(final_verifier_accumulator, stdlib_decider_proof));
156154

157155
BB_ASSERT_EQ(output_verifier_accumulator.has_value(), false);
158156
break;
@@ -166,13 +164,12 @@ SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks
166164
WitnessCommitments witness_commitments = std::move(verifier_instance->witness_commitments);
167165
std::vector<StdlibFF> public_inputs = std::move(verifier_instance->public_inputs);
168166

169-
PairingPoints nested_pairing_points; // to be extracted from public inputs of app or kernel proof just verified
170-
171167
if (verifier_inputs.is_kernel) {
172168
// Reconstruct the input from the previous kernel from its public inputs
173169
KernelIO kernel_input; // pairing points, databus return data commitments
174170
kernel_input.reconstruct_from_public(public_inputs);
175-
nested_pairing_points = kernel_input.pairing_inputs;
171+
// Add pairing points for aggregation
172+
pairing_points.emplace_back(kernel_input.pairing_inputs);
176173
// Perform databus consistency checks
177174
kernel_input.kernel_return_data.incomplete_assert_equal(witness_commitments.calldata);
178175
kernel_input.app_return_data.incomplete_assert_equal(witness_commitments.secondary_calldata);
@@ -190,15 +187,14 @@ SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks
190187
BB_ASSERT(prev_accum_hash.has_value());
191188
kernel_input.output_pg_accum_hash.assert_equal(*prev_accum_hash);
192189

193-
if (!is_hiding_kernel) {
194-
// The hiding kernel has no return data; it uses the traditional public-inputs mechanism
195-
bus_depot.set_kernel_return_data_commitment(witness_commitments.return_data);
196-
}
190+
// Set the kernel return data commitment to be propagated via the public inputs
191+
bus_depot.set_kernel_return_data_commitment(witness_commitments.return_data);
197192
} else {
198193
// Reconstruct the input from the previous app from its public inputs
199194
AppIO app_input; // pairing points
200195
app_input.reconstruct_from_public(public_inputs);
201-
nested_pairing_points = app_input.pairing_inputs;
196+
// Add pairing points for aggregation
197+
pairing_points.emplace_back(app_input.pairing_inputs);
202198

203199
// Set the app return data commitment to be propagated via the public inputs
204200
bus_depot.set_app_return_data_commitment(witness_commitments.return_data);
@@ -208,16 +204,9 @@ SumcheckClientIVC::perform_recursive_verification_and_databus_consistency_checks
208204
merge_commitments.t_commitments = witness_commitments.get_ecc_op_wires().get_copy();
209205

210206
// Recursively verify the corresponding merge proof
211-
auto [pairing_points, merged_table_commitments] =
207+
auto [merge_pairing_points, merged_table_commitments] =
212208
goblin.recursively_verify_merge(circuit, merge_commitments, accumulation_recursive_transcript);
213-
214-
pairing_points.aggregate(nested_pairing_points);
215-
if (is_hiding_kernel) {
216-
pairing_points.aggregate(decider_pairing_points);
217-
// Add randomness at the end of the hiding kernel (whose ecc ops fall right at the end of the op queue table) to
218-
// ensure the CIVC proof doesn't leak information about the actual content of the op queue
219-
hide_op_queue_content_in_hiding(circuit);
220-
}
209+
pairing_points.emplace_back(merge_pairing_points);
221210

222211
return { output_verifier_accumulator, pairing_points, merged_table_commitments };
223212
}
@@ -268,7 +257,7 @@ void SumcheckClientIVC::complete_kernel_circuit_logic(ClientCircuit& circuit)
268257
circuit.queue_ecc_eq();
269258

270259
// Perform Oink/PG and Merge recursive verification + databus consistency checks for each entry in the queue
271-
PairingPoints points_accumulator;
260+
std::vector<PairingPoints> points_accumulator;
272261
std::optional<RecursiveVerifierAccumulator> current_stdlib_verifier_accumulator;
273262
if (!is_init_kernel) {
274263
current_stdlib_verifier_accumulator = RecursiveVerifierAccumulator::stdlib_from_native<RecursiveFlavor::Curve>(
@@ -283,26 +272,36 @@ void SumcheckClientIVC::complete_kernel_circuit_logic(ClientCircuit& circuit)
283272
current_stdlib_verifier_accumulator,
284273
T_prev_commitments,
285274
accumulation_recursive_transcript);
286-
points_accumulator.aggregate(pairing_points);
275+
points_accumulator.insert(points_accumulator.end(), pairing_points.begin(), pairing_points.end());
287276
// Update commitment to the status of the op_queue
288277
T_prev_commitments = merged_table_commitments;
289278
// Update the output verifier accumulator
290279
current_stdlib_verifier_accumulator = output_stdlib_verifier_accumulator;
291280

292281
stdlib_verification_queue.pop_front();
293282
}
283+
284+
// PairingPoint aggregation
285+
PairingPoints pairing_points_aggregator = PairingPoints::aggregate_multiple(points_accumulator);
286+
294287
// Set the kernel output data to be propagated via the public inputs
295288
if (is_hiding_kernel) {
296289
BB_ASSERT_EQ(current_stdlib_verifier_accumulator.has_value(), false);
297-
HidingKernelIO hiding_output{ points_accumulator, T_prev_commitments };
290+
// Add randomness at the end of the hiding kernel (whose ecc ops fall right at the end of the op queue table) to
291+
// ensure the CIVC proof doesn't leak information about the actual content of the op queue
292+
hide_op_queue_content_in_hiding(circuit);
293+
294+
HidingKernelIO hiding_output{ pairing_points_aggregator,
295+
bus_depot.get_kernel_return_data_commitment(circuit),
296+
T_prev_commitments };
298297
hiding_output.set_public();
299298
} else {
300299
BB_ASSERT_NEQ(current_stdlib_verifier_accumulator.has_value(), false);
301300
// Extract native verifier accumulator from the stdlib accum for use on the next round
302301
recursive_verifier_native_accum = current_stdlib_verifier_accumulator->get_value<VerifierAccumulator>();
303302

304303
KernelIO kernel_output;
305-
kernel_output.pairing_inputs = points_accumulator;
304+
kernel_output.pairing_inputs = pairing_points_aggregator;
306305
kernel_output.kernel_return_data = bus_depot.get_kernel_return_data_commitment(circuit);
307306
kernel_output.app_return_data = bus_depot.get_app_return_data_commitment(circuit);
308307
kernel_output.ecc_op_tables = T_prev_commitments;
@@ -569,8 +568,12 @@ bool SumcheckClientIVC::verify(const Proof& proof, const VerificationKey& vk)
569568
std::shared_ptr<Goblin::Transcript> civc_verifier_transcript = std::make_shared<Goblin::Transcript>();
570569
// Verify the hiding circuit proof
571570
MegaZKVerifier verifier{ vk.mega, /*ipa_verification_key=*/{}, civc_verifier_transcript };
572-
auto [mega_verified, T_prev_commitments] = verifier.template verify_proof<bb::HidingKernelIO>(proof.mega_proof);
571+
auto [mega_verified, kernel_return_data, T_prev_commitments] =
572+
verifier.template verify_proof<bb::HidingKernelIO>(proof.mega_proof);
573573
vinfo("Mega verified: ", mega_verified);
574+
// Perform databus consistency checks
575+
bool databus_consistency_verified = kernel_return_data == verifier.verifier_instance->witness_commitments.calldata;
576+
vinfo("Databus consistency verified: ", databus_consistency_verified);
574577
// Extract the commitments to the subtable corresponding to the incoming circuit
575578
TableCommitments t_commitments = verifier.verifier_instance->witness_commitments.get_ecc_op_wires().get_copy();
576579

@@ -580,7 +583,7 @@ bool SumcheckClientIVC::verify(const Proof& proof, const VerificationKey& vk)
580583
vinfo("Goblin verified: ", goblin_verified);
581584

582585
// TODO(https://github.com/AztecProtocol/barretenberg/issues/1396): State tracking in CIVC verifiers.
583-
return goblin_verified && mega_verified;
586+
return goblin_verified && mega_verified && databus_consistency_verified;
584587
}
585588

586589
// Proof methods

0 commit comments

Comments
 (0)