20 Curve>::reduce_to_pairing_check_and_triple_ipa_opening()
26 vinfo(
"Goblin: Merge reduced to pairing check successfully: ", merge_result.reduction_succeeded ?
"true" :
"false");
28 if constexpr (!IsRecursive) {
29 if (!merge_result.reduction_succeeded) {
30 info(
"Goblin verification failed at Merge step");
33 if (!merge_result.pairing_points.check()) {
34 info(
"Goblin verification failed at Merge pairing check");
40 ECCVMVerifier eccvm_verifier{ transcript, proof.eccvm_proof };
42 vinfo(
"Goblin: ECCVM reduced to TripleIPA claim successfully: ",
43 eccvm_result.reduction_succeeded ?
"true" :
"false");
45 if constexpr (!IsRecursive) {
46 if (!eccvm_result.reduction_succeeded) {
47 info(
"Goblin verification failed at ECCVM step");
53 auto translator_input = eccvm_verifier.get_translator_input_data();
59 proof.translator_proof,
60 translator_input.evaluation_challenge_x,
62 translator_input.accumulated_result,
63 merge_result.merged_commitments };
64 auto translator_result = translator_verifier.reduce_to_pairing_check();
65 vinfo(
"Goblin: Translator reduced to pairing check successfully: ",
66 translator_result.reduction_succeeded ?
"true" :
"false");
68 if constexpr (!IsRecursive) {
69 if (!translator_result.reduction_succeeded) {
70 info(
"Goblin verification failed at Translator step");
74 if (!translator_result.pairing_points.check()) {
75 info(
"Goblin verification failed at Translator pairing check");
83 bool all_checks_passed =
84 merge_result.reduction_succeeded && eccvm_result.reduction_succeeded && translator_result.reduction_succeeded;
92 .translator_pairing_points =
std::move(translator_result.pairing_points),
93 .triple_ipa_opening = { .claim =
std::move(eccvm_result.triple_ipa_claim),
94 .proof = proof.ipa_proof },
95 .all_checks_passed = all_checks_passed };