99 Commits

Author SHA1 Message Date
Nicholas Ward
3612b9f05e Merge branch 'main' into order_bigint 2021-07-22 13:28:48 -07:00
Nicholas Ward
1dd850b0e5 fixes 2021-07-21 13:05:32 -07:00
Daniel Lubarov
b8ce1d1967
Public inputs (#113)
With this approach, we don't need `Target::PublicInput`; any routable `Target` can be marked as a public input via `register_public_input`.  The circuit itself hashes these targets, and routes the hash output to the first four wires of a `PublicInputGate`, which is placed at an arbitrary location in the circuit.

All gates have direct access to the purported hash of public inputs. We could think of them as accessing `PI_hash_i(x)` (as in Plonk), but these are now (four) constant functions, so they effectively have direct access to the hash itself.

`PublicInputGate` checks that its first four wires match this purported public input hash. The other gates ignore the hash.

Resolves #64.
2021-07-21 08:26:19 -07:00
Daniel Lubarov
8438d23937
Tree of scopes (#106)
* Tree of scopes

This is an extension of the context concept.

Earlier I was planning to store a simple stack of contexts, but I ended up storing the whole history, in a tree structure. This gives us more control over the output, i.e. we can print the gate count of a parent scope before those of its child scopes, which seems more user-friendly.

Sample gate count output:

    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] 27829 gates to root
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | 2373 gates to evaluate the vanishing polynomial at our challenge point, zeta.
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | | 1284 gates to evaluate gate constraints
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | 25312 gates to verify FRI proof
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | | 650 gates to verify 0'th FRI query
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | | | 96 gates to check FRI initial proof
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | | | 65 gates to compute x from its index
    [2021-07-19T18:09:24Z INFO  plonky2::circuit_builder] | | | 233 gates to combine initial oracles
    ...

Sample copy constraint failure:

    Error: Copy constraint 'root > verify FRI proof > verify 0'th FRI query > check FRI initial proof > verify 0'th initial Merkle proof > check Merkle root: 0-th hash element' between wire 12 of gate #2550 [...] and wire 0 of gate #0 [...] is not satisfied. Got values of 6861386743364621393 and 0 respectively.

* No min

* info -> debug

* Move to its own file
2021-07-19 12:22:18 -07:00
wborgeaud
9baea1ae26 Trim final poly and check FRI arity 2021-07-19 16:24:21 +02:00
Daniel Lubarov
d11bcd1928
Optional zk (#101)
* Make ZK optional

* Remove rate from FriConfig

Seems redundant, and we've had some tests break due to the two fields not matching.

* zero_knowledge: false in bench
2021-07-18 23:24:33 -07:00
wborgeaud
a6bc83217b Minor 2021-07-15 10:55:18 +02:00
wborgeaud
7d41785ac6 Comments 2021-07-15 10:24:11 +02:00
wborgeaud
2e12ee8e82 Minor 2021-07-15 10:13:13 +02:00
wborgeaud
7dec6efc6c Rewrite Markable to avoid Arcs 2021-07-15 09:52:42 +02:00
wborgeaud
7793b5a956 Identify problem in GMiMc 2021-07-14 20:54:30 +02:00
wborgeaud
c3d53392c4 Problem in permutation argument 2021-07-14 08:14:00 +02:00
wborgeaud
139430c549 Fixed GMiMC 2021-07-13 09:15:16 +02:00
wborgeaud
b50a9809db Start recursive verifier test 2021-07-08 17:16:26 +02:00
wborgeaud
0512817d68 quotient_degree -> quotient_degree_factor 2021-07-08 15:16:05 +02:00
wborgeaud
805ebb1b0d Working verifier 2021-07-08 15:13:29 +02:00
wborgeaud
4a27a67bab Constraint degree should be at least 3 2021-07-06 11:10:08 +02:00
wborgeaud
85d162cdbc Merge branch 'main' into fix_z_check 2021-07-06 11:00:29 +02:00
wborgeaud
50cafca705 Partial products of quotient 2021-07-06 10:51:32 +02:00
wborgeaud
73c1733e6a Clippy 2021-07-02 14:45:05 +02:00
wborgeaud
b6554ba2ec Replace indices: HashMap with indices: Fn(T)->usize 2021-07-02 14:37:07 +02:00
wborgeaud
fc0f8a78ce First try 2021-07-02 14:13:57 +02:00
wborgeaud
525db6c461 Merge branch 'main' into fix_z_check
# Conflicts:
#	src/circuit_builder.rs
2021-07-02 10:15:23 +02:00
Nicholas Ward
dcde599377
Merge pull request #85 from mir-protocol/efficient_insert
Efficient insert
2021-07-01 17:43:44 -07:00
Daniel Lubarov
519533d4b7
Benchmark tweaks (#83)
- Configure FRI with a list of arities that's more appropriate for a 2^14 instance. The previous config resulted in a huge final polynomial.
- Log the blinding factors, and other logging tweaks.
2021-07-01 10:53:42 -07:00
Nicholas Ward
8f33f8e2be Merge branch 'main' into efficient_insert 2021-07-01 10:36:22 -07:00
Daniel Lubarov
95a875e28d
Allow virtual targets to be routed (#84)
As in plonky1. The semantics of virtual targets in plonky1 were rather weird, but I think it's somewhat better here, since we already separate `generate_copy` and `assert_equal` methods. Users now make more of an explicit choice -- they can use a `VirtualTarget` for the witness generation only using `generate_copy`, or they can involve it in copy constraints.
2021-07-01 08:12:12 -07:00
wborgeaud
59410447bf Add lengths to CommonData 2021-07-01 15:41:01 +02:00
Nicholas Ward
77d942f0e9 cleanup 2021-06-30 16:58:06 -07:00
Daniel Lubarov
03179e5674 Couple fixes related to blinding
- `self.gates` -> `self.gate_instances`
- Some tests were using a single binary FRI reduction, which doesn't provide enough succinctness for our blinding scheme to work. This caused `blinding_counts` to continue until it overflowed.
2021-06-30 12:54:45 -07:00
wborgeaud
b8e764bb90 Allow for degree^2 < num_routed_wires 2021-06-30 16:48:41 +02:00
wborgeaud
69fff573fe
Merge pull request #76 from mir-protocol/add_routed_wires
Increase number of routed wires to 28 and add a new `ArithmeticExtensionGate`
2021-06-30 08:32:25 +02:00
wborgeaud
a017e79f65 Merge branch 'main' into add_routed_wires
# Conflicts:
#	src/gadgets/arithmetic.rs
2021-06-30 08:30:10 +02:00
Nicholas Ward
46ff079674
Merge pull request #80 from mir-protocol/blinding_factors
Blinding factors
2021-06-29 23:20:07 -07:00
Daniel Lubarov
f1e3474fcb
Simple reduce (#78)
* Simple reduce

* Fix bug causing test failure
2021-06-29 12:33:11 -07:00
Nicholas Ward
ce47eac72e fix 2021-06-29 11:04:05 -07:00
Nicholas Ward
d599664f22 merge 2021-06-29 10:07:05 -07:00
wborgeaud
bae3777bcd Use max filtered degree found with the tree method in CircuitBuilder::build 2021-06-29 14:00:34 +02:00
wborgeaud
493e81d786 Merge branch 'main' into lower_max_constraint_degree
# Conflicts:
#	src/circuit_builder.rs
2021-06-29 13:48:41 +02:00
Nicholas Ward
d5457bf414 fixed arithmetic, and added comments 2021-06-28 23:08:24 -07:00
Nicholas Ward
40f5346009 cargo fmt 2021-06-28 17:07:27 -07:00
Nicholas Ward
5aa0960154 minor fixes 2021-06-28 17:07:09 -07:00
Nicholas Ward
01493303f8 blinding 2021-06-28 09:45:56 -07:00
Daniel Lubarov
7734aed62c
Performance tweaks (#77) 2021-06-28 08:56:36 -07:00
wborgeaud
12e81acccf Optimize the degree of the tree returned by Tree::from_gates to allow non-power of 2 degree. 2021-06-28 11:27:43 +02:00
wborgeaud
e195fe58ed Merge branch 'main' into add_routed_wires 2021-06-25 13:53:30 +02:00
wborgeaud
810d1869a1 Minor improvements 2021-06-25 11:49:29 +02:00
wborgeaud
625377b4c0 Merge constant and sigma polynomials 2021-06-25 11:24:26 +02:00
Nicholas Ward
249c8a8378 calculating number of blinding gates needed 2021-06-24 22:02:20 -07:00
wborgeaud
54a15c012c Fixed bug and add division test in the base field. 2021-06-24 22:38:40 +02:00