Skip to content

Commit

Permalink
PLONK constraint system to polynomials conversion added. Redshift pro…
Browse files Browse the repository at this point in the history
…ver updated to use stable math polynom interface. #20
  • Loading branch information
nkaskov committed Nov 29, 2021
1 parent d815827 commit 6b8126d
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
30 changes: 30 additions & 0 deletions include/nil/crypto3/zk/snark/relations/plonk/plonk.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,36 @@ namespace nil {
return true;
}

std::vector<math::polynomial::polynom<typename FieldType::value_type>> get_polynoms(
plonk_variable_assignment<FieldType, WiresAmount> full_variable_assignment){

std::vector<math::polynomial::polynom<typename FieldType::value_type>> result(constraints.size());

std::array<math::polynomial::polynom<typename FieldType::value_type>, WiresAmount> wire_polynomials;
for (std::size_t wire_index = 0; wire_index < WiresAmount; wire_index++){
wire_polynomials[wire_index] = math::polynomial::Lagrange_interpolation(full_variable_assignment[wire_index]);
}

for (std::size_t constraint_index = 0; i < constraints.size(); constraint_index++){

for (auto &term: constraints[constraint_index].terms){

math::polynomial::polynom<typename FieldType::value_type>
term_polynom = {term.coeff};

// TODO: Rotation isn't taken into consideration
for (auto &var: term.vars){
term_polynom *= wire_polynomials[var.index];
}

result[constraint_index] += term_polynom;
}
}

return result;

}

void add_constraint(const plonk_constraint<FieldType> &c) {
constraints.emplace_back(c);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,10 +95,8 @@ namespace nil {
std::vector<math::polynomial::polynom<typename FieldType::value_type>> p(N_perm);
std::vector<math::polynomial::polynom<typename FieldType::value_type>> q(N_perm);

math::polynomial::polynom<typename FieldType::value_type> p1 =
math::polynomial::polynom<typename FieldType::value_type>::one();
math::polynomial::polynom<typename FieldType::value_type> q1 =
math::polynomial::polynom<typename FieldType::value_type>::one();
math::polynomial::polynom<typename FieldType::value_type> p1 = {1};
math::polynomial::polynom<typename FieldType::value_type> q1 = {1};

for (std::size_t j = 0; j < N_perm; j++) {
p.push_back(f[j] + beta * S_id[j] + gamma);
Expand Down

0 comments on commit 6b8126d

Please sign in to comment.