diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..326ac21 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2022 Succinct Labs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index d4f67ef..a8f805f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,33 @@ # gnark-plonky2-verifier +This is an in-progress implementation of a [Plonky2](https://github.com/mir-protocol/plonky2) verifier in Gnark. It currently is able to verify some dummy circuits, but not much more as many of the custom gates used in Plonky2 are currently not implemented. + +Besides the verifier, there are some Gnark implementation of circuits in this repo that may be useful for other projects: + +- [Goldilocks](https://github.com/succinctlabs/gnark-plonky2-verifier/blob/main/field/field.go) +- [Poseidon](https://github.com/succinctlabs/gnark-plonky2-verifier/blob/main/poseidon/poseidon.go) +- [FRI](https://github.com/succinctlabs/gnark-plonky2-verifier/blob/main/plonky2_verifier/fri.go) + +## Requirements + +- [Go (1.20.1+)](https://go.dev/doc/install) + +## Benchmark + To run the benchmark, ``` go run benchmark.go -``` \ No newline at end of file +``` + +Here are relevant numbers from a benchmark ran on an M1 Max with 10 CPU cores. + +``` +# of constraints: 6740784 +circuit compilation time: 19 minutes, 33 sec. +witness generation time: < 1 second +groth16 setup: 8 minutes 23 seconds +proof generation: 23 seconds +proof verification: < 1 second +``` + +The circuit can be significantly optimized by using more efficient arithmetic for Goldilocks, among other things. \ No newline at end of file