1-5/
다만 이 솔루션은 좋은 개발자 경험(Dex)를 얻기 어렵다는 단점이 있습니다. zkVM은 하위에 있는 자체 언어의 명령어 집합(instruction set)을 사용하며, 중요한 EVM 옵코드(opcode)를 많이 지원하지 않기 때문입니다.
1-6/
따라서 개발자는 좋은 Dex를 얻기위해 zkVM의 고유 언어(Zinc, Cairo)를 따로 배워야합니다. 이로 인해, zkRollup이 L1 생태계를 직접 상속받지 못할 수 있으며, L2 개발자와 언어가 분리될 수 있습니다(언어를 새로 배우는 것은 언제가 추가적인 진입장벽을 만들곤 합니다).
1-7/ 바이트코드 단계(bytecode-level)
이 단계는 EVM과 동등하게, 솔리디티 언어 단계와의 호환성을 달성할 수 있을 뿐만 아니라 EVM의 옵코드 단계와도 완전한 호환성을 달성할 수 있는 단계입니다.
1-8/
사실 바이트코드 단계에 도달해야 zkEVM이라 부를 수 있습니다(언어 단계는 zkVM이라고 부르는게 맞음). zkEVM에서 개발자는 좋은 Dex를 얻을 수 있으며, L1의 Dapp과 개발 도구는 기본적으로 수정 없이 L2로 마이그레이션될 수 있습니다.
1-10/ 컨센서스 단계(consensus-level)
이 단계는 최종적인 zkEVM으로, 언어와 바이트코드 뿐만 아니라 컨센서스 단계에서도 호환성을 달성하는 단계입니다.
1-11/
zkEVM이 컨센서스 단계의 호환성을 달성하게 된다면, L1의 마이너가 블록 생성시 해당 블록에 대한 증명을 생성하고 모든 노드가 이를 동기화할 때, 트랜잭션의 재연산 없이 마이너가 만든 블록에 대한 증명의 유효성만 검증하면 됩니다.
1-12/
이 단계에서 #Halo2 의 재귀적 증명을 사용하면, 전체 블록의 유효성을 증명하기 위해서 단 하나의 증명만 사용할 수 있습니다. 이렇게 되면, 동기화하는 노드들은 각 블록에 대한 증명을 하나씩 검증할 필요가 없고, 마지막 증명만 검증하면되어 효율성이 높아집니다. medium.com/@hyun-jeong/%E…
1-13/
컨센서스 단계의 zkEVM이 이루어진다면, 이더리움 노드의 동기화가 이루어지는 몇 초에서 몇 분 정도 뒤에 누구나 쉽게 이더리움 네트워크에 합류할 수 있고, 결과적으로 이더리움은 더 분산화되고 강건해질 것입니다.
1-14/
zkEVM의 궁극적인 목표는 L1에 실제로 적용되어 현재의 EVM을 대체하는 것입니다. 이는 EF(@PrivacyScaling)와 @Scroll_ZKP 그리고 ZK 영역에 기여하는 사람들 모두의 궁극적인 목표입니다.
2-2/
Plonk는 Sonic과 다항식 commitment를 기반으로하는 혁신입니다.
(한 가지 양해를 구하자면, commitment가 한국어로 확약, 약속 등으로 번역되는데, 대한수학회에서 제공하는 용어 사전을 뒤져봐도 이를 대체할만한 좋은 단어를 찾을 수 없어 commitment는 영어 단어 그대로 사용하고자합니다)
2-3/
Sonic을 기반으로한 Plonk는 "보편적이고 업데이트 가능한(universal and updateable)" 신뢰할 수 있는 셋업(trusted setup)을 가지고 있습니다. 즉, Plonk는 단 하나의 셋업만 필요하고 이는 언제든 재사용 될 수 있다는 것을 의미합니다.
2-4/
다항식 commitment를 기반으로 하면, groth16 및 다른 zk-SNARK 증명 스킴에서 널리 사용되고 있는 R1CS보다 더 표현력이 뛰어난 PLONKish 산술화(Arithmetization)를 사용할 수 있습니다.
2-5/
zkEVM에서는 Plonkish의 매우 중요한 기능인 "custom gate"와 "lookup table argument"를 사용합니다. github.com/fluidex/awesom…
2-6/
Plonk의 이 두 가지 기능을 통해 고도화된 맞춤형 제약(constraints)를 작성할 수 있는데, 이는 회로(circuit)의 오버헤드를 줄이는데 매우 중요합니다. 나중에 native zkEVM 아키텍처에서 이 두 가지 기능을 자주 사용한다는 것을 알게됩니다.
2-7/
영지식 증명에서 제약(constraints)은 각 항목이 만족해야하는 조건들의 나열이고, 회로(circuit)는 조건을 만족하는 값을 찾기 위한 표현방식(코드)라고 이해하면 쉽습니다.
- 송금 트랜잭션의 제약(조건) : “잔액 > 송금액”
- 회로 : 잔액과 송금액을 찾아 그 값을 비교하는 코드
3. native zkEVM의 아키텍처
3-1/
앞서 언급했듯이, native zkEVM은 zkRollup에서 사용될 뿐만 아니라 지금의 L1의 EVM을 대체할 것이므로, 디자인/코드 및 아키텍처를 익히는 것은 아주 큰 의미가 있습니다(이걸 아는 당신은 혁신의 최전선에 있는 것!)
3-2/
zkEVM은 native EVM과 custom EVM으로 나눠집니다. 간단히 말해서 zk proof로 구현하는 opcode의 종류가 native인지 custom인지에 따라 다릅니다.
3-3/
EVM은 트랜잭션을 통해 state1에서 state2로 이동시키는 상태 머신이므로, 가장 작은 상태 변화를 유도하는 연산을 트랜잭션이라고 이해할 수 있습니다(실제로는 트랜잭션이 아니라 트레이스(trace)라고 합니다).
3-4/
다시말해 상태 머신 전체를 제약 및 증명(constraint/prove)하는 것은 각 트랜잭션을 가져와 제약 및 증명하는 것으로 이어집니다.
3-5/
zkEVM의 기본 아이디어는 EVM을 제약하는 EVM 회로를 생성하여, EVM의 모든 실행 로직이 올바른지 증명하는 것입니다.
3-6/
이 EVM 회로는 모든 트랜잭션과 해당 트랜잭션에 의해 호출된 특정 옵코드를 얻을 수 있습니다.
그런 다음, 이 회로는 다음 사항들이 완전히 정확한지 증명합니다: 상태 변경에 사용된 트랜잭션, 트랜잭션에 의해 호출된 옵코드, 옵코드들의 연산 논리, 연산 순서
3-7/ @Scroll_ZKP 팀은 여러가지 시도끝에, EVM을 제약하기 위한 회로를 단 한개만 사용한다면, 그 회로는 너무 거대해져 불필요한 복잡성과 오버헤드가 증가하게 된다는 것을 알게되었습니다.
3-8/
그래서 EVM의 각기 다른 모듈을 위한 하위 회로 및 테이블(sub-circuits/table)을 설계했습니다. 이를 통해, 증명을 만들때는 관련된 테이블을 쿼리(query)하기만 하면됩니다.
테이블에는 필요한 조건에 따라 다른 변수를 채울 수 있습니다.
3-9/
예를 들어, 메모리/스택/스토리지의 읽기 및 쓰기의 로직을 증명하는 경우 EVM 회로는 상태 테이블(State table)을 쿼리하면 됩니다(테이블 아래에 있는 하위 회로(State Circuit)를 사용할 수 있게됨).
옵코드와 관련된 연산의 경우, EVM 회로는 바이트코드 테이블을 쿼리하면 됩니다.
3-10/
하위 회로는 제약에 관련된 연산을 포함한 하위 테이블을 쿼리하고, 상태 회로는 스토리지와 관련된 연산을 제약할 때 MPT 연산을 사용하기 때문에, MPT 테이블을 쿼리합니다. 트랜잭션 회로(Tx Circuit)는 해시와 트랜잭션 서명을 검증할 때 Keccak와 서명 테이블(Sig table)을 쿼리합니다.
3-11/
물론 이 테이블이 고정된 값은 아니고, 다른 연산이 필요하다면 이와 관련된 다른 값들로 채워질 수 있습니다. 이것이 zkEVM이 보편적인 도구가 될 수 있는 이유 중 하나입니다.
한편, 고정된 값이 아니므로 악의적인 증명자가 유효하지 않은 테이블을 만들어 증명을 위조할 수 있습니다.
3-12/
따라서, 테이블 자체의 정확정을 보장하는 것도 중요합니다. 이를 위해 각 테이블에 대한 회로를 설계하고, 각 회로에서는 테이블이 완전히 올바른지 보장하기 위한 특정 다항식 제약을 포함합니다.
3-13/
트랜잭션(trace)이 EVM 회로에 포함될 때, 모든 연산(옵코드, 스택/스토리지 등)은 재정렬된 다음 하위 회로에 할당됩니다. 이러한 하위 회로는 연산의 정확성을 증명하고 증거를 생성합니다.
3-14/
마지막으로, 이 하위 회로에 의해 생성된 증명은 공개 입력값으로 aggregation 회로에 입력되고, aggregation 회로는 이러한 각각의 단일 증명을 모아 aggregate 증명으로 만듭니다.
3-15/
이후, aggregate 증명은 L1의 컨트랙트로 전송되어 유효성을 검증받습니다. 아래 그림은 @Scroll_ZKP 만들고 있는 #zkEVM의 하이레벨 워크플로우입니다.
4. 끝 그리고 시작 #zkEVM 은 “zk everything”의 마일스톤이자, 실용적인 영지식 증명 시스템이 성숙한 후에나 나타날 수 있는 혁신입니다.
zkEVM을 연구하는 동안, 그 이면에 있는 수학적 메커니즘에 깊은 인상을 느꼈고, 이 글을 읽은 모두가 이 혁신의 최전선에 함께하고 있다고 생각합니다.
[암호학 서적 추천]
ZK를 공부하고 있지만 암호학 전공은 아닙니다.
영지식에서 필요한 암호 개념들만 공부하니, 항상 부족한 느낌이 들어서 올해는 강남 교보문고에 있는 암호책을 거의 다 읽어버렸네요.
영지식 때문에 암호학을 처음 공부하는 분들에게 추천하는 책 3권👇
1. 수학으로 이해하는 암호의 원리
- 암호학을 처음 접하는 분들에게 추천
- 암호에서 주로 사용하는 단어와 개념을 처음 익히기 아주 좋음
- 이미 암호학이 익숙한 사람들이라면 소설책 읽듯이 쉽게 읽을 수 있음 product.kyobobook.co.kr/detail/S000001…
2. 처음 배우는 암호화
- 수식과 코드 형식에 익숙한 사람들에게 추천하는 책
- 암호화 코드가 간단히 작성되어 있어 해시 등의 내부 연산을 직관적으로 이해할 수 있음
- ZK 코드 내부에 구현된 해시 연산의 역할을 이해하는데 도움이 됨product.kyobobook.co.kr/detail/S000001…
[블록체인과 영지식 증명 이해하기]
영지식 증명을 공부하면서 남겼던 글들입니다. 좀 더 수학적으로 깊이 영지식 증명을 이해하고 싶으신 분들에게 아래 글들을 순서대로 읽어보시는 것을 추천드립니다 :)
1편. 영지식 증명 이해하기 medium.com/@hyun-jeong/h-…
As a summary by @0xPolygonHermez
The zkEVM code has already been open-sourced!
Road to Mainnet of zkEVM:
✅ Q3 2022 - public testnet, permission-less
✅ Early 2023 - Mainnet.
[Lookup table]
- 증명자가 table에 witness value가 존재한다고 주장할 수 있도록 미리 만들어 놓은 값. zkEVM에서 증명을 만들때 이 table에서 값을 가져와 연산의 정확성을 증명함
- 대표적인 솔루션: Plookup, Halo2 Lookup table
- Halo2를 사용하면 Plookup보다 universality가 높음
먼저 각 서비스들의 zkEVM 특성 별로 분류해 봅시다. 이 분류는 앞으로 여러분이 zkEVM의 업데이트를 이해하는데 큰 도움이 될 것입니다. 1) zkVM @StarkWareLtd 2) custom zkEVM @0xPolygonHermez 3) native zkEVM @Scroll_ZKP @zksync -- 원래는 zkVM이었으나 zkEVM으로 구현 방향을 바꿈
1) zkVM (Language Level) @StarkWareLtd
- EVM과 Solidity는 영지식을 구현하기 좋은 환경이 아님
- 언어부터 영지식 친화적으로 설계하여 자체 VM에서 실행
- 장점: EVM 설계에 제한받지 않고, 당장 돌아갈 만큼 견고하며 오버헤드가 적음
- 단점: EVM 호환성 ❌, 개발 접근성이 떨어짐
[Verkle tree와 Merkle tree 간단 비교]
- Verkle tree는 ETH 2.0 업그레이드의 주요한 부분임
- Verkle tree는 기존 Merkle tree보다 증명 크기를 매우 작게 줄일 수 있음
- 이는 ETH 2.0 확장성에 큰 기여를 할 걸로 보임
👇detail
- Verkle tree와 Merkle tree의 가장 큰 차이는 원소(element)의 존재를 증명하기 위해 저장해야하는 데이터의 차이임
- Merkle tree: 32를 증명하기 위해서 빨간색 원소(sister node)를 모두 증명에 포함
- Verkle tree: pi_3를 증명하기 위해서 초록색 부분만 증명에 포함 vitalik.ca/general/2021/0…
대신 Verkle tree는 root 부터 pi_3원소까지의 경로를 함께 증명해야함. 이를 위해 부모(바로 위에 있는 원소)와 자식간의 연결을 증명해야함. 부모는 자식의 commitment(쉽게 말해 hash 값)를 포함하여 경로 증명에 필요한 값을 가지고 있음. vitalik.ca/general/2021/0…