Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore(docs): Rearrange NoirJS section #3260

Merged
merged 2 commits into from
Oct 24, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions docs/docs/language_concepts/01_functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,19 +148,21 @@
Attributes are metadata that can be applied to a function, using the following syntax: `#[attribute(value)]`.

Supported attributes include:

- **builtin**: the function is implemented by the compiler, for efficiency purposes.
- **deprecated**: mark the function as *deprecated*. Calling the function will generate a warning: `warning: use of deprecated function`
- **deprecated**: mark the function as _deprecated_. Calling the function will generate a warning: `warning: use of deprecated function`
- **field**: Used to enable conditional compilation of code depending on the field size. See below for more details
- **oracle**: mark the function as *oracle*; meaning it is an external unconstrained function, implemented in noir_js. See [Unconstrained](./05_unconstrained.md) and [Noir js](../noir_js/noir_js.md) for more details.
- **oracle**: mark the function as _oracle_; meaning it is an external unconstrained function, implemented in noir_js. See [Unconstrained](./05_unconstrained.md) and [NoirJS](../noir_js/noir_js.md) for more details.
signorecello marked this conversation as resolved.
Show resolved Hide resolved
- **test**: mark the function as unit tests. See [Tests](../nargo/02_testing.md) for more details

### Field Attribute

The field attribute defines which field the function is compatible for. The function is conditionally compiled, under the condition that the field attribute matches the Noir native field.
The field can be defined implicitly, by using the name of the elliptic curve usually associated to it - for instance bn254, bls12_381 - or explicitly by using the field (prime) order, in decimal or hexadecimal form.
As a result, it is possible to define multiple versions of a function with each version specialized for a different field attribute. This can be useful when a function requires different parameters depending on the underlying elliptic curve.


Example: we define the function `foo()` three times below. Once for the default Noir bn254 curve, once for the field $\mathbb F_{23}$, which will normally never be used by Noir, and once again for the bls12_381 curve.

Check warning on line 164 in docs/docs/language_concepts/01_functions.md

View workflow job for this annotation

GitHub Actions / Spellcheck / Spellcheck

Unknown word (mathbb)

```rust
#[field(bn254)]
fn foo() -> u32 {
Expand All @@ -184,4 +186,4 @@
}
```

If the field name is not known to Noir, it will discard the function. Field names are case insensitive.
If the field name is not known to Noir, it will discard the function. Field names are case insensitive.
4 changes: 2 additions & 2 deletions docs/docs/noir_js/getting_started/01_tiny_noir_app.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: Full Stack Noir App
title: End-to-end
description: Learn how to setup a new app that uses Noir to generate and verify zero-knowledge SNARK proofs in a typescript or javascript environment
keywords: [how to, guide, javascript, typescript, noir, barretenberg, zero-knowledge, proofs]
---

Noir JS works both on the browser and on the server, and works for both ESM and CJS module systems. In this page, we will learn how can we write a simple test and a simple web app to verify the standard Noir example.
NoirJS works both on the browser and on the server, and works for both ESM and CJS module systems. In this page, we will learn how can we write a simple test and a simple web app to verify the standard Noir example.

## Before we start

Expand Down Expand Up @@ -251,4 +251,4 @@

## Further Reading

You can see how noirjs is used in a full stack Next.js hardhat application in the [noir-starter repo here](https://github.com/noir-lang/noir-starter/tree/main/next-hardhat). The example shows how to calculate a proof in the browser and verify it with a deployed Solidity verifier contract from noirjs.

Check warning on line 254 in docs/docs/noir_js/getting_started/01_tiny_noir_app.md

View workflow job for this annotation

GitHub Actions / Spellcheck / Spellcheck

Unknown word (noirjs)

Check warning on line 254 in docs/docs/noir_js/getting_started/01_tiny_noir_app.md

View workflow job for this annotation

GitHub Actions / Spellcheck / Spellcheck

Unknown word (noirjs)
34 changes: 24 additions & 10 deletions docs/docs/noir_js/noir_js.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
---
title: Noir JS
description: Learn how to use noir js to use Noir in a Typescript or Javascript environment
title: NoirJS
description: Interact with Noir in Typescript or Javascript
keywords: [Noir project, javascript, typescript, node.js, browser, react]
---

Noir JS are a set of typescript libraries that make it easy to use Noir on your dapp, webapp, node.js server, website, etc.
NoirJS is a TypeScript library that make it easy to use Noir on your dapp, webapp, Node.js server, website, etc.

It is composed of two major elements:
A typical workflow would be composed of two major elements:

- Noir
- Backend proving system
- NoirJS
- Proving backend of choice's JavaScript package

<!-- TODO add "and noir_wasm" to the end once it's ready -->

Your only concern should be to write Noir. Noir.js will work out-of-the box and abstract all the components, such as the ACVM and others.
To install NoirJS, install Node.js if you have not already and run this in your JavaScript project:

## Barretenberg
```bash
npm i @noir-lang/noir_js
```

Since Noir is backend agnostic, you can instantiate `noir_js` without any backend (i.e. to execute a function). But for proving, you should instantiate it with any of the supported backends through their own `js` interface.
## Proving backend

Aztec Labs maintains the `barretenberg` backend. You can use it to instantiate your `Noir` class.
Since Noir is backend agnostic, you can instantiate NoirJS without any backend (i.e. to execute a function). But for proving, you would have to instantiate NoirJS with any of the supported backends through their own `js` interface.

### Barretenberg

Aztec Labs maintains the `barretenberg` proving backend, which you can instantiate and make use of alongside NoirJS. It is also the default proving backend installed and used with Nargo, the Noir CLI tool.

To install its JavaScript library, run this in your project:

```bash
npm i @noir-lang/backend_barretenberg
```

For more details on how to instantiate and use the libraries, refer to the [Full Noir App Guide](./getting_started/01_tiny_noir_app.md) and [Reference](./reference/01_noirjs.md) sections.
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

| Parameter | Type | Description |
| ----------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `acirCircuit` | Object | A circuit represented in a `json` format, containing the ABI and bytecode Tipically obtained by running [`nargo compile`](../../nargo/01_commands.md). This is the same circuit expected to be passed to [the Noir class](02_noirjs.md) |
| `acirCircuit` | Object | A circuit represented in a `json` format, containing the ABI and bytecode Tipically obtained by running [`nargo compile`](../../nargo/01_commands.md). This is the same circuit expected to be passed to [the Noir class](01_noirjs.md) |

Check warning on line 44 in docs/docs/noir_js/reference/02_bb_backend.md

View workflow job for this annotation

GitHub Actions / Spellcheck / Spellcheck

Unknown word (Tipically)
| `numberOfThreads` | Number (optional) | The number of threads to be used by the backend. Defaults to 1. |

### Usage
Expand Down
10 changes: 5 additions & 5 deletions docs/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,29 +98,29 @@ const sidebars = {
},
{
type: 'category',
label: 'Noir JS',
label: 'NoirJS',
link: {
type: 'doc',
id: 'noir_js/noir_js',
},
items: [
{
type: 'category',
label: 'Reference',
label: 'Guides',
items: [
{
type: 'autogenerated',
dirName: 'noir_js/reference',
dirName: 'noir_js/getting_started',
},
],
},
{
type: 'category',
label: 'Guides',
label: 'Reference',
items: [
{
type: 'autogenerated',
dirName: 'noir_js/getting_started',
dirName: 'noir_js/reference',
},
],
},
Expand Down
Loading