mirror of
https://github.com/arnaucube/hyperplonk.git
synced 2026-01-11 16:41:28 +01:00
arc
This commit is contained in:
@@ -2,7 +2,7 @@ use crate::{build_mle, errors::HyperPlonkErrors};
|
||||
use ark_ff::PrimeField;
|
||||
use ark_poly::DenseMultilinearExtension;
|
||||
use ark_std::log2;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// A row of selector of width `#selectors`
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
@@ -67,7 +67,7 @@ impl<F: PrimeField> SelectorRow<F> {
|
||||
/// output mle(a1,b1,c1, ...), mle(a2,b2,c2, ...), ...
|
||||
pub fn build_mles(
|
||||
matrix: &[Self],
|
||||
) -> Result<Vec<Rc<DenseMultilinearExtension<F>>>, HyperPlonkErrors> {
|
||||
) -> Result<Vec<Arc<DenseMultilinearExtension<F>>>, HyperPlonkErrors> {
|
||||
build_mle!(matrix)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,7 +9,10 @@ use arithmetic::{evaluate_opt, gen_eval_point, VPAuxInfo};
|
||||
use ark_ec::PairingEngine;
|
||||
use ark_poly::DenseMultilinearExtension;
|
||||
use ark_std::{end_timer, log2, start_timer, One, Zero};
|
||||
use std::{marker::PhantomData, rc::Rc};
|
||||
use rayon::iter::IntoParallelRefIterator;
|
||||
#[cfg(feature = "parallel")]
|
||||
use rayon::iter::ParallelIterator;
|
||||
use std::{marker::PhantomData, sync::Arc};
|
||||
use subroutines::{
|
||||
pcs::prelude::{Commitment, PolynomialCommitmentScheme},
|
||||
poly_iop::{
|
||||
@@ -28,7 +31,7 @@ where
|
||||
// we cannot bound PCS::Polynomial with a property trait bound.
|
||||
PCS: PolynomialCommitmentScheme<
|
||||
E,
|
||||
Polynomial = Rc<DenseMultilinearExtension<E::Fr>>,
|
||||
Polynomial = Arc<DenseMultilinearExtension<E::Fr>>,
|
||||
Point = Vec<E::Fr>,
|
||||
Evaluation = E::Fr,
|
||||
Commitment = Commitment<E>,
|
||||
@@ -56,7 +59,7 @@ where
|
||||
let mut perm_comms = vec![];
|
||||
let chunk_size = 1 << num_vars;
|
||||
for i in 0..index.num_witness_columns() {
|
||||
let perm_oracle = Rc::new(DenseMultilinearExtension::from_evaluations_slice(
|
||||
let perm_oracle = Arc::new(DenseMultilinearExtension::from_evaluations_slice(
|
||||
num_vars,
|
||||
&index.permutation[i * chunk_size..(i + 1) * chunk_size],
|
||||
));
|
||||
@@ -66,10 +69,10 @@ where
|
||||
}
|
||||
|
||||
// build selector oracles and commit to it
|
||||
let selector_oracles: Vec<Rc<DenseMultilinearExtension<E::Fr>>> = index
|
||||
let selector_oracles: Vec<Arc<DenseMultilinearExtension<E::Fr>>> = index
|
||||
.selectors
|
||||
.iter()
|
||||
.map(|s| Rc::new(DenseMultilinearExtension::from(s)))
|
||||
.map(|s| Arc::new(DenseMultilinearExtension::from(s)))
|
||||
.collect();
|
||||
|
||||
let selector_commitments = selector_oracles
|
||||
@@ -168,13 +171,13 @@ where
|
||||
// =======================================================================
|
||||
let step = start_timer!(|| "commit witnesses");
|
||||
|
||||
let witness_polys: Vec<Rc<DenseMultilinearExtension<E::Fr>>> = witnesses
|
||||
let witness_polys: Vec<Arc<DenseMultilinearExtension<E::Fr>>> = witnesses
|
||||
.iter()
|
||||
.map(|w| Rc::new(DenseMultilinearExtension::from(w)))
|
||||
.map(|w| Arc::new(DenseMultilinearExtension::from(w)))
|
||||
.collect();
|
||||
|
||||
let witness_commits = witness_polys
|
||||
.iter()
|
||||
.par_iter()
|
||||
.map(|x| PCS::commit(&pk.pcs_param, x).unwrap())
|
||||
.collect::<Vec<_>>();
|
||||
for w_com in witness_commits.iter() {
|
||||
@@ -663,15 +666,15 @@ mod tests {
|
||||
let w1 = WitnessColumn(vec![
|
||||
E::Fr::zero(),
|
||||
E::Fr::one(),
|
||||
E::Fr::from(2u64),
|
||||
E::Fr::from(3u64),
|
||||
E::Fr::from(2u128),
|
||||
E::Fr::from(3u128),
|
||||
]);
|
||||
// w2 := [0^5, 1^5, 2^5, 3^5]
|
||||
let w2 = WitnessColumn(vec![
|
||||
E::Fr::zero(),
|
||||
E::Fr::one(),
|
||||
E::Fr::from(32u64),
|
||||
E::Fr::from(243u64),
|
||||
E::Fr::from(32u128),
|
||||
E::Fr::from(243u128),
|
||||
]);
|
||||
// public input = w1
|
||||
let pi = w1.clone();
|
||||
|
||||
@@ -5,7 +5,7 @@ use ark_ec::PairingEngine;
|
||||
use ark_ff::PrimeField;
|
||||
use ark_poly::DenseMultilinearExtension;
|
||||
use ark_std::log2;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
use subroutines::{
|
||||
pcs::PolynomialCommitmentScheme,
|
||||
poly_iop::prelude::{PermutationCheck, ZeroCheck},
|
||||
@@ -126,9 +126,9 @@ pub struct HyperPlonkProvingKey<E: PairingEngine, PCS: PolynomialCommitmentSchem
|
||||
/// Hyperplonk instance parameters
|
||||
pub params: HyperPlonkParams,
|
||||
/// The preprocessed permutation polynomials
|
||||
pub permutation_oracles: Vec<Rc<DenseMultilinearExtension<E::Fr>>>,
|
||||
pub permutation_oracles: Vec<Arc<DenseMultilinearExtension<E::Fr>>>,
|
||||
/// The preprocessed selector polynomials
|
||||
pub selector_oracles: Vec<Rc<DenseMultilinearExtension<E::Fr>>>,
|
||||
pub selector_oracles: Vec<Arc<DenseMultilinearExtension<E::Fr>>>,
|
||||
/// Commitments to the preprocessed selector polynomials
|
||||
pub selector_commitments: Vec<PCS::Commitment>,
|
||||
/// Commitments to the preprocessed permutation polynomials
|
||||
|
||||
@@ -6,7 +6,7 @@ use arithmetic::{evaluate_opt, VirtualPolynomial};
|
||||
use ark_ec::PairingEngine;
|
||||
use ark_ff::PrimeField;
|
||||
use ark_poly::DenseMultilinearExtension;
|
||||
use std::{borrow::Borrow, rc::Rc};
|
||||
use std::{borrow::Borrow, sync::Arc};
|
||||
use subroutines::pcs::{prelude::Commitment, PolynomialCommitmentScheme};
|
||||
use transcript::IOPTranscript;
|
||||
|
||||
@@ -32,7 +32,7 @@ where
|
||||
E: PairingEngine,
|
||||
PCS: PolynomialCommitmentScheme<
|
||||
E,
|
||||
Polynomial = Rc<DenseMultilinearExtension<E::Fr>>,
|
||||
Polynomial = Arc<DenseMultilinearExtension<E::Fr>>,
|
||||
Point = Vec<E::Fr>,
|
||||
Evaluation = E::Fr,
|
||||
Commitment = Commitment<E>,
|
||||
@@ -104,7 +104,7 @@ macro_rules! build_mle {
|
||||
for row in $rows.iter() {
|
||||
cur_coeffs.push(row.0[i])
|
||||
}
|
||||
res.push(Rc::new(DenseMultilinearExtension::from_evaluations_vec(
|
||||
res.push(Arc::new(DenseMultilinearExtension::from_evaluations_vec(
|
||||
num_vars, cur_coeffs,
|
||||
)))
|
||||
}
|
||||
@@ -178,8 +178,8 @@ pub(crate) fn prover_sanity_check<F: PrimeField>(
|
||||
pub(crate) fn build_f<F: PrimeField>(
|
||||
gates: &CustomizedGates,
|
||||
num_vars: usize,
|
||||
selector_mles: &[Rc<DenseMultilinearExtension<F>>],
|
||||
witness_mles: &[Rc<DenseMultilinearExtension<F>>],
|
||||
selector_mles: &[Arc<DenseMultilinearExtension<F>>],
|
||||
witness_mles: &[Arc<DenseMultilinearExtension<F>>],
|
||||
) -> Result<VirtualPolynomial<F>, HyperPlonkErrors> {
|
||||
// TODO: check that selector and witness lengths match what is in
|
||||
// the gate definition
|
||||
@@ -306,7 +306,7 @@ mod test {
|
||||
// 1, 0 |-> 0
|
||||
// 1, 1 |-> 5
|
||||
let ql_eval = vec![F::zero(), F::from(2u64), F::zero(), F::from(5u64)];
|
||||
let ql = Rc::new(DenseMultilinearExtension::from_evaluations_vec(2, ql_eval));
|
||||
let ql = Arc::new(DenseMultilinearExtension::from_evaluations_vec(2, ql_eval));
|
||||
|
||||
// W1 = x1x2 + x1 whose evaluations are
|
||||
// 0, 0 |-> 0
|
||||
@@ -314,7 +314,7 @@ mod test {
|
||||
// 1, 0 |-> 1
|
||||
// 1, 1 |-> 2
|
||||
let w_eval = vec![F::zero(), F::zero(), F::from(1u64), F::from(2u64)];
|
||||
let w1 = Rc::new(DenseMultilinearExtension::from_evaluations_vec(2, w_eval));
|
||||
let w1 = Arc::new(DenseMultilinearExtension::from_evaluations_vec(2, w_eval));
|
||||
|
||||
// W2 = x1 + x2 whose evaluations are
|
||||
// 0, 0 |-> 0
|
||||
@@ -322,7 +322,7 @@ mod test {
|
||||
// 1, 0 |-> 1
|
||||
// 1, 1 |-> 2
|
||||
let w_eval = vec![F::zero(), F::one(), F::from(1u64), F::from(2u64)];
|
||||
let w2 = Rc::new(DenseMultilinearExtension::from_evaluations_vec(2, w_eval));
|
||||
let w2 = Arc::new(DenseMultilinearExtension::from_evaluations_vec(2, w_eval));
|
||||
|
||||
// Example:
|
||||
// q_L(X) * W_1(X)^5 - W_2(X)
|
||||
|
||||
@@ -2,7 +2,7 @@ use crate::{build_mle, errors::HyperPlonkErrors};
|
||||
use ark_ff::PrimeField;
|
||||
use ark_poly::DenseMultilinearExtension;
|
||||
use ark_std::log2;
|
||||
use std::rc::Rc;
|
||||
use std::sync::Arc;
|
||||
|
||||
/// A row of witnesses of width `#wires`
|
||||
#[derive(Debug, Clone)]
|
||||
@@ -71,7 +71,7 @@ impl<F: PrimeField> WitnessRow<F> {
|
||||
/// output mle(a1,b1,c1, ...), mle(a2,b2,c2, ...), ...
|
||||
pub fn build_mles(
|
||||
matrix: &[Self],
|
||||
) -> Result<Vec<Rc<DenseMultilinearExtension<F>>>, HyperPlonkErrors> {
|
||||
) -> Result<Vec<Arc<DenseMultilinearExtension<F>>>, HyperPlonkErrors> {
|
||||
build_mle!(matrix)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user