From 774c318d037560091d471d8c64aa4650eccfc0af Mon Sep 17 00:00:00 2001 From: dongchangYoo Date: Fri, 1 Dec 2023 16:56:56 +0900 Subject: [PATCH] refac(zk): move `Open()` func from `PermutationEvaluated` to its `Runner` This commit gathers the transition functions of the permutation into the `PermutationArgumentRunner` to enhance the readability of the protocol. --- tachyon/zk/plonk/permutation/BUILD.bazel | 9 ++---- .../permutation/permutation_argument_runner.h | 6 ++++ .../permutation_argument_runner_impl.h | 28 +++++++++++++++++++ .../plonk/permutation/permutation_evaluated.h | 26 ----------------- 4 files changed, 37 insertions(+), 32 deletions(-) diff --git a/tachyon/zk/plonk/permutation/BUILD.bazel b/tachyon/zk/plonk/permutation/BUILD.bazel index 5e752aae28..abef16b88a 100644 --- a/tachyon/zk/plonk/permutation/BUILD.bazel +++ b/tachyon/zk/plonk/permutation/BUILD.bazel @@ -53,7 +53,9 @@ tachyon_cc_library( ":permutation_table_store", "//tachyon/base:logging", "//tachyon/base:parallelize", + "//tachyon/zk/base:prover_query", "//tachyon/zk/base:ref", + "//tachyon/zk/plonk/circuit:rotation", ], ) @@ -76,12 +78,7 @@ tachyon_cc_library( tachyon_cc_library( name = "permutation_evaluated", hdrs = ["permutation_evaluated.h"], - deps = [ - "//tachyon/zk/base:blinded_polynomial", - "//tachyon/zk/base:prover", - "//tachyon/zk/base:prover_query", - "//tachyon/zk/plonk/circuit:rotation", - ], + deps = ["//tachyon/zk/base:blinded_polynomial"], ) tachyon_cc_library( diff --git a/tachyon/zk/plonk/permutation/permutation_argument_runner.h b/tachyon/zk/plonk/permutation/permutation_argument_runner.h index 24f74e42c2..836b1e2a9c 100644 --- a/tachyon/zk/plonk/permutation/permutation_argument_runner.h +++ b/tachyon/zk/plonk/permutation/permutation_argument_runner.h @@ -12,6 +12,7 @@ #include "tachyon/base/parallelize.h" #include "tachyon/zk/base/prover.h" +#include "tachyon/zk/base/prover_query.h" #include "tachyon/zk/base/ref.h" #include "tachyon/zk/plonk/circuit/table.h" #include "tachyon/zk/plonk/permutation/permutation_argument.h" @@ -43,6 +44,11 @@ class PermutationArgumentRunner { Prover* prover, PermutationCommitted&& committed, const F& x); + template + static std::vector> OpenEvaluated( + const Prover* prover, + const PermutationEvaluated& evaluated, const F& x); + private: template static std::function(size_t)> diff --git a/tachyon/zk/plonk/permutation/permutation_argument_runner_impl.h b/tachyon/zk/plonk/permutation/permutation_argument_runner_impl.h index 6779a68e70..50730ce5bb 100644 --- a/tachyon/zk/plonk/permutation/permutation_argument_runner_impl.h +++ b/tachyon/zk/plonk/permutation/permutation_argument_runner_impl.h @@ -13,6 +13,7 @@ #include "tachyon/base/logging.h" #include "tachyon/zk/base/blinded_polynomial.h" +#include "tachyon/zk/plonk/circuit/rotation.h" #include "tachyon/zk/plonk/permutation/grand_product_argument.h" #include "tachyon/zk/plonk/permutation/permutation_argument_runner.h" #include "tachyon/zk/plonk/permutation/permutation_table_store.h" @@ -107,6 +108,33 @@ PermutationArgumentRunner::EvaluateCommitted( return PermutationEvaluated(std::move(product_polys)); } +template +template +std::vector> +PermutationArgumentRunner::OpenEvaluated( + const Prover* prover, + const PermutationEvaluated& evaluated, const F& x) { + const std::vector>& product_polys = + evaluated.product_polys(); + + std::vector> ret; + ret.reserve(product_polys.size() * 3 - 1); + + F x_next = Rotation::Next().RotateOmega(prover->domain(), x); + for (const BlindedPolynomial& blinded_poly : product_polys) { + ret.emplace_back(x, blinded_poly.ToRef()); + ret.emplace_back(x_next, blinded_poly.ToRef()); + } + + int32_t blinding_factors = + static_cast(prover->blinder().blinding_factors()); + F x_last = Rotation(-(blinding_factors + 1)).RotateOmega(prover->domain(), x); + for (auto it = product_polys.rbegin() + 1; it != product_polys.rend(); ++it) { + ret.emplace_back(x_last, it->ToRef()); + } + return std::move(ret); +} + template template std::function(size_t)> diff --git a/tachyon/zk/plonk/permutation/permutation_evaluated.h b/tachyon/zk/plonk/permutation/permutation_evaluated.h index 9b70331612..c47a29e1b8 100644 --- a/tachyon/zk/plonk/permutation/permutation_evaluated.h +++ b/tachyon/zk/plonk/permutation/permutation_evaluated.h @@ -11,9 +11,6 @@ #include #include "tachyon/zk/base/blinded_polynomial.h" -#include "tachyon/zk/base/prover.h" -#include "tachyon/zk/base/prover_query.h" -#include "tachyon/zk/plonk/circuit/rotation.h" namespace tachyon::zk { @@ -29,29 +26,6 @@ class PermutationEvaluated { return product_polys_; } - template - std::vector> Open( - const Prover* prover, const F& x) const { - std::vector> ret; - ret.reserve(product_polys_.size() * 3 - 1); - - F x_next = Rotation::Next().RotateOmega(prover->domain(), x); - for (const BlindedPolynomial& blinded_poly : product_polys_) { - ret.emplace_back(x, blinded_poly.ToRef()); - ret.emplace_back(x_next, blinded_poly.ToRef()); - } - - int32_t blinding_factors = - static_cast(prover->blinder().blinding_factors()); - F x_last = - Rotation(-(blinding_factors + 1)).RotateOmega(prover->domain(), x); - for (auto it = product_polys_.rbegin() + 1; it != product_polys_.rend(); - ++it) { - ret.emplace_back(x_last, it->ToRef()); - } - return ret; - } - private: std::vector> product_polys_; };