-
Notifications
You must be signed in to change notification settings - Fork 200
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into tf/clippy
* master: feat: codegen typed interfaces for functions in `noir_codegen` (#3533) chore: add dependency on noir_js from docs package (#3559) chore: Docs 0.19.3 (#3545) chore(debugger): Inject abstract foreign call executor to debugger (#3550) chore: nargo fmt (#3549)
- Loading branch information
Showing
193 changed files
with
12,676 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
name: noir_codegen | ||
|
||
on: | ||
pull_request: | ||
merge_group: | ||
push: | ||
branches: | ||
- master | ||
|
||
concurrency: | ||
group: ${{ github.workflow }}-${{ github.head_ref || github.ref || github.run_id }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
build-nargo: | ||
runs-on: ubuntu-22.04 | ||
strategy: | ||
matrix: | ||
target: [x86_64-unknown-linux-gnu] | ||
|
||
steps: | ||
- name: Checkout Noir repo | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup toolchain | ||
uses: dtolnay/rust-toolchain@1.71.1 | ||
|
||
- uses: Swatinem/rust-cache@v2 | ||
with: | ||
key: ${{ matrix.target }} | ||
cache-on-failure: true | ||
save-if: ${{ github.event_name != 'merge_group' }} | ||
|
||
- name: Build Nargo | ||
run: cargo build --package nargo_cli --release | ||
|
||
- name: Package artifacts | ||
run: | | ||
mkdir dist | ||
cp ./target/release/nargo ./dist/nargo | ||
7z a -ttar -so -an ./dist/* | 7z a -si ./nargo-x86_64-unknown-linux-gnu.tar.gz | ||
- name: Upload artifact | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: nargo | ||
path: ./dist/* | ||
retention-days: 3 | ||
|
||
test: | ||
needs: [build-nargo] | ||
name: Test noir_codegen | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Install Yarn dependencies | ||
uses: ./.github/actions/setup | ||
|
||
- name: Setup toolchain | ||
uses: dtolnay/rust-toolchain@1.71.1 | ||
with: | ||
targets: wasm32-unknown-unknown | ||
|
||
- uses: Swatinem/rust-cache@v2 | ||
with: | ||
key: wasm32-unknown-unknown-noir-js | ||
cache-on-failure: true | ||
save-if: ${{ github.event_name != 'merge_group' }} | ||
|
||
- name: Install jq | ||
run: sudo apt-get install jq | ||
|
||
- name: Install wasm-bindgen-cli | ||
uses: taiki-e/install-action@v2 | ||
with: | ||
tool: wasm-bindgen-cli@0.2.86 | ||
|
||
- name: Install wasm-opt | ||
run: | | ||
npm i wasm-opt -g | ||
- name: Build acvm_js | ||
run: yarn workspace @noir-lang/acvm_js build | ||
|
||
- name: Build noirc_abi | ||
run: yarn workspace @noir-lang/noirc_abi build | ||
|
||
- name: Build noir_js_types | ||
run: yarn workspace @noir-lang/types build | ||
|
||
- name: Build noir_js | ||
run: yarn workspace @noir-lang/noir_js build | ||
|
||
- name: Run noir_codegen tests | ||
run: yarn workspace @noir-lang/noir_codegen test |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
docs/versioned_docs/version-v0.19.0/examples/merkle-proof.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
--- | ||
title: Merkle Proof Membership | ||
description: | ||
Learn how to use merkle membership proof in Noir to prove that a given leaf is a member of a | ||
merkle tree with a specified root, at a given index. | ||
keywords: | ||
[merkle proof, merkle membership proof, Noir, rust, hash function, Pedersen, sha256, merkle tree] | ||
--- | ||
|
||
Let's walk through an example of a merkle membership proof in Noir that proves that a given leaf is | ||
in a merkle tree. | ||
|
||
```rust | ||
use dep::std; | ||
|
||
fn main(message : [Field; 62], index : Field, hashpath : [Field; 40], root : Field) { | ||
let leaf = std::hash::hash_to_field(message); | ||
let merkle_root = std::merkle::compute_merkle_root(leaf, index, hashpath); | ||
assert(merkle_root == root); | ||
} | ||
|
||
``` | ||
|
||
The message is hashed using `hash_to_field`. The specific hash function that is being used is chosen | ||
by the backend. The only requirement is that this hash function can heuristically be used as a | ||
random oracle. If only collision resistance is needed, then one can call `std::hash::pedersen_hash` | ||
instead. | ||
|
||
```rust | ||
let leaf = std::hash::hash_to_field(message); | ||
``` | ||
|
||
The leaf is then passed to a compute_merkle_root function with the root, index and hashpath. The returned root can then be asserted to be the same as the provided root. | ||
|
||
```rust | ||
let merkle_root = std::merkle::compute_merkle_root(leaf, index, hashpath); | ||
assert (merkle_root == root); | ||
``` | ||
|
||
> **Note:** It is possible to re-implement the merkle tree implementation without standard library. | ||
> However, for most usecases, it is enough. In general, the standard library will always opt to be | ||
> as conservative as possible, while striking a balance with efficiency. | ||
An example, the merkle membership proof, only requires a hash function that has collision | ||
resistance, hence a hash function like Pedersen is allowed, which in most cases is more efficient | ||
than the even more conservative sha256. | ||
|
||
[View an example on the starter repo](https://github.com/noir-lang/noir-examples/blob/3ea09545cabfa464124ec2f3ea8e60c608abe6df/stealthdrop/circuits/src/main.nr#L20) |
Oops, something went wrong.