Skip to content
This repository was archived by the owner on Aug 5, 2025. It is now read-only.

Commit ef73a32

Browse files
committed
one massive gate
1 parent c8e7159 commit ef73a32

File tree

3 files changed

+179
-138
lines changed

3 files changed

+179
-138
lines changed

crates/shielder-circuits/src/chips/scalar_multiply.rs

Lines changed: 49 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -85,53 +85,55 @@ impl ScalarMultiplyChip {
8585
) -> Result<GrumpkinPoint<AssignedCell>, Error> {
8686
let ScalarMultiplyChipInput { scalar_bits, input } = inputs;
8787

88-
let mut input_value: GrumpkinPoint<Value> = input.clone().into();
89-
let mut result_value: GrumpkinPoint<Value> = GrumpkinPoint::<Fr>::zero().into();
90-
let mut last_result = None;
91-
92-
for (i, bit) in scalar_bits.iter().enumerate() {
93-
let input = input_value.embed(synthesizer, "input")?;
94-
let result = result_value.embed(synthesizer, "result")?;
95-
if i.eq(&0) {
96-
self.constrain_point_at_infinity(synthesizer, result.clone())?;
97-
self.constrain_points_equality(synthesizer, input.clone(), inputs.input.clone())?;
98-
}
99-
100-
let mut is_one = false;
101-
bit.value().map(|f| {
102-
is_one = Fr::ONE == *f;
103-
});
104-
105-
let mut next_result_value = result_value;
106-
if is_one {
107-
next_result_value = curve_arithmetic::points_add(result_value, input_value);
108-
}
109-
110-
let next_result = next_result_value.embed(synthesizer, "next_result")?;
111-
112-
let next_input_value = curve_arithmetic::point_double(input_value);
113-
let next_input = next_input_value.embed(synthesizer, "next_input")?;
114-
115-
self.multiply_gate.apply_in_new_region(
116-
synthesizer,
117-
ScalarMultiplyGateInput {
118-
bit: bit.clone(),
119-
input,
120-
result,
121-
next_input,
122-
next_result: next_result.clone(),
123-
},
124-
)?;
125-
126-
input_value = next_input_value;
127-
result_value = next_result_value;
128-
129-
if i.eq(&(scalar_bits.len() - 1)) {
130-
last_result = Some(next_result);
131-
}
132-
}
133-
134-
Ok(last_result.expect("last result is returned"))
88+
// let mut input_value: GrumpkinPoint<Value> = input.clone().into();
89+
// let mut result_value: GrumpkinPoint<Value> = GrumpkinPoint::<Fr>::zero().into();
90+
// let mut last_result = None;
91+
92+
// for (i, bit) in scalar_bits.iter().enumerate() {
93+
// let input = input_value.embed(synthesizer, "input")?;
94+
// let result = result_value.embed(synthesizer, "result")?;
95+
// if i.eq(&0) {
96+
// self.constrain_point_at_infinity(synthesizer, result.clone())?;
97+
// self.constrain_points_equality(synthesizer, input.clone(), inputs.input.clone())?;
98+
// }
99+
100+
// let mut is_one = false;
101+
// bit.value().map(|f| {
102+
// is_one = Fr::ONE == *f;
103+
// });
104+
105+
// let mut next_result_value = result_value;
106+
// if is_one {
107+
// next_result_value = curve_arithmetic::points_add(result_value, input_value);
108+
// }
109+
110+
// let next_result = next_result_value.embed(synthesizer, "next_result")?;
111+
112+
// let next_input_value = curve_arithmetic::point_double(input_value);
113+
// let next_input = next_input_value.embed(synthesizer, "next_input")?;
114+
115+
// self.multiply_gate.apply_in_new_region(
116+
// synthesizer,
117+
// ScalarMultiplyGateInput {
118+
// bit: bit.clone(),
119+
// input,
120+
// result,
121+
// next_input,
122+
// next_result: next_result.clone(),
123+
// },
124+
// )?;
125+
126+
// input_value = next_input_value;
127+
// result_value = next_result_value;
128+
129+
// if i.eq(&(scalar_bits.len() - 1)) {
130+
// last_result = Some(next_result);
131+
// }
132+
// }
133+
134+
// Ok(last_result.expect("last result is returned"))
135+
136+
todo!()
135137
}
136138
}
137139

crates/shielder-circuits/src/gates/mod.rs

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::{
99
column_pool::{ColumnPool, ConfigPhase},
1010
curve_arithmetic::{GrumpkinPoint, GrumpkinPointAffine},
1111
synthesizer::Synthesizer,
12-
AssignedCell, Fr,
12+
AssignedCell, Fr, Value,
1313
};
1414

1515
pub mod is_point_on_curve;
@@ -124,3 +124,36 @@ pub fn copy_affine_grumpkin_advices(
124124

125125
Ok(GrumpkinPointAffine::new(x, y))
126126
}
127+
128+
pub fn assign_grumpkin_advices(
129+
point_value: &GrumpkinPoint<Value>,
130+
annotation: &str,
131+
region: &mut Region<'_, Fr>,
132+
columns: [Column<Advice>; 3],
133+
offset: usize,
134+
) -> Result<GrumpkinPoint<AssignedCell>, Error> {
135+
ensure_unique_columns(&columns);
136+
137+
let x = region.assign_advice(
138+
|| alloc::format!("{}[x]", annotation),
139+
columns[0],
140+
offset,
141+
|| point_value.x,
142+
)?;
143+
144+
let y = region.assign_advice(
145+
|| alloc::format!("{}[y]", annotation),
146+
columns[1],
147+
offset,
148+
|| point_value.y,
149+
)?;
150+
151+
let z = region.assign_advice(
152+
|| alloc::format!("{}[z]", annotation),
153+
columns[2],
154+
offset,
155+
|| point_value.z,
156+
)?;
157+
158+
Ok(GrumpkinPoint::new(x, y, z))
159+
}

0 commit comments

Comments
 (0)