zkEVM 심층 분석: 작동 원리, 구축 난이도, 중요성 및 개발 진행 상황 등
원문 제목:《zkEVM 지식 Q&A --Alchemy》
원문 출처:Alchemy
제로 지식 이더리움 가상 머신(zkEVM)은 프로그램의 정확성을 검증하기 위해 제로 지식 증명을 생성하는 가상 머신입니다. ZkEVM은 제로 지식 기술을 지원하는 방식으로 스마트 계약을 실행하는 것을 목표로 합니다.
ZkEVM은 이더리움 제 2층 확장 솔루션의 일환인 제로 지식(ZK) 롤업의 일부로, 계산 및 상태 저장을 체인 외부로 이전하여 처리량을 향상시킵니다. ZK 롤업은 이더리움에 거래 데이터를 제출하고, 체인 외부 거래 배치의 유효성을 검증하는 제로 지식 증명을 제공합니다.
초기 ZK 롤업은 스마트 계약을 실행하는 능력이 부족하고 단순한 토큰 교환 및 결제에 제한되었습니다. 그러나 EVM과 호환되는 제로 지식 가상 머신의 도입으로 ZK 롤업은 이더리움 dApp을 지원하기 시작했습니다.
이 문서에서는 zkEVM의 작동 원리, 중요성 및 다양한 유형의 zkEVM에 대해 살펴보겠습니다.
zkEVM이란 무엇인가요?
zkEVM은 제로 지식 증명 계산을 지원하는 EVM과 호환되는 가상 머신입니다. 일반 가상 머신과 달리 zkEVM은 프로그램 실행의 정확성을 증명하며, 여기에는 작업 중 사용된 입력과 출력의 유효성이 포함됩니다.
이 정의를 더 쉽게 이해할 수 있도록 분해해 보겠습니다:
EVM 호환성
EVM(이더리움 가상 머신)은 이더리움 네트워크에 배포된 스마트 계약을 실행하는 런타임 환경입니다. EVM은 "세계 컴퓨터" 역할을 하여 이더리움 블록체인에서 실행되는 탈중앙화 애플리케이션(dApps)에 동력을 제공합니다.
가상 머신이 EVM 환경에서 실행되도록 생성된 프로그램을 실행할 수 있다면, 그것은 "EVM과 호환된다"고 할 수 있습니다. 이러한 가상 머신은 Solidity 또는 이더리움 개발에 사용되는 다른 고급 언어로 작성된 스마트 계약을 실행할 수 있습니다. ZkEVM은 EVM과 호환되며, 이더리움 스마트 계약을 실행하기 위해 기본 논리를 대규모로 수정할 필요가 없습니다.
제로 지식 기술 지원
EVM은 제로 지식 증명을 지원하도록 설계되지 않았기 때문에 EVM과 호환되며 제로 지식 친화적인 가상 머신을 구축하는 것이 어려워졌습니다. 그러나 연구의 발전은 어느 정도 EVM 계산을 제로 지식 증명으로 포장하는 것을 가능하게 만들었습니다.
다양한 zkEVM 프로젝트는 EVM 실행과 제로 지식 증명 계산을 결합하는 다양한 접근 방식을 채택하고 있습니다. 각 방법은 고유한 균형을 가지고 있으며, 이 가이드의 후반부에서 논의할 것입니다.
zkEVM은 어떻게 작동하나요?
EVM과 마찬가지로 zkEVM은 프로그램 작업을 통해 상태 간 전환을 수행하는 가상 머신입니다. 그러나 zkEVM은 각 계산 부분의 정확성을 증명하기 위해 증명을 생성하여 한 걸음 더 나아갑니다. 본질적으로 zkEVM은 실행 단계(앞서 언급한 대로)가 규칙을 따르는지 증명하는 메커니즘을 사용합니다.
zkEVM의 작동 원리(그리고 그것이 다른 이유)를 이해하기 위해, 현재 EVM의 작동 방식을 살펴보겠습니다.
EVM의 작동 원리
이더리움 가상 머신은 상태 머신으로, 일부 입력에 응답하여 이전 상태에서 새로운 상태로 이동합니다. 각 스마트 계약 실행은 EVM 상태의 변화를 촉발합니다(이를 "상태 전환"이라고 합니다). 다음은 스마트 계약 거래 중 발생하는 일에 대한 고급 개요입니다:
계약 바이트코드(소스 코드에서 컴파일됨)는 EVM의 저장소에서 로드되어 EVM의 피어 투 피어 노드에서 실행됩니다. 노드는 동일한 거래 입력을 사용하여 각 노드가 동일한 결과에 도달하도록 보장합니다(그렇지 않으면 합의에 도달할 수 없습니다).
EVM 작업 코드(바이트코드에 포함됨)는 EVM 상태의 다양한 부분(메모리, 저장소 및 스택)과 상호작용합니다. 작업 코드는 상태 저장소에서 값을 읽고(가져오기) 새 값을 EVM의 저장소에 기록(전송)하는 읽기 및 쓰기 작업을 수행합니다.
EVM 작업 코드는 새 값을 반환하기 전에 상태 저장소에서 얻은 값에 대해 계산을 수행합니다. 이 업데이트는 EVM이 새로운 상태로 전환되도록 합니다(따라서 거래는 "상태 전환"이라고 불립니다). 이 새로운 상태는 다른 노드에 복제되어 다른 거래가 실행될 때까지 유지됩니다.
이더리움 가상 머신(EVM)에서 프로그램이 어떻게 실행되는지를 보여주는 차트입니다.[출처]
zkEVM의 작동 원리
zkEVM은 각 계산에서 다양한 요소를 검증하기 위해 제로 지식 증명을 생성합니다:
1. 바이트코드 접근: 적절한 프로그램 코드가 올바른 주소에서 올바르게 로드되었나요?
2. 읽기 및 쓰기 작업: 프로그램이 계산 전에 스택/메모리/저장소에서 올바른 값을 가져왔나요? 프로그램이 실행을 완료한 후 올바른 출력 값을 스택/메모리/저장소에 기록했나요?
3. 계산: 작업 코드가 올바르게 실행되었나요(즉, 하나씩, 단계를 건너뛰지 않고)?
zkEVM의 아키텍처
zkEVM은 실행 환경, 증명 회로 및 검증자 계약의 세 부분으로 나뉩니다. 각 구성 요소는 zkEVM의 프로그램 실행, 증명 생성 및 증명 검증에 기여합니다.
1. 실행 환경
말 그대로, 실행 환경은 zkEVM에서 프로그램(스마트 계약)을 실행하는 곳입니다. zkEVM의 실행 환경 기능은 EVM과 매우 유사합니다: 초기 상태와 현재 거래를 사용하여 새로운(최종) 상태를 출력합니다.
2. 검증 회로
증명 회로는 실행 환경에서 계산된 거래의 유효성을 검증하기 위해 제로 지식 증명을 생성합니다. 이전 상태, 거래 입력 및 후 상태 정보를 입력으로 사용하여 증명 생성 과정을 완료합니다. 이후 증명자는 해당 특정 상태 전환의 유효성에 대한 간결한 증명을 받습니다.
zkEVM이 프로그램에 대한 유효성 증명을 생성하는 방법을 보여주는 차트입니다.[출처]
- 검증자 계약
ZK 롤업은 유효성 증명을 L1 체인(이더리움)에 배포된 스마트 계약에 제출하여 검증합니다. 입력(이전 상태 및 거래 정보)과 출력(최종 상태)도 검증자 계약에 제출됩니다. 그런 다음 검증자는 제공된 증명에서 계산을 실행하고 제출된 출력이 입력에 따라 올바르게 계산되었음을 확인합니다.
zkEVM 작업 코드란 무엇인가요?
ZkEVM 작업 코드는 EVM과 호환되는 ZK 롤업에서 프로그램을 실행하는 데 사용되는 저급 기계 명령어입니다. EVM과 마찬가지로 고급 언어로 작성된 계약은 VM이 해석할 수 있는 저급 언어(바이트코드)로 컴파일되어야 합니다. 이 바이트코드는 VM에 프로그램을 배포할 때 프로그램을 실행하는 데 사용되는 작업 코드를 지정합니다.
우리는 zkEVM 작업 코드가 필요합니다. 왜냐하면 일반 EVM 작업 코드는 제로 지식 증명 회로에서 사용 효율성이 낮기 때문입니다. 일반적으로 zkEVM 작업 코드를 생성하는 두 가지 방법이 있습니다:
원주율 EVM 작업 코드에 대한 ZK 회로 구축
ZK 증명 계산을 위한 새로운 언어 생성
원주율 EVM 작업 코드에 대한 제로 지식 회로 구축
이 방법은 모든 EVM 명령어 집합을 산술 회로에서 구현해야 하며, 이는 복잡하고 시간이 많이 소요되는 작업입니다. 장점은 개발자가 기존 블록체인 개발 도구를 사용하여 스마트 계약을 생성하거나 기존 이더리움 계약을 ZK 롤업으로 이식할 수 있다는 것입니다. 많은 수정을 필요로 하지 않습니다.
ZK 증명 계산을 위한 새로운 언어 생성
이 방법은 유효성 증명을 지원하도록 설계된 새로운 언어를 구축하고 사용자 정의 작업 코드를 개발해야 합니다. 개발자는 새로운 언어로 직접 계약을 작성하거나 Solidity 소스 코드를 사용자 정의 zkEVM 작업 코드로 컴파일해야 합니다.
이 방법은 일반적으로 첫 번째 방법보다 구현하기 쉬운 경우가 많지만 단점도 있습니다. 예를 들어, 개발자는 기존 이더리움 인프라 및 리소스에 접근할 수 없을 수도 있습니다.
EVM 호환성에 따라 분류된 제로 지식 가상 머신.[출처]
zkEVM 구축이 어려운 이유는 무엇인가요?
EVM이 구축될 때 zk-proof 계산을 고려하지 않았기 때문에 증명 회로에 불리한 특성을 가지고 있습니다. 아래는 zkEVM 구축을 어렵게 만드는 네 가지 사항을 간략히 설명합니다:
특수 작업 코드
스택 기반 아키텍처
저장소 오버헤드
증명 비용
1. 특수 작업 코드
일반 VM과 달리 EVM은 프로그램을 실행하기 위해 특수 작업 코드(CALL, DELEGATECALL) 및 오류 처리(REVERT, INVALID)와 기타 작업을 사용합니다. 이는 EVM 작업을 위한 검증 회로 설계 과정의 복잡성을 증가시킵니다.
2. 스택 기반 아키텍처
EVM은 스택 기반 아키텍처를 사용하며, 이는 레지스터 기반 구조보다 간단하지만 계산 증명의 난이도를 증가시킵니다. 이것이 유명한 제로 지식 VM인 ZkSync의 zkEVM과 StarkWare의 StarkNet이 레지스터 기반 모델을 사용하는 이유입니다.
3. 저장소 오버헤드
EVM의 저장소 레이아웃은 Keccak 해시 함수와 Merkle Patricia Trie에 의존하며, 두 가지 모두 높은 증명 오버헤드를 가지고 있습니다. 일부 zkVM은 ZkSync와 같이 KECCAK256 함수를 대체하여 이 문제를 회피하려고 하지만, 이는 기존 이더리움 도구 및 인프라와의 호환성을 손상시킬 수 있습니다.
4. 증명 비용
위의 문제를 해결하더라도 증명 생성 과정에 대한 대응이 필요합니다. 제로 지식 증명을 생성하려면 전문 하드웨어와 많은 시간, 돈 및 에너지 투입이 필요합니다.
이 목록은 EVM과 호환되는 zkEVM 구축을 방해하는 몇 가지 문제를 제시하지만, 이는 포괄적이지 않습니다. 그럼에도 불구하고 제로 지식 기술의 몇 가지 돌파구는 이러한 문제를 완화할 수 있는 가능성을 열어주었으며, zkEVM 솔루션에 대한 관심이 다시 높아지고 있습니다.
zkEVM이 중요한 이유는 무엇인가요?
기능이 완전한 zkEVM을 구축하는 것은 EVM과 호환되는 ZK 롤업 프로젝트의 개발을 장려할 것입니다. 이는 여러 가지 장점을 가지고 있습니다:
안전한 확장성
비용 절감
더 빠른 최종 확정성과 자본 효율성
네트워크 효과
1. 안전한 확장성
프로토콜 규칙에 따라 모든 검증 노드는 이더리움 가상 머신에서 실행된 모든 계산을 다시 실행해야 합니다. 이 방법은 이더리움 노드가 프로그램의 정확성을 독립적으로 검증할 수 있도록 보장하므로 안전성을 확보하지만, 이더리움 네트워크의 확장성을 약 15-20 거래로 제한합니다.
EVM과 호환되는 ZK 롤업은 네트워크 보안을 해치지 않으면서 이더리움의 처리량 문제를 해결할 수 있습니다. 다른 확장 프로토콜과 마찬가지로 ZK 롤업은 이더리움 합의 프로토콜 규칙의 부담을 받지 않으며 실행 속도를 최적화할 수 있습니다. 일부 추정에 따르면 ZK 롤업은 이더리움의 높은 수수료 없이 초당 약 2000건의 거래를 처리할 수 있습니다.
그러나 ZK 롤업은 다른 확장 프로젝트에 비해 더 높은 보안 보장을 제공합니다. 그들은 유효성 증명을 사용하여 체인 외부 계산의 정확성을 검증합니다. 이는 L2에서 실행된 스마트 계약의 거래가 L1(이더리움)에서 신뢰할 수 있게 검증될 수 있음을 의미하며, 노드가 작업을 다시 실행할 필요가 없습니다. 이는 보안을 저하시키지 않으면서 이더리움의 처리 속도를 크게 향상시킬 수 있습니다.
2. 더 낮은 비용
롤업은 거래 데이터를 CALLDATA로 이더리움에 기록하여 이더리움 메인넷에서 보안을 확보합니다. 그러나 낙관적 롤업과 제로 지식 롤업의 차이는 이더리움에 얼마나 많은 데이터를 게시해야 하는지에 있습니다.
낙관적 롤업은 체인 외부 거래의 유효성 증명을 제공하지 않기 때문에 거래와 관련된 모든 데이터를(서명 및 거래 매개변수 포함) 체인에 게시해야 합니다. 모든 데이터를 체인에 게시하지 않으면, 도전자는 무효 롤업 거래에 대한 사기 증명을 구축할 수 없습니다.
반면, ZK 롤업은 유효성 증명이 상태 전환의 신뢰성을 보장하기 때문에 이더리움에 최소한의 데이터만 게시할 수 있습니다. zkEVM은 거래 입력을 생략하고 최종 상태 변경만 게시하여 CALLDATA 요구 사항을 더욱 줄일 수 있습니다.
3. 더 빠른 확정성과 자본 효율성
더 나은 보안 외에도 ZK 롤업은 낙관적 롤업에 비해 또 다른 장점이 있습니다: 더 빠른 최종 확정성입니다. 블록체인에서의 확정성은 거래가 되돌릴 수 없게 되는 데 필요한 시간입니다. 거래가 최종 확정되려면 네트워크 참여자가 그 유효성을 증명할 수 있는 객관적인 증거가 있어야 합니다.
ZK 롤업을 사용할 경우, zkEVM에서 실행된 거래는 이더리움에 게시된 후 즉시 완료되는 경우가 많습니다. 각 거래 배치에는 즉시 검증 가능한 유효성 증명이 포함되어 있으므로 이더리움 메인 체인은 상태 업데이트를 신속하게 적용할 수 있습니다.
낙관적 롤업은 증명이 없는 상태에서 VM 거래를 게시하기 때문에 거래가 최종 확정되기 위해서는 질의 기간을 거쳐야 합니다. 질의 기간은 1-2주이며, 이 기간 동안 누구나 거래가 이더리움에 제출된 후 이를 도전할 수 있습니다.
느린 최종 확정성은 사용자 경험에 많은 영향을 미칩니다. 예를 들어, 지연 기간이 만료되기 전에 사용자는 롤업에서 자산을 인출할 수 없습니다. 유동성 제공자는 문제를 해결할 수 있지만, 인출이 고가 자산이나 NFT와 관련된 경우에는 무효가 될 수 있습니다.
zkEVM은 위와 같은 문제를 겪지 않습니다. 더 빠른 최종 확정성은 L1과 L2 간에 자산을 원활하게 이동해야 하는 NFT 거래자, DeFi 투자자 또는 차익 거래자와 같은 고급 사용자에게 매우 적합합니다.
4. 네트워크 효과
EVM과 호환되는 zkVM을 구축하는 가장 중요한 이유는 이더리움의 네트워크 효과를 활용하는 것입니다. 세계 최대의 스마트 계약 플랫폼인 이더리움은 개발자와 프로젝트에 가치를 제공하는 방대한 생태계를 가지고 있습니다.
예를 들어, 개발자는 실전 테스트와 감사가 완료된 코드 라이브러리, 광범위한 도구, 문서 등에 접근할 수 있습니다. 이더리움 인프라와 호환되지 않는 새로운 zkVM을 만드는 것은 프로젝트와 개발 팀이 이더리움의 네트워크 효과를 활용할 수 없게 만듭니다.
zkEVM의 종류는 무엇인가요?
현재 zkEVM 프로젝트는 두 가지 주요 범주로 나뉩니다: 원주율 EVM 작업 코드를 지원하는 zkVM과 사용자 정의 EVM 작업 코드를 사용하는 zkVM. 아래에서는 다양한 zkEVM 프로토콜을 비교하고 그 작동 방식을 설명합니다:
Polygon zkEVM
Polygon Hermez는 EVM 호환성을 지원하기 위해 제로 지식 가상 머신이 포함된 Polygon ZK 롤업입니다. 이를 위해 EVM 바이트코드는 "마이크로 작업 코드"로 컴파일되어 uVM에서 실행됩니다. uVM은 SNARK 및 STARK 증명을 사용하여 프로그램 실행의 정확성을 검증하는 가상 머신입니다.
이 두 가지 증명 유형을 결합하는 결정은 전략적으로 중요합니다. STARK(확장 가능한 투명 지식 증명) 증명은 생성 속도가 더 빠르지만, SNARK(간결한 비대화형 지식 증명) 증명은 더 작고 이더리움에서 검증 비용이 더 낮습니다.
Polygon Hermez zkEVM은 STARK 증명 회로를 사용하여 상태 전환의 유효성 증명을 생성합니다. STARK 증명은 STARK 증명의 정확성을 검증하고(이를 "증명의 증명"으로 간주) 이더리움에 제출하여 검증합니다.
zkSync zkEVM
zkSync는 Matter Labs가 개발한 EVM 호환 ZK 롤업으로, 자체 zkEVM을 지원합니다. zkSync는 이더리움과의 호환성을 달성하기 위해 다음 전략을 사용합니다:
Solidity로 작성된 계약 코드를 Yul로 컴파일합니다. Yul은 다양한 가상 머신의 바이트코드로 컴파일할 수 있는 중간 언어입니다.
Yul 바이트코드를(LLVM 프레임워크를 사용하여) zkSync의 zkEVM을 위해 특별히 설계된 사용자 정의 회로 호환 바이트코드 집합으로 다시 컴파일합니다.
Polygon Hermez와 마찬가지로 zkSync zkEVM은 바이트코드 수준이 아닌 언어 수준에서 EVM 호환성을 구현합니다. 예를 들어, zkSync의 zkEVM은 전통적인 곱셈 및 덧셈 작업 코드(ADDMOD, SMOD, MULMOD)를 지원하지 않습니다.
Scroll zkEVM
Scroll은 현재 개발 중인 새로운 제로 지식 EVM 구현입니다. Scroll 팀은 각 EVM 작업 코드에 대한 제로 지식 회로를 설계할 계획입니다. 이는 개발자가 Scroll에서 이더리움 네이티브 스마트 계약 EVM을 배포할 수 있도록 하며, 기본 EVM 바이트코드를 수정할 필요가 없습니다.
또한 Scroll zkEVM은 "암호 누적기(cryptographic accumulator)"를 사용하여 저장소의 정확성을 검증합니다. 이는 계약 바이트코드가 주어진 주소에서 올바르게 로드되었음을 증명하는 데 사용됩니다.
또한 바이트코드를 실행 추적과 연결하는 회로를 제공합니다. 실행 추적은 어떤 VM 명령어가 실행되었는지 및 실행 순서를 지정하는 일련의 것입니다. 증명자는 증명 생성 중에 실행 추적을 제출하여 계산이 원래 바이트코드와 일치하는지 검증합니다.
Applied ZKP zkEVM
Applied ZKP는 이더리움 재단의 지원을 받는 프로젝트로, EVM과 호환되는 ZK 롤업 및 이더리움 블록에 대한 유효성 증명을 생성하는 메커니즘을 개발하는 것을 목표로 합니다. 마지막 부분은 매우 중요합니다. 블록과 유효성 증명을 쌍으로 묶으면 노드가 블록을 다시 실행할 필요가 없어집니다.
Applied ZKP의 혁신은 계산과 저장소의 분리입니다. 이는 두 가지 유형의 유효성 증명(상태 증명 및 EVM 증명)을 사용합니다:
상태 증명
저장소, 메모리 및 스택과 관련된 작업이 올바르게 발생했는지 확인합니다. 상태 증명은 본질적으로 읽기 및 쓰기 작업의 정확성을 검증합니다.
EVM 증명
계산이 올바른 시간에 정확한 작업 코드를 호출했는지 확인합니다. EVM 증명은 계산 자체를 검증하고 상태 증명이 각 작업 코드에 대해 올바른 작업을 수행했음을 확인합니다.
Applied ZKP zkEVM은 상태 증명과 EVM 증명을 연결하기 위해 버스 매핑을 사용합니다. 또한 이더리움 블록이 유효한 것으로 간주되기 전에 이 두 증명을 모두 검증해야 합니다.
zkEVM 개발 진행 상황은 어떤가요?
zkSync를 제외하고 대부분의 제로 지식 EVM은 여전히 개발 중입니다. 그러나 제로 지식 기술의 지속적인 발전은 기능이 완전한 zkEVM의 전망을 그 어느 때보다 밝게 하고 있습니다.