Commit Graph

682 Commits

Author SHA1 Message Date
Jack Grigg b46ef35db5 clippy: Allow unused imports
We can remove this once `pasta_curves` has been updated to remove
`CurveAffine::read`.
2021-10-01 13:33:47 +01:00
Jack Grigg 3fba7434d1 Use `ff::PrimeField::root_of_unity` instead of `FieldExt::ROOT_OF_UNITY` 2021-09-30 23:06:32 +01:00
Jack Grigg 9dc2738305 Remove usages of `CurveAffine::{read, write}`
A new `CurveRead` helper trait brings in the `CurveAffine::read` impl.
2021-09-30 23:06:32 +01:00
Jack Grigg 17b8fe1baa Use `ff::Field::pow_vartime` instead of `FieldExt::pow` 2021-09-30 22:54:42 +01:00
Jack Grigg a5a3c8ca63 Use `From<u64>` instead of `FieldExt::from_u64` 2021-09-30 22:53:00 +01:00
Jack Grigg 0e6b0344f5 Use `ff::PrimeField::{from_repr, to_repr}` instead of `FieldExt` 2021-09-30 22:53:00 +01:00
Jack Grigg 9693065a00 Use `ff::BatchInvert` now that we have upstreamed it 2021-09-30 22:35:33 +01:00
Jack Grigg 81622bf847 ff 0.11, group 0.11, pasta_curves 0.2 2021-09-02 23:05:18 +01:00
Jack Grigg 3731580790 dev: Add helper method to print queries per-constraint to a CSV file 2021-07-29 01:19:51 +01:00
str4d 27c4187673
Merge pull request #354 from daira/table-refactoring
Add a `Layouter::assign_table` API
2021-07-27 20:52:36 +01:00
str4d 6dcc61898f
Add `used_columns` to `SimpleTableLayouter` `Debug` impl
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-07-27 17:55:34 +01:00
str4d eab1884504
Add code comments from review
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
Co-authored-by: ying tong <yingtong@z.cash>
2021-07-27 17:49:52 +01:00
Jack Grigg 49a763cd61 Rename `Table::assign_fixed` to `Table::assign_cell` 2021-07-27 17:48:13 +01:00
Jack Grigg 57877f5f18 Fix clippy lints 2021-07-27 16:04:27 +01:00
Jack Grigg e855ac6adb Add `halo2::plonk::circuit::TableColumn` struct
This type is required by the `ConstraintSystem::lookup` API, and cannot
be converted into a `Column<Fixed>` via the public API, forcing chip
developers to use `Layouter::assign_table` API to load tables. This is
a safety feature, as lookup table rows need to be default-value-filled
by the layouter (or else the table would have an implicit default value
of all-zeroes which could introduce soundness bugs into circuits).
2021-07-27 15:52:42 +01:00
Jack Grigg 8d8e76dc82 dev: Minor fixes to `CircuitLayout`
- Default view height is now the circuit size.
- Cells are now always shaded on top of any drawn regions.
2021-07-27 02:25:46 +01:00
Jack Grigg 7cf58661d8 dev: Add used/usable row metadata to `CircuitLayout`
- Black line showing the total used rows.
- Red shading for the unusable rows of the circuit.
- Annotations for the number of used and usable rows.
2021-07-27 02:25:07 +01:00
Jack Grigg dac3bf31e4 dev: Add `CircuitCost::marginal_proof_size` API 2021-07-27 02:21:46 +01:00
Daira Hopwood e3e39455be Table refactoring.
Co-authored-by: Jack Grigg <jack@electriccoin.co>
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
2021-07-27 01:34:51 +01:00
Jack Grigg 334036b942 dev: Add `halo2::dev::CircuitGates` developer tool 2021-07-26 02:53:13 +01:00
Jack Grigg 7355462a9f Add `Expression::Negated` enum case
We were previously representing this as `Expression::Scaled(poly, -1)`
which was less efficient.
2021-07-26 01:59:06 +01:00
ebfull 101d7c79f3
Apply suggestions from code review
Co-authored-by: str4d <jack@electriccoin.co>
2021-07-25 18:39:42 -06:00
Sean Bowe 88d34924eb
Account for changes from #350. 2021-07-24 17:17:49 -06:00
Sean Bowe b47889ec51
Merge branch 'main' into selector-optimization 2021-07-24 17:17:03 -06:00
Sean Bowe 77805d9e8e
fix minor typo 2021-07-24 17:10:59 -06:00
Sean Bowe 2a253b89b0
Refactor the selector optimization pass so it can be independently proptested. 2021-07-24 16:35:45 -06:00
Sean Bowe 634d14a016
Remove spurious code from review suggestion. 2021-07-24 10:43:50 -06:00
ebfull 754dd62c92
Apply suggestions from code review
Co-authored-by: str4d <jack@electriccoin.co>
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-07-24 10:27:50 -06:00
Jack Grigg 92645b6ee9 Fix SimpleFloorPlanner's handling of global constants
The previous behaviour assumed that all regions were always assigned
in increasing start-row order. That assumption is broken in e.g. the
Merkle path tests, which position two Sinsemilla calls in parallel.
The layouter was working fine for current tests, but in an adjacent
PR that changed the Merkle path chip's behaviour, it started to
produce invalid circuits.

The new behaviour emulates the `floor_planner::V1` behaviour in an
(intentionally) inefficient way: constants are positioned immediately
after the regions they are assigned to, in the first constants column.
If that column is also used in regions, those regions will now be
positioned without overlapping any assigned global constants.

Co-authored-by: therealyingtong <yingtong@z.cash>
2021-07-23 16:39:37 +01:00
Sean Bowe 28439414f4
(attempt 1 at implementing daira's algorithm) 2021-07-23 08:14:15 -06:00
Sean Bowe e23d148b72
minor clippy fixes 2021-07-22 12:07:17 -06:00
Sean Bowe 5af7a7abfa
Only accept fixed columns in lookup argument tables. 2021-07-22 10:28:52 -06:00
Sean Bowe 145d096dcd
Distinguish between simple and non-simple selectors, and allow the former in lookup arguments. 2021-07-22 10:07:20 -06:00
Sean Bowe 26982a6050
Update circuit graph tooling to account for selector optimization. 2021-07-22 10:06:48 -06:00
Sean Bowe 1254e4f245
Ensure that selectors are only used in simple ways.
You cannot add an expression containing a Selector to another expression.

You cannot multiply an expression containing a Selector by another expression
that also has a selector.
2021-07-21 14:43:31 -06:00
Sean Bowe f6895555bb
Update cost model logic to account for selector optimizations. 2021-07-21 13:51:48 -06:00
Sean Bowe 2cc60838a5
Use locally generated ConstraintSystem to avoid performing optimizations twice. 2021-07-21 13:34:56 -06:00
Sean Bowe 23d7d6532d
Properly substitute selectors in lookup expressions during optimization pass. 2021-07-21 13:12:05 -06:00
Sean Bowe 382cd5a7ea
Create actual selector columns only during an optimization pass. 2021-07-21 12:55:19 -06:00
Sean Bowe dfbd5e3332
Distinguish between selectors and all other columns in layouter using RegionColumn. 2021-07-21 10:19:35 -06:00
str4d 4283713ec7
Merge pull request #340 from zcash/339-dev-proof-cost
dev: Add CircuitCost tool with proof size measurement
2021-07-21 16:45:03 +01:00
str4d a2fb36b6ee
Merge pull request #344 from zcash/325-column-ordering
Change canonical column ordering to Instance < Advice < Fixed
2021-07-21 16:44:50 +01:00
Jack Grigg 4e6c857854 Add test cases exercising Error::NotEnoughColumnsForConstants 2021-07-21 16:44:14 +01:00
str4d 6420a25c8c
Typo fix
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-07-21 16:35:44 +01:00
Jack Grigg cb9366d656 Fix more clippy lints 2021-07-21 12:00:25 +01:00
Jack Grigg 62f088e2f2 Fix clippy lints 2021-07-21 09:31:27 +08:00
Jack Grigg 629c13eae8 Add `Region::constrain_constant` API
This is the non-assigning subset of `Region::assign_advice_from_constant`.
2021-07-21 09:31:27 +08:00
Jack Grigg 7adf695293 Add constants support to `floor_planner::V1`
Co-authored-by: therealyingtong <yingtong@z.cash>
2021-07-21 09:31:27 +08:00
Jack Grigg 9e2cba917f Update SimpleFloorPlanner with constants support 2021-07-21 09:31:27 +08:00
Jack Grigg ed2295b077 Add trait methods and general APIs for defining circuit constants
During circuit configuration, fixed columns can be marked as suitable
for containing arbitrary constant values (i.e. the columns aren't
encumbered by constraints that preclude arbitrary values).

During synthesis, circuits can now request that the layouter assign
an advice cell within a region, to some specified constant value. It
is the layouter's responsibility to find space within the previously
marked fixed columns, in which to assign the constant.

This commit intentionally does not compile.
2021-07-21 09:31:27 +08:00
str4d c99347be4a
Minor style tweak to Column Ord impl
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-07-20 21:43:24 +01:00
therealyingtong 958cc7ee4b Introduce metadata::Column struct. 2021-07-20 20:55:11 +01:00
Jack Grigg 4417b4e480 Change canonical column ordering to Instance < Advice < Fixed
Closes zcash/halo2#325.
2021-07-20 20:24:37 +01:00
Jack Grigg 87beee32f4 dev: Add CircuitCost tool with proof size measurement 2021-07-20 03:17:56 +01:00
Sean Bowe ce319c8da8
Add clarifying comment to `distribute_powers_zeta`. 2021-07-19 09:08:24 -06:00
Jack Grigg 1e33570c7a cargo fmt 2021-07-19 14:46:02 +01:00
str4d c0d2aa1286
Merge branch 'main' into coset-optimization 2021-07-19 14:43:37 +01:00
str4d 96b1196bce
Merge pull request #330 from zcash/permutation-common
Merge the common pieces of the permutation argument into a separate proof component
2021-07-19 14:38:24 +01:00
str4d dda1be4731
Merge pull request #336 from zcash/dev-layout-equality
dev: Enable visualizing equality constraints in circuit layouts
2021-07-16 23:03:01 +01:00
str4d 874b52a7f7
dev: Fix typo in doc comment
Co-authored-by: Daira Hopwood <daira@jacaranda.org>
2021-07-16 23:02:18 +01:00
Jack Grigg 3fe004a794 dev: Reduce opacity of marked equality cells to add a border 2021-07-16 23:00:49 +01:00
Jack Grigg 56a6107cdf dev: Enable visualizing equality constraints in circuit layouts 2021-07-16 15:01:55 +01:00
Jack Grigg 8e71415933 MockProver: Limit table expression evaluations to usable rows
Also refactors the lookup argument to only compute table expressions
once per lookup argument.
2021-07-16 00:26:16 +01:00
Sean Bowe b0a4a19093
Rename CommonCommitted to CommonEvaluated. 2021-07-15 15:22:51 -06:00
Jack Grigg 7dae8698b6 MockProver: Poison unusable advice cells
Circuit developers need to use selectors (or equivalent) to prevent their
custom gates from being active on unusable rows. By marking the advice
cells in these rows as "poisoned" and tracking this through expressions,
we can provide a better error message to developers that indicates the
missing selector issue.

Closes zcash/halo2#329.
2021-07-15 22:12:50 +01:00
Sean Bowe 3cae0d5f19
Merge the common pieces of the permutation argument into a separate proof component. 2021-07-15 14:30:52 -06:00
ebfull 4a9e329ded
Merge pull request #316 from zcash/zk-changes-again
Final ZK changes
2021-07-14 16:19:06 -06:00
Sean Bowe 070beafa53
Address minor review comments. 2021-07-14 15:19:26 -06:00
Sean Bowe 0a3ae6f1eb
Add clarifying comment.
Co-authored-by: Jack Grigg <jack@electriccoin.co>
2021-07-14 10:17:44 -06:00
Sean Bowe bbe06ac61e
Add clarifying comment.
Co-authored-by: Jack Grigg <jack@electriccoin.co>
2021-07-14 10:08:49 -06:00
Sean Bowe af01af8fa5
Remove unnecessary collect. 2021-07-14 10:07:30 -06:00
Sean Bowe 11a1fc7d4a
Fix stale comment 2021-07-14 09:48:56 -06:00
Sean Bowe 99a0e675f1
Minor changes to comments. 2021-07-14 09:46:29 -06:00
Sean Bowe b4bd4ada9a
Clarify barycentric weight doc comment. 2021-07-14 09:19:56 -06:00
ebfull 29fc0a781a
Simplify `l_i_range` using `rotate_omega`.
Co-authored-by: str4d <jack@electriccoin.co>
2021-07-14 09:07:21 -06:00
ebfull dfe716dbc1
Describe `l_i_range` implementation in doc comment
Co-authored-by: str4d <jack@electriccoin.co>
2021-07-14 09:05:40 -06:00
Sean Bowe 74f3e1c6d9
Fix omitted notation to explicitly designate l_last and l_blind as polynomials. 2021-07-13 16:30:52 -06:00
Sean Bowe 4cd0bffc8e
Collapse random_{poly,blind} fields back into Committed in other structures. 2021-07-13 16:19:44 -06:00
Sean Bowe 8caafc0abf
Change n to u in sanity check. 2021-07-13 16:12:21 -06:00
Sean Bowe dd41cfa022
fix clippy lint 2021-07-13 16:02:41 -06:00
Sean Bowe d0950c6d4c
Add explanation of lookup table degree nuances. 2021-07-13 16:02:27 -06:00
Sean Bowe 0dc4447ad8
Change verification API to allow the caller to supply instances as slices of scalars rather than commitments. 2021-07-13 12:08:16 -06:00
Sean Bowe f532b7e973
Return error if supplied instance slice is too large. 2021-07-13 11:44:58 -06:00
Sean Bowe f314f66f69
Fix clippy lint 2021-07-13 10:11:38 -06:00
Sean Bowe 574ce73d80
Minor changes to `distribute_powers_zeta`. 2021-07-13 10:10:03 -06:00
Sean Bowe 9155cd174b
Introduce `set_minimum_degree` to avoid performance regression in benchmark. 2021-07-12 15:28:16 -06:00
Sean Bowe 827132302a
Remove the ability to rotate when switching to the extended domain. 2021-07-12 12:57:09 -06:00
Sean Bowe a091795aca
Switch to computing only Rotation::cur() cosets until rotation is needed. 2021-07-12 12:53:12 -06:00
Sean Bowe 55424c8c2f
Add `{mul,add,sub}_extended` and `rotate_extended` methods to `EvaluationDomain`. 2021-07-12 11:44:09 -06:00
Sean Bowe d8df7a12d5
Fix clippy lint on beta. 2021-07-10 08:52:30 -06:00
Sean Bowe cc84e9bf52
Additional documentation suggestions from @str4d. 2021-07-10 08:47:57 -06:00
Sean Bowe 50768bff20
Add comment explaining the extra caution in minimum_rows(). 2021-07-10 08:43:01 -06:00
Sean Bowe 9023161988
Add bounds check to Assignment::query_instance impls. 2021-07-10 08:25:00 -06:00
Sean Bowe c4e2554654
Incorporate documentation improvements suggested by @str4d. 2021-07-10 08:20:34 -06:00
Sean Bowe 1be7bf1df0
Address review comments from @daira. 2021-07-10 08:12:08 -06:00
Sean Bowe 20653acc39
Document `permutation::Argument::required_degree`. 2021-07-10 07:52:42 -06:00
Sean Bowe fc946d99bf
Use Option in sanity-check rather than a random value. 2021-07-09 12:47:36 -06:00
Sean Bowe 9e6277ef6b
Make `usable_rows` temporary to avoid duplicative code. 2021-07-09 12:45:51 -06:00
Sean Bowe 326cae153e
Fix minor typos in comments. 2021-07-09 12:44:27 -06:00
Sean Bowe 90be1c29ab
Fix bug in sanity check during lookup argument witness creation. 2021-07-09 12:41:52 -06:00