Validator’s Note 25 — 이더리움 (블롭 개수) 10배 간다?

Youngbin Park
DSRV
Published in
10 min readJul 26, 2024

Disclaimer: 이 글은 정보 전달을 위한 목적으로 작성되었으며, 특정 프로젝트에 대한 투자 권고, 법률적 자문 등 목적으로 하지 않습니다. 모든 투자의 책임은 개인에게 있으며, 이로 발생한 결과에 대해 어떤 부분에서도 DSRV는 책임을 지지 않습니다. 본문이 포괄하는 내용은 특정 자산에 대한 투자를 추천하는 것이 아니며, 언제나 본문의 내용만을 통한 의사결정은 지양하시길 바랍니다.

이번 글에서는 이더리움이 다음 Pectra 업그레이드에서 Danksharding을 향해 어떻게 나아가는지를 소개해 보고자 합니다.

이전 Dencun 업그레이드에서 도입된 EIP-4844, Proto-danksharding에서는 데이터 가용성(DA)을 위한 블롭이라는 새로운 데이터 구조와 암호학 요소, 그리고 블롭을 위한 새로운 수수료 시장을 소개했으나 노드가 모든 블롭 데이터를 다운로드해야 했습니다. 하지만 현재의 리소스 요구 사항 내에서 이더리움이 목표하는 대로 DA 처리량을 더욱 늘리기 위해서는 각 노드에서 일부 데이터만 다운로드할 수 있게 해주는 DAS(Data Availability Sampling)가 필요합니다.

이더리움은 Proto-danksharding에서 Danksharding까지의 단계를 세분화하여 각 업그레이드의 복잡성과 위험을 줄이고 DA 처리량을 점진적으로 확장하고자합니다. 이에 따라 다음 업그레이드인 Pectra 에서는 Proto-danksharding에 비해 대역폭을 최소한으로 증가시키며 더 많은 처리량을 허용할 수 있는 EIP-7594, 1D PeerDAS가 포함되었습니다.

DAS란 무엇인가?

DAS는 노드가 전체 데이터를 다운로드하지 않고도 데이터 가용성을 확인할 수 있게 하는 기술로, 크게 데이터 가용성과 샘플링의 두 측면으로 나누어 살펴볼 수 있습니다. 데이터 가용성은 노드가 원래 블록을 복원할 수 있을 만큼 충분한 데이터를 확보하는 것을 의미합니다. 이를 위해서는 복원력을 위한 erasure coding과 데이터 분산 및 중복해서 저장하기 위한 P2P 구조가 추가적으로 필요합니다. 샘플링은 노드가 데이터 가용성을 스스로 확신하는 것을 의미합니다. 노드는 데이터 조각을 무작위로 선택하여 검색하고, 샘플링이 성공할 시 데이터의 가용성을 확률적으로 확신할 수 있습니다.

노드는 데이터 가용성을 보장하기 위해 데이터를 보관하는 동시에 샘플링의 인프라 역할을 하며, 샘플링을 통해 가용성을 확인합니다. 따라서 DAS는 샘플을 P2P 네트워크에 분산하여 보관하는 분산 단계와, 개별 노드가 무작위로 샘플을 수집하는 샘플링 단계라는 두 단계로 나뉘어지며 두 단계가 서로 다른 P2P 네트워크 구조를 사용할 수 있습니다.

PeerDAS란 무엇인가?

Danksharding을 위한 과도기적 단계로 채택된 1D PeerDAS는 이더리움에서 검증된 gossippub 방식의 P2P 네트워크를 활용한 DAS입니다. 분산 단계에서는 erasure coding된 데이터를 노드 아이디를 기반으로 서브넷으로 분산하여 모든 노드에서 보관합니다. 그리고 노드는 기존 피어(peer)와의 req/resp(요청/응답)을 통해 샘플링을 수행하기 위해 피어를 검색(Discv5)하고 일정 수 이상의 피어를 유지합니다.

erasure coding은 원본 데이터를 확장하여, 확장된 데이터의 일부만으로 전체 데이터를 복구할 수 있게 하는 방법입니다. 1D PeerDAS에서 블롭은 CL에서 1D erasure coding을 통해 수평적으로 2배 확장되며, 수직적으로 쌓여 샘플링의 단위인 열(column)로 나뉩니다. 50% 이상의 열이 온전할 경우 원본 데이터를 복구할 수 있습니다.

확장된 블롭들은 셀(cell)로 나뉘어지고, 블롭들의 셀 중 같은 열 인덱스를 가진 셀의 집합이 샘플링의 단위인 DataColumnSidecar 입니다. 기존 BlobSidecar과의 차이점은 DataColumnSidecar이 열에 포함된 각각의 셀에 대한 kzg commitment, kzg proof 를 가지고 있다는 것으로, 이를 사용하여 열을 검증할 때 포함된 셀을 일괄적으로 검증합니다.

class BlobSidecar(Container):
index: BlobIndex
blob: Blob
kzg_commitment: KZGCommitment
kzg_proof: KZGProof
signed_block_header: SignedBeaconBlockHeader
kzg_commitment_inclusion_proof: Vector[Bytes32, KZG_COMMITMENT_INCLUSION_PROOF_DEPTH]
class DataColumnSidecar(Container):
index: ColumnIndex # Index of column in extended matrix
column: List[Cell, MAX_BLOB_COMMITMENTS_PER_BLOCK]
kzg_commitments: List[KZGCommitment, MAX_BLOB_COMMITMENTS_PER_BLOCK]
kzg_proofs: List[KZGProof, MAX_BLOB_COMMITMENTS_PER_BLOCK]
signed_block_header: SignedBeaconBlockHeader
kzg_commitments_inclusion_proof: Vector[Bytes32, KZG_COMMITMENTS_INCLUSION_PROOF_DEPTH]

데이터 분산

데이터 분산 단계에서는 DataColumnSidecar, 즉 샘플 열을 gossipsub 서브넷을 통해 전파합니다. 각 노드가 의무적으로 보관하고 있어야 할 열의 수는 사용될 서브넷의 수 (DATA_COLUMN_SIDECAR_SUBNET_COUNT), 확장된 데이터의 열의 수 (NUMBER_OF_COLUMNS), 노드가 보관해야하는 최소 서브넷의 수 (CUSTODY_REQUIREMENT)에 따라 결정됩니다.[1]

서브넷 당 전파되는 열의 갯수는 확장된 데이터의 총 열의 수/총 서브넷의 갯수 입니다. 아래의 그림과 같이 128개의 열이 32개의 서브넷을 통해 전파되는 경우, 각 서브넷은 128/32 = 4개의 열을 포함하고 있어 각 노드는 4x보관 서브넷 수의 열을 보관해야 합니다. 그리고 노드가 보관해야 하는 서브넷은 node-id, epoch, custody size를 통해 결정론적으로 선택됩니다. 만약 노드가 서브넷에서 열을 가져오지 못하면 노드는 req/resp 프로토콜을 사용하여 다른 피어에서 누락된 열을 요청할 수도 있습니다.

피어 샘플링

샘플링 단계에서 노드들은 req/resp 프로토콜을 통해 피어에게 샘플을 요청하고, 슬롯당 최소 샘플 수(SAMPLES_PER_SLOT) 이상을 샘플링 해야 합니다. 먼저 샘플링할 열을 선택하고, 해당 열을 요청할 피어를 결정하여DataColumnSidecarsByRoot메세지로 쿼리합니다. 성공적인 샘플링을 위해서는 피어를 찾고, 각 서브넷당 충분한 수의 신뢰할 수 있는 피어(TARGET_NUMBER_OF_PEERS)를 유지하는 것이 권장됩니다. 노드가 요청한 샘플을 받지 못할 경우, 다른 샘플의 50% 이상을 수신해 스스로 원본 데이터를 복구하고 복구된 샘플을 서브넷에 전파해야 합니다.

공격자가 샘플의 가용성을 속이는 경우도 발생할 수 있습니다. SAMPLES_PER_SLOT이 16으로 설정된 경우, 공격자가 노드를 표적하여 속이는 경우에는 2~3% 이상의 노드가 잘못된 확신을 하지 않는다고 보장할 수 있으며, 노드가 공격자의 표적이 아닐 때는 잘못된 판단을 할 확률은 0.5^(16)로 약 0.0015% 입니다. 이처럼 공격에 대한 보안성은 노드가 샘플링하는 샘플의 수가 증가할 수록 향상됩니다. [2]

가용성 확인

샘플링이 성공적으로 완료되면, 노드는 데이터의 가용성을 확신할 수 있으며, 포크 초이스 룰에도 데이터 가용성에 대한 확인(is_data_available) 결과가 적용되게 됩니다. 아직 포크 초이스 룰의 스펙은 확정되지 않은 상태입니다. 하지만 PeerDAS를 안정적으로 도입하기 위해, DAS가 해당 슬롯에서 완료되어야 하는 엄격한 타이밍 룰을 적용하기 보다는 컨센서스에 영향을 덜 미치는 완화된 방식이 우선적으로 도입될 예정입니다.

예를 들어 슬롯 N-1의 피어 샘플링 결과를 다음 슬롯 N의 블록 투표에 고려하는 방식이나, 샘플링 없이 자신의 데이터의 보관만 확인하여 블록에 투표하고 이후 샘플링은 체크포인트 정당화(justification)에만 적용하는 방식 등, 블록 투표를 방해하지 않으면서 가용성 확인을 위한 충분한 시간을 허용하기 위한 방식들이 검토되고 있습니다. [3]

마무리

1D PeerDAS는현재 EIP-4844의 최대 대역폭(768kb) 내에서 현재 설정된 변수(4개 열 보관, 16개 샘플링)로 이론상 블롭을 64개까지 확장시킬 수 있을것으로 기대되고 있습니다. [4] 이는 현재의 블롭 처리량의 약 10배에 달하는 수준입니다. 6개의 블롭 자리를 두고 경쟁을 하던 롤업들은 자리가 64개로 늘어나면서 블롭에 사용하던 가스비가 더욱 감소할 수 있을 것으로 보이며, 노드들 또한 현재보다 확연히 줄어든 양의 블롭 데이터를 저장할 수 있어 많은 이들의 관심을 받고 있습니다.

PeerDAS가 이더리움의 DA 처리량을 높이기는 하지만 Danksharding이 당초 목표로 했던 최대 32MB, 256개의 블롭에는 아직 부족합니다. DA 처리량을 증가시키기 위해서는 2D 샘플링의 도입이 필요하며, 샘플의 갯수가 증가할수록 이를 적시에 분산 및 샘플링하고 원본 데이터를 재구축 하는 것이 어려워 집니다. 따라서 이더리움에서는 2D PeerDAS, DiDAS, LossyDAS, FullDAS 등 대역폭을 최소화하며 샘플링을 효율적으로 하기 위한 다양한 방법들이 모색되고 있습니다. 아직 완전한 Danksharding을 위해서 어떠한 DAS 방법이 채택될 지는 미지수인 상태입니다.

지금까지 다음 업그레이드에 포함될 1D PeerDAS를 살펴보았습니다. Pectra 업그레이드는 2024년 4분기 말로 예정되어 있으며, PeerDAS는 devnet-1종료후 devnet-2을 준비 중인 상황입니다. 이를 통해 현재 확정되지 않은 포크 초이스 룰이나 다양한 매개 변수들을 테스트하고 확정할 예정입니다. 오늘 살펴본 내용들은 큰 틀에서 이해를 돕기 위해 작성 되었으며 변경이 있을 수 있어 앞으로의 변화를 지켜볼 필요가 있겠습니다. 감사합니다.

Written by
Youngbin Park, Research Engineer, DSRV Validator Team (Twitter @bin0_0bin)

--

--