현재 많은 프로젝트들이 zkEVM을 개발하고 있으며, zkEVM은 성능과 EVM 호환성에 따라 크게 네 단계로 분류된다.
Astar zkEVM은 Polygon CDK를 활용하여 개발된 Type 2 및 Type 2.5 zkEVM이며, 본 글에서는 Astar zkEVM의 구조를 분석한다.
Astar zkEVM은 과거부터 폴카닷 생태계의 XCM을 통해 멀티체인과 상호운용성의 비전을 추구했으며, 앞으로는 Polygon AggLayer와의 연결을 통해 상호운용성의 비전을 확장해나갈 것이다.
이전 [Astar Series] #1 글에서는 Astar Network의 개요와 역사에 대해 간략하게 살펴보았다. Astar Network는 일본 내에서 큰 규모의 웹2 기업들 및 도시들과 다양한 형태로 협업을 하며 많은 사람들에게 비즈니스를 잘하는 체인이라고 알려져있는데, 이에 못지 않게 Astar Network는 뛰어난 기술력을 가지고 있다. Astar Network는 폴카닷 생태계에서 시작했을 때부터 다양한 확장성 및 상호운용성 솔루션에 대한 기술을 개발을 해왔으며, 앞으로는 Astar zkEVM을 통해 다음 단계로의 도약을 목표로 하고 있다. 이번 [Astar Series] #2에서는 Astar zkEVM의 다양한 기술적 특징들에 대해 살펴볼 것이다.
롤업은 여러 트랜잭션을 단일 블록으로 통합하여 이더리움의 확장성을 개선하는 레이어 2(L2) 솔루션이다. 롤업은 오프체인에서 발생한 트랜잭션의 유효성을 검증하는 방식에 따라 옵티미스틱 롤업(ORU)과 영지식 증명 롤업(ZKO)으로 분류된다. 영지식 증명 롤업은 오프체인에서 트랜잭션의 유효성을 실행하고 업데이트된 상태 데이터를 증명과 함께 온체인에 제출하는 데 영지식 증명(ZKP, Zero-Knowlege Proof)을 사용한다.
ZKO의 초기 단계에서는 토큰 스왑과 결제 같은 특정 작업만을 수행할 수 있는 어플리케이션에 특화된 롤업(Application-Specific Rollups) 형태로 개발되었다 (i.e., Loopring, zkSync Lite, immutable). 이러한 롤업들은 사용자에게 저렴한 수수료와 확장성을 제공한다는 장점이 있다. 그러나, 우리가 일반적으로 알고있는 스마트 계약을 실행과 같은 범용적인 작업을 수행을 하기에는 제약이 있었다. 이는 이더리움 가상 머신(EVM)이 설계될 당시 영지식 증명을 수행할 수 있는 연산을 고려하지 않았기 때문이다.
zkEVM은 EVM 환경을 그대로 보존하면서도 영지식 증명을 활용하는 연산을 지원하는 가상 머신을 개발하는 시도로, 이는 범용적인 작업을 수행할 수 있는 영지식 증명 롤업을 구현하는 데 활용되고 있다. 초기 단계에서는 여러 이유로 zkEVM의 구현이 상당히 어려웠으며, 영지식 증명 롤업이 출시되기까지 많은 시간이 소요될 것으로 예상되었다. 그러나 최근에 여러 프로젝트들이 범용 연산을 수행할 수 있는 영지식 증명 롤업 메인넷을 성공적으로 출시하고 있다.
영지식 증명 롤업의 일반적인 실행 과정을 간단하게 표현하면 아래와 같다:
오프체인에서 발생한 트랜잭션의 상태를 실행 엔진(i.e., Geth, Netheremind)에서 처리한다.
이후, 트랜잭션 실행의 유효성을 증명하기 위해 zkEVM이 활용된다 (각 프로젝트마다 zkEVM 구현하는 방식은 서로 다르다).
zkEVM은 영지식 증명 기술을 활용하여 증명을 생성하고 업데이트된 상태와 함께 온체인(i.e., 이더리움)에 제출한다.
마지막으로, 온체인에 배포되어있는 스마트 계약을 통해 제출된 증명의 유효성을 검증한다.
2022년 8월, 비탈릭 부테릭은 “The different types of ZK-EVMs”을 통해 zkEVM을 EVM 호환성과 성능 측면에서 4가지 타입으로 분류하였다. 타입 뒤에 적힌 숫자는 단순히 구현 방법의 차이에 따라 EVM 호환성과 성능 측면 사이에서의 트레이드-오프 관계를 나타내며, 좋음 또는 나쁨을 표현하는 것이 아니다. 위 테이블을 정리하자면 아래와 같다:
Type 1 (fully Ethereum-equivalent): 이더리움과 완전히 동등한 상태를 의미하며 해시 함수, 상태 트리, 가스 비용 등 이더리움의 아키텍처를 유지한다. 이것은 이더리움의 생태계에 가지고 있는 디앱 및 인프라 환경(i.e., metamask)을 그대로 활용할 수 있다는 장점을 갖는다. 하지만, 증명을 생성하는 데 많은 시간이 걸릴 수 있다. 현재 테스트넷으로 운영중인 Taiko가 유일하게 Type 1 zkEVM을 목표로 개발하고 있는 프로젝트이다.
Type 2 (fully EVM-equivalent): 위에서 언급한 Type 1 zkEVM의 단점 중 하나인 증명 생성 시간을 단축하기 위해 영지식 증명 연산에 용이하도록 이더리움의 데이터 구조와 트리 방식을 약간 변형한 것을 의미한다. 이는 기존 이더리움 인프라와의 호환성을 가질 수 있지만 이더리움과 완전 동등하지 않은 형태로 EVM 호환성을 갖추었다라고 말한다. 여전히 증명을 생성하는데 많은 비용이 필요한데, 이 경우를 해결하기 위해 가스비를 조정하는 경우를 Type 2.5 zkEVM라고 부른다.
Type 3 (almost EVM-equivalent): 증명 생성 시간을 개선하기 위해 EVM의 일부 기능인 프리컴파일(Precompiles) 기능을 제거하는 것을 의미한다. EVM 에는 해싱 및 서명 체계와 같은 특정 연산을 처리하는 9개의 프리컴파일이 존재한다. Type 3 zkEVM은 빠른 증명 생성 속도를 제공할 수 있다는 장점이 존재한다. 다만 프리컴파일을 사용하는 디앱들은 코드를 수정해야하는 단점이 존재한다. 글을 작성하는 시점인 현재 대부분의 zkEVM 프로젝트들은 Type 3 또는 Type 4에 해당하며, Type 1 또는 Type 2를 목표로 하고 있다.
Type 4 (high-level-language equivalent): 범용적인 VM을 자체적으로 개발하고 영지식 증명의 친화적인 프로그래밍 언어를 따로 만든다. 개발 리소스를 크게 줄일 수 있지만 기존에 존재하는 이더리움의 인프라와 호환성을 갖추기 어렵다. 즉 EVM과의 호환성보다는 Solidity와 호환성을 가질수있음을 의미한다. 또한, 바이트코드 컴파일 방식이 다르기 때문에 이더리움과 동일한 주소체계를 갖기 어렵다는 단점이 존재한다. zkSync Era과 StarkNet이 Type 4 zkEVM에 속한다.
위의 타입들은 각각의 장단점을 가지고 있으며, 이는 zkEVM을 구현하는 초기 단계에서 성능과 EVM 호환성 중 어떤 것을 우선순위에 두는지에 따라 네 가지 유형으로 분류되었다. 최근 Type 3에 속한 프로젝트들이 EVM 호환성을 개선하기 위한 시도를 통해 Type 2로의 전환을 목표로 하고 있다.
Type 3 zkEVM은 EVM 바이트코드를 지원하기 때문에 대부분의 디앱 및 툴과 호환되지만, 몇 가지 opcodes 및 precompiles이 지원이 안되기 때문에 이 경우에 개발자들이 코드를 약간 수정할 필요가 있다. 호환되지 않는 코드의 목록은 다음과 같다:
opcode: SELFDESTRUCT, EXTCODEHASH, DIFFICULTY, BLOCKHASH, NUMBER
precompile: SHA256, BLAKE, PAIRINGS
최근에 Polygon zkEVM은 Etrog upgrade를 통해 SHA256과 같은 프리컴파일이나 BLOCKHASH, DIFFICULTY, EXTCODEHASH, NUMBER과 같은 opcode를 지원하기 시작했으며, 지속적으로 호환되지 않는 opcodes, 프리컴파일, EIP 등을 업데이트하고 있으니, 같은 스택을 사용하는 Astar zkEVM 역시 Type 3에서 Type 2.5 또는 Type 2로 발전하여 개발자 친화적인 환경을 제공하고 있다.
2023년 8월 말, Polygon은 Optimism의 SuperChain, Arbitrum의 Orbit, ZkSync의 ZK Stack과 유사한 전략으로 Polygon Chain Development Kit(CDK)를 공개하였다. Polygon CDK는 블록체인 개발자가 새로운 L2 체인을 쉽게 구축할 수 있도록 돕는 모듈식 오픈 소스 소프트웨어 툴킷이다. 이 도구를 활용하면 데이터 가용성 레이어, 네이티브 가스 토큰 등 다양한 요소를 커스터마이징하여 롤업을 쉽게 구축할 수 있다. 이를 통해 Polygon은 L2로서의 생태계를 확장해가고 있다. 또한, Polygon CDK는 Aggregation Layer(AggLayer)를 통해 Polygon CDK를 사용하여 개발된 체인들끼리 서로 상호 운용할 수 있도록 하는 크로스체인 기능도 제공한다. 현재 여러 프로젝트가 Polygon CDK를 활용하여 롤업을 개발 중이며, 그 중 Astar zkEVM도 포함되어 있다.
Astar zkEVM은 Polygon CDK를 활용하여 구축된 체인이다. Astar zkEVM은 Polygon zkEVM과 동일한 기술 스택을 활용하고있으며, 작동 방식도 유사하다. Astar zkEVM은 다음과 같은 컴포넌트들로 구성된다:
Pool DB: 멤풀과 같은 역할을 하며, 사용자들이 RPC 노드를 통해 제출한 트랜잭션이 담긴다.
Sequencer: Pool DB에 있는 대기 중인 트랜잭션의 유효성을 검증하고, 배치(batch)에 포함한다. 이후 이더리움에 batch 트랜잭션을 전송한다.
State DB: 상태 데이터(state data)를 영구적으로 저장하는 데이터베이스이다.
Aggregator: 시퀀서가 전송한 batch를 확인하고 그에 대한 증명을 생성하여 이더리움에 제출한다. 증명은 zkProver를 통해 생성한다.
Synchronizer: 이더리움으로부터 데이터를 fetching하고 이를 State DB에 업데이트한다.
즉, 사용자가 제출한 트랜잭션은 시퀀서에 의해 batch에 포함되며, Aggregator가 이에 대한 증명을 생성하여 이더리움에 제출하여 상태를 확정하면 State DB에 업데이트되는 방식이다. Astar zkEVM은 이더리움을 데이터 가용성 레이어로 사용하는 일반적인 롤업과는 달리 별도의 DAC를 두어 데이터를 가용함으로써 보안을 약간 희생하지만, 더 뛰어난 확장성을 달성할 수 있다.
Polygon CDK를 사용하여 개발된 체인들이 DAC 방식을 활용하게 되면, 데이터의 해시값만 이더리움에 퍼블리싱되며, DAC의 참여자들은 제출된 해시 값을 개인적으로 검증하고, 이것이 옳다는 서명을 시퀀서에게 전송한다. 이 과정에서 멀티시그가 활용되며, 데이터 가용성을 보장하기 위해 특정 수 이상의 서명을 필요로 한다.
Aggregator는 zkNode 클라이언트와 함께 zkProver도 실행하여 batch에 대한 증명을 생성할 수 있다. zkProver는 다양한 상태 머신(state machine)들의 집합이다. 메인 상태머신이 트랜잭션의 실행을 담당하며, 실행 결과로 나온 EVM 바이트코드를 증명 생성에 최적화된 zkASM 언어로 변환한다. 그리고 트랜잭션 및 데이터를 다항식(polynomial)의 형태로 전환한다. STARK Builder는 다항식을 받아서 이에 해당하는 zk-STARK 증명을 생성한다. 이를 재귀적으로 생성하기 때문에 수 백개의 zk-STARK 증명을 단일 증명으로 바꿀 수 있다. STARK는 증명 생성이 빠르지만 용량이 크다는 단점이 있다. 이를 해결하기 위해 zkProver는 STARK 증명에 해당하는 SNARK 증명을 생성하여 용량을 감소시키며, 이는 가스 비용을 5M에서 무려 350k로 압축할 수 있다.
Astar Network는 Astar zkEVM을 통해 Polygon Agglayer에 연결하기 이전부터 멀티체인의 미래와 상호운용성을 통한 사용자 경험 개선의 중요성을 피력해왔다. 가장 대표적인 예시가 바로 XCM이다. XCM은 Cross-Consensus Message Format의 줄임말로, 여러 컨센서스 시스템 간 커뮤니케이션을 용이하게 해주는 폴카닷 생태계의 대표적인 메시징 포맷이다.
사람들이 XCM에 대해서 오해하기 쉬운 것이 두 가지가 있다. 첫 번째로 XCM은 프로토콜 레이어가 아니다. XCM은 체인 간 임의의 데이터를 교환하는 메시징 포맷일 뿐, 메시지 전송과 상관이 없다. XCM 메시지 전송은 XCMP, HRMP, VMP 등의 프로토콜 레이어에 의해 진행된다. 두 번째는 XCM은 폴카닷 생태계 밖에서도 활용될 수 있다는 것이다. 비록 XCM은 폴카닷 생태계의 가장 큰 특징 중 하나이고, 이를 통해 폴카닷 릴레이 체인에 연결되어있는 파라체인(Parachain)들끼리 서로 소통이 가능하지만, XCM은 컨센서스를 통해 완결성이 부여되는 시스템이라면 폴카닷 생태계가 아니더라도 범용적으로 활용이 가능하다.
XCM을 통해서 다른 체인에 있는 어카운트를 컨트롤하여 다른 체인에서의 자산 이동에 관여할 수 있는 ‘Remote Transfers’ 기능(Cosmos의 ICA와 비슷)이나, 한 체인에서 자산을 소각시키고, 다른 체인에서 동일한 자산을 생성시키는 ‘Asset Teleportation’ 기능 등을 활용할 수 있다. 즉, 폴카닷 생태계에서 XCM 채널이 연결된 파라체인들 내에서 사용자 경험이 극대화될 수 있는 것이다.
폴카닷 생태계의 SDK인 Substrate로 만들어진 네트워크들은 손쉽게 XCM pallet 모듈을 도입할 수 있기 때문에, 자연스럽게 XCM의 기능 및 장점을 누릴 수 있다. 이는 Astar Network에도 해당한다. 현재 Astar Network에선 다양한 XCM 기능을 제공하고 있다. 폴카닷의 네이티브 토큰인 DOT을 Astar Network으로 전송하는 ‘Native XCM Transactions’부터, Moonbeam에서 지원하는 범용 체인 자산인 ‘XC20 Assets’의 생성 및 활용, 다른 체인에서 트랜잭션을 실행시키는 ‘Remote Transact’, 제 2의 네트워크에서 제 3의 네트워크로 자산을 전송하는 ‘Transfer Reserve Assets’ 등의 기능을 통해 개발자들은 Astar Network를 사용하는 사용자들에게 원활한 크로스체인 경험을 선사할 수 있다.
Astar zkEVM은 Polygon AggLayer를 통해 상호운용성을 제공하고자 한다. Astar zkEVM은 AggLayer에 연결되는 최초의 네트워크이다. AggLayer는 계산된 유효성 증명을 모아 압축하여 최종 증명을 이더리움에 제출하는 프로토콜로, 트랜잭션에 대한 연산을 영지식 증명을 활용하여 유효성을 증명할 수 있는 네트워크라면 L1, L2 상관없이 누구나 AggLayer에 연결할 수 있다. AggLayer에 연결된 네트워크의 유효성 증명은 모두 AggLayer로 모이기 때문에, 이는 크로스체인 메시징에서 두 가지 중요한 이점을 제공한다.
첫 번째 이점은 유효성이다. 일반적으로 크로스체인 메시징에서 가장 중요한 것은, 다른 네트워크에서 유효성이 보장되었는지를 검증하는 것인데, AggLayer에 연결된 네트워크들끼리는 영지식 증명 기술을 통해 손쉽게 유효성을 검증할 수 있다. 두 번째 이점은 자주성(sovereignty)이다. 만약 아토믹 트랜잭션(Atomic transaction)을 가능하게 하기 위해 공유 시퀀서를 활용한다면, 네트워크들은 시퀀싱 및 MEV 추출과 같은 이슈를 희생해야 된다는 단점이 있다. 반면에 AggLayer에 연결된 네트워크들은 각자의 시퀀서(혹은 밸리데이터)를 유지하면서 아토믹 트랜잭션의 이점도 누릴 수 있다. 종합하면 AggLayer에 연결된 네트워크들끼리는 원활한 크로스체인 메시징이 가능하기 때문에 사용자 입장에서 사용자의 경험성(UX)이 극대화될 수 있다.
AggLayer에서는 총 두 가지 크로스체인 메시징 시나리오가 존재한다. 첫 번째는 비동기적(Asynchronous) 케이스이며, 두 번째는 동기적(synchronous) 케이스이다. 원래 가장 정석대로 브릿징을 진행한다면 위 그림의 맨 왼쪽과 같이 각 체인의 유효성 증명이 AggLayer에 제출되고, 이들이 압축된 최종 증명이 이더리움에 제출된 것을 확인하여 유효성 검증을 완벽히 마친 후에야 크로스체인 메시징을 하는 것이다. 하지만 이는 시간이 너무 오래 걸려 UX가 저해된다는 단점이 있다.
따라서 AggLayer에서는 이를 옵티미스틱 하게 처리하고 나중에 유효성을 검증하는 방식을 지원한다 (사진의 중간). 유효성 증명이 생성되기 이전에 한 체인에서 먼저 batch를 AggLayer에 제출하면 다른 체인에서 이를 토대로 크로스체인 메시징을 진행하며, 추후에 생성된 유효성 증명을 통해 유효성을 검증한다. 만약, 이 때 문제가 발생한다면 롤백과 슬래싱이 진행된다. 이 방식은 매우 간편하지만, 트랜잭션이 동시에 실행되는 것이 아닌, 한 체인에서 실행된 후 다른 체인에서 실행된다.
이를 해결하기 위해 AggLayer는 트랜잭션을 아토믹하게 처리하는 방식도 지원한다 (사진의 오른쪽). 사용자는 트랜잭션 번들을 AggLayer에 제출하며, 번들 내의 트랜잭션들은 해당하는 체인으로 전송되며, 해당 체인은 이에 영향받는 스테이트를 동결(lock)한다. 그리고 각 트랜잭션들이 모두 정확하게 실행되었다면, 각 체인은 유효성 증명을 생성하고, 이에 문제가 없다면 동결된 스테이트는 해제(unlock)된다.
이러한 특징들을 활용하면 Astar zkEVM의 사용자들은 AggLayer에 연결된 여러 네트워크와 상호작용하고 있음에도 불구하고 단일 네트워크와 상호작용하는 것과 같은 경험을 할 수 있다. 예를들어 Astar zkEVM의 사용자는 보유하고 있는 ETH를 AggLayer에 연결된 네트워크에 있는 렌딩 프로토콜에 원클릭으로 예치할 수 있는 것이다.
최근 많은 프로젝트들이 체인 추상화(chain abstraction)라는 개념을 가지고 다양한 방식으로 접근하고 있다. 메인넷 단에서는 Near Protocol의 탈중앙 프론트엔드, Polygon의 AggLayer 등의 시도가 있고, 어플리케이션 단에서는 UniswapX, Across 등 intent를 활용하려는 시도가 있다. 이는 사용자들이 여러 네트워크와 상호작용하고 있음에도 불구하고 마치 하나의 서비스와 상호작용하는 것과 같은 UX를 제공하는 것에 집중한다.
Astar Network는 이러한 개념이 주목받기 이전부터 멀티체인 및 체인 추상화의 미래에 계속 집중했으며, 앞으로 Astar zkEVM을 통해 이 비전을 실현하고자 한다. 과연 Astar zkEVM이 Polygon AggLayer와 함께 어떠한 새로운 형태의 UX를 제공할지 주목해야할 것이며, Astar Series의 마지막편인 3편에서는 Astar zkEVM의 생태계에 대해 살펴볼 것이다.
이 글의 비주얼을 제공해주신 Kate에게 감사의 말씀을 전합니다.