snarkjs README.md 문서를 따라하면서 작성한 문서입니다.
실습 환경:
- Windows 11
- Node.js v20.18.0
- circom compiler 2.1.9
- snarkjs@0.7.5
1. 소프트웨어 설치
- Downloads 페이지에서 circom Windows binary를 클릭하고 파일
circom-windows-amd64.exe
를 원하는 디렉토리에 저장합니다. 파일 크기는 약 10MB입니다. 여기서는 파일 이름을circom.exe
로 바꾸고 아래 경로에 저장합니다.C:\DevTools\circom.exe
snarkjs
를 설치합니다.npm install -g snarkjs
2. 신뢰 설정 - Powers of Tau
-
“powers of tau” ceremony 시작
snarkjs powersoftau new bn128 14 pot14_0000.ptau -v
-
첫 번째 기여
snarkjs powersoftau contribute pot14_0000.ptau pot14_0001.ptau --name="First contribution" -v
-
두 번째 기여
snarkjs powersoftau contribute pot14_0001.ptau pot14_0002.ptau --name="Second contribution" -v -e="some random text"
-
세 번째 기여
snarkjs powersoftau export challenge pot14_0002.ptau challenge_0003 snarkjs powersoftau challenge contribute bn128 challenge_0003 response_0003 -e="some random text" snarkjs powersoftau import response pot14_0002.ptau response_0003 pot14_0003.ptau -n="Third contribution name"
-
프로토콜 검증
snarkjs powersoftau verify pot14_0003.ptau
-
무작위 비콘 적용
snarkjs powersoftau beacon pot14_0003.ptau pot14_beacon.ptau 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon"
3. 회로 생성
-
회로 파일 작성
pragma circom 2.0.0; template Multiplier(n) { signal input a; signal input b; signal output c; signal int[n]; int[0] <== a*a + b; for (var i=1; i<n; i++) { int[i] <== int[i-1]*int[i-1] + b; } c <== int[n-1]; } component main = Multiplier(1000);
-
컴파일
circom --r1cs --wasm --c --sym --inspect circuit.circom
4. 신뢰 설정 - Phase 2
-
Phase 2 준비
snarkjs powersoftau prepare phase2 pot14_beacon.ptau pot14_final.ptau -v
-
마지막 ptau 검증
snarkjs powersoftau verify pot14_final.ptau
-
.r1cs
파일과 연관된.zkey
파일 생성snarkjs groth16 setup circuit.r1cs pot14_final.ptau circuit_0000.zkey
-
ceremony의 phase 2에 기여
snarkjs zkey contribute circuit_0000.zkey circuit_0001.zkey --name="1st Contributor Name" -v
-
두 번째 기여
snarkjs zkey contribute circuit_0001.zkey circuit_0002.zkey --name="Second contribution Name" -v -e="Another random entropy"
-
세 번째 기여
snarkjs zkey export bellman circuit_0002.zkey challenge_phase2_0003 snarkjs zkey bellman contribute bn128 challenge_phase2_0003 response_phase2_0003 -e="some random text" snarkjs zkey import bellman circuit_0002.zkey response_phase2_0003 circuit_0003.zkey -n="Third contribution name"
-
무작위 비콘 적용
snarkjs zkey beacon circuit_0003.zkey circuit_final.zkey 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f 10 -n="Final Beacon phase2"
-
검증키 내보내기
snarkjs zkey export verificationkey circuit_final.zkey verification_key.json
5. 증명 생성 및 검증
-
input.json
작성{"a": "3", "b": "11"}
-
witness 계산
snarkjs wtns calculate circuit_js/circuit.wasm input.json witness.wtns
-
증명 생성
snarkjs groth16 prove circuit_final.zkey witness.wtns proof.json public.json
-
증명 검증
snarkjs groth16 verify verification_key.json public.json proof.json
Written with StackEdit.
댓글 없음:
댓글 쓰기