2023년 03월 15일 01:33

[About zkEVM]#2: How&Which zkEVM?

(Equivalence)을 다섯 가지 유형으로 구분했습니다.






동등성 레벨 (1~4)

TYPE 1 zkEVM (완전히 이더리움과 동등)

  • 지금의 이더리움 시스템에서 어떠한 부분도 바꾸지 않는 zkEVM입니다. 검증 중인 트랜잭션블록 및 데이터를 검증하는 것이 주요 목표입니다.
  • 롤업 블록을 생성하고 처리하기 위해 기존의 실행 클라이언트를 그대로 사용할 수 있습니다.
  • 하지만, 이더리움 블록에 대한 증명을 생성하는 데에 많은 시간이 걸릴 가능성이 높습니다.

TYPE 2 zkEVM (완전히 EVM과 동등)

  • 이더리움과 똑같아 보이지만, 데이터 구조나 상태 트리와 같이 방식의 차이가 있는 zkEVM입니다. 기존의 애플리케이션(dApp)과 호환되지만 개발을 용이하게 하고 증명 생성 속도를 높이기 위해 이더리움을 사소한 방법으로 수정하는 것이 주요 목표입니다.
  • 하지만, 여전히 증명 생성 속도는 느립니다.

TYPE 2.5 zkEVM

  • EVM에서 특정 운영에 대한 가스 비용을 증가시킨 zkEVM입니다.
  • TYPE2 EVM에서 발생하는 증명 생성에 대한 최악의 시나리오를 해결하면서 증명 생성 속도를 향상시켰습니다.
  • 하지만, 일부 응용 프로그램이나 작업 툴킷이 호환되지 않을 가능성이 있습니다.

TYPE 3 zkEVM (거의 EVM과 동등)

  • 증명 시간을 개선하기 위해 EVM의 일부 특징을 희생시킨 zkEVM입니다.
  • 보통, 이더리움 스마트 컨트랙트의 사전 컴파일(Precompile) 기능과 컨트랙 코드, VM 메모리와 스택을 다루는 방식에서 차이점이 있는 경우가 많습니다.
  • 잘 알려진 EVM에 구축된 대부분의 애플리케이션은 작동하는 것으로 간주되지만, 차이점이 있는 기능들을 사용하는 경우에 대비하여 다시 작성해야합니다.

TYPE 4 zkEVM (고급 언어와 동등)

  • 고급 언어(ex. Solidity)로 작성된 스마트 컨트랙트 코드를 영지식 증명 방식에 친화적인 언어로 컴파일하는 VM입니다.
  • zkEVM 구축 비용을 크게 줄일 수 있지만, EVM 바이트 코드 디버깅과 같이 이미 개발된 대부분의 도구가 작동하지 않을 가능성이 큽니다. 예를 들어, 언어에서 언어로 확장될 때 바이트 코드가 변경될 수 있는 주소를 포함하고 있다면 작동하지 않겠죠.

아래의 표는 zkVM을 지원하는 프로젝트들을 EVM 호환성에 따라 분류한 표입니다.






zkVM 프로젝트의 EVM 호환성에 따른 분류표 [Source]

오른쪽으로 갈수록, 더 나은 EVM 호환성을 보이고 있죠. 모두 언어(Solidity) 측면에서는 호환성을 가지지만, 바이트 코드 측면에서는 제각기 차이점을 가집니다.


StarkNet Startware

Solidity -> Readable Cairo -> [Bytecode] Cairo assembly -> [VM] Cairo zkVM


  • 스마트 컨트랙트를 Solidity로 작성할 수 있지만, EVM의 OPCODE를 사용하지 않아 EVM과 호환된다고 말하기에는 차이점이 있습니다. 즉, 이더리움만의 개발 자원을 활용하기에는 한계가 있겠죠.
  • 현재 자체적인 커뮤니티를 구성하고, dApp 개발을 지원하는 것으로 호환성에 대한 문제를 해결하고 있습니다.

zkSync zkEVM

Solidity -> LLVM-IR -> [Bytecode] Zinc instruction ->[VM] Zinc zkVM


  • 스마트 컨트랙트를 Solidity로 작성한 뒤, LLVM 프레임 워크를 사용하여 IR로 변환하고, 이후 자체적으로 제작한 zkVM에 맞는 바이트 코드로 다시 컴파일 하는 방식을 사용했습니다.
  • EVM이 아닌 자체 VM을 사용한다는 점에서 앞서 설명한 Starkware와 비슷하지만, 언어 측면에서는 이더리움 방식과 동일하게 작동합니다.
  • 하지만, 현재는 더 완벽한 이더리움 호환성을 가지기 위해 자체 VM이 아닌 zkEVM으로 구현 방향을 바꾸었다고 합니다.

Polygon zkEVM

Solidity -> IR -> [Bytecode] OPCODE -> Micro OPCODE -> [VM] uVM


  • 이더리움의 OPCODE를 Micro OPCODE로 컴파일하여 자체 제작한 가상머신인 uVM에서 실행합니다. Bytecode 단위까지 이더리움과 호환된다고 할 수 있죠.
  • STARK(생성 속도가 빠르지만 비용이 많이 듦) 방식으로는 현재 상태 변경에 대한 유효성 증명을 생성하고, 이것을 SNARK(상대적으로 생성 속도는 느리지만 더 간단하고 저렴하게 검증 가능)으로 한 번 더 확인하여 검증하는 방식을 사용합니다.

Scroll zkEVM

Solidity -> IR -> [Bytecode] OPCODE -> [VM] zkEVM


  • 아직 VM 개발 과정 중에 있는 프로젝트입니다. Scroll 프로젝트에서는 EVM OPCODE에 대한 영지식 회로를 설계하여 기존 EVM 바이트 코드를 수정할 필요 없이 이더리움-네이티브 스마트 컨트랙트 EVM을 그대로 배포할 수 있는 “zkEVM”을 구현하려고 합니다. 즉, zkVM이 아닌 zkEVM이라고 할 수 있죠.
  • “암호화 축적기”(Cryptographic Accumulator)를 통해 스토리지 정확성을 확인하여 컨트랙트 바이트 코드가 지정된 주소에서 올바르게 로드 되었음을 증명하고, 바이트 코드를 실행된 VM 명령과 순서를 지정하는 시퀀스(실행 트레이스; Execution trace)와 연결하기 위한 회로를 제공할 계획이라고 합니다.

III. Future of zkEVM

II의 내용을 보면 눈치채셨겠지만, 현재까지는 Scroll이 구현하려고 하는 zkEVM이 가장 호환성 높은 zkEVM이라고 할 수 있습니다. 이는 다른 zkEVM 프로젝트에서 구현한 VM에 비해 기존 이더리움에서 사용되는 각종 툴을 큰 마찰 없이 자유롭게 사용할 수 있는 거죠.

Scroll은 얼마 전에(2023년 2월 27일) 알파 테스트넷이라는 테스트넷을 발표했습니다. 알파 테스트넷은 Goerli 테스트넷을 Layer 1 체인으로 둔 시범 목적의 체인으로, 누구나 Scroll의 zkEVM을 테스트해볼 수 있습니다. (물론, 아직 완벽한 zkEVM의 형태로 구축되지는 않았습니다.)

해결할 과제들이 많기에 아직까지 zkEVM을 자유롭게 사용하기에는 어려움이 있지만, 가까운 미래에 영지식 증명을 활용하여 기존 이더리움의 개발 방식은 유지하되 확장성을 개선한 zkEVM을 통해 더 많은 dApp들이 개발되길 기대해볼 수 있겠습니다.


Reference

— https://chainstack.com/zkevm-and-zkrollups-explained/

— https://medium.com/a41-ventures/%EB%A1%A4%EC%97%85-%EC%8B%9C%EB%A6%AC%EC%A6%88-1-%EC%99%84%EC%A0%84%ED%95%9C-zkevm%EC%9D%84-%EA%BF%88%EA%BE%B8%EB%8B%A4-scroll-13649e0f0b3d

함께 보면 좋은 콘텐츠