@@ -20,7 +20,8 @@ EIP-4844가 도입되면서, 새로운 트랜잭션 타입 `0x03`을 지정받
2020
2121이번 글에서는 L2의 Rollup data가 KZG Commitment Scheme을 통해 어떻게 L1까지 도달하고, 검증받게되는지 그 과정을 다뤄볼 생각이다.
2222
23- # Dive into KZG Commitment
23+ # Commit by KZG Commitment
24+
2425** notation**
2526- $\mathbb{F}_ q$: BLS12-381 Scalar Field
2627- $G_1$: BLS12-381 $G_1$ Group (48 bytes)
@@ -153,4 +154,41 @@ for j, (value, point_kzg) in enumerate(zip(blob, KZG_SETUP_LAGRANGE)):
153154 computed_kzg = bls.add(computed_kzg, temp) # 누적 합
154155
155156# 최종: C = P(τ) · G₁ (48 bytes)
156- ```
157+ ```
158+
159+ # Opening the Commitment
160+
161+ 앞선 과정을 통해 128KB에 달하는 거대한 rollup data를 단 48B의 $C$(commitment)로 압축했다.
162+ 하지만, 검증자(L1 node) 입장에서는, 아래와 같은 의문이 들 수 있다.
163+ > "이 $C$가 정말 blob data로 만든게 맞아?
164+
165+ 이로 인해, 다시 다음과 같은 질문을 할 수 있게 된다.
166+ > "이 blob의 $n$번째 데이터가 정말 $b_n$인지 증명해봐!
167+
168+ 이 때 사용하는 것이 Opening, 즉 특정 지점에서의 값을 증명하는 것이다.
169+ Opening과정에서는, 다항식 P(x)에 대해, 특정 지점 $z$에서의 값이 $y$임을 증명한다. 즉 $P(z) = y$.
170+ 이를 위해 학창시절에 열심히 배운 ** 다항식의 나머지 정리** 를 활용한다!
171+
172+ $P(z)=y$라면, 다항식 $P(x)-y$는 $(x-z)$로 나눠 떨어져야 하기 때문에, 몫 다항식인 $Q(x)$가 존재하게 된다.
173+
174+ $$
175+ \begin{aligned}
176+ P(x) - y = (x - z)\cdot Q(x)//
177+ Q(x) = frac{P(x) - y}{x - z}
178+ \end{aligned}
179+ $$
180+
181+ Prover(L2 Sequencer)는 P(x)를 알고 있으므로, 직접 $Q(x)$를 유도할 수 있다. 그리고 이 $Q(x)$ 또한 Trusted setup의 $\tau$값을 이용해 Commitment로 만든다.
182+ 이러한 과정을 통해 Proof $\pi$를 만들게 된다.
183+
184+ $$
185+ \pi = Q(\tau)\cdot G_1
186+ $$
187+
188+ Prover는 이제 $(z,y,\pi)$ 를 Verifier에게 제출할 수 있다.
189+ > 자, point $z$에서 polynomial $P(x)$의 값은 $y$이고, 그 증거로 몫다항식의 commitment $\pi$를 줄게.
190+
191+ # Verification by Bilinear Pairing
192+ 이 글에서 Bilinear Pairing에 대해 자세히 다루기는 어려울 것 같다...
193+
194+
0 commit comments