기본 콘텐츠로 건너뛰기

라벨이 제약시스템인 게시물 표시

ZKP-1. 초보자를 위한 Circom 언어 가이드

Circom은 영지식 증명에 사용되는 '산술 회로'를 설계하기 위한 언어입니다. 이 회로를 통해 증명하고 싶은 논리나 규칙을 코드로 표현할 수 있습니다. 조금 어렵게 들릴 수 있지만, "어떤 비밀 정보(private input)를 공개하지 않으면서, 내가 그 비밀 정보를 알고 있다는 사실을 증명하는 프로그램"을 만드는 언어라고 생각하면 쉽습니다. 1. 핵심 개념: 회로, 신호, 제약 조건 Circom 코드는 3가지 핵심 요소로 이루어집니다. 회로 (Circuit) Circom의 가장 기본 단위입니다. 우리는 템플릿(template)이라는 키워드를 사용해서 회로를 정의합니다. 마치 다른 언어의 함수나 클래스처럼, 재사용 가능한 로직의 묶음이라고 생각할 수 있습니다. 신호 (Signal) 회로의 입력(input)과 출력(output), 그리고 그 사이에서 계산되는 중간값들을 신호라고 부릅니다. 신호는 회로를 통해 흐르는 데이터입니다. input: 회로에 입력되는 신호입니다. public input: 증명을 검증하는 사람에게도 공개되는 입력값입니다. (예: 문제) private input: 증명하는 사람만 알고 있는 비밀 입력값입니다. (예: 문제의 해답) output: 회로의 계산 결과로 나오는 신호입니다. 보통 public으로 간주되어 공개됩니다. var: 회로 내부에서만 사용되는 중간 신호입니다. 일반 프로그래밍 언어의 변수와 달리, Circom의 모든 신호(var 포함)는 최종적으로 제약 조건 시스템의 일부가 되어 증명 과정에 영향을 줍니다. 제약 조건 (Constraint) Circom의 심장과도 같은 가장 중요한 개념입니다. 제약 조건은 신호들 사이에 반드시 성립해야 하는 수학적 관계(방정식)를 정의합니다. 증명(proof)을 생성한다는 것은, 이 모든 제약 조건을 만족하는 신호값들을 찾았다는 것을 의미합니다. A === B: A와 B의 값이 반드시 같아야 한다는 제약 조건을 추가합니다. 이 연산자는 두 신호가 ...