wborgeaud
71f64329c7
Minor
2021-08-24 08:30:34 +02:00
wborgeaud
d9b0778eef
Change zip order
2021-08-17 08:47:52 +02:00
wborgeaud
5a9c5b295c
Minor
2021-08-16 10:41:12 +02:00
wborgeaud
b366482866
The mother of all arithmetic optimizations
2021-08-16 10:18:10 +02:00
Daniel Lubarov
e4cbee2b57
Disable ZK in large_config ( #180 )
...
* Disable ZK in large_config
Speeds up the tests from ~6m to ~1m (debug mode). `large_config` is crate-private so I don't think we need to worry about real users forgetting ZK, and I don't think ZK seems important in these tests, though we should probably have ZK enabled for a couple tests.
A couple tests need ZK or they fail; I added a TODO to look later.
This led to a few other changes:
- Fixed a bug where `trim` could truncate the final poly to a non-power-of-two length. This was improbable when ZK is on due to randomization.
- Gave a few methods access to the whole `CircuitConfig` vs `FriConfig` -- sort of necessary for the above fix, and I don't think there's much downside.
- Remove `cap_height` from `FriConfig` -- didn't really need it any more after giving more methods access to `CircuitConfig`, and having a single copy of the param feels cleaner/safer to me.
* PR feedback
2021-08-14 10:01:10 -07:00
Daniel Lubarov
f3bfd66657
Add a BoolTarget ( #179 )
...
It's just a wrapper around `Target`, which signifies that the wrapped `Target` has already been range checked. Should make it easier to audit code that expects bools.
2021-08-14 08:53:39 -07:00
Daniel Lubarov
9c42fef997
Little refactor ( #178 )
2021-08-14 08:47:03 -07:00
wborgeaud
8aaa9401ac
Add comment for slope
2021-08-14 11:48:13 +02:00
wborgeaud
43641174cb
Comments
2021-08-13 18:00:40 +02:00
wborgeaud
73ab11f420
More arithmetic optimizations
2021-08-13 11:35:20 +02:00
Daniel Lubarov
b20d6dc191
Minor optimizations ( #174 )
2021-08-12 13:32:49 -07:00
Daniel Lubarov
38505b71ae
FRI refactor ( #172 )
...
I sort of "shifted" the loop in `fri_verifier_query_round` so that `fri_combine_initial` is called before the loop, and all `compute_evaluation` calls are in the loop (rather than the final one being outside). This lines up with my mental model of FRI, and I think it's more natural as it results in a loop with no branches, no `i - 1`s, and less state stored between iterations. Also added some comments etc.
Should be functionally equivalent to the old version.
2021-08-12 07:27:33 -07:00
wborgeaud
debc0e9cb3
Merge pull request #170 from mir-protocol/merkle_cap
...
Replace Merkle roots with Merkle caps
2021-08-11 08:40:12 +02:00
wborgeaud
9c01e1d942
PR feedback
2021-08-11 08:33:58 +02:00
Daniel Lubarov
090cf79787
Replace some old division code ( #171 )
...
- Delete unsafe methods
- Have related methods call the new div_add_extension method to simplify
2021-08-10 11:48:53 -07:00
wborgeaud
9f004c9664
Clippy
2021-08-10 16:18:42 +02:00
wborgeaud
e73c1d7769
Cleaning / Renaming
2021-08-10 15:53:27 +02:00
wborgeaud
ad8428f38f
12604 gates, 318637 bytes
2021-08-10 15:28:41 +02:00
wborgeaud
684df1e057
Pass cap index
2021-08-10 15:03:29 +02:00
wborgeaud
f2c423ee61
save 13 gates
2021-08-10 14:19:12 +02:00
wborgeaud
57f2b5b763
working
2021-08-10 13:52:50 +02:00
wborgeaud
ce71b536bf
First pass
2021-08-10 13:33:44 +02:00
wborgeaud
b15e36d29c
PR feedback
2021-08-10 09:07:01 +02:00
wborgeaud
f528835a59
Minor
2021-08-09 14:05:57 +02:00
wborgeaud
ff68b66bbb
Add div_add
2021-08-09 13:46:20 +02:00
wborgeaud
417e6055ae
Optimize coset in compute_evaluation
2021-08-09 13:21:42 +02:00
wborgeaud
d27dd92af9
Some more optimization
2021-08-09 13:08:09 +02:00
Daniel Lubarov
97c2b6b9a2
Bit of refactoring in FRI code ( #162 )
...
* Bit of refactoring in FRI code
- Inline `OpeningSet[Target]` and their `verify` methods, as they had become fairly trivial wrappers
- Have the challenger observe the openings and generate alpha inside `verify_fri_proof`. Conceptually I think of it as part of the batch-FRI protocol, and it minimizes redundancy.
* Fix tests
2021-08-08 09:14:07 -07:00
Daniel Lubarov
018fb005f8
Move stuff around ( #135 )
...
No functional changes here. The biggest change was moving certain files into new directories like `plonk` and `iop` (for things like `Challenger` that could be used in STARKs or other IOPs). I also split a few files, renames, etc, but again nothing functional, so I don't think a careful review is necessary (just a sanity check).
2021-07-29 22:00:29 -07:00
Daniel Lubarov
df03c22c48
Fix order
2021-07-29 09:12:24 -07:00
Daniel Lubarov
5f79b9630e
Update division calls ( #132 )
...
We have two division methods: one "unsafe" one, which permits 0/0 = anything, and one "safe" one, for which 0/0 results in an unsatisfiable instance. The latter is slightly more expensive.
I switched a few calls over to safe division, where unsafe division didn't seem sound (or at least it wasn't obvious). For calls where unsafe division did seem sound, I added comments explaining why.
Closes #97 .
2021-07-28 18:06:32 -07:00
Daniel Lubarov
9081ae7337
Reduce noise in FRI logging ( #129 )
...
* Reduce noise in FRI logging
Previously, all logs related to gate counts were at the `Debug` log level. This PR gives us more flexibility to adjust the log levels of particular scopes.
In particular, our circuit checks 40 FRI queries, and we log a bunch of steps for each query, creating a lot of noise. With this change, we log just a single FRI query at the `Debug` level, and demote others to the `Trace` level.
With `RUST_LOG=debug`, our logs now look like
```
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] 17631 gates to root
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | 8 gates to observe proof and generates challenges
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | 4150 gates to evaluate the vanishing polynomial at our challenge point, zeta.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | 3184 gates to evaluate gate constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 227 gates to evaluate InterpolationGate { num_points: 4, _phantom: PhantomData }<D=4> constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 867 gates to evaluate <R=101> GMiMCGate { ... } constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 576 gates to evaluate BaseSumGate { num_limbs: 63 } + Base: 2 constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 78 gates to evaluate ArithmeticExtensionGate constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 288 gates to evaluate BaseSumGate { num_limbs: 31 } + Base: 2 constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 115 gates to evaluate InsertionGate { vec_size: 3, _phantom: PhantomData }<D=4> constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 26 gates to evaluate BaseSumGate { num_limbs: 2 } + Base: 2 constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 633 gates to evaluate ReducingGate { num_coeffs: 21 } constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 4 gates to evaluate ConstantGate constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 11 gates to evaluate PublicInputGate constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 2 gates to evaluate NoopGate constraints
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | 16 gates to check vanishing and quotient polynomials.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | 13336 gates to verify FRI proof
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | 6 gates to recover the random betas used in the FRI reductions.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | 4 gates to check PoW
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | 104 gates to precompute reduced evaluations
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | 330 gates to verify one (of 40) query rounds
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 95 gates to check FRI initial proof
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | | 22 gates to verify 0'th initial Merkle proof
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | | 33 gates to verify 1'th initial Merkle proof
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | | 20 gates to verify 2'th initial Merkle proof
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | | 20 gates to verify 3'th initial Merkle proof
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 34 gates to compute x from its index
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 32 gates to combine initial oracles
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 17 gates to verify FRI round Merkle proof.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 10 gates to infer evaluation using interpolation
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 15 gates to verify FRI round Merkle proof.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 10 gates to infer evaluation using interpolation
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 13 gates to verify FRI round Merkle proof.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 10 gates to infer evaluation using interpolation
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 11 gates to verify FRI round Merkle proof.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 10 gates to infer evaluation using interpolation
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 9 gates to verify FRI round Merkle proof.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 10 gates to infer evaluation using interpolation
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 7 gates to verify FRI round Merkle proof.
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 10 gates to infer final evaluation using interpolation
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | | 8 gates to evaluate final polynomial
```
This bit corresponds to the single FRI query being shown:
```
[2021-07-26T21:07:45Z DEBUG plonky2::context_tree] | | 330 gates to verify one (of 40) query rounds
```
* Minor cleanup
* Address feedback
2021-07-26 16:21:14 -07:00
wborgeaud
1e5a503a14
Merge pull request #127 from mir-protocol/reducing_gate
...
Add `ReducingGate` to compute reductions by `alpha` of base field elements
2021-07-25 18:14:40 +02:00
wborgeaud
c16d93ab33
scaling.rs -> reducing.rs
2021-07-23 17:31:00 +02:00
wborgeaud
ca540a8475
Working fri_combine_initial
2021-07-23 17:29:31 +02:00
wborgeaud
19140e39b2
Update comment
2021-07-23 15:01:45 +02:00
wborgeaud
f325586beb
Replace exp_from_complement_bits with simpler method
2021-07-23 14:58:41 +02:00
wborgeaud
6f8053cc37
Forgot to exponentiate from bits in computation of subgroup_x. Saves 80 gates.
2021-07-23 08:53:00 +02:00
wborgeaud
9a1c289f8e
Merge branch 'main' into remove_acc_in_gmimc
...
# Conflicts:
# src/gadgets/arithmetic.rs
2021-07-23 08:16:23 +02:00
Nicholas Ward
3612b9f05e
Merge branch 'main' into order_bigint
2021-07-22 13:28:48 -07:00
wborgeaud
e87aa2c90b
Renaming
2021-07-22 16:25:47 +02:00
wborgeaud
1d92191227
Make exp_complement_bits take an iterator to avoid cloning.
2021-07-22 16:18:13 +02:00
wborgeaud
c729a3c235
Remove all non-bits indices in the FRI verifier
2021-07-22 16:07:07 +02:00
wborgeaud
22fcc3bc06
Pass bits around
2021-07-22 15:10:55 +02:00
wborgeaud
be2e870aee
PR feedback
2021-07-22 06:50:07 +02:00
Nicholas Ward
7f92a33964
cargo fmt
2021-07-21 13:05:40 -07:00
Nicholas Ward
1dd850b0e5
fixes
2021-07-21 13:05:32 -07:00
wborgeaud
6fff9363c6
Use mul_many
2021-07-21 20:06:29 +02:00
wborgeaud
a54a4e5830
Merge branch 'main' into avoid_rotating
2021-07-21 20:02:22 +02:00
wborgeaud
7c1c082a39
Comments
2021-07-21 19:53:32 +02:00