저자: 마이클 주(마이클 주, a16z 암호화폐 연구 엔지니어), 샘 래그데일(샘 래그데일, a16z 암호화폐 투자 엔지니어), 골든 파이낸스 샤오저우(Golden Finance xiaozou)가 번역했습니다.
2024년 4월 9일, a16z Crypto 연구 및 엔지니어링 팀은 새로운 SNARK 설계인 Jolt의 예비 구현을 발표했습니다. 기존 기술보다 최대 2배 빠른 접근 방식이며, 앞으로 더 많은 개선이 이루어질 예정입니다.
검증 가능한 컴퓨팅(일반적으로 ZK로 알려진)은 블록체인과 비블록체인 모두에 적용되는 매우 강력한 기술입니다. 이를 통해 한 컴퓨터(검증자 검증자)가 더 강력한 다른 컴퓨터(증명자 증명자)에게 계산을 위임하여 계산이 올바르게 실행되었는지 효과적으로 검증할 수 있습니다.
암호 화폐 업계에서 검증 가능한 연산(특히 SNARK)의 응용 분야는 다음과 같습니다.
계층 2(L2) 블록체인은 상태 전환의 무결성을 보장하기 위해 SNARK를 사용합니다.
블록체인이 아닌 흥미로운 사용 사례도 많이 있지만, 거의 탐구되지 않은 사례도 있습니다. 예를 들어, 클라우드 서비스 제공자는 서버에 위임된 특정 계산을 올바르게 실행했음을 고객에게 증명할 수 있습니다. npm이나 crates.io와 같은 소프트웨어 레지스트리는 바이너리가 특정 소스 코드에서 컴파일되었음을 증명하여 소프트웨어 공급망 공격의 위험을 줄일 수 있습니다. 또는 슈퍼 마리오 브라더스의 툴 어시스트 레이싱(TAS)이 세계 기록을 깼다는 것을 증명할 수도 있습니다(RISC 제로에도 묘사된 아이디어).
이러한 앱 중 상당수는 너무 복잡해서 서킷 DSL(도메인별 언어)로 변환할 수 없는 절차를 포함합니다(예를 들어, 컴파일러나 NES 에뮬레이터를 사용하여 전체 Circom 언어를 다시 작성한다고 상상해 보세요. 컴파일러 또는 NES 에뮬레이터를 사용하여 전체 Circom 언어를 다시 작성한다고 상상해 보세요. 그러나 프로그램이 zkVM에서 지원하는 명령어 집합으로 컴파일되면 프로그래머가 선택한 고급 프로그래밍 언어로 프로그램을 작성하기만 하면 나머지는 zkVM이 처리하므로 회로 또는 DSL 변환을 직접 작성할 필요가 없습니다.
그렇다면 남은 과제는 zkVM 증명자의 성능으로, 유용할 만큼 충분히 빨라야 합니다. 이는 증명자 시간이 지연 시간과 사용자 경험에 영향을 미치는 블록체인 사용 사례에서 특히 중요합니다.
검증 가능한 컴퓨팅은 블록체인 확장을 위한 궁극적인 솔루션으로 오랫동안 선전되어 왔지만, 이 기술은 채택에 세 가지 주요 장벽에 직면해 있습니다.
성능: 절차 증명 실행은 네이티브 실행에 비해 몇 배나 높은 오버헤드를 유발합니다.
복잡성: 수십억 달러의 온체인 자산을 관리해야 하기 때문에 SNARK의 복잡성은 구현의 보안에 대한 우려를 불러일으킵니다.
사용성: Circom과 같은 DSL(도메인 특정 언어)은 대부분의 소프트웨어 개발자가 사용할 수 없는 전문 지식이 필요합니다.
영지식 가상 머신(zkVM)의 개발로 세 번째 장애물(사용성)이 극복되었습니다. zkVM은 개발자가 실행을 정당화하기 위해 기본 SNARK에 대한 지식이 없어도 Rust나 Go 같은 고수준 프로그래밍 언어로 프로그램을 작성할 수 있게 해주기 때문입니다. 그러나 zkVM의 가용성이 높아지면 성능 오버헤드가 8~9배로 증가하고 배포가 복잡해집니다.
작년에 Jolt 기사에서 성능 오버헤드와 배포 복잡성이라는 두 가지 문제를 극복할 수 있는 새로운 패러다임이 소개되었습니다. Jolt의 이론적 배경은 STARK에 기반한 기존 아이디어와는 다릅니다. 올가미 쿼리 매개변수 및 기타 합계 검사 기반 기술을 활용하여 Jolt는 그 어느 때보다 빠르게 프로그램을 증명하고 새로운 VM 명령어를 이전보다 더 쉽게 배포할 수 있습니다.
오늘, Jolt 기사에서 약속드린 대로 RV32I 명령어 집합을 위한 Jolt의 오픈 소스 배포를 출시하게 되어 기쁘게 생각합니다.
빠름: 저희 배포는 RISC Zero보다 5배 이상 빠르며, 막 출시된 SSL보다 5배 이상 빠릅니다. 초기 벤치마크에서 RISC 제로보다 5배, 방금 출시된 SP1보다 2배 더 빠릅니다.
(상대적으로) 단순함: 전체 코드베이스가 25,000줄 미만인 Rust(다른 zkVM의 절반 이하)이며 단일 CPU 명령어를 50줄의 코드만으로 구현할 수 있습니다.
아래에서는 성능 벤치마크를 함께 살펴보면서 Jolt가 새롭게 떠오르는 zkVM 중 가장 진보된 기술임을 보여주고, Jolt를 사용하는 앱 개발에 관심이 있는 개발자와 Jolt에 기여하고 싶은 개발자를 위한 몇 가지 지침도 제공합니다. 로드맵 미리보기 - 앞으로 몇 달 안에 더 빠르고 사용하기 쉬워질 것으로 기대합니다.
a16z 암호화 엔지니어링 팀은 오픈소스의 가치에 대한 강한 신념을 바탕으로 구축되었습니다. 오픈 소스 공개 제품으로 Jolt를 구축하면 zkVM 연구, 광범위한 SNARK 연구 및 웹 3.0 산업 전반이 가속화될 것입니다. (대중이 코드를 검토할 수 없는) 폐쇄된 소스 코드의 사일로에서 암호화를 구축하면 일반적으로 신뢰할 수 없는 시스템에 신뢰를 가져다줍니다.
1, 성능
기본 실행에 비해 zkVM과 관련된 오버헤드가 항상 약 8배 정도 있었기 때문에 많은 검증 가능한 컴퓨팅 애플리케이션이 불가능했습니다. 현재 버전의 Jolt는 이 오버헤드를 6배 이하로 줄였습니다.
최첨단 성능을 갖추고 있지만, Jolt의 기본 기술(sumcheck 프로토콜 기반)은 더 많이 사용되는 기술(FRI 기반)에 비해 엔지니어들의 관심을 많이 받지 못했습니다. 이는 Jolt가 성장할 수 있는 여지가 더 많다는 것을 의미합니다. 저희는 로드맵에 몇 가지 최적화를 설정했으며 아직 발견되지 않은 기회가 있을 것으로 예상하고 있습니다.
a16z/zkvm 벤치마크는 다양한 Rust 프로그램에서 Jolt, SP1, RISC Zero를 벤치마킹했습니다. 그 결과 비교 가능한 많은 RV32 프로그램에서 상대적인 성능이 비슷하다는 것을 알 수 있었습니다. 다음 그림은 Sha2 해시 체인을 수행하는 프로그램을 참조합니다.
< /p>
이 벤치마크의 결과는 아래와 같습니다. 벤치마크는 64개의 CPU 코어와 512기가바이트 DDR5 RAM을 갖춘 16x 대형 ARM 시스템인 AWS r7g에서 실행되었습니다. 모든 벤치마크는 CPU 전용입니다.
연속성을 사용하는 연속 시스템은 증명 시간(prover time)에 직면합니다. 증명 시간과 증명 크기 사이의 트레이드오프 - 증명이 더 많은 "샤드 슬라이스"(또는 "세그먼트")로 분할될 때 증명은 더 빨라지지만(슬라이스 간 병렬화로 인해), 더 많은 "샤드"(또는 "세그먼트")로 분할될 때 증명은 더 빨라지지만, 증명은 더 많은 "샤드"(또는 "세그먼트")로 분할될 때 더 빨라집니다. 병렬화)보다 더 빠르지만 재귀 이전의 증명 크기가 더 큽니다. 증명 크기 벤치마크는 아래에 나와 있으며, SP1 결과는 슬라이스 수에 의해 매개변수화됩니다: SP1 (shard_count). RISC 제로는 고정 크기의 슬라이스를 가지고 있으므로 슬라이스 수는 프로그램 사이클 수에 따라 암묵적으로 증가합니다. RISC Zero는 재귀를 지원하지만(SP1과 Jolt는 아직 지원하지 않음), 아래 벤치마크는 재귀를 사용하지 않고 성능을 측정합니다. 또한 "사전 컴파일"을 사용하지 않으므로 벤치마크는 핵심 zkVM 증명 시스템의 성능을 반영합니다.
< /p>
p>
2, Jolt 개발 및 구축 방법>
Jolt를 최대한 사용하기 쉽게 만들기 위해 Jolt SDK ( a16z의 암호화 엔지니어링 파트너인 노아 시트론이 개발)는 Jolt의 핵심 기능에 대한 짧은 형식의 래퍼를 제공합니다. 증명하고자 하는 함수에 jolt_sdk::provable 속성을 추가하기만 하면 됩니다.
< /p>
그런 다음 build_* 함수를 사용하여 증명자와 검증자를 생성할 수 있습니다.
코드 베이스에서 전체 피보나치 예제(및 기타)를 확인하세요.
Jolt 아키텍처에 대해 더 자세히 알아보려면 Jolt 문서에 문서화되지 않은 디자인 선택 사항과 코드 라이브러리가 포함된 실시간 최신 문서인 Jolt Book(WIP)을 참조하세요. 앞으로 몇 주에 걸쳐 Jolt를 기반으로 구축하는 데 관심이 있거나 Jolt의 내부 메커니즘에 대해 배우고 싶은 개발자를 위해 더 많은 콘텐츠를 공개할 예정입니다.
3, 다음 단계
Jolt는 zkVM 분야에서 중요한 이정표이지만, 아직 갈 길이 멀다. 한 걸음 물러서서 성능 벤치마크에 따르면 Jolt 프로버(M3 Max)는 아폴로 11호 유인 비행 임무의 온보드 연산 능력의 두 배 이상인 100kHz 프로세서만큼 빠른 프로그램을 입증했습니다. 또 다른 간단한 비교를 위해 TI-84 그래프 계산기와 비교하면 150배 더 느렸습니다.
컴퓨터급 성능을 달성하기 위해 해야 할 일이 많습니다. 개발자에게 최상의 개발 환경을 제공하기 위해 Jolt의 성능과 사용성을 지속적으로 개선해 나갈 것입니다. 로드맵의 다음 주요 작업은 저희를 흥분시킵니다.
Binius. Strong>: 벤 다이아몬드와 짐 포센은 최근 커밋 값이 작은 Jolt와 같은 시스템에 특히 유용한 다선형 다항식 커밋 체계를 제안했습니다.Binius는 저스틴 탈러의 작은 도메인 합체크 알고리즘과 결합하여 다음과 같이 크게 개선됩니다. Jolt의 증명자 성능을 크게 향상시킬 것으로 기대합니다(5~10배 정도).
추가 지침: 현재 Jolt 코드 베이스는 RV32I를 배포하고 있지만, Jolt 아키텍처는 매우 유연합니다. Jolt 문서에 설명된 대로 정수 곱셈과 나눗셈을 지원하기 위해 RISC-V "M" 확장자를 추가할 계획입니다. 또한, Jolt는 64비트 변형인 RV64IM을 쉽게 지원할 수 있습니다.
연속성 연속 시스템: 현재 메모리 제약으로 인해 Jolt는 임의 길이의 계산을 증명할 수 없습니다. 우리는 연속을 사용하여 긴 계산을 더 작은 계산 덩어리로 나누고, 각 계산을 Jolt가 증명할 수 있도록 할 것입니다. 이렇게 하면 메모리 사용량을 줄이고 개별 계산을 증명할 때 추가적인 병렬 처리를 지원할 수 있습니다.
재귀 증명: Jolt를 다른 증명 시스템과 결합하면 증명 크기와 검증 시간을 더욱 줄일 수 있습니다. 예를 들어, Jolt 검증자는 Circom 언어를 사용하여 구현되어 체인에서 효율적으로 검증할 수 있는 일정한 크기의 Groth16 증명을 생성할 수 있습니다.