MCPcopy Create free account
hub / github.com/BitVM/BitVM / groth16_generate_segments

Function groth16_generate_segments

bitvm/src/chunk/g16_runner_core.rs:88–350  ·  view source on GitHub ↗
(
    skip_evaluation: bool,
    all_output_hints: &mut Vec<Segment>,
    eval_ins: InputProofRaw,
    pubs: PublicParams,
    claimed_assertions: &mut Option<Vec<HashBytes>>,
)

Source from the content-addressed store, hash-verified

86}
87
88pub(crate) fn groth16_generate_segments(
89 skip_evaluation: bool,
90 all_output_hints: &mut Vec<Segment>,
91 eval_ins: InputProofRaw,
92 pubs: PublicParams,
93 claimed_assertions: &mut Option<Vec<HashBytes>>,
94) -> bool {
95 macro_rules! push_compare_or_return {
96 ($seg:ident) => {{
97 all_output_hints.push($seg.clone());
98 if $seg.scr_type.is_final_script() {
99 if let DataType::U256Data(felem) = $seg.result.0 {
100 if felem != ark_ff::BigInt::<4>::one() {
101 return false;
102 }
103 } else {
104 unreachable!();
105 }
106 } else if $seg.is_valid_input == false {
107 return false;
108 } else {
109 let matches = compare(&$seg.result.0, claimed_assertions);
110 if matches.is_some() && matches.unwrap() == false {
111 return false;
112 }
113 }
114 }};
115 }
116 let vky = pubs.ks_vks;
117 let vky0 = pubs.vky0;
118
119 let (gp2, gp4, gq4, gc, pub_scalars) = raw_input_proof_to_segments(eval_ins, all_output_hints);
120 let (gp2x, gp2y) = (gp2[0].clone(), gp2[1].clone());
121 let (gp4x, gp4y) = (gp4[0].clone(), gp4[1].clone());
122 let (q4xc0, q4xc1, q4yc0, q4yc1) = (
123 gq4[0].clone(),
124 gq4[1].clone(),
125 gq4[2].clone(),
126 gq4[3].clone(),
127 );
128 let gc = gc.to_vec();
129
130 let pub_scalars = pub_scalars.to_vec();
131
132 let p4 = wrap_hints_precompute_p(skip_evaluation, all_output_hints.len(), &gp4y, &gp4x);
133 push_compare_or_return!(p4);
134
135 let p2 = wrap_hints_precompute_p(skip_evaluation, all_output_hints.len(), &gp2y, &gp2x);
136 push_compare_or_return!(p2);
137
138 let msms = wrap_hint_msm(
139 skip_evaluation,
140 all_output_hints.len(),
141 pub_scalars.clone(),
142 vky.clone(),
143 );
144 for msm in &msms {
145 push_compare_or_return!(msm);

Callers 4

test_groth16Function · 0.85

Tested by 1

test_groth16Function · 0.68