위험 경고: '가상화폐', '블록체인'이라는 이름으로 불법 자금 모집 위험에 주의하세요. — 은행보험감독관리위원회 등 5개 부처
검색
로그인
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
시장 동향 보기
ZK 개발자는 다음 사항을 읽어야 합니다: 초보부터 고급까지 옵션 도구
DAOrayaki
特邀专栏作者
2023-03-04 04:00
이 기사는 약 5392자로, 전체를 읽는 데 약 8분이 소요됩니다
이 백서에서는 전체 개발 도구 세트를 자세히 설명하여 의사 결정 과정에서 개발자가 적절한 ZK 스택을 선택하는 데 도움이 되는 지침을 제공하고자 합니다.

원본: zkGalaxy에 대한 개발자 가이드

지난 여름, Vitalik은 다양한 유형의 zkEVM(Zero-Knowledge Ethereum Virtual Machine)을 설명하는 블로그 게시물을 작성했습니다. Vitalik은 성능과 호환성을 정의하고 절충합니다.

이것은 zkEVM 지원 방법을 구별하는 데 매우 유용한 휴리스틱입니다. 그러나 zkEVM은 영지식 애플리케이션을 구축할 수 있는 모든 가능한 방법의 하위 집합입니다. zk 계산의 고유한 속성, 즉 단순성, 영지식 및 정확성을 활용하려는 프로그래머에게는 zkEVM이 최선의 선택이 아닐 수 있습니다. 이 기사는 전체 개발 도구 세트를 설명함으로써 개발자가 의사 결정 과정에서 적절한 zk 스택을 선택하는 데 도움이 되는 지침을 제공하고자 합니다.

추상적 복잡성의 힘

지난 1~2년 동안 zk 툴링은 엄청나게 향상되었습니다. 일반 소프트웨어 개발자는 어려운 기본 수학 및 공학에 대한 깊은 이해 없이도 zk의 강력한 속성을 활용할 수 있습니다. 반면에 고급 사용자를 위한 도구가 급증하여 zk 전문가가 zk 스택을 매우 세밀하게 제어할 수 있습니다.

최신 소프트웨어는 전문가의 생산성을 극대화하기 위해 수많은 추상화 계층을 기반으로 합니다. 엔지니어링의 추상화에는 다소 직관적인 많은 이점이 있습니다. 웹 개발자는 운영 체제 작동 방식에 대한 깊은 이해가 필요하지 않습니다.

훌륭하고 재사용 가능한 추상화 계층을 구축하기 위한 핵심은 한 계층의 복잡성을 캡슐화한 다음 스택의 상위 계층에 단순하지만 표현력이 풍부한 인터페이스를 제공하는 것입니다. 올바르게 수행하면 다양한 전문 분야와 지식을 가진 개발자가 스택 전체에서 유용한 도구를 구축할 수 있습니다.

이미지 설명

zk 스택 및 레이어를 위한 도구/기술의 몇 가지 예

저수준 zk 개발

Arkworks-rs

Arkworks-rs는 zkSNARK 애플리케이션 하위 구성 요소의 효율적이고 안전한 구현을 제공하는 Rust 라이브러리의 생태계입니다. Arkworks는 개발자에게 다른 기존 라이브러리와의 공통성을 다시 구현하지 않고도 zk 애플리케이션의 소프트웨어 스택을 사용자 정의하는 데 필요한 인터페이스를 제공합니다.

이점

이점

모듈성을 통한 유연성

코드 중복 줄이기

엔지니어링 비용 절감

감사/버그 노출 영역 감소

대대적인 리팩토링 없이 구성 요소 업그레이드

결점

결점

전체 소프트웨어 스택에 대한 심도 있는 지식이 필요합니다.

올바르게 이해하지 못하면 너무 많은 제어가 풋건으로 이어질 수 있습니다.

세분화된 제어에는 스택의 모든 수준에 대한 전문 지식이 필요합니다.

Arkworks는 합리적인 기본값을 제공합니다.

zk 도메인 특정 언어(DSL)

일부 계산에 대한 증명을 생성하려면 먼저 계산을 zkSNARK 시스템이 이해할 수 있는 형식으로 표현해야 합니다. 일부 도메인 특정 언어는 응용 프로그램 개발자가 이러한 방식으로 계산을 표현할 수 있는 프로그래밍 언어를 만들었습니다. 이러한 언어에는 Aztec Noir, Starknet의 Cairo, Circcom, ZoKrates 및 Aleo의 Leo 등이 포함됩니다. 기본 증명 시스템 및 수학적 세부 사항은 일반적으로 응용 프로그램 개발자에게 노출되지 않습니다.

개발자 경험

zkApp 개발자는 도메인별 언어로 프로그램을 작성하는 데 능숙해야 합니다. 이러한 언어 중 일부는 친숙한 프로그래밍 언어처럼 보이지만 다른 언어는 배우기가 매우 어려울 수 있습니다. 그들 중 몇 가지를 분석해 봅시다.

카이로 - Starknet에서 애플리케이션을 구축하려면 Starkware DSL이 필요합니다. Cairo zkVM에서 해석할 수 있는 Cairo 특정 어셈블리 언어로 컴파일됩니다.

ZoKrates - ZoKrates는 회로 작성을 위한 고급 언어를 포함하여 일반적인 SNARK 요구 사항을 위한 툴킷입니다. ZoKrates는 또한 곡선, 증명 체계 및 백엔드 측면에서 약간의 유연성을 가지고 있어 개발자가 간단한 CLI 인수를 통해 핫 스왑할 수 있습니다.

Circom — Circom은 전기 회로 구축을 위한 특수 언어입니다. 현재 회로 생산을 위한 실제 언어입니다. 이 언어는 특별히 인체공학적이지 않기 때문에 개발자는 회로가 작성되고 있음을 예리하게 인식할 수 있습니다.

Leo - Leo는 Aleo 블록체인의 언어로 개발되었습니다. Leo에는 블록체인 내부의 상태 전환을 위한 Rust와 유사한 구문이 있습니다.

Noir - Rust에서 영감을 받은 구문입니다. 언어 자체가 아닌 IR을 중심으로 구축되었으므로 임의의 프런트 엔드를 가질 수 있습니다.

누구를 위해

애플리케이션에서 zk의 고유한 속성을 활용하려는 모든 애플리케이션 개발자.

이점

이점

사용자는 기본 zk 세부 정보를 이해할 필요가 없습니다.

약간의 생산 경험이 있으면 오늘 사용할 수 있습니다.

검증 가능한 온체인

결점

결점

사용자는 새로운 DSL을 배워야 합니다.

이러한 언어에 대한 툴링 및 지원은 격리되어 있습니다.

기본 증명 스택에 대한 제어가 거의 또는 전혀 없습니다(현재로서는).

zkEVMs

zkEVM의 주요 목표는 이더리움 상태 전환을 취하고 간결한 영지식 정확성 증명을 사용하여 유효성을 증명하는 것입니다. Vitalik의 게시물에서 언급한 바와 같이 이를 수행하는 방법에는 미묘한 차이와 이에 상응하는 장단점을 포함하여 여러 가지가 있습니다.

이러한 모든 접근 방식 간의 주요 기술적 차이점은 계산이 증명 시스템(산술화)에서 사용할 수 있는 형식으로 변환되는 언어 스택의 정확한 위치입니다. 일부 zkEVM에서 이것은 고급 언어(Solidity, Vyper, Yul)에서 발생하는 반면 다른 zkEVM은 opcode 수준까지 EVM을 증명하려고 합니다. 이러한 접근 방식 간의 장단점은 Vitalik의 게시물에서 자세히 다루지만 한 문장으로 요약하겠습니다. 스택에서 발생하는 변환/산술이 낮을수록 성능 저하가 커집니다.

높은 운영 비용

가상 머신에 대한 증명을 만드는 데 있어 주요 과제는 실행되는 각 명령에 대해 가능한 모든 명령의 크기에 비례하여 회로의 크기가 증가한다는 것입니다. 이는 회로가 각 프로그램에서 어떤 명령이 실행될지 모르기 때문에 모든 명령을 지원해야 하기 때문입니다.

범용 회로에서 실행되는 각 명령의 비용은 지원되는 모든 명령의 합계에 비례합니다.

이것이 실제로 의미하는 바는 가장 간단한 명령만 실행하더라도 가장 비싼 명령에 대해 비용(성능 비용)을 지불한다는 것입니다. 이는 일반성과 성능 간의 직접적인 절충안으로 이어집니다. 일반성을 위해 더 많은 지침을 추가함에 따라 증명한 모든 지침에 대해 비용을 지불하게 됩니다! 이것이 범용 회로의 근본적인 문제입니다.

그러나 IVC(Incremental Verifiable Computing)와 같은 새로운 개발로 계산을 더 작은 전용 하위 회로가 있는 더 작은 청크로 분할하여 이 제한을 개선할 수 있습니다.

오늘날의 zkEVM 구현은 이 문제를 완화하기 위해 다양한 전략을 사용합니다. 예를 들어, zkSync는 더 비싼 작업(주로 해시와 같은 암호화 사전 컴파일 및 기타 몇 가지)을 제거합니다.

zkEVM의 이상적인 고객은 L1 Ethereum의 트랜잭션보다 훨씬 저렴해야 하는 스마트 계약 애플리케이션입니다. 이 개발자들은 처음부터 zk 애플리케이션을 작성하기 위한 전문 지식이나 대역폭이 반드시 필요한 것은 아닙니다. 따라서 Solidity와 같은 친숙한 고급 언어로 애플리케이션을 작성하는 것이 좋습니다.

수많은 개발팀

이더리움 확장은 현재 zk 기술의 가장 수요가 많은 애플리케이션입니다.

개발자 경험

개발자 경험

zkEVM의 목표는 가능한 한 현재 이더리움 개발에 가까운 개발자 경험을 지원하는 것입니다. Solidity에 대한 완전한 지원은 팀이 여러 코드베이스를 구축하고 유지할 필요가 없음을 의미합니다. zkEVM은 합리적인 시간 내에 합리적인 크기의 증명을 생성할 수 있도록 일부 호환성을 교환해야 하기 때문에 다소 비실용적입니다.

zkSync 및 스크롤

zkSync와 Scroll의 주요 차이점은 스택에서 산술 연산을 수행하는 위치/시간입니다. 즉, 일반 EVM 구성에서 SNARK 친화적 표현으로 전환하는 위치입니다. zkSync의 경우 YUL 바이트코드를 자체 사용자 정의 zk 명령어 세트로 변환할 때 이런 일이 발생합니다. Scroll의 경우 실제 실행 추적이 실제 EVM opcode로 생성될 때 마지막에 발생합니다.

따라서 zkSync의 경우 zk 바이트코드가 생성될 때까지 모든 것이 EVM과 상호 작용하는 것과 동일합니다. Scroll을 사용하면 실제 바이트코드가 실행될 때까지 모든 것이 동일합니다. 이것은 지원을 위해 성능을 교환하는 미묘한 차이입니다. 예를 들어 zkSync는 기본 디버거와 같은 EVM 바이트코드 도구를 지원하지 않습니다. 완전히 다른 바이트코드이기 때문입니다. Scroll은 명령 세트에서 좋은 성능을 얻기 어렵지만 zk용으로 설계되지 않았습니다. 두 전략 모두 장단점이 있으며 궁극적으로 상대적인 성공에 영향을 미칠 수 있는 많은 외생적 요인이 있습니다.

zkLLVM 회로 컴파일러

자세히 논의한 바와 같이 zk 애플리케이션을 개발하기 위한 수많은 옵션이 있으며 모두 고유한 장단점이 있습니다. 이 다이어그램은 귀하의 zk 전문 지식 수준과 성능 요구 사항에 따라 작업에 가장 적합한 도구를 선택하기 위한 이 결정 매트릭스를 요약하는 데 도움이 됩니다. 이것은 완전한 목록이 아니며 zk가 개발됨에 따라 업데이트될 것입니다.

zkLLVM은 Rust, C, C++ 등과 같은 많은 고급 언어를 지원하는 업계 표준 툴체인인 기존 LLVM 인프라의 확장으로 설계되었습니다.

달리는 방법

일부 계산을 증명하려는 사용자는 간단히 C++로 계산을 구현하면 됩니다. zkLLVM은 수정된 clang 컴파일러(현재 C++)가 지원하는 고수준 소스 코드를 사용하여 회로의 일부 중간 표현을 생성합니다. 이 시점에서 회로는 검증할 준비가 되었지만 사용자는 일부 동적 입력에 대해 회로를 검증하기를 원할 수 있습니다. 동적 입력을 처리하기 위해 zkLLVM에는 할당자라는 추가 구성 요소가 있으며, 이는 완전히 전처리되고 회로와 함께 증명할 준비가 된 모든 입력 및 증인을 포함하는 할당 테이블을 생성합니다.

이 두 구성 요소는 증명을 생성하는 데 필요합니다. 이론적으로 사용자는 스스로 증명을 생성할 수 있지만 이것은 다소 전문적인 계산 작업이므로 하드웨어를 가진 다른 사람이 이를 수행하는 데 비용이 들 수 있습니다. 이 거래 상대방 발견 메커니즘의 경우, =nil; 재단은 증명자가 비용을 지불하는 사용자를 위해 계산을 증명하기 위해 경쟁하는 "증명 시장"도 구축합니다. 이 자유 시장 역학은 증명자가 가장 가치 있는 증명 작업을 최적화하도록 이끌 것입니다.

찬반 양론의 무게

증명할 각 계산 작업은 고유하고 서로 다른 회로를 생성하므로 증명자가 처리할 수 있어야 하는 회로의 수는 무한합니다. 이 강요된 일반성은 개별 회로의 최적화를 어렵게 만듭니다. 증명 시장의 도입은 시장이 가치 있다고 여기는 회로의 전문화를 허용합니다. 이 시장이 없으면 이 자연적인 콜드 스타트 ​​문제로 인해 검증자가 이 회로를 최적화하도록 설득하기 어려울 것입니다.

이점

이점

사용자는 친숙한 고급 언어로 코드를 작성할 수 있습니다.

모든 zk 내부 구조는 추상화되며 사용자의 영향을 받지 않습니다.

특정에 의존하지 않음"가상 기기"결점

결점

프로그램마다 회로가 다릅니다. 최적화하기 어렵습니다. (시장이 이 문제를 부분적으로 해결함을 증명함)

내부 zk 라이브러리 교환/업그레이드는 쉽지 않습니다(포킹 필요).

zkVM

zkVM은 모든 zk 가상 머신의 상위 집합을 설명하는 반면, zkEVM은 오늘날의 인기로 인해 별도의 주제가 필요한 특정 유형의 zkVM입니다. 맞춤형 암호화 VM 외에도 보다 일반적인 ISA 기반 zkVM을 구축하기 위해 작업하는 여러 다른 프로젝트가 있습니다.

시스템은 EVM을 인증하는 대신 새 VM의 RISC-V 또는 WASM과 같은 다른 ISA(명령어 세트 아키텍처)를 인증할 수 있습니다. 이러한 범용 zkVM에서 작동하는 두 프로젝트는 RISC Zero와 zkWASM입니다.

이미지 설명

Risc Zero

Risc Zero Proof Generation을 위한 상위 수준 아키텍처

RISC Zero는 RISC-V 아키텍처에서 수행되는 모든 계산을 증명할 수 있습니다. RISC-V는 인기가 높아진 오픈 소스 ISA(Instruction Set Architecture) 표준입니다. RISC(Reduced Instruction Set Computer)의 아이디어는 최소한의 복잡성으로 매우 간단한 명령어 세트를 구축하는 것입니다. 즉, 스택에서 더 높은 개발자는 이 아키텍처를 사용하여 명령을 구현할 때 더 큰 부하가 발생하는 반면 하드웨어 구현은 더 간단해집니다.

이 철학은 일반적으로 컴퓨팅에도 적용되며 ARM 칩은 RISC 스타일 명령어 세트를 활용하고 있으며 모바일 칩 시장을 지배하기 시작했습니다. 단순한 명령 세트가 에너지 및 칩 영역 효율성도 더 높다는 것이 밝혀졌습니다.

이 비유는 zk 증명 생성의 효율성에 매우 잘 적용됩니다. 앞에서 설명한 것처럼 zk의 실행 궤적을 증명할 때 궤적의 각 항목에 대한 모든 명령의 비용 합계를 지불하므로 더 간단하고 총 명령이 적을수록 좋습니다.

일하는 방법

개발자의 관점에서 RISC Zero를 사용하여 zk 증명을 처리하는 것은 AWS Lambda 함수를 사용하여 백엔드 서버 아키텍처를 처리하는 것과 매우 유사합니다. 개발자는 단순히 코드를 작성하여 RISC Zero 또는 AWS Lambda와 상호 작용하고 서비스는 모든 백엔드 복잡성을 처리합니다.

RISC Zero의 경우 개발자는 Rust 또는 C++(결국 RISC-V를 대상으로 하는 모든 것)를 작성합니다. 그런 다음 시스템은 컴파일 중에 생성된 ELF 파일을 가상 머신 회로의 입력 코드로 받아들입니다. 개발자는 영수증(실행 추적을 포함하는 zk 증명) 개체를 반환하는 증명을 호출하기만 하면 누구나 어디에서나 '확인'을 호출할 수 있습니다. 개발자의 관점에서 zk의 작동 방식을 이해할 필요는 없으며 기본 시스템이 이러한 모든 복잡성을 처리합니다.

이러한 공통 인터페이스를 지원하기 위해서는 많은 오버헤드(증명 크기 및 생성 속도 측면에서)가 필요합니다.

기존 라이브러리를 광범위하게 지원하려면 증명 생성 기술을 크게 개선해야 합니다.

사전 구축된 재사용 가능 회로

블록체인 애플리케이션이나 다른 곳에 특히 유용한 일부 기본적이고 재사용 가능한 회로의 경우 팀에서 이러한 회로를 구축하고 최적화했을 수 있습니다. 특정 사용 사례에 대한 입력만 제공하면 됩니다. 예를 들어, Merkle Proofs of Inclusion은 암호화폐 애플리케이션(에어드롭 목록, 토네이도 캐시 등)에서 일반적으로 필요한 것입니다. 응용 프로그램 개발자로서 이러한 실전 테스트를 거친 계약을 항상 재사용하고 상단의 일부 레이어를 수정하여 고유한 응용 프로그램을 만들 수 있습니다.

예를 들어 Tornado Cash의 회로는 비공개 에어드롭 애플리케이션이나 비공개 투표 애플리케이션을 위해 용도가 변경될 수 있습니다. Manta와 Semaphore는 기본 zk 문 수학에 대한 지식이 거의 또는 전혀 없는 Solidity 계약에서 사용할 수 있는 이와 같은 범용 회로 장치를 포함하여 완전한 툴킷을 구축하고 있습니다.

자세히 논의한 바와 같이 zk 애플리케이션을 개발하기 위한 수많은 옵션이 있으며 모두 고유한 장단점이 있습니다.

이 다이어그램은 귀하의 zk 전문 지식 수준과 성능 요구 사항에 따라 작업에 가장 적합한 도구를 선택하기 위한 이 결정 매트릭스를 요약하는 데 도움이 됩니다. 이것은 완전한 목록이 아니며 zk가 개발됨에 따라 업데이트될 것입니다.

zkGalaxy 애플리케이션 개발자 가이드

1. 저수준 Snark 라이브러리

해당 장면

전체 교정 스택에 대한 세밀한 제어가 필요합니다.

공통 구성 요소 재구축 방지

체계, 곡선 및 기타 저수준 프리미티브의 다양한 조합을 증명해 보십시오.

해당 없음

고급 증명 인터페이스를 찾는 초보자

선택적 도구

Arkworks-rs

2. zk DSLs

해당 장면

시도되고 테스트 된 언어를 사용하고 싶습니다

최소 회로 크기 필요, 추상화 포기 의지

해당 없음

증명 백엔드에 대한 세밀한 제어가 필요합니다(현재 일부 DSL에 대해 백엔드를 교체할 수 있음).

선택적 도구

Circom

Aztec Noir

Cairo

ZoKrates

Leo

3. zk 컴파일러

해당 장면

범용 회로의 오버헤드 발생을 꺼림

친숙한 언어로 회로를 작성하고 싶음

고도로 맞춤화된 회로가 필요합니다.

해당 없음

기본 암호화 프리미티브를 제어하려는 경우

이미 고도로 최적화된 회로가 필요합니다.

선택적 도구

nil zkLLVM

4.zkEVM

해당 장면

이미 EVM에서 실행 중인 dApp이 있어야 합니다.

사용자에게 더 저렴한 거래를 제공해야 함

새로운 체인에 배포하는 데 필요한 노력을 최소화하고 싶음

zk(압축)의 단순성에만 관심

해당 없음

완벽한 EVM 동등성 필요

zk가 필요한 프라이버시 속성

블록체인 이외의 사용 사례가 있습니다.

선택적 도구

zksync 2.0 

Polygon zkEVM

Scroll

Starknet

5.zkVM

해당 장면

고급 언어로 코드를 작성하고 싶음

구현의 정확성을 입증해야 함

검증자로부터 이 실행에 대한 일부 입력 정보를 숨길 필요가 있음

zk 전문성이 거의 또는 전혀 없음

해당 없음

대기 시간이 매우 짧은 환경(여전히 느림)

거대한 프로그램이 있습니다 (현재).

선택적 도구

RISC Zero

zkWASM

6. 사전 구축된 재사용 가능 회로

해당 장면

Merkle 봉쇄와 같은 일반적인 zk 빌딩 블록에 의존하는 스마트 계약 애플리케이션이 있습니다.

zk의 후드 아래에 있는 것에 대한 전문 지식이 거의 또는 전혀 없습니다.

해당 없음

고도로 전문화된 필요를 가지고 있습니다

사전 구축된 회로에서 지원하지 않는 사용 사례

결론적으로

Manta Network

Semaphore

결론적으로

감사합니다

감사합니다

이 기사의 편집은 DAOrayaki 커뮤니티로부터 지원과 피드백을 받았습니다.

원본: zkGalaxy에 대한 개발자 가이드

개발자
Vitalik
zkSync
기술
Odaily 공식 커뮤니티에 가입하세요