---
title: "zkEVM이란?"
description: "zkEVM의 종류, 작동 방식, 그리고 중요한 이유"
---

# zkEVM이란?

영지식 이더리움 가상 머신\(zkEVM\)은 프로그램의 정확성을 검증하기 위해 [영지식 증명](https://www.alchemy.com/overviews/snarks-vs-starks)을 생성하는 가상 머신이다. zkEVM은 영지식 기술을 지원하는 방식으로 스마트 컨트랙트를 실행하도록 설계되었다.

zkEVM은 [영지식\(ZK\) Rollups](https://www.alchemy.com/blog/zero-knowledge-rollups)의 일부로, 연산과 상태 저장을 오프체인으로 옮겨 처리량을 개선하는 Ethereum 레이어 2 스케일링 솔루션이다. ZK-rollup은 오프체인 트랜잭션 배치의 유효성을 검증하는 영지식 증명과 함께 트랜잭션 데이터를 Ethereum에 제출한다.

초기 ZK-rollup은 스마트 컨트랙트를 실행할 수 없었고 단순한 토큰 스왑과 결제로 제한되어 있었다. 하지만 EVM 호환 영지식 가상 머신이 등장하면서 ZK-rollup은 Ethereum [앱](https://www.alchemy.com/dapps/top/defi-dapps)을 지원하기 시작했다.

이 글에서는 zkEVM이 어떻게 작동하는지, 왜 중요한지, 그리고 어떤 유형의 zkEVM이 존재하는지 살펴본다.

## zkEVM이란 무엇인가?

zkEVM은 영지식 증명 연산을 지원하는 EVM 호환 가상 머신이다. 일반적인 가상 머신과 달리, zkEVM은 연산에 사용된 입력과 출력의 유효성을 포함하여 프로그램 실행의 정확성을 증명한다.

이 정의를 좀 더 자세히 살펴보자:

### EVM 호환성

[EVM\(Ethereum Virtual Machine\)](https://www.alchemy.com/overviews/what-is-the-ethereum-virtual-machine-evm)은 Ethereum 네트워크에 배포된 스마트 컨트랙트가 실행되는 런타임 환경이다. EVM은 Ethereum 블록체인에서 실행되는 탈중앙화 애플리케이션을 구동하는 "세계 컴퓨터" 역할을 한다.

가상 머신이 EVM 환경에서 실행되도록 만들어진 프로그램을 실행할 수 있으면 "EVM 호환"이라고 한다. 이러한 VM은 Solidity 또는 Ethereum 개발에 사용되는 다른 고수준 언어로 작성된 스마트 컨트랙트를 실행할 수 있다. zkEVM은 기반 로직을 크게 수정하지 않고도 Ethereum 스마트 컨트랙트를 실행할 수 있기 때문에 EVM 호환이다.

### 영지식 기술 지원

EVM은 애초에 영지식 증명을 지원하도록 설계되지 않았기 때문에, EVM 호환이면서 영지식 친화적인 가상 머신을 만드는 것은 어렵다. 하지만 연구가 발전하면서 EVM 연산을 어느 정도 영지식 증명으로 감싸는 것이 가능해졌다.

zkEVM 프로젝트마다 EVM 실행과 영지식 증명 연산을 결합하는 접근 방식이 다르다. 각 방식에는 고유한 트레이드오프가 있으며, 이는 이 가이드의 뒷부분에서 다룬다.

## zkEVM은 어떻게 작동하는가?

EVM과 마찬가지로 zkEVM도 프로그램 연산의 결과로 상태를 전이하는 가상 머신이다. 하지만 zkEVM은 여기서 한 걸음 더 나아가 연산의 모든 부분이 정확했음을 증명하는 증명을 생성한다. 본질적으로 zkEVM은 앞서 설명한 실행 단계가 규칙을 따랐음을 증명하는 메커니즘을 사용한다.

zkEVM이 어떻게 작동하는지\(그리고 왜 다른지\) 이해하기 위해, 먼저 현재 EVM이 어떻게 작동하는지 살펴보자.

### EVM은 어떻게 작동하는가

Ethereum Virtual Machine은 어떤 입력에 대한 응답으로 이전 상태에서 새로운 상태로 이동하는 상태 머신이다. 모든 스마트 컨트랙트 실행은 EVM 상태의 변화\("상태 전이"라고 함\)를 일으킨다. 스마트 컨트랙트 트랜잭션 중에 일어나는 일을 개략적으로 살펴보면 다음과 같다:

1. 컨트랙트 바이트코드\(소스 코드에서 컴파일됨\)가 EVM의 저장소에서 로드되어 EVM의 P2P 노드에 의해 실행된다. 노드들은 동일한 트랜잭션 입력을 사용하며, 이는 각 노드가 동일한 결과에 도달하도록 보장한다\(그렇지 않으면 합의에 도달할 수 없다\).

2. \(바이트코드에 포함된\) [EVM Opcodes](https://www.ethervm.io/)는 EVM 상태의 다른 부분\(메모리, 스토리지, 스택\)과 상호작용한다. Opcode는 읽기-쓰기 연산을 수행한다—상태 저장소에서 값을 _읽고_\(가져오고\), EVM 저장소에 새로운 값을 _쓴다_\(보낸다\).

3. EVM opcode는 새로운 값을 반환하기 전에 상태 저장소에서 얻은 값에 대해 연산을 수행한다. 이 업데이트는 EVM이 새로운 상태로 전이하는 결과를 낳는다\(이 때문에 트랜잭션을 "상태 전이"라고 부른다\). 이 새로운 상태는 다른 노드에 의해 복제되며, 또 다른 트랜잭션이 실행될 때까지 유지된다.

<ImageBlock
  src="https://media.alchemy.com/1704295117-evm-execution-model.png"
  alt="Ethereum Virtual Machine(EVM)에서 프로그램이 실행되는 방식을 보여주는 다이어그램."
  width={968}
  height={707}
  caption="Ethereum Virtual Machine(EVM)에서 프로그램이 실행되는 방식을 보여주는 다이어그램."
/>

### zkEVM은 어떻게 작동하는가

zkEVM은 각 연산의 다양한 요소를 검증하기 위해 영지식 증명을 생성한다:

1. **바이트코드 접근**: 올바른 프로그램 코드가 올바른 주소에서 제대로 로드되었는가?

2. **읽기-쓰기 연산**: a. 프로그램이 연산 전에 스택/메모리/스토리지에서 올바른 값을 가져왔는가? b. 프로그램이 실행 완료 후 스택/메모리/스토리지에 올바른 출력 값을 기록했는가?

3. **연산**: opcode가 올바르게\(즉, 단계를 건너뛰지 않고 순서대로\) 실행되었는가?

#### zkEVM의 아키텍처

zkEVM은 실행 환경, 증명 회로, 검증자 컨트랙트의 세 부분으로 나뉜다. 각 구성 요소는 zkEVM의 프로그램 실행, 증명 생성, 증명 검증에 기여한다.

##### 1. 실행 환경

이름에서 알 수 있듯이, 실행 환경은 zkEVM에서 프로그램\(스마트 컨트랙트\)이 실행되는 곳이다. zkEVM의 실행 환경은 EVM과 매우 유사하게 작동한다: 초기 상태와 현재 트랜잭션을 받아 새로운\(최종\) 상태를 출력한다.

##### 2. 증명 회로

증명 회로는 실행 환경에서 연산된 트랜잭션의 유효성을 검증하는 영지식 증명을 생성한다. 증명 생성 과정은 pre-state, 트랜잭션 입력, post-state 정보를 입력으로 사용하여 완료된다. 이후 prover는 해당 특정 상태 전이의 유효성에 대한 간결한 증명을 얻는다.

<ImageBlock
  src="https://media.alchemy.com/1704293216-zkevm-validity-proofs.png"
  alt="zkEVM이 프로그램에 대한 유효성 증명을 생성하는 방식을 보여주는 다이어그램."
  width={902}
  height={517}
  caption="zkEVM은 프로그램 실행의 정확성을 검증하기 위해 유효성 증명을 생성한다."
/>

##### 3. 검증자 컨트랙트

ZK-rollup은 검증을 위해 L1 체인\(Ethereum\)에 배포된 스마트 컨트랙트에 유효성 증명을 제출한다. 입력\(pre-state와 트랜잭션 정보\)과 출력\(최종 상태\)도 검증자 컨트랙트에 제출된다. 그런 다음 검증자는 제공된 증명에 대해 연산을 수행하고 제출된 출력이 입력으로부터 올바르게 계산되었는지 확인한다.

## zkEVM opcode란 무엇인가?

zkEVM opcode는 EVM 호환 ZK-rollup에서 프로그램을 실행하는 데 사용되는 저수준 머신 명령어다. EVM과 마찬가지로, 고수준 언어로 작성된 컨트랙트는 VM이 해석할 수 있는 저수준 언어\(바이트코드\)로 컴파일되어야 한다. 이 바이트코드는 프로그램이 VM에 배포될 때 실행에 사용되는 opcode를 지정한다.

일반적인 EVM opcode는 영지식 증명 회로에서 사용하기에 비효율적이기 때문에 zkEVM opcode가 필요하다. zkEVM을 위한 opcode를 만드는 방식은 일반적으로 두 가지이다:

1. 네이티브 EVM opcode를 위한 ZK 회로 구축
1. ZK 증명 연산을 위한 새로운 언어 생성

#### 네이티브 EVM opcode를 위한 영지식 회로 구축

이 접근 방식은 모든 EVM 명령어 집합을 산술 회로에 구현해야 하며, 이는 복잡하고 시간이 많이 소요되는 작업이다. 장점은 개발자가 [기존 블록체인 개발자 툴링](https://www.alchemy.com/overviews/20-blockchain-development-tools)을 사용해 스마트 컨트랙트를 만들거나, 기존 Ethereum 컨트랙트를 큰 수정 없이 ZK-rollup으로 이식할 수 있다는 점이다.

#### **ZK 증명 연산을 위한 새로운 언어 생성**

이 접근 방식은 유효성 증명을 지원하도록 설계된 새로운 언어를 만들고 커스텀 opcode를 개발해야 한다. 개발자는 새로운 언어로 컨트랙트를 직접 작성하거나 Solidity 소스 코드를 커스텀 zkEVM opcode로 컴파일해야 한다.

이 방식은 첫 번째 접근법보다 구현이 더 간단한 경우가 많지만 단점도 있다. 예를 들어, 개발자가 기존 Ethereum 인프라와 리소스에 접근하지 못할 수 있다.

<ImageBlock
  src="https://media.alchemy.com/1704295202-zkevm-classification.png"
  alt="EVM 호환성에 따른 영지식 가상머신 분류."
  width={937}
  height={587}
  caption="EVM 호환성에 따른 영지식 가상머신 분류."
/>

## zkEVM을 구축하기 어려운 이유는 무엇인가?

EVM은 zk-증명 연산을 염두에 두고 만들어지지 않았기 때문에, 증명 회로에 우호적이지 않은 특징들을 가지고 있다. zkEVM 구축을 어렵게 만드는 네 가지 요소를 간단히 살펴보면 다음과 같다:

1. 특수 opcode
1. 스택 기반 아키텍처
1. 스토리지 오버헤드
1. 증명 비용

### 1. 특수 opcode

일반적인 VM과 달리, EVM은 프로그램 실행\(CALL, DELEGATECALL\)과 오류 처리\(REVERT, INVALID\) 등 여러 연산에 특수 opcode를 사용한다. 이는 EVM 연산을 위한 증명 회로를 설계하는 과정을 더 복잡하게 만든다.

### 2. 스택 기반 아키텍처

EVM은 스택 기반 아키텍처를 사용하는데, 이는 레지스터 기반 구조보다 단순하지만 연산 증명의 난이도를 높인다. 이것이 [ZkSync](https://www.alchemy.com/overviews/what-is-zksync-era)의 zkEVM이나 StarkWare의 StarkNet 같은 주요 영지식 VM이 레지스터 기반 모델을 사용하는 이유다.

### 3. 스토리지 오버헤드

EVM의 스토리지 레이아웃은 Keccak 해싱 함수와 Merkle Patricia Trie에 의존하는데, 둘 다 증명 오버헤드가 크다. ZkSync 같은 일부 zkVM은 KECCAK256 함수를 대체하여 이 문제를 우회하려고 시도하지만, 이는 기존 Ethereum 툴링 및 인프라와의 호환성을 깨뜨릴 수 있다.

### 4. 증명 비용

앞서 언급한 문제들이 해결되더라도, 증명 생성 과정이라는 문제가 여전히 남아있다. 영지식 증명 생성에는 전문 하드웨어와 함께 상당한 시간, 비용, 노력의 투자가 필요하다.

이 목록이 전부는 아니지만, EVM 호환 zkEVM을 구축하려는 노력을 방해하는 문제들 중 일부를 보여준다. 그럼에도 불구하고 [영지식 기술의 여러 돌파구](https://hackmd.io/@yezhang/S1_KMMbGt#Why-possible-now)들이 이러한 문제를 완화할 수 있게 해주었고, 이는 zkEVM 솔루션에 대한 새로운 관심으로 이어지고 있다.

## zkEVM이 왜 중요한가?

완전한 기능을 갖춘 zkEVM을 구축하면 EVM 호환 [ZK-rollup 프로젝트](https://www.alchemy.com/overviews/zk-rollup-projects)의 개발이 촉진될 것이다. 이는 몇 가지 이점을 제공한다:

1. 안전한 확장성
1. 저렴한 비용
1. 빠른 파이널리티와 자본 효율성
1. 네트워크 효과

### **1. 안전한 확장성**

프로토콜 규칙에 따라, 모든 검증 노드는 Ethereum Virtual Machine에서 수행된 모든 연산을 다시 실행해야 한다. 이 방식은 Ethereum 노드가 프로그램의 정확성을 독립적으로 검증할 수 있기 때문에 보안을 보장하지만, Ethereum 네트워크가 처리할 수 있는 확장성에 제약을 둔다\(초당 약 15-20건의 트랜잭션\).

EVM 호환 ZK-rollup은 네트워크 보안을 저해하지 않으면서 Ethereum의 처리량 문제를 해결할 수 있다. 다른 스케일링 프로토콜과 마찬가지로, ZK-rollup은 Ethereum의 합의 프로토콜 규칙에 얽매이지 않으며 실행 속도를 최적화할 수 있다. 일부 추정에 따르면 [ZK-rollup은 초당 약 2000건의 트랜잭션을 처리](https://blog.matter-labs.io/optimistic-vs-zk-rollup-deep-dive-ea141e71e075)할 수 있으며, Ethereum의 높은 수수료를 발생시키지 않는다.

하지만 ZK-rollup은 다른 스케일링 프로젝트에 비해 더 높은 보안 보장을 제공한다. 이들은 유효성 증명으로 오프체인 연산의 정확성을 검증한다. 즉, L2에서 스마트 컨트랙트가 수행하는 트랜잭션은 노드가 해당 연산을 다시 실행하지 않고도 L1\(Ethereum\)에서 신뢰성 있게 검증될 수 있다. 이는 보안을 낮추지 않으면서 Ethereum의 처리 속도를 크게 높일 수 있다.

### **2. 저렴한 비용**

Rollups는 트랜잭션 데이터를 CALLDATA로 Ethereum에 기록함으로써 [Ethereum Mainnet](https://www.alchemy.com/rpc/ethereum)으로부터 보안을 얻는다. 하지만 optimistic rollup과 ZK-rollup은 Ethereum에 게시해야 하는 데이터 양에서 차이가 있다.

[optimistic rollup](https://www.alchemy.com/overviews/optimistic-rollups)은 오프체인 트랜잭션에 대한 유효성 증명을 제공하지 않기 때문에, 서명과 트랜잭션 파라미터를 포함한 모든 트랜잭션 관련 데이터를 온체인에 게시해야 한다. 모든 데이터를 온체인에 두지 않으면, 도전자들은 유효하지 않은 rollup 트랜잭션에 이의를 제기하는 데 사용되는 사기 증명을 구성할 수 없다.

반면 ZK-rollup은 유효성 증명이 이미 상태 전이의 신뢰성을 보장하기 때문에 Ethereum에 최소한의 데이터만 게시해도 된다. zkEVM은 트랜잭션 입력조차 생략하고 최종 상태 변화만 게시할 수도 있어, CALLDATA 요구사항을 더욱 줄인다.

이는 개발자와 사용자에게 유익한데, [rollup 비용의 상당 부분](https://forum.celestia.org/t/ethereum-rollup-call-data-pricing-analysis/141)이 온체인에 데이터를 게시하는 데서 발생하기 때문이다. CALLDATA를 최소로 줄임으로써, ZK-rollup은 탈중앙화 거래소, NFT 마켓플레이스, 예측 시장 등 여러 앱을 더 저렴하게 사용할 수 있게 만든다.

### 3. 빠른 파이널리티와 자본 효율성

더 나은 보안 외에도, ZK-rollup은 optimistic rollup에 비해 또 다른 장점을 가지고 있다: 빠른 파이널리티다. 블록체인에서 파이널리티는 트랜잭션이 되돌릴 수 없게 되는 데 걸리는 시간이며, 트랜잭션은 네트워크 참여자들이 그 유효성에 대한 객관적인 증명을 가지고 있을 때만 파이널라이즈될 수 있다.

ZK-rollup의 경우, zkEVM에서 실행된 트랜잭션은 Ethereum에 게시된 직후 파이널라이즈되는 경우가 많다. 각 트랜잭션 배치는 즉시 검증 가능한 유효성 증명과 함께 제공되기 때문에, 메인 Ethereum 체인은 상태 업데이트를 빠르게 적용할 수 있다.

optimistic rollup은 증명 없이 VM 트랜잭션만 게시하기 때문에, 트랜잭션이 파이널리티에 도달하기 전에 챌린지 기간이 지나야 한다. 챌린지 기간은 트랜잭션이 Ethereum에 제출된 후 누구나 이의를 제기할 수 있는 1~2주의 기간이다.

느린 파이널리티는 사용자 경험에 여러 영향을 미친다. 예를 들어, 사용자는 지연 기간이 끝날 때까지 rollup에서 자산을 인출할 수 없다. 유동성 공급자가 이 문제를 해결할 수도 있지만, 인출이 고가치 자산이나 NFT를 포함하는 경우 효과가 없을 수 있다.

zkEVM은 위에서 설명한 문제들이 전혀 없다. 빠른 파이널리티는 NFT 트레이더, DeFi 투자자, 혹은 자산을\(특히 L1과 L2 사이에서\) 원활하게 옮겨야 하는 차익거래 트레이더 같은 파워 유저들에게 큰 이점이다.

### 4. 네트워크 효과

EVM 호환 zkVM을 구축하는 가장 중요한 이유는 Ethereum의 네트워크 효과를 활용하기 위함이다. 세계에서 가장 큰 스마트 컨트랙트 플랫폼으로서, Ethereum은 개발자와 프로젝트 모두에게 가치를 제공하는 큰 생태계를 가지고 있다.

예를 들어, 개발자는 검증되고 감사된 코드 라이브러리, 방대한 툴링, 문서 등에 접근할 수 있다. Ethereum의 인프라와 호환되지 않는 새로운 zkVM을 만드는 것은 프로젝트와 개발팀이 Ethereum의 네트워크 효과를 활용하지 못하게 만들 것이다.

## 어떤 유형의 zkEVM이 존재하는가?

현재 zkEVM 프로젝트는 네이티브 EVM opcode를 지원하는 zkVM과 커스텀 EVM opcode를 사용하는 zkVM, 두 가지 주요 범주로 나뉜다. 아래에서 서로 다른 zkEVM 프로토콜을 비교하고 각각의 작동 방식을 설명한다:

### Polygon zkEVM

Polygon Hermez는 EVM 호환성을 지원하도록 설계된 영지식 가상 머신을 갖춘 [Polygon ZK-rollup](https://www.alchemy.com/overviews/polygon-zk-rollups)이다. 이를 위해 EVM 바이트코드는 "마이크로 opcode"로 컴파일되어 uVM—프로그램 실행의 정확성을 검증하기 위해 SNARK와 STARK 증명을 사용하는 가상 머신—에서 실행된다.

두 증명 유형을 결합하기로 한 결정은 전략적이다. STARK\(Scalable Transparent ARgument of Knowledge\) 증명은 생성 속도가 빠르지만, SNARK\(Succinct Non-Interactive Argument of Knowledge\) 증명은 크기가 더 작고 Ethereum에서 검증하는 비용이 더 저렴하다.

Polygon Hermez zkEVM은 상태 전이에 대한 유효성 증명을 생성하기 위해 STARK 증명 회로를 사용한다. SNARK 증명은 STARK 증명의 정확성을 검증하며\("증명의 증명"을 생성한다고 생각하면 된다\), Ethereum에 검증을 위해 제출된다.

### zkSync zkEVM

zkSync는 Matter Labs가 개발하고 자체 zkEVM으로 구동되는 EVM 호환 ZK-rollup이다. zkSync는 다음과 같은 전략으로 Ethereum과의 호환성을 달성한다:

1. Solidity로 작성된 컨트랙트 코드를 여러 가상 머신용 바이트코드로 컴파일할 수 있는 중간 언어인 Yul로 컴파일한다.

2. Yul 바이트코드를\(LLVM 프레임워크를 사용하여\) zkSync의 zkEVM을 위해 특별히 설계된 커스텀, 회로 호환 바이트코드 세트로 재컴파일한다.

Polygon Hermez와 마찬가지로, zkSync zkEVM은 바이트코드 수준이 아닌 언어 수준에서 EVM 호환성을 달성한다. 예를 들어, 전통적인 곱셈 및 덧셈 opcode\(ADDMOD, SMOD, MULMOD\)는 zkSync의 zkEVM에서 지원되지 않는다.

### Scroll zkEVM

[Scroll](https://scroll.io/blog/zkEVM)은 현재 개발 중인 새로운 영지식 EVM 구현체다. Scroll 팀은 각 EVM opcode에 대한 영지식 회로를 설계할 계획이다. 이를 통해 개발자는 기반이 되는 EVM 바이트코드를 수정할 필요 없이 Ethereum 네이티브 스마트 컨트랙트 EVM을 Scroll에 배포할 수 있게 된다.

무엇보다도 Scroll zkEVM은 스토리지의 정확성을 검증하기 위해 "암호학적 어큐뮬레이터"를 사용할 것이다. 이는 컨트랙트 바이트코드가 주어진 주소에서 올바르게 로드되었음을 증명하는 데 사용된다.

또한 바이트코드와 실행 트레이스를 연결하는 회로도 제공한다. 실행 트레이스는 어떤 VM 명령어가 어떤 순서로 실행되었는지를 지정하는 시퀀스다. Prover는 증명 생성 과정에서 실행 트레이스를 제출하여 연산이 원래 바이트코드와 일치했음을 검증한다.

### AppliedZKP zkEVM

[Applied ZKP](https://github.com/privacy-scaling-explorations/zkevm-specs)는 Ethereum Foundation의 자금 지원을 받아 EVM 호환 ZK-rollup과 Ethereum 블록에 대한 유효성 증명 생성 메커니즘을 개발하는 프로젝트다. 후자가 중요한 이유는 블록과 유효성 증명을 짝지으면 노드가 블록을 다시 실행할 필요가 없어지기 때문이다.

Applied ZKP의 혁신은 연산과 스토리지를 분리한다는 점이다. 이는 **state proof**와 **EVM proof**라는 두 가지 유형의 유효성 증명을 사용한다:

#### **State proof**‍

스토리지, 메모리, 스택에 관련된 연산이 올바르게 수행되었는지 확인한다. State proof는 본질적으로 읽기-쓰기 연산의 정확성을 검증한다.

#### **EVM proof**

연산이 올바른 시점에 정확한 opcode를 호출했는지 확인한다. EVM proof는 연산 자체를 검증하며, 각 opcode에 대해 state proof가 올바른 연산을 실행했는지도 확인한다.

AppliedZKP zkEVM은 state proof와 EVM proof를 연결하기 위해 버스 매핑을 사용한다. 또한 Ethereum 블록이 유효하다고 판단되기 전에 두 증명이 모두 검증되어야 한다.

## zkEVM 개발 진행 상황은 어느 정도인가?

zkSync를 제외하면, 대부분의 영지식 EVM은 아직 개발 중이다. 그럼에도 불구하고, 영지식 기술의 발전이 계속되면서 완전한 기능을 갖춘 zkEVM의 전망은 그 어느 때보다 밝다.

그동안 개발자는 StarkNet 영지식 VM을 통해 영지식 애플리케이션의 이점을 활용할 수 있다. StarkNet은 EVM 호환은 아니지만, Solidity 소스 코드를 커스텀 ZK 친화적 바이트코드로 컴파일할 수 있다. 컨트랙트를 Cairo\(StarkNet의 언어\)로 직접 작성하는 것도 선택할 수 있다.

지금 Alchemy에 무료로 가입하여 [StarkNet 위에서 빌드](https://www.alchemy.com/layer2/starknet)를 시작하세요.

## 자주 묻는 질문

### zkEVM은 무엇의 약자인가?

zkEVM은 Zero-Knowledge Ethereum Virtual Machine의 약자로, 정확성을 검증하기 위한 영지식 증명을 생성하면서 스마트 컨트랙트를 실행하는 가상 머신이다.

### zkEVM은 표준 Ethereum virtual machine과 어떻게 다른가?

zkEVM은 EVM과 호환되지만 트랜잭션 유효성을 검증하기 위한 영지식 증명을 생성하며, 이를 통해 오프체인 실행과 온체인 검증을 결합하여 확장성을 개선한다.

### zkEVM의 주요 구성 요소는 무엇인가?

zkEVM은 세 부분으로 구성된다: 스마트 컨트랙트가 실행되는 실행 환경, 영지식 증명을 생성하는 증명 회로, 그리고 Ethereum Layer 1에서 증명을 확인하는 검증자 컨트랙트다.

### zkEVM은 무엇에 사용되는가?

zkEVM은 ZK-rollup을 구동하는데, 이는 트랜잭션을 오프체인에서 배치 처리하고 유효성 증명을 Layer 1에 제출하여 더 빠르고 저렴한 실행을 가능하게 하는 Ethereum Layer 2 스케일링 솔루션이다.

### zkEVM은 왜 구축하기 어려운가?

zkEVM 구축이 어려운 이유는 EVM이 영지식 증명을 위해 설계되지 않았기 때문이다. 특수 opcode, 스택 기반 아키텍처, 스토리지 오버헤드, 그리고 회로 설계를 복잡하게 만드는 높은 증명 비용이 이에 해당한다.

### zkEVM은 optimistic rollup에 비해 확장성을 어떻게 개선하는가?

zkEVM은 유효성 증명을 통해 즉각적인 파이널리티를 제공하며, optimistic rollup에 필요한 1~2주의 챌린지 기간을 없애고 더 빠른 트랜잭션 처리를 가능하게 한다.

### zkEVM opcode란 무엇인가?

zkEVM opcode는 ZK-rollup에서 프로그램을 실행하기 위한 저수준 머신 명령어로, 네이티브 EVM opcode를 위한 ZK 회로를 구축하거나 새로운 ZK 친화적 언어를 개발하는 방식으로 만들어진다.

### zkEVM 구현의 예시로는 어떤 것들이 있는가?

Polygon zkEVM\(마이크로 opcode와 SNARK/STARK 증명 사용\), zkSync\(Solidity를 커스텀 바이트코드로 컴파일\), Scroll\(각 EVM opcode에 대한 회로 설계\) 등이 있다.
