Jack Grigg
95314d0f69
clippy: Add type definitions for complex types
2021-01-14 08:46:23 -07:00
Jack Grigg
75915f67ed
clippy: Small cleanups
2021-01-14 08:43:25 -07:00
Sean Bowe
ec2d8db8cb
Multiopen prover never needed evals to be specified.
...
The Lagrange interpolation we were doing was pointless. kate_division sheds the constant
term off each time it is invoked because the quotient polynomial isn't affected by it.
This means we were modifying coefficients that end up getting discarded anyway; the
quotient polynomial coefficients are already determined exactly by the leading coefficients
and the fact that a root exists at each of the points.
2021-01-13 17:22:32 -07:00
ebfull
ccca639591
Merge pull request #111 from zcash/transcript-api-2
...
New Transcript API (and modified commitment scheme)
2021-01-13 16:50:47 -07:00
Sean Bowe
775151a67d
Change absorb_ to read_ in subprotocols.
2021-01-13 15:47:35 -07:00
Sean Bowe
9a26ef1acd
Refactor the Committed structure.
2021-01-13 15:44:37 -07:00
Jack Grigg
64b06735bf
Expose MockProver in crate, and add documentation
2021-01-06 21:52:56 +00:00
therealyingtong
fb939f17a9
Add permutation check to MockProver
2021-01-06 21:52:56 +00:00
Sean Bowe
c5e0364962
Remove the Read/Write type parameters from Transcript{Read,Write}.
2021-01-06 10:45:11 -07:00
Sean Bowe
4ecbfb548e
Remove unnecessary lifetimes.
2021-01-06 10:45:11 -07:00
Sean Bowe
06552eec44
Update the PLONK implementation to adapt to the new transcript API.
2021-01-06 10:45:11 -07:00
Jack Grigg
f49e1e6177
Fix breakage of trait resolution in Rust 1.49.0
...
Previously, `ChallengeScalar` could use the operator traits defined on
the `F: Field` type it wrapped, due to its `impl Deref<Target = F>`.
This was technically ambiguous, and Rust 1.49.0 makes that ambiguity an
error.
We could fix this by adding operator impls with `ChallengeScalar` on the
RHS, but that would conflict with zcash/halo2#111 . Instead we manually
dereference every challenge scalar when used in an arithmetic operation.
2021-01-06 00:48:29 +00:00
Jack Grigg
90c50fdd11
Refactor permutation proofs to reflect the separate permutations
2020-12-22 23:51:32 +00:00
Jack Grigg
62cace289b
Add a few comments to the permutation construction code
...
We mainly point at the design document that describes the algorithm.
2020-12-22 20:25:33 +00:00
Jack Grigg
838d21f2be
Refactor permutation keygen to reflect the separate permutations
2020-12-22 18:11:42 +00:00
Sean Bowe
9df7b5386f
Account more rigorously for the degrees of permutations' and lookups' constraints.
2020-12-22 08:59:08 -07:00
Sean Bowe
65ed1d8568
Check h_evals/h_commitments lengths in vanishing argument verifier.
2020-12-22 08:59:06 -07:00
therealyingtong
8360b94f89
Extract plonk::vanishing::{Argument, Proof} from prover and verifier
...
Co-authored-by: Jack Grigg <jack@electriccoin.co>
2020-12-08 00:57:14 +08:00
therealyingtong
e5f55a8576
Abstract add_rotation() helper in plonk::circuit
2020-12-06 07:19:44 +08:00
therealyingtong
4273bbb2ba
[Documentation] Consistently use zero-based numbering
2020-12-06 07:10:09 +08:00
ying tong
30c13d5a6a
Further cleanups
...
Co-authored-by: ebfull <ewillbefull@gmail.com>
2020-12-05 13:14:50 +08:00
ying tong
ecc805fa35
Correct privacy of lookup structs + minor cleanups
...
Co-authored-by: str4d <jack@electriccoin.co>
2020-12-04 09:19:15 +08:00
therealyingtong
2284bbd0d8
Deduplicate Argument::commit_permuted() and rename {input,table}_values -> {input,table}_columns
2020-12-03 14:00:16 +08:00
therealyingtong
9a3d1b1d05
Optimisations and documentation updates
2020-12-03 12:54:25 +08:00
therealyingtong
e51ab7eaa7
Linearise state transition from Argument -> Permuted -> Committed
2020-12-03 12:11:00 +08:00
therealyingtong
0a85e93714
Add lookup to circuit and test
2020-12-03 10:50:20 +08:00
therealyingtong
0c81e9adab
Use lookup mod in plonk::prover and plonk::verifier
2020-12-03 10:50:20 +08:00
therealyingtong
19c1b20063
Add lookup::verifier methods
2020-12-03 10:50:20 +08:00
therealyingtong
c692311a12
Add Evaluated::open() and Evaluated::build() to lookup::prover
2020-12-03 10:50:20 +08:00
therealyingtong
6ccf58fc7c
Add Constructed::evaluate() to lookup::prover
2020-12-03 10:50:20 +08:00
therealyingtong
39df4954b5
Add Committed::construct() to lookup::prover
2020-12-03 10:50:20 +08:00
therealyingtong
2d0f4a11e3
Add commit_product() to lookup::prover
2020-12-03 10:50:20 +08:00
therealyingtong
46eed7be93
Add commit_permuted() in lookup::prover
2020-12-03 10:50:20 +08:00
therealyingtong
02344eb711
Add lookup mod and structs
2020-12-03 10:50:20 +08:00
therealyingtong
2ba44cff9f
Add theta challenge
2020-12-03 10:50:20 +08:00
therealyingtong
5d891e029d
Add fixed_values to ProvingKey
2020-12-03 10:50:20 +08:00
Sean Bowe
2e65229920
Remove unnecessary Clone impl from plonk::permutation::prover::Committed.
2020-12-02 09:50:45 -07:00
Jack Grigg
3d6afd7b8e
permutation: Clean up opening chains
2020-12-01 22:09:50 +00:00
Jack Grigg
dd3d1dd68b
Small type annotation cleanups
2020-12-01 21:49:07 +00:00
Jack Grigg
a63e6e25d8
Restrict visibility of PLONK challenges to plonk module
2020-12-01 21:14:14 +00:00
Jack Grigg
7422efca72
s/permutation::Proof::commit/permutation::Argument::commit
...
Once we refactor the permutation argument implementation to be integrated
as Vec<permutation::Proof>, we can change this again to just map from the
Vec<permutation::Argument> inside ConstraintSystem.
2020-12-01 21:10:31 +00:00
Jack Grigg
66240800a3
Move permutation keygen into plonk::permutation::keygen
2020-12-01 21:10:31 +00:00
Jack Grigg
f63f3ff2af
Introduce typed challenge scalars
...
This also centralises the challenge generation logic in Challenge::get,
ensuring it is consistent across the codebase.
2020-12-01 21:09:03 +00:00
Jack Grigg
4a3b830165
Extract permutation argument into a submodule
2020-12-01 21:03:31 +00:00
Jack Grigg
cdbc41148a
Migrate to ff traits
...
The `Field` trait in this crate is now `FieldExt: ff::PrimeField`.
2020-12-01 20:55:03 +00:00
Jack Grigg
875c223748
Simplify h_poly expression evaluation in Proof::create
2020-11-24 23:43:48 +00:00
Jack Grigg
61c9392475
Remove query allocations from Proof::create
...
multiopen::Proof::create takes `instances: IntoIterator`, so we can just
pass it an iterator directly.
2020-11-24 18:25:55 +00:00
Jack Grigg
6360da1f4e
Remove query allocations from Proof::verify
...
multiopen::Proof::verify takes `queries: IntoIterator`, so we can just
pass it an iterator directly.
2020-11-24 18:23:27 +00:00
Jack Grigg
7f29ab913d
Simplify h(x_3) computation in verifier using Horner's rule
...
Closes zcash/halo2#45
2020-11-24 18:18:45 +00:00
Jack Grigg
feba8e2fdf
Allocate permutation_modified_advice once in Proof::create
2020-11-24 18:18:45 +00:00
str4d
cc5f45231d
Merge pull request #42 from zcash/plonk-benches
...
PLONK benchmarks
2020-11-24 18:14:07 +00:00
therealyingtong
3eb6712c6c
Add aux information to metrics
2020-11-24 09:39:34 +08:00
Jack Grigg
d4424db8d4
Collect some prover metrics
2020-11-23 12:47:51 +00:00
therealyingtong
2375507f4f
Update error handling
2020-11-16 21:26:46 +00:00
therealyingtong
43337dea1b
Make Transcript generic over curve points
...
Co-authored-by: Jack Grigg <jack@electriccoin.co>
2020-11-16 21:26:46 +00:00
ebfull
5d1e1a29db
Merge pull request #51 from zcash/update-ci
...
Update Actions CI with improved workflow
2020-11-11 08:52:59 -07:00
ying tong
a856137619
Minor refactors
...
Co-authored-by: str4d <jack@electriccoin.co>
2020-11-11 13:56:34 +08:00
therealyingtong
766caf9214
Make getters for column index() and column_type()
2020-11-10 00:45:52 +08:00
therealyingtong
0519a522aa
Use TryFrom to convert Column<Any> to other column types
2020-11-10 00:39:08 +08:00
therealyingtong
22b6d5bd70
Cleanups in circuit.rs
2020-11-07 14:27:38 +08:00
therealyingtong
34c6cba537
Add generic query_any_index() and get_any_query_index methods
2020-11-06 12:39:51 +08:00
therealyingtong
075988ae4e
Introduce Column struct and ColumnType trait
2020-11-06 11:29:42 +08:00
therealyingtong
2034179d82
Rename wire -> column
2020-11-06 11:18:12 +08:00
Jack Grigg
10676657f4
Fix stable clippy lints
2020-10-30 01:29:05 +00:00
Jack Grigg
5a6a45c6a8
Fix deref breakage with nightly-2020-10-06
...
I think this is related to rust-lang/rust#77638
2020-10-30 01:21:09 +00:00
therealyingtong
24b85dec67
Remove q_evals.len() = rotations.len() check
...
q_evals should now have the same length as point_sets, which is only constructed in the multiopen verifier.
2020-10-14 00:43:48 +08:00
therealyingtong
89fd6e4d44
Use map_err() when handling multiopen::Proof::create()
...
Co-authored-by: Daira Hopwood <daira@electriccoin.co>
2020-10-14 00:35:36 +08:00
therealyingtong
6cd74999ff
Use ProverQuery and construct_intermediate_sets() in prover
2020-10-14 00:35:25 +08:00
therealyingtong
c3d0a172a7
Create multiopen abstraction
2020-10-14 00:35:25 +08:00
Sean Bowe
2ccddac674
Split proof/input length checks into separate method of verifier
2020-09-29 17:35:24 -06:00
Sean Bowe
9672bf9725
Minor improvements to check_hx()
2020-09-29 17:14:37 -06:00
Sean Bowe
7d8daa5d05
Refactor h_eval computation into separate, more functional code.
...
Co-authored-by: str4d <thestr4d@gmail.com>
2020-09-29 16:56:21 -06:00
Sean Bowe
e275d78c7d
Simplify permutations field of ConstraintSystem
...
Co-authored-by: therealyingtong <yingtong@electriccoin.co>
2020-09-29 08:51:00 -06:00
Sean Bowe
c97da352ee
Remove SRS and replace with ProvingKey/VerifyingKey abstractions
...
Co-authored-by: therealyingtong <yingtong@electriccoin.co>
2020-09-29 08:25:04 -06:00
Sean Bowe
56b6d8bd03
Auxilary wires in PLONK are foux blinded just like fixed wires.
2020-09-25 10:21:15 -06:00
Sean Bowe
2d1f69328f
Rename `OpeningProof` to just `Proof`.
2020-09-25 09:39:32 -06:00
Sean Bowe
a37c926a89
Address clippy lints
2020-09-20 13:09:03 -06:00
Sean Bowe
6620817d81
Return errors from verifier instead of assuming points aren't at infinity in the proof.
2020-09-19 13:47:37 -06:00
Sean Bowe
73d494a72d
Various changes, including restoring permutation argument to advice wires only for now.
2020-09-19 13:31:56 -06:00
therealyingtong
e8839a7579
Refactor wire pattern matching when computing permutation product
2020-09-19 12:39:04 -06:00
therealyingtong
24fe3fae29
Remove aux_commitments computation from Prover; remove blinding factor when accumulator aux_evals
2020-09-19 12:39:04 -06:00
therealyingtong
c772801f8f
Pass aux_lagrange_polys to prover as a slice
2020-09-19 12:39:04 -06:00
therealyingtong
0bdcbb6c67
Introduce Wire enum for use in permutations
2020-09-19 12:39:04 -06:00
therealyingtong
a257308ba2
Add aux wires to ConstraintSystem
2020-09-19 12:39:04 -06:00
therealyingtong
0caf1d2087
Provide aux_commitments to verifier and aux_lagrange_polys to prover
2020-09-19 12:39:04 -06:00
therealyingtong
76c49a4df3
Minor refactor
2020-09-19 23:44:00 +08:00
therealyingtong
33261ec1a0
Recover from OpeningProof::create() failure in PLONK prover
2020-09-19 23:19:30 +08:00
therealyingtong
69a612fb59
Increment blinding factor instead of choosing new random blinding factor
2020-09-19 23:04:17 +08:00
therealyingtong
a6f5d0ad5e
Remove fork from OpeningProof prover; add loop in PLONK prover to try different f_blind values
2020-09-19 16:57:32 +08:00
Sean Bowe
52a85380bc
Rename f_eval to msm_eval.
2020-09-16 13:15:10 -06:00
Sean Bowe
68de5db8c6
Mitigate unnecessary scaling operations in commitment verifier.
2020-09-15 17:42:02 -06:00
Sean Bowe
a886663e05
Incorporate MSM/Guard into PLONK verifier API and arithmetic.
2020-09-15 17:32:39 -06:00
Sean Bowe
643077b150
Rename `ConstraintSystem` to `Assignment`, and `MetaCircuit` to `ConstraintSystem`.
2020-09-13 10:30:02 -06:00
therealyingtong
1eb2a36086
Return MSM from PLONK verifier
2020-09-13 23:10:06 +08:00
therealyingtong
1a52d8f6b8
Add MSM to PLONK verifier signature
2020-09-13 12:32:32 +08:00
therealyingtong
14d1f41e08
Address review comments
2020-09-13 03:03:36 +08:00
therealyingtong
5f1cd6ced2
Only return Guard from OpeningProof.verify()
2020-09-13 00:50:35 +08:00
therealyingtong
d41fcf842b
Modify MSM and Guard structs and methods
2020-09-11 18:57:22 +08:00
therealyingtong
5724706a09
Add MSM and Guard structs in polycommit scheme
2020-09-10 18:51:41 +08:00
Sean Bowe
549232234f
Finish comment on Proof::verify.
2020-09-07 16:34:40 -06:00
Sean Bowe
116659c1ba
Refactor module tree.
2020-09-07 13:07:51 -06:00
Sean Bowe
21f02a73c2
Don't mutate the witness during permutation argument. Also, adds parallelism and reduces state/multiplications.
2020-09-07 09:43:02 -06:00
Sean Bowe
b65e75921b
Remove stale comment
2020-09-06 14:21:28 -06:00
Sean Bowe
190242a4e9
Remove redundant permutation_queries vector.
2020-09-06 14:18:05 -06:00
Sean Bowe
eff149e734
Fix incorrect indexing into advice_cosets during proving.
2020-09-06 14:10:25 -06:00
Sean Bowe
e37d0c946b
Add parallelism in various locations in the prover.
2020-09-06 13:40:06 -06:00
Sean Bowe
3157fdd7d0
Batch inversions during domain setup.
2020-09-06 12:44:36 -06:00
Sean Bowe
ff8f9eb20e
Reduce number of inversions by batch inverting when possible.
2020-09-06 12:29:34 -06:00
Sean Bowe
624eb6a421
Remove unnecessary computation of permutation length in prover.
2020-09-06 11:33:09 -06:00
therealyingtong
503939db05
Minor cleanups
2020-09-06 06:34:29 +08:00
Sean Bowe
965362c1f5
Don't precompute deltaomega; inline its computation.
2020-09-05 14:44:13 -06:00
Sean Bowe
937861c0b8
Add implementation of daira's algorithm for copy constraint enforcement.
2020-09-05 12:56:45 -06:00
Sean Bowe
d7132404ba
Index into q_evals consistently between prover and verifier.
2020-09-05 12:08:56 -06:00
Sean Bowe
869aba389a
Cleanups
2020-09-05 11:40:25 -06:00
Sean Bowe
da9c24bcfa
Obtain permutation product polynomial correctly.
2020-09-05 10:52:40 -06:00
Sean Bowe
114653f366
Fix indexing for permutation argument.
2020-09-04 14:45:05 -06:00
Sean Bowe
a128d5d9b3
Undo unnecessarily complicated negation thing.
2020-09-04 14:25:16 -06:00
therealyingtong
c7c5cf4db6
Rename tmp variables
2020-09-04 20:31:37 +08:00
ying tong
10a4b4252c
Fix current_delta initialisation in verifier
2020-09-04 19:05:08 +08:00
Sean Bowe
06a4cfe13b
Use extended omega for coset in prover.
2020-09-04 04:49:59 -06:00
Sean Bowe
0651359cb8
[WIP] Finish prover
2020-09-03 17:21:44 -06:00
Sean Bowe
6b9ea1dbeb
Precompute deltaomega vector.
2020-09-03 14:31:57 -06:00
Sean Bowe
36d37002fe
Remove unneeded exponentiation of x_3
2020-09-03 14:28:22 -06:00
Sean Bowe
335b629724
Avoid redundant wire queries by searching for an existing query.
2020-09-03 14:26:00 -06:00
Sean Bowe
4a88d52457
Use the correct permutation values from the SRS.
2020-09-03 14:21:13 -06:00
Sean Bowe
d601533bd7
Commit to permutation product polynomial in the prover.
2020-09-03 10:58:48 -06:00
therealyingtong
441dcf0ecc
Compute permutation_evals in prover
2020-09-03 12:29:38 +08:00
therealyingtong
1bc90c4fec
Remove advice_shifted_evals from prover
2020-09-03 12:25:55 +08:00
Sean Bowe
160dabe9c5
Cleanups for verifier of permutation argument
2020-09-02 13:15:40 -06:00
therealyingtong
c44a020de7
Permutation checks in verifier
2020-09-03 00:45:03 +08:00
therealyingtong
bdd48f6037
Add advice_shifted_evals to Proof struct
2020-09-02 23:19:06 +08:00
therealyingtong
2472ec3291
WIP permutation checks in verifier
2020-09-02 23:19:06 +08:00
therealyingtong
0bf73c5d08
Minor fixes to srs.rs
2020-09-02 23:18:43 +08:00
Sean Bowe
a2fca8a02d
Add comments to clarify implementation of permutation argument in SRS generator.
2020-08-31 10:18:55 -06:00
Sean Bowe
dc5df10832
Update structured reference string and API for permutation argument.
2020-08-31 10:01:09 -06:00
therealyingtong
85fd924b15
WIP implement copy() on Variables
2020-08-31 21:51:49 +08:00
Sean Bowe
b453b845b8
Clean up prover implementation
2020-08-27 14:03:43 -06:00
Sean Bowe
154568c387
Clean up verification implementation
2020-08-27 13:52:55 -06:00
Sean Bowe
35c4bd4dd9
Improve naming of offsets/indexes and mappings.
2020-08-27 13:27:24 -06:00
Sean Bowe
9852913a32
Add some comments and documentation.
2020-08-27 10:46:54 -06:00
Sean Bowe
1b6c0e9a8b
Remove _x suffix from variable names
2020-08-27 10:25:36 -06:00
Sean Bowe
9099e9d9ba
Properly invert when computing expected opening.
2020-08-27 10:16:42 -06:00
Sean Bowe
ad106f1119
(WIP) broken implementation of generalized PLONK
2020-08-27 10:10:55 -06:00
Sean Bowe
6051814c4b
Split coset step up so that we can query wires at multiple spots.
2020-08-24 13:50:52 -06:00
Sean Bowe
36f9e87056
Implementation of gate/query API
2020-08-24 08:28:42 -06:00
Sean Bowe
c20f3fdf1a
Give fixed and advice wires separate types
2020-08-23 13:26:04 -06:00
Sean Bowe
7edffe0197
Allow commitments to generic advice wire polynomials
2020-08-22 16:10:27 -06:00
Sean Bowe
c16141be9a
Introduce `Variable` type
2020-08-22 15:15:39 -06:00
Sean Bowe
9dfc6ac379
Add first pieces of the API.
2020-08-22 15:09:47 -06:00
Sean Bowe
dd1ad9f114
Initial commit
2020-08-22 14:15:39 -06:00