[ZK] Noir 이용해보기

무앙·2025년 7월 17일

ZK

목록 보기
1/5

이 글은 Noir 언어를 처음 시작하는 분들을 위한 설치 가이드와 프로젝트 파일 구조 설명을 담고 있습니다.

Noir는 영지식증명(ZKP)을 쉽게 작성할 수 있도록 도와주는 Rust 스타일 DSL입니다.


1. Noir 설치

noirup 설치

curl -L https://raw.githubusercontent.com/noir-lang/noirup/refs/heads/main/install | bash
source ~/.zshrc  # 또는 bash 사용자는 source ~/.bashrc
noirup           # Nargo 설치

② 설치 확인

nargo --version

2. Noir 프로젝트 생성

nargo new age_prove
cd age_prove

기본 구조는 다음과 같습니다:

age_prove/
├── Nargo.toml         # 프로젝트 설정 파일
├── Prover.toml        # 입력값 정의 (직접 생성)
└── src/
    └── main.nr        # Noir 회로 코드

3. 각 파일 설명

Nargo.toml

Noir 프로젝트의 설정 파일입니다.

[package]
name = "age_prove"
type = "bin"
authors = ["Your Name"]
compiler_version = "0.9.0"
license = "MIT"
  • type: bin, lib, contract 중 하나
  • entry: main.nr 대신 진입점을 지정할 때 사용

main.nr

Noir 회로가 작성되는 파일입니다.

예시:

fn main(age: Field, min_age: pub Field) {
    assert(age >= min_age);
}
  • 기본 input값은 private 이지만 pub 키워드를 이용하여 public input 값으로 지정할 수 있습니다.

Prover.toml

입력값을 지정하는 파일입니다. nargo execute 시 사용됩니다.

age = "20"
min_age = "18"

4. 실행 및 디버깅

실행

nargo check      # 회로 유효성 검사
nargo execute    # 입력값 기반 실행 및 witness 생성

5. 증명 생성 및 검증 (Barretenberg)

① Barretenberg CLI 설치

curl -L https://raw.githubusercontent.com/AztecProtocol/aztec-packages/refs/heads/master/barretenberg/bbup/install | bash
bbup

② 증명 생성

bb prove -b ./target/age_prove.json -w ./target/age_prove.gz -o ./target

③ 검증키 생성

bb write_vk -b ./target/age_prove.json -o ./target

④ 증명 검증

bb verify -k ./target/vk -p ./target/proof -i ./target/public_inputs

VS Code에서 디버깅

  1. vscode-noir 확장 설치
  2. main.nr 파일 열기
  3. fn main 위에 나타나는 Debug 버튼 클릭

추가 예시: 배열 & 구조체 입력

struct Foo {
    bar: Field,
    baz: Field,
}

fn main(foos: [Foo; 3]) -> pub Field {
    foos[2].bar + foos[2].baz
}
[[foos]]
bar = 0
baz = 0

[[foos]]
bar = 0
baz = 0

[[foos]]
bar = 1
baz = 2

0개의 댓글