22 auto verifier_output = verifier.verify_proof(proof.mega_proof);
23 if (!verifier_output.result) {
24 info(
"ChonkVerifier: verification failed at MegaZK verification step");
25 return { {}, {},
false };
30 kernel_io.reconstruct_from_public(verifier.get_public_inputs());
33 const Commitment calldata_commitment = verifier.get_calldata_commitment();
34 const Commitment return_data_commitment = kernel_io.kernel_return_data;
35 bool databus_consistency_verified = (calldata_commitment == return_data_commitment);
36 vinfo(
"ChonkVerifier: databus consistency verified: ", databus_consistency_verified);
37 if (!databus_consistency_verified) {
38 info(
"Chonk Verifier: verification failed at databus consistency check");
39 return { {}, {},
false };
43 MergeCommitments merge_commitments{ .t_commitments = verifier.get_ecc_op_wires(),
44 .T_prev_commitments = kernel_io.ecc_op_tables };
48 if (!goblin_output.all_checks_passed) {
49 info(
"ChonkVerifier: chonk verification failed at Goblin checks (merge/eccvm/translator reduction + pairing)");
50 return { {}, {},
false };
53 return {
std::move(goblin_output.ipa_claim),
std::move(goblin_output.ipa_proof),
true };
87 auto [mega_pcs_pairing_points, mega_reduction_succeeded] = verifier.reduce_to_pairing_check(proof.mega_proof);
88 vinfo(
"ChonkRecursiveVerifier: MegaZK reduced to pairing check: ", mega_reduction_succeeded ?
"true" :
"false");
92 kernel_io.reconstruct_from_public(verifier.get_public_inputs());
95 const Commitment calldata_commitment = verifier.get_calldata_commitment();
96 if (kernel_io.kernel_return_data.get_value() != calldata_commitment.get_value()) {
97 info(
"ChonkRecursiveVerifier: Databus Consistency check failure");
99 kernel_io.kernel_return_data.incomplete_assert_equal(calldata_commitment);
102 MergeCommitments merge_commitments{ .t_commitments = verifier.get_ecc_op_wires(),
103 .T_prev_commitments = kernel_io.ecc_op_tables };
109 pairing_points_to_aggregate.reserve(NUM_PAIRING_POINTS);
112 pairing_points_to_aggregate.push_back(kernel_io.pairing_inputs);
113 pairing_points_to_aggregate.push_back(
std::move(mega_pcs_pairing_points));
114 pairing_points_to_aggregate.push_back(
std::move(goblin_output.merge_pairing_points));
115 pairing_points_to_aggregate.push_back(
std::move(goblin_output.translator_pairing_points));
121 constexpr bool handle_edge_cases =
false;
123 PairingPoints::aggregate_multiple(pairing_points_to_aggregate, handle_edge_cases);
127 .ipa_claim =
std::move(goblin_output.ipa_claim),
128 .ipa_proof =
std::move(goblin_output.ipa_proof),
129 .all_checks_passed = mega_reduction_succeeded && goblin_output.all_checks_passed };