[Boom Labs 1st ZK Meetup] Overview of zkEVM & zkRollup

이더리움의 확장성과 영지식 증명의 활용

Boom Labs는 Web 3 개발자들을 온보딩시키고, 생태계를 활성화시키기 위해 교육을 비롯한 여러 활동들을 하고 있습니다. 저희 비전에 공감하여 동참하고자 하는 분들은 Boom Labs의 문을 두드려주세요!

Disclaimer: 이 글은 정보 전달을 위한 목적으로 작성되었으며, 특정 프로젝트에 대한 투자 권고, 법률적 자문 등 목적으로 하지 않습니다. 모든 투자의 책임은 개인에게 있으며, 이로 발생된 결과에 대해 어떤 부분에서도 Boom Labs는 책임을 지지 않습니다. 본문이 포괄하는 내용들은 특정 자산에 대한 투자를 추천하는 것이 아니며, 언제나 본문의 내용만을 통한 의사결정은 지양하시길 바랍니다.

이 글은 9월 17일, 18일에 Boomlabs와 zkSEL에서 개최한 밋업의 첫 번째 세션이었던 “Overview of zkEVM& zkRollup”을 발표 자료를 일부 수정 및 정리한 자료입니다. 유튜브 녹화영상은 다음 링크에서 확인하실 수 있습니다.

Ethereum Scaling Problem & Layer2

블록체인 트릴레마와 확장성 솔루션

먼저, 본격적으로 설명하기에 앞서 zkRollup과 zkEVM이 등장하게 된 배경에 대해서 블록체인 트릴레마를 통해서 간단하게 설명하도록 하겠다. 블록체인 트릴레마란, 비탈릭 부테린이 제시한 개념으로 블록체인이 확장성, 탈중앙성, 보안성을 동시에 달성할 수 없다는 것을 의미한다. 이더리움은 이 중 보안성과 탈중앙성을 갖췄지만 확장성 부분에서 web2.0의 네트워크 시스템에 비해서 낮은 퍼포먼스를 보인다. 즉, 마이닝 노드 또는 코어 수와 같이 더 많은 자원을 투입하더라도 블록체인의 트랜잭션 처리 속도(TPS)가 증가하지 않는 문제를 ‘확장성 문제(Scaling Problem)’ 라고 하며, 이더리움은 샤딩과 같은 방식을 통해서 확장성의 한계를 극복하려고 하고 있다.​

확장성의 문제를 해결하는 방식으로는 크게 두 가지로 나눌 수 있다. 첫 번째는 Layer 1 또는 메인체인에서 확장성을 해결하는 방식이다. 즉, 솔라나와 같이 노드의 스팩을 높이는 동시에 블록체인의 컨센서스 메커니즘을 변경하여 트랜잭션의 처리 속도를 높이거나, 이더리움의 샤딩과 같은 트랜잭션 병렬처리 기술을 통해서 메인체인의 부담을 덜어주는 방식을 말한다. 두 번째로는, 메인체인은 그대로 있고 트랜잭션의 실행을 외부에서 진행하여 메인체인의 부담을 덜어주는 방식이 있다. 이를 일반적으로 Layer 2 솔루션이라고 일커르며, 블록체인의 네 가지 기능인 Consensus, Execution, Settlement, Data availability 중 Execution에 해당하는 트랜잭션의 실행을 외부 체인(Layer2)에서 수행하여 L1체인의 연산량을 줄여주는 방식이다.

이더리움의 평균 트랜잭션 비용과 이더리움의 확장성 솔루션의 Value가 어느정도 상관 관계를 보이는 것을 알 수 있음

지난 상반기에 있었던 테라 사태와 솔라나 네트워크의 불안정성 그리고 이더리움 머지와 같은 큰 이벤트에 힘입어 Layer2에 대한 관심은 점점 더 집중되고 있다. 필자 역시 역할을 분산화하는 것이 합리적이라는 생각이 들어 Layer2에 대해 관심을 갖고 지켜보는 중이다. 이에, Layer 2 솔루션 중 오늘은 zk를 활용한 솔루션을 위주로 알아볼 예정이다.​

Rollup Solution

Optimistic Rollup과 비교하며 알아보는 zkRollup의 강점

Rollup의 방식(출처: 비탈릭부테린 블로그)

Rollup은 이더리움의 확장성을 개선하기 위한 하나의 솔루션으로 위의 그림을 보면 Rollup이 어떻게 작동하는지 알 수 있다. 먼저 Alice가 Bob에게 20ETH를 Alice가 Charile에게 10ETH를 Bob이 Charile에게 10ETH를 보낸 3개의 트랜잭션이 있다. 이 세개의 트랜잭션을 머클트리로 요약하여 State Root값을 추출한 뒤 Rollup contract를 실행하면 기존의 State값이었던 0x1245f7이 새로운 State값인 0xbc892f로 변경되어 이더리움 네트워크에 입력된다. 즉, Rollup이란 사용자들의 트랜잭션을 모아 오프체인에서 연산을 수행하고, Rollup 네트워크의 상태를 머클트리로 요약한 값인 ‘State Root’와 사용자들의 ‘Transaction date’를 이더리움에 기록하는 방식을 의미하며, 해당 상태값을 증명하는 방식에 따라서 두 가지로 나뉘는데 그게 바로 Optimistic Rollup과 zkRollup이다.

1. Optimistic Rollup

옵티미스틱 롤업 작동 방식

Optimistic Rollup은 사기증명(Fraud proof)의 방식을 통해서 State 값을 증명한다. 사기 증명은 특정 데이터가 잘못 되었다는 것을 증명하는 것으로 모든 State root값이 다 옳다고 가정하고 이더리움 네트워크에 기록한 후, 약 7일간의 분쟁 기간을 두어 옳지 않은 State root 값이 있으면 이에 대한 증명을 만들어 네트워크에 전파한다. Optimistic Rollup의 과정은 다음과 같다.

Opimistic Rollup의 과정

1) 유저가 Rollup의 자금을 unlock하기 위해 L1 또는 L2의 스마트 컨트랙트 중 하나에 동일한 금액의 보증금을 입금한다.​

2) 시퀀서는 Rollup 컨트랙트에서 보증금에 대한 증거를 받은 후 자금을 자유롭게 사용 할 수 있도록 크레딧을 제공한다. 그러면 유저는 잔액이 소진 될 때까지 Rollup에서 자유롭게 거래할 수 있다.​

3) Rollup에서 유저가 트랜잭션을 시퀀서에게 제출하면, 시퀀서가 트랜잭션을 확인한 뒤 Batch로 이더리움에 제출한다.​

4) 해당 트랜잭션은 사기 증명(Fraud proof)를 통해서 검증 된다.​

5) 자금을 인출할 때에는 Rollup의 state root에 포함된 해당 트랜잭션을 증명하는 Merkle증명을 제출하고 출금한다.

2. zkRollup

zkRollup의 과정 및 영지식 증명의 활용

zkRollup은 Optimistic Roll과 달리 영지식 증명을 응용한 ‘유효성 증명(Validity proof)’방식을 사용하여 L2의 트랜잭션을 검증한다. zkRollup에서 영지식 증명이 적용되는 방식의 위의 오른쪽 그림과 같다. Transactor가 전송을 만들어서 네트워크에 전파하면, Relayer는 전송들 Batch로 묶어서 zk-Snark 또는 zk-Stark를 사용하여 proof를 생성한다. 그러면 Verifier 역할을 맡고 있는 이더리움 스마트 컨트랙트에서 해당 proof를 검증하고 네트워크에 저장한다. 즉, zkRollup은 제출한 스테이트 루트가 항상 옳다는 것을 영지식 증명을 통해서 증명하는 방식으로 트랜잭션 Batch를 제출할 때 항상 해당 트랜잭션의 proof도 같이 제출하기 때문에 보안성 측면에서 더 유리하다. 또한 제출 된 모든 데이터는 메인 네트워크에 공개적으로 게시되어, 데이터 가용성 문제와 Relayer가 유효하지 않거나 조작된 상태를 커밋하는 것을 불가능하게 한다. zkRollup의 과정은 다음과 같다.​

zkRollup의 과정

1) 유저가 본인의 자산을 L1체인의 zkRollup 스마트 컨트랙트에 Lockup한다.​

2) 해당 자산과 관련된 트랜잭션을 Relayer에 제출한다. 해당 트랜잭션들 batches을 순서대로 정렬하고, STARK 또는 SNARK를 활용한 validity proof를 생성한 뒤 각각의 batch에 상태를 업데이트한다.​

3) 이 상태 업데이트와 proof는 L1 zkRollup 스마트 컨트랙트에 제출되고 검증되며, L1의 상태를 업데이트하는데 사용된다.​

4) 유저들은 해당 L1 State를 사용하여 그들의 자산을 되찾을 수 있다.

3. Optimistic Rollup과 zkRollup 비교

zkRollup과 Optimistic Rollup는 위의 표와 같은 항목으로 구분하여 비교해 볼 수 있다. zkRollup은 자본 효율성, 데이터 압축성, 보안성 측면에서 Optimistic Rollup에 비해 더 유리하다. 그럼에도 불구하고, 아직까지 Optimistic Rollup의 거래량이 zkRollup을 압도하는 이유는 Optimistic Rollup의 EVM과 호환이 되어 쉽게 이더리움의 DApp들이 이주할 수 있는 환경인 반면 zkRollup은 EVM과 호환이 되지 않았기 때문이다.

Ecosystem of zkRollup
dydx & Immutable X

zkRollup은 아직 Optimistic Rollup에 비해서 아직까지는 사용량이 많지 않다. 대부분의 트랜잭션은 대표적인 오더북 기반의 탈중앙화 거래소인 dYdX에서 나오고 있는 편이며, 2022년 9월 기준 전체 ZKRollup 체인에 Value는 약 $800M이다.

1. dYdX

  • Dydx는 DEX 거래 환경에 최적화 된 zkRollup 프로젝트로 낮은 수수료, 풍부한 유동성, 최대 20배의 레버리지 등 기존의 DEX와 차별화 되는 거래환경을 지원함​
  • Dydx는 Antonio Juliano가 2019에 설립했으며, 현재 StartkEx에서 2억 3백만 달러의 시가 총액과 60,000명 이상의 사용자를 보유하고 있음​
  • Dydx는 StarkEx를 사용하여 거래를 확장시키며, zkrollup 기술을 기반으로 결제 능력을 향상시키는 동시에 이더리움의 보안성을 확보하였음

2. Immutable X

  • Immutable X- NFT거래에 특화 된 zkRollup 기반 프로젝트​
  • NFT 발행 및 거래에 대해 즉각적으로 거래 확인이 가능하며, 가스 수수료가 거의 없음​
  • Immutable X는 2018년 James Ferguson Robbie Ferguson, Alex Connolly에 의해 설립됨​
  • StarkEx 기반으로 초당 최대 9,000건의 거래를 지원함

zkEVM
zkEVM의 등장과 Ethereum compatibility에 따른 구분

먼저 zkEVM에 대해서 알아보기에 앞서 왜 zkEVM이 등장하게 되었는지 그 배경에 대해서 알아보도록 하겠다. 현재 이더리움의 모든 노드는 EVM의 모든 트랜잭션을 검증해야 하고 이는 모든 트랜잭션 기록을

확인하기 위해서 모든 사람이 수행해야 하는 작업이 늘어나는 것을 의미한다. 또한, 각 트랜잭션이 모든 새 노드에서 확인이 되어야 하며, 이는 새 노드가 네트워크 동기화를 수행하는데 필요한 작업량이 증가하는 것을 뜻한다. 따라서 탈중앙화와 확장성을 모두 확보하기 위해서는 트랜잭션 작업량을 줄여줄 수 있는 새로운 EVM에 대한 필요성이 대두되었다. 그것이 바로 zkEVM이며 zkEVM은 다음과 같이 한 문장으로 요약할 수 있다.

스마트 컨트랙트 프로그래밍이 불가능한 zkRollup의 한계를 극복하기
위한 범용 영지식 증명(zero-knowledge proofs) 이더리움 가상 머신(EVM)

위의 정의처럼 zkEVM은 이더리움 가상 머신이다. 즉 이더리움을 위한 솔루션이고, 이더리움과 얼마나 호환하는가는 당연히 중요한 이슈이다. Ethereum Compatibility는 이더리움의 개발 환경과 얼마나 유사한 경험을 제공하는가에 따라서 언어적 단계, 바이트코드 단계, 컨센서스 단계로 나눌 수 있는데 각각의 단계마다 취할 수 있는 장단점이 분명하다.

1. 언어적 단계​

언어적 단계는 EVM 친화적언어를 영지식 친화적 언어로 바꾸는 단계를 의미한다. 이 단계에서 만들어진 Zinc 및 Cairo 코드들은 자체 vm에서 실행 된다.​

  • 장점 : EVM의 설계 방식에 제한 받지 않고 영지식 친화적인 VM을 처음부터 자체적으로 설계할 수 있음.​
  • 단점: 이더리움에 친숙한 개발자들이 좋은 개발자 경험을 얻기 힘듬.

2. 바이트코드 단계

바이트코드 단계는 EVM 바이트코드를 번역하여,ZK 친화적인 EVM에서 코드가 실행되는 단계를 의미한다. 사실상 바이트코드 단계에 도달해야, zkEVM이라 부를 수 있다.​

  • 장점: 솔리디티 언어 단계와의 호환성을 달성할 수 있을 뿐만 아니라, EVM opcode와도 완전한 호환성을 달성할 수 있다. 때문에 zkEVM에서 개발자는 좋은 개발자 경험을 얻을 수 있으며, L1의 Dapp과 개발 도구는 기본적으로 수정 없이 L2로 마이그레이션 될 수 있다.​
  • 단점 : EVM과 완전하게 호환되는 것은 아님.

3. 컨센서스 단계

컨센서스 단계는 언어와 바이트코드 뿐만 아니라 컨센서스 단계에서도 호환성을 달성하는 단계를 뜻 한다. 이는 zkEVM이 이더리움 state roots의 유효성을 증명하는 SNARK를 만들어낼 수 있다는 것을 의미한다.​

  • 장점: 컨센서스 단계에서 호환성을 달성하게 되면, 레이어1의 마이너가 블록 생성시 해당 블록에 대한 증명을 생성하고 모든 노드가 이를 동기화 할 때, 트랜잭션의 재연산 없이, 마이너가 만든 블록에 대한 증명의 유효성만 검증하면 됨.​
  • 단점: 영지식 증명 최적화를 위한 개발 소요가 매우 많음.

만약 컨센서스 단계의 zkEVM이 이루어진다면, 이더리움 노드의 동기화가 이루어지는 몇 초에서 몇 분 정도 뒤에 누구나 쉽게 이더리움 네트워크에 합류할 수 있고, 결과적으로 이더리움은 더 분산화되고 강건해질 수 있다.

​​

zkEVM의 과정을 간략하게 설명하면 다음과 같다.​

1) 먼저 EVM Executor에서 트랜잭션을 실행(실행에는 트랜잭션 관련 pre_state + tx 등 필요)하여 post_state를 얻는다.​

2) pre_state, tx, post_state를 zkEVM에 입력하면 실행 후 증명을 얻는다.​

3) 증명 및 공개 업로드 검증을 위해 L1 계약(주요 거래 데이터)에 입력한다.​

4) 증명은 두 가지 유형으로 나눌 수 있으며, 각 증명과 State는 Bus mapping 이라는 방식을 통해 상호작용한다.

​​

zkEVM의 Bus mapping

Bus mapping은 zkEVM이 스택, 메모리 및 스토리지와 상호작용하는 방식이다.​

Bus mapping은 이전 상태 읽기새 상태 다시 쓰기의 두 가지 상태를 포함하는데 매핑 관계에 두 가지 상태가 포함되는지는 Plookup 알고리즘을 통해 증명한다. 또한, zkEVM은 Bus mapping을 기반으로 데이터 읽기/쓰기의 정확성 및 opcode와의 일관성을 위해 상태 증명EVM 증명 사용한다. 두 증명의 역할은 다음과 같다.​

상태 증명: Bus mapping의 일관성과 정확성을 담당하는 증명. 일관성은 일관된 Bus mapping 및 상태 읽기 및 쓰기를 나타내며, 정확성은 Bus mapping에서 올바른 읽기 및 쓰기 상태의 정확성을 의미한다.​

EVM 증명 : EVM 연산 코드의 올바른 실행을 담당하는 증명. 올바른 opcode가 정확한 시간에 호출되었는지와 해당 opcode의 유효성을 확인한다. 또한 이러한 각 opcode에 대해 상태 증명이 올바른 작업을 수행했는지를 확인하다.

zkEVM Ecosystem

프로젝트 별 zkEVM전략

각 프로젝트들은 다음과 같은 방식으로 ZK 솔루션을 개발하고 있으며, 이는 Ethereum compatibility와 Performance 간의 tradeoff로 인한 전략적 차별화라고 볼 수 있다.

​​

1.StarkNet

StarkNet은 커스텀 스마트 컨트랙트 VM(Cairo VM)을 자체 low-level 언어(Cairo)로 실행시키며, 스마트 컨트랙트 rollup을 만드는 것을 목표로 한다. 그 이유는 opcode-level과 VM-level 호환성이 잠재적인 rollup 퍼포먼스에 브레이크가 되기 때문.​

  • 장점: 언어 부터 영지식 친화적으로 설계되어 performance가 비교적 좋음
  • 한계: EVM 호환성 및 개발 접근성이 비교적 떨어짐

2.Polygon Hermez

Polygon의 접근은 ‘opcode-level equivalency’ 한 zkEVM을 만드는 것이다. Polygon의 zkExecutor는 EVM의 opcode를 EVM 번역기에 최적화하는 대신 맞춤 ‘zkASM’ opcode를 사용하였다. 즉, 모든 EVM opcode를 그들의 커스텀 VM으로 재창조하여, EVM 바이트 코드로부터 검증 가능한 형식으로 변환하는 것을 목표로 한다.​

  • 장점: 솔리디티를 지원하여 개발 접근성이 비교적 좋음
  • 한계: 완전한 EVM 호환을 지원하지는 않음​

3. Scroll

Scroll 팀은 EVM execution trace 그 자체를 증명하여 모든 EVM opcode를 circuit에서 바로 실행할 수 있는 zkEVM 개발이 최종 목표이다.​

  • 장점: EVM과 가장 유사한 환경을 제공하기 때문에 이더리움의 Dapp을 그대로 마이그레이션 할 수 있음
  • 한계: 아직까지 영지식 증명 적용을 위해 최적화 해야 할 작업이 많음.

​​

요약 및 결론

1. 이더리움의 확장성 문제가 대두되면서 Layer 2 솔루션에 대한 주목도 더불어 향상되고 있음.​

2. 모든 트랜잭션 데이터를 이더리움에 제출해야하는 Optimistic Rollup에 비해 zkRollup은 state 업데이트에 필요한 핵심 데이터만 제출하기 때문에 처리량 측면에서 더 유리함.​

3. 그러나 zkRollup은 현재 Application-Specific 하여 EVM과 호환이 안됨. 또한 지금의 EVM은 영지식 증명 연산을 지원하지 않음​

4. 따라서 zkEVM의 필요성이 대두 되었으며, EVM과의 호환정도에 따라 Language-Level, Bytecode-Level, Consensys-Level로 나눌 수 있음.​

5. Language-Level의 대표 프로젝트는 StarkNet과 zkSync가 있으며, Bytecode-Level에는 Polygon Hermez, Consensus Level에는 Scroll과 Ethereum Foundation이 있음.​

6. 만약 컨센서스 단계의 zkEVM이 이루어진다면, 이더리움 노드의 동기화가 이루어지는 몇 초에서 몇 분 정도 뒤에 누구나 쉽게 이더리움 네트워크에 합류할 수 있고, 결과적으로 이더리움은 더 분산화되고 강건해질 수 있음

​​

zkMeetup을 마치며

약 3주에 걸쳐서 준비했던 zkMeetup이 마무리 되었다. zk를 공부한지 얼마 안된 내가 많은 사람들 앞에서 스피치를 한다는 것이 굉장히 부담스러웠지만, 덕분에 많은 것을 배울 수 있었다. 이번 발표와 자료를 준비하면서 많은 자료를 읽어보았지만, 버스 매핑은 정말 잘 이해가 되지 않았다. 아마 EVM에 대한 이해도가 깊지 않은 상태에서 zkEVM에 대해서 공부했기 때문에 그랬던거 같다.

프로젝트별로 전략이 매우 상이해서 어떤 프로젝트가 승리할지 예측이 되지 않는다. 물론 하나의 프로젝트가 모든 시장의 파이를 독점하지는 않겠지만, 그래도 그 중에서도 어느 정도 순위가 갈리게 될 것이라고 생각한다.

개인적으로는 폴리곤의 전략이 가장 흥미롭다. 이더리움과의 호환성과 퍼포먼스를 포기하지 않으면서도, fast mover가 되기 위해서 조금 더 빠르게 구현할 수 있는 기술을 택한 것이 두 마리 토끼를 다 잡겠다는 것으로 느껴진다. 스타크넷의 움직임 역시 매우 흥미롭다. 현재까지 가장 많이 쓰이는 zkRollup 프로젝트를 구현한 것과, 자체적인 생태계 확장을 위한 공격적인 행보가 그들의 선택에 대한 자신감으로 비춰진다. 또한, 추후 옵티미즘이 Layer2 전쟁에서 살아남기 위해서 어떤 전략을 취하는지 지켜보는 것도 굉장히 흥미로울 것 같다. 과연 시장의 선택은 무엇일까? 그리고 매스 어답션은 서비스에 의해서 일어날까 아니면 그 밑단의 기반 기술에 의해서 일어날까?

​​

참고자료

1. Ethereum Layer-2 Ecosystem https://bit.ly/3DBh5ej

2. How Do Optimistic Rollup Work https://bit.ly/3d9KL7i

3. ZK-rollup https://bit.ly/3L65JR7

4. Understanding ZK-Rollup and Optimistic Rollup https://bit.ly/3ByiqB2

5. [zkEVM이 블록체인 산업의 궁극적인 목표인 이유] https://bit.ly/3QEyfKw

6. Ground up Guide: zkEVM, EVM Compatibility & Rollups https://bit.ly/3U1FBea

7. ZKP- zkEVM https://bit.ly/3xkq6nM

8. Polygon zkEVM document https://bit.ly/3RRdFIg

9. zkRollup의 영지식 증명 활용 https://bit.ly/3DgOjiR

--

--