diff --git a/docs/co-noir-cli/co-noir-cli.md b/docs/co-noir-cli/co-noir-cli.md index a0200e3..aead933 100644 --- a/docs/co-noir-cli/co-noir-cli.md +++ b/docs/co-noir-cli/co-noir-cli.md @@ -2,7 +2,7 @@ ## UltraHonk -Our co-Noir implementation cuurently supports the UltraHonk prover (with Keccak and Poseidon2 as transcript) from Barretenberg v0.62.0. To get Barretenberg with this version, use the following commands: +Our co-Noir implementation currently supports the UltraHonk prover (with Keccak and Poseidon2 as transcript) from Barretenberg v0.62.0. To get Barretenberg with this version, use the following commands: ```bash git clone https://github.com/AztecProtocol/aztec-packages.git diff --git a/docs/getting-started/quick-start.md b/docs/getting-started/quick-start.md index c5cc0ab..96cbbef 100644 --- a/docs/getting-started/quick-start.md +++ b/docs/getting-started/quick-start.md @@ -1,4 +1,4 @@ -# Quick Start +# coCircom Quick Start coCircom is an implementation of [collaborative SNARKs](../resources/collsnarks.md), with a focus on the [circom](https://circom.io) framework. In contrast to traditional SNARKs, which are run by a single prover, collaborative SNARKs are executed using a [multiparty computation protocol](../resources/mpc.md). diff --git a/docs/overview.md b/docs/overview.md index 512a052..dabb65d 100644 --- a/docs/overview.md +++ b/docs/overview.md @@ -1,5 +1,25 @@ # Overview -TACEO is creating the Compute Layer Security (CLS) protocol to make blockchain computation encrypted by default. -The CLS enables every application to compute on private shared state. At its core will be an MPC-VM capable of producing collaborative SNARKs. +TACEO is building tooling for collaborative zkSNARKs (coSNARKs), and the MPC environments that are needed to produce them. + +Here you will find documentation for tooling that lifts your code to work in MPC. So far, we have support for building collaborative SNARKs in + +* Circom (see [coCircom](/co-circom-cli/co-circom.md)), and +* Noir (see [coNoir](/co-noir-cli/co-noir-cli.md)) + +If you are completely new to working in an MPC environment, it may be worth checking out the [coCircom quick start](/getting-started/quick-start.md) guide. It walks through compiling circuits, splitting the input, the witness extension, and proving and verifying the circuit. + +If you wish to deploy your new coSNARK circuits, you'll need MPC nodes to run them on. You can either set this up yourself, or you can get in touch with us if you are interested to be an early tester of the coSNARK alphanet. + +## Useful Resources + +Throughout the docs you will find many links to useful articles and talks, but if you want to get started with some quick overviews, you can check out: + +* [Overview of what we're doing at TACEO](https://www.youtube.com/watch?v=tlVFbr3_eEU) +* [MPC-Enabled proof markets at ZK11](https://www.youtube.com/watch?v=4-W5nnsf9-A&pp=ygUMZGFuaWVsIGthbGVz) +* [Workshop to get started with coCircom at ZK12](https://www.youtube.com/watch?v=w2HJxrDE01k) + +Finally, if you have questions about anything here, we're always in the [discord](https://taceo.io/discord) to help you out. + diff --git a/docs/releases/co-noir-nov.md b/docs/releases/co-noir-nov.md new file mode 100644 index 0000000..fd637b2 --- /dev/null +++ b/docs/releases/co-noir-nov.md @@ -0,0 +1,41 @@ +# Major update to coNoir (November 2024) + +## Summary + +We’ve made significant progress to bring coSNARKs to Noir. It is now possible with the [coNoir CLI](../co-noir-cli/co-noir-cli.md) tool to **build simple zkApps that leverage private shared state or private proof delegation.** +Example: We are currently supporting the Private Shared State Grantee **Hashcloak** for their private machine learning proof-of-concept (some code snippets below). + +## New features + +First, let’s look back at the status quo from ZK12 (early October where Franco gave a [workshop.](https://www.youtube.com/watch?v=w2HJxrDE01k)) At this point coNoir was "only" supporting basic field arithmetic, and coNoir programs could just use the field datatype and simple operations, like additions and multiplications (see [A First Look at Collaborative Noir | TACEO Blog](https://blog.taceo.io/co-noir-intro/)). This has changed drastically, so let’s give some update: + +### Range checks + +We implemented the functionality required for **range checks** in MPC. These range checks now enable users of coNoir to use more than just the field datatype; **u64, u16, ect. are now also supported**. +Here is a [range check example](https://github.com/TaceoLabs/co-snarks/blob/main/co-noir/co-noir/examples/test_vectors/mul3u64/src/main.nr). + +For those interested, this mainly required us to implement _decomposing field elements_ to smaller chunks and an _oblivious sorting_ algorithm in MPC. + +### Asserts + +CoNoir users can now add asserts to their code (as long as the statement inside the assert is also supported): +Here is an [asserts example](https://github.com/TaceoLabs/co-snarks/blob/main/co-noir/co-noir/examples/test_vectors/add3_assert/src/main.nr). + +### Part of Brillig VM + +Context: A lot of features from Noir are evaluated as _unconstrained_ functions. Whenever an unconstrained function is encountered the Brillig VM is invoked in the background. + +In the last weeks we worked hard to also implement a **first version of the Brillig VM in MPC**! + +The Brillig VM in general requires a fully functional MPC-VM, so don’t expect that everything works out of the box at the moment. But what works is already very powerful: + +- **Comparisons** (see, e.g., https://github.com/TaceoLabs/co-snarks/blob/main/co-noir/co-noir/examples/test_vectors/approx_sigmoid/src/main.nr) +- **Simple if-statements** (same example) +- **Byte decomposition** (see, e.g., https://github.com/TaceoLabs/co-snarks/blob/main/co-noir/co-noir/examples/test_vectors/get_bytes/src/main.nr) +- **Casts between fields and rings of different types** (used, e.g., by the byte decomposition example above) +- **Simple integer divisions** (divisions where the result is rounded down) where we divide private values by public powers-of-two) +- **Simple forward jumps as used in branching** (required, e.g., by is_zero gadgets, which is used, e.g., in not-equal comparison: https://github.com/TaceoLabs/co-snarks/blob/main/co-noir/co-noir/examples/test_vectors/poseidon_assert/src/main.nr) + +## Compatibility + +CoNoir is **compatible with the Noir version 1.0.0-beta.0**. That means, our UltraHonk prover is also compatible with Barretenberg v0.63.0. diff --git a/sidebars.ts b/sidebars.ts index 41bb458..382dd15 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -19,16 +19,6 @@ const sidebars: SidebarsConfig = { "overview", "primer/mpc-primer", "primer/collabSNARKs-primer", - { - type: "category", - label: "Use Cases", - items: [ - "use-cases/defi", - "use-cases/ai", - "use-cases/data-ownership", - "use-cases/gaming", - ], - }, { type: "category", label: "Getting Started", @@ -81,9 +71,14 @@ const sidebars: SidebarsConfig = { }, { type: "category", - label: "Design", - items: ["design/mpc-vm", "design/known-issues", "design/roadmap"], + label: "Releases", + items: ["releases/co-noir-nov"] }, + // { + // type: "category", + // label: "Design", + // items: ["design/mpc-vm", "design/known-issues", "design/roadmap"], + // }, { type: "category", label: "Background Material", @@ -94,6 +89,16 @@ const sidebars: SidebarsConfig = { "resources/collsnarks", ], }, + { + type: "category", + label: "Use Cases", + items: [ + "use-cases/defi", + "use-cases/ai", + "use-cases/data-ownership", + "use-cases/gaming", + ], + }, ], };