[Ethereum 2.0] 1. Danksharding Overview

Woojin Jeong
slcf
Published in
10 min readJun 6, 2022

Reviewd by: Seongwan Park

현재 Layer 1 이더리움의 확장성 문제를 개선하기 위해 제시된 이더리움 2.0의 샤딩과 롤업과 관련된 내용에 대해 시리즈 글을 작성하게 되었다. Danksharding, DAS, PBS, EIP-4844 등 모두 이론적으로는 확장성 및 보안 측면에서 효율적인 메커니즘들이나 구현 단계에서까지 그 유효성이 완전히 검증된 기술은 아님을 항상 염두에 두자. 본 시리즈를 통해 각 기술들의 세세한 부분까지 숙지하는 것보다도, 향후 이더리움 2.0으로의 전환 과정에서 지속적으로 등장할 여러 새로운 메커니즘을 이해하는데 있어 좋은 인사이트가 되었으면 하는 바람이다.

Ethereum 2.0 as a Modular Blockchain (Source: Bankless)

[Ethereum 2.0] Contents

Sharding

원래 The Beacon Chain Ethereum 2.0 explainer you need to read first에서 소개된 샤딩 디자인에서는 하나의 비콘 블록에 대응되는 64개의 샤드 블록이 있고, 각 샤드 블록은 개별적인 위원회(committee)에 의해 검증이 이루어지는 구조다. 한 개의 비콘 블록 당 64개의 샤드, 각 샤드를 검증하는 64개의 committee는 랜덤하게 구성되며 각 위원회를 구성하는 validator들은 샤드 내에서 개별적으로 필요한 작업을 실행한다.

이 스킴에서는 데이터가 available한지를 개별적으로 확인하기 위해 전체 데이터를 다운받아야 한다. 만약 특정 노드가 고의적으로 데이터를 제공하지 않게 되면 이를 검증할 수 없는 것기 때문에, 모든 노드가 정직하다는 가정에 의존해야 한다. 또한, 블록 제안자(proposer)는 개별 위원회의 투표 결과를 일일이 집계하는 과정에서 시간적 제약이 있어 투표 과정이 단일 슬롯 안에서 이루어짐을 보장하기도 어렵다는 한계가 있다.

Original Sharding design (https://ethos.dev/beacon-chain/)

Danksharding

Danksharding은 이더리움 재단의 Dankrad Feist에 의해 제시된 새로운 샤딩 디자인이다. 기존 샤딩 디자인과의 가장 큰 차이는 샤드 블록이 여러 개 있는 것이 아니라 “블롭(blob)”이라는 새로운 데이터 형태가 있어서 큰 하나의 블록 안에 한 개의 비콘 블록 그리고 비콘 블록과 관련된 샤드 블롭들이 포함된다. 그리고 하나의 위원회가 하나의 큰 블록을 검증하는데, 위원회를 구성하는 각 검증인들이 블록 전체를 검증하는 것이 아니라 자신이 해당하는 샤드 데이터를 검증하는 방식이다.

Danksharding에서는 각 샤드가 개별적으로 움직이지 않고 비콘 블록과의 연결성을 더 견고하게 만들고 voting 과정을 단순화하여 Data Availability 문제를 보완하고자 하였다. 또한 기존 샤딩 디자인에서는 비콘 체인과 병렬적으로 연결된 샤드 체인 상에서 트랜잭션에 대한 실행이 이루어지는 구조였다. 즉, 기존의 샤드 체인은 execution layer와 DA(data availability) layer의 역할을 담당했다. 반면 Danksharding에서는 더 이상 실행(execution)이 일어나지 않고, 각 샤드에 데이터를 저장 및 Data Availability에 대한 검증이 이루어지도록 하였다. 데이터들을 Layer 1에서 바로 이용할 수 있도록 하고자 함이danksharding이 기존 샤딩 스킴과 대비되는 중요한 차이다.

Danksharding: Tight beacon & Shard block integration (Source: DELPHI)

Danksharding에서는 기존 샤딩 스킴에서와는 달리 하나의 노드가 블록을 만들어야 한다. 따라서 블록을 만드는 노드는 검증된 모든 샤드 데이터가 담긴 하나의 큰 블록 데이터를 만들어야하기 때문에 중앙화되기 쉬울텐데, PBS(proposer builder separation)에서는 블록을 만드는 노드(builder)가 중앙화되더라도 여전히 validation의 탈중앙화 관점에서는 큰 문제가 되지 않는다는 아이디어에서 출발한 스킴이다. PBS는 Danksharding이 도입되면 필수적으로 따라올 메커니즘이기도 하다. 기존에는 proposer만이 블록 만드는 것을 담당하였다면 PBS에서는 builder를 도입하여 proposer의 역할을 상대적으로 가볍게 하였다. 자세한 내용은 2부를 참고하기 바란다.

Data availability sampling (DAS)

Danksharding에서는 검증자들이 모든 데이터가 이용가능한지 확인하기 위해 전부 다운받아야하는 것을 피하기 위해 DAS라는 데이터 샘플링 방식을 사용한다. 뿐만 아니라 롤업이 더욱 활발해지면 layer 1에 올라가는 데이터는 계속해서 증가할 것이다. 이 때 각 노드가 이 모든 데이터를 전부 다운받아야 하는건 현실적으로 어렵다. 된다 하더라도 나중에 가서는 계산 자원량이 충분한 일부 노드만 살아남아 결국 중앙화된 시스템이 되어 버릴지도 모른다. 따라서 DAS에서는 각 노드가 모든 데이터를 다운받지 않고 블롭 내 데이터의 절반 이상이 available한지를 체크하여 블롭 내 전체 데이터가 available하다고 판단할 수 있게 한다. 여기서 왜 절반의 데이터만 다운 받아도 되는지는 blob의 구조와 관련이 있는데, 아래 그림처럼 블롭 내 데이터들은 erasure coding 방식을 통해 원래 데이터가 2배로 불려진 구조로 되어 있다.

Blob structure (https://hackmd.io/@vbuterin/sharding_proposal)

즉, DAS의 핵심은 데이터를 erasure-coding 방식으로 2배 불리고 불려진 데이터 중 반만 있으면 전체 데이터를 복구할 수 있다는 것이다. 얼핏보면 2배 늘리고 그 중 반을 사용한다는 말이 원래 데이터(erasure-coding을 하기 전)를 다운받는 것과 어떤 차이가 있는지 의아할 수 있다. 하지만 불린 데이터들은 원래의 데이터를 바탕으로 만들어지는 것이기 때문에 2배 불려진 데이터들 중 실제로 다운 받아야 하는 것은 원래 데이터 중 일부에 해당한다. 통상적으로 30번 정도 샘플링을 반복하면 1의 확률로 전체 데이터를 복구할 수 있으며, DAS를 통해 각 노드들은 데이터 일부만으로 전체 data availability를 검증할 수 있게 된다.

Danksharding with 2D KZG scheme

DAS로 데이터 가용성 검증에 드는 부담을 줄일 수 있다는 내용까지 살펴보았다. 근데 원래 데이터가 올바르게 불려졌는지는 어떻게 확인할 수 있을까? 블록 제안자들이 아무렇게나 데이터를 추가하여 노드들이 제대로 검증할 수 없도록 방해할 수도 있지 않을까? 이것이 KZG 커밋이 필요한 이유다. (KZG polynomial commitment의 구체적 원리는 추후 작성 예정)

Danksharding에서는 기존 KZG 다항식 커밋에서 더 나아가 2차원 KZG 커밋 스킴을 사용한다. 데이터가 올바르게 확장되었는지에 대한 증거를 제공하는 KZG 커밋을 여러번 계산하는 과정은 슈퍼노드 빌더가 있다면 괜찮겠지만, 슈퍼노드가 항상 있을 것이라는 보장이 어렵기 때문에 2-dim KZG scheme에서는 평균적인 컴퓨팅 파워를 가지는 빌더 노드에서도 커밋을 계산하여 검증을 할 수 있도록 하였다. 2차원으로 데이터를 배치하는 이유는 직관적으로 커밋 연산량이 m에서 sqrt(m)만큼 감소하기 때문이다. 2차원 이상의 다차원 커밋 스킴을 사용하면연산량은 줄어들지 몰라도 erasure coded된 데이터 자체는 커지기 때문에 현재로서는 2차원 KZG 커밋 스킴이 최선인 듯 싶다.

2D KZG 스킴에서는 DAS를 75번 반복하면 1의 확률로 전체 데이터를 복구할 수 있다(1D 스킴에서는 30번 정도 반복했음). 그래도 샤드별로 샘플링 과정이 이루어지지 않고 하나의 큰 블록 단위로 샘플링이 이루어지기 때문에 2D KZG 커밋을 활용한 PBS+Danksharding 스킴에서는 기존 샤딩 디자인에서보다 요구되는 네트워크 대역폭(bandwidth)이 20배 이상 줄어든다. DAS 과정에서 각 샘플을 512B라 가정하면 1D KZG commit 방식에서는 30번의 샘플링 과정이 필요하기 때문에 샤딩 1.0에서의 대역폭은 (512 B x 64 shards x 30 samples) / 16 seconds = 60 KB/s 정도이지만, 2D KZG 커밋 스킴에서는 한 개의 블록에 대해 75개의 샘플만 체크하면 되기 때문에 요구되는 대역폭이 (512 B x 1 block x 75 samples) / 16 seconds = 2.5 KB/s로 낮아진다.

Opinion

이더리움 2.0에서 Scalability와 Security 간 트레이드오프는 중요한 이슈다. Security를 위해서는 컴퓨팅 파워가 뛰어난 특정 노드에 의존하지 않도록 하는 것이 중요한데, 롤업으로 원하는 수준의 Scalability를 달성하면서도 데이터 Availability 검증에 소요되는 계산을 최적화하기 위한 방안을 고안하는 것이 이더리움 2.0의 관건이 될 것이다. 그런 면에서 Danksharding은 데이터 블롭들로 구성된 블록을 검증하기 위해 필요한 네트워크 대역폭을 낮추고, 데이터 사이즈가 증가해도 증명 사이즈와 커밋 계산량은 변하지 않는 KZG 커밋 방식, 더 나아가 2차원 KZG 커밋 스킴을 통해 소요되는 컴퓨팅 리소스를 최소화하고자 하는 새로운 샤딩 스킴으로서의 충분한 가치가 있다고 평가된다.

Readings

--

--