@@ -207,7 +207,7 @@ pub fn test_range<G: PrimeGroup, R: RngCore>(
207207 let G = G :: generator ( ) ;
208208 let H = G :: random ( & mut rng) ;
209209
210- let bases = [ 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 313 , 512 ] ;
210+ let bases = [ 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 313 , 512 ] . map ( G :: Scalar :: from ) ;
211211 const BITS : usize = 11 ;
212212
213213 let mut instance = LinearRelation :: new ( ) ;
@@ -216,23 +216,26 @@ pub fn test_range<G: PrimeGroup, R: RngCore>(
216216 let vars_b = instance. allocate_scalars :: < BITS > ( ) ;
217217 let vars_s = instance. allocate_scalars :: < BITS > ( ) ;
218218 let var_s2 = instance. allocate_scalars :: < BITS > ( ) ;
219+ let var_Ds = instance. allocate_elements :: < BITS > ( ) ;
219220
220- let var_C = instance. allocate_eq ( var_x * var_G + var_r * var_H) ;
221- let mut var_Ds = Vec :: new ( ) ;
221+ // `var_Ds[i]` are bit commitments.
222222 for i in 0 ..BITS {
223- let var_D_i = instance. allocate_eq ( vars_b[ i] * var_G + vars_s[ i] * var_H) ;
224- instance. append_equation ( var_D_i, vars_b[ i] * var_D_i + var_s2[ i] * var_H) ;
225- var_Ds. push ( var_D_i) ;
223+ instance. append_equation ( var_Ds[ i] , vars_b[ i] * var_G + vars_s[ i] * var_H) ;
224+ instance. append_equation ( var_Ds[ i] , vars_b[ i] * var_Ds[ i] + var_s2[ i] * var_H) ;
226225 }
226+ // `var_C` is a Pedersen commitment to `var_x`.
227+ let var_C = instance. allocate_eq ( var_x * var_G + var_r * var_H) ;
228+ // `var_x` = sum(bases[i] * var_b[i])
227229 instance. append_equation (
228230 var_C,
229231 ( 0 ..BITS )
230- . map ( |i| var_Ds[ i] * vars_b[ i] * G :: Scalar :: from ( bases[ i] ) )
232+ . map ( |i| var_Ds[ i] * vars_b[ i] * bases[ i] )
231233 . sum :: < Sum < _ > > ( ) ,
232234 ) ;
233235
234236 let r = G :: Scalar :: random ( & mut rng) ;
235237 let x = G :: Scalar :: from ( 822 ) ;
238+
236239 let b = [
237240 G :: Scalar :: ZERO ,
238241 G :: Scalar :: ONE ,
@@ -251,12 +254,10 @@ pub fn test_range<G: PrimeGroup, R: RngCore>(
251254 . map ( |_| G :: Scalar :: random ( & mut rng) )
252255 . collect :: < Vec < _ > > ( ) ;
253256 let partial_sum = ( 0 ..BITS - 1 )
254- . map ( |i| b[ i] * G :: Scalar :: from ( bases[ i] ) * s[ i] )
257+ . map ( |i| b[ i] * bases[ i] * s[ i] )
255258 . sum :: < G :: Scalar > ( ) ;
256259 s[ BITS - 1 ] = r - partial_sum;
257- s[ BITS - 1 ] *= ( b[ BITS - 1 ] * G :: Scalar :: from ( bases[ BITS - 1 ] ) )
258- . invert ( )
259- . unwrap ( ) ;
260+ s[ BITS - 1 ] *= ( b[ BITS - 1 ] * bases[ BITS - 1 ] ) . invert ( ) . unwrap ( ) ;
260261 let s2 = ( 0 ..BITS )
261262 . map ( |i| ( G :: Scalar :: ONE - b[ i] ) * s[ i] )
262263 . collect :: < Vec < _ > > ( ) ;
0 commit comments