이더리움 덴쿤 업그레이드 : 프로토 댕크샤딩을 중심으로

Geunju Kim
EWHA-CHAIN
Published in
27 min readMay 13, 2024

TL;DR

  • 지난 3월 14일 완료된 덴쿤 업그레이드는 처리량을 증가시키고 거래 비용을 줄이는 것을 목표로 하는 업그레이드입니다. 보안 강화, 확장성 개선, 네트워크 효율성, 네트워크 안정성이라는 4가지 측면에서 9개의 이더리움 개선 제안(EIP)이 이루어졌습니다.
  • 댕크 샤딩이란 트랜잭션 실행을 롤업에 위임하고, 롤업 트랜잭션을 위한 추가 저장 공간인 블롭(BLOB)을 제공하여 트랜잭션 처리량을 높이는 이더리움 롤업 확장 방법입니다. 덴쿤 업그레이드의 핵심인 프로토-댕크샤딩은 이를 위한 초석입니다.
  • 프로토 댕크샤딩은 롤업 제공 업체의 보안 상태에 따라 리스크가 발생할 수 있으며, 기존 인프라와의 호환성 문제를 일으킬 수 있습니다. 또한, 중앙화 문제를 방지하고 완전한 댕크샤딩을 구현하기 위해서는 제안자-빌더 분리 방식(PBS)과 데이터 가용성 샘플링(DAS)이 도입되어야 합니다.
  • 다음 업그레이드는 페트라(Petra)로 예상되며, 데이터 구조를 머클 트리에서 버클 트리로 바꿈으로써 보다 작은 증인을 만들어 statelessness를 가능하게 할 것으로 기대됩니다.

서론

지금까지 이더리움은 높은 트랜잭션 수수료와 제한된 확장성으로 인해 비판 받았습니다. 이러한 문제들은 네트워크의 사용자와 개발자 모두에게 영향을 미쳤고, 이더리움은 이를 해결하기 위해 여러 가지 기술적 개선을 시도했습니다.

그 중 하나가 바로 지난 3월 14일 완료된 덴쿤 업그레이드입니다. 덴쿤 업그레이드는 “데네브”와 “칸쿤”을 합친 용어입니다. 이 업그레이드는 처리량을 증가시키고 거래 비용을 줄이는 것을 목표로 하며, 이더리움의 레이어 2 체인을 지원하는 중요한 이정표로 여겨집니다.

덴쿤 업그레이드 활성화 전, 많은 사람들이 덴쿤 업그레이드를 통한 이더리움의 확장성 향상을 기대하면서 이더리움은 1월 말보다 약 60%의 가격 상승률을 기록하였고 3500달러를 넘어섰습니다. 그만큼 이번 덴쿤 업그레이드는 많은 사람들의 큰 기대를 모았던 업그레이드 중 하나였습니다. 이 아티클에서는 덴쿤 업그레이드의 주요 기술인 댕크샤딩/프로토 댕크샤딩과 덴쿤 업그레이드로 어떤 효과가 나타났는지, 프로토 댕크샤딩을 중심으로 알아보고자 합니다. 그리고 마지막으로는 이더리움의 다음 목표인 버클트리까지 알아볼 것입니다.

프로토 댕크샤딩 설명에 앞서, ‘샤딩’이라는 개념을 알아야 합니다. 다음 본론에서는 기존 데이터베이스에서 가지고 있던 개념이었던 샤딩과 이더리움에서의 샤딩을 소개하고, 댕크샤딩과 프로토 댕크샤딩까지 이어 설명해보겠습니다.

본론

1.샤딩

샤딩(Sharding)은 기존 데이터베이스에서 가지고 있던 개념입니다. 데이터베이스에서의 ‘샤딩’은 데이터를 ‘샤드’라는 조각으로 분할하여 빠르게 작업을 처리하고 검색이 가능하도록 한 방법입니다.

[출처: https://hackernoon.com/blockchains-dont-scale-not-today-at-least-but-there-s-hope-2cb43946551a]

이더리움에서의 ‘샤딩’은 이더리움의 확장성 문제를 해결하기 위한 솔루션입니다. 이더리움 체인을 여러 개의 하위체인인 샤드로 분할하여 노드들을 샤드 당 한 그룹씩 배치합니다. 노드들은 소속된 샤드의 트랜잭션만 검증하고 저장하면 되기 때문에 네트워크 효율성이 증가합니다.

[출처: https://medium.com/ewha-chain/near-sharding-1-체인-확장성을-위한-샤딩-기술-59b0f33e7772]

1–1. 샤딩 내의 트랜잭션 처리 과정

[출처: https://www.icloud.com/keynote/05Q0CUa8WRPrvPx0tVgLTri_A#Ethereum_Sharding_Infographic]

이 과정에서는 Proposer, Collator, SMC(Sharding Manager Contract)가 중요한 역할을 합니다.

  1. Collation은 샤드 체인에서 메인 체인에서의 블록과 같은 역할을 합니다. Collation Header와 transaction list로 구성됩니다.
  • Collation Header는 Collation을 구성하는 정보를 담고 있습니다.
  • transaction list는 Collation에 담긴 트랜잭션 목록입니다.
  • 아직 검증되지 않은 Collation을 proposal이라고 합니다.

2. Proposer는 샤드에서 트랜잭션들을 모아 proposal을 만들고 이를 Collator에게 전달합니다.

3. Collator는 Proposer가 전달해준 proposal을 검증합니다.

4. SMC(Sharding Manager Contract)는 메인 체인과 샤드를 연결하는 다리 역할로, 크게 다음의 4가지를 수행합니다.

  • Collator가 되기 위해 내는 예치금을 받고 관리합니다
  • Collator들을 무작위로 샤드에 배치합니다
  • 블록을 생성하기 위해 Collator들은 투표를 해야하는데, 이 투표를 SMC 위에서 진행합니다
  • Collator에게 받은 Collation Header를 검증합니다

샤딩 내의 트랜잭션 처리 과정은 위 그림처럼 8단계로 이루어집니다.

  1. 우선 Proposer는 SMC를 통해 balance를 예치합니다.
  2. Collator도 SMC를 통해 deposit을 예치합니다.
  3. Collator들은 주기적으로 SMC status를 확인해서 자신이 Collator에 선정되었는지 확인합니다.
  4. Collator들은 SMC를 통해 무작위로 배치되어 Committee를 구성합니다. 이때 배치되고 실제 Collator의 역할을 수행하기까지 일정 시간이 준비 시간으로 주어집니다. 이 시간에 각 Collator들은 배치된 샤드의 예전 기록을 다운받게 됩니다.
  5. Proposer는 트랜잭션을 담은 proposal을 Collator에게 제출합니다.
  6. Collator들은 proposal을 받습니다.
  7. Collator들은 받은 proposal 내에 있는 트랜잭션들이 유효한지 검증하는 투표를 진행합니다. 이때 트랜잭션들이 유효하다는 것에 찬성이 2/3 이상 나오면 이 proposal은 유효한 것으로 간주됩니다.
  8. Collator들의 투표 이후 새롭게 생성된 Collation의 collation header를 SMC로 보냅니다. SMC가 이 collation header를 검증하고, 유효한 데이터라는 검증이 완료되면 메인 체인에 기록합니다.

1–2. 샤딩의 메커니즘

[출처: https://www.web3.university/article/ethereum-sharding-an-introduction-to-blockchain-sharding]

이러한 트랜잭션 처리 과정을 통해, 64개의 샤드가 트랜잭션을 병렬적으로 처리하고 헤더를 비콘 체인에 전송하는 구조로 메커니즘이 이루어져 있습니다.

1–3. 샤딩의 장단점

샤딩 기술의 장점은 노드별로 용량 부담을 낮추고, 트랜잭션을 나눠서 처리하기 때문에 네트워크 과부하의 가능성을 줄여줍니다. 결과적으로 확장성을 증가시킬 수 있습니다.

그러나 샤딩은 1% 공격에 취약합니다. 만약 전체 네트워크가 100%의 해시 파워를 가지고 있고, 이를 100개의 샤드로 나눴다면 샤드 각각은 1%의 해시 파워를 갖게 됩니다. 공격자가 전체 네트워크의 해시 파워를 1%만 제어할 수 있다면, 자신의 해시 파워를 단일 샤드에 집중시켜 샤드를 완전히 제어할 수 있게 됩니다. 이러한 공격이 1% 공격입니다. 또한 샤딩은 구현이 복잡하고 어려워서 보안 취약성의 위험 가능성도 높다는 단점이 있습니다.

2. 댕크샤딩

댕크샤딩 또한 이더리움의 낮은 확장성에 대한 솔루션으로 등장했습니다. 처음에는 샤딩이 이더리움의 확장성 문제에 대한 주요 솔루션으로 간주되었지만 구현이 매우 복잡하고 보안 문제에 직면했습니다. 이때 롤업이 더 효율적이고 덜 복잡한 솔루션으로 등장하면서 샤딩이 이더리움 로드맵에서 삭제되고 ‘댕크샤딩’으로 대체됐습니다. 즉, 이더리움의 샤딩은 트랜잭션 실행을 롤업에 위임하고 샤드는 오직 데이터 가용성 레이어로만 활용하는 방향으로 변화했습니다.

댕크샤딩이란 롤업 트랜잭션을 위한 추가 저장 공간인 블롭을 제공하여 트랜잭션 처리량을 높이는 이더리움 롤업 확장 방법입니다. 여기서 블롭(BLOB)은 binary large object의 약자로, 롤업 데이터를 위한 임시 저장 공간입니다. 덴쿤 업그레이드의 핵심인 프로토-댕크샤딩은 이 댕크샤딩 구현을 위한 초석입니다.

2–1. 댕크샤딩 vs 기존의 샤딩

[출처: https://medium.com/coinmonks/danksharding-a-revolutionary-update-of-the-ethereum-sharding-6b380e56a580]

기존의 샤딩은 64개의 샤드 체인으로 분할하여 각 샤드 체인에서 트랜잭션을 개별적으로 처리하는 구조입니다.

댕크샤딩은 하나의 노드가 샤드 블롭들을 모두 포함하는 하나의 거대한 블록을 구성합니다. 즉 샤드는 더 이상 트랜잭션 실행을 담당하지 않습니다. 또한 블록체인을 여러 부분으로 분할하는 것을 목표로 하는 기존의 샤딩과는 달리, 댕크샤딩은 데이터 가용성과 효율성을 향상시키는 데에 중점을 둡니다.

2–2. 완전한 댕크샤딩을 위하여 — PBS와 DAS

댕크샤딩을 완전히 구현하기 위해서는 PBS와 DAS가 도입되어야 합니다.

2–2–1. PBS (Proposer-Builder Separation)

댕크샤딩에서는 하나의 노드가 모든 샤드 데이터가 담긴 하나의 큰 블록 데이터를 만들어야 합니다. 그래서 낮은 스펙의 장비로는 블록에 대한 검증 작업이 어렵고 소수의 강력한 노드들이 독식하는 구조로 이어지면서 중앙화 문제가 발생할 수 있습니다. 이를 최소화하기 위해서는 PBS, Proposer-Builder Separation, 제안자-빌더 분리 방식의 도입이 필요합니다.

PBS는 블록 생성의 역할을 Proposer와 Builder로 분리합니다. Proposer와 Builder의 역할은 다음과 같습니다.

  • Builder는 트랜잭션의 순서를 결정하고 블록 생성을 담당합니다
  • Proposer는 Builder들이 제안한 블록 중 어떤 블록을 체인에 기록할지 결정합니다. 상대적으로 컴퓨팅 파워가 낮고 리소스가 부족한 노드들로 이루어져 있습니다.
[출처: https://coincu.com/113352-what-is-blockchain-danksharding/]

프로포저는 멤풀로부터 트랜잭션을 모은 리스트를 빌더에게 전달합니다. 이때 멤풀은 대기 중인 트랜잭션 풀을 의미합니다. 그 다음 각 빌더들은 프로포저로부터 받은 리스트 안의 트랜잭션을 각자 재정렬해서 블록을 생성합니다. 그리고 경매에 입찰합니다. 그럼 프로토저는 각 빌더들의 입찰 금액을 보고 빌더의 블록을 선택하여 전파합니다.

기존에는 한 명의 검증자가 트랜잭션 구성 및 블록 생성을 독점하는 구조였습니다. PBS를 도입하면 아무리 컴퓨팅 능력이 강력한 노드라도 프로포저와 경제적 이익을 공유하게 됩니다.

2–2–2. DAS (Data Availability Sampling)

완전한 댕크샤딩을 구현하기 위한 두 번째 기술인 DAS, 데이터 가용성 샘플링 입니다. 이더리움이 더욱 활성화되면 롤업이 처리하는 데이터의 크기가 증가하여 노드들이 보관해야 하는 데이터의 크기도 매우 증가하게 됩니다. 결과적으로 시간이 지날수록 급증하는 데이터 용량을 감당할 수 있는 노드만 남게되어 중앙화 문제가 발생할 수 있습니다. DAS는 데이터 가용성을 보장하면서 데이터 크기에 대한 노드들의 부담을 줄여줄 수 있습니다. 이러한 이유로 DAS가 도입되면 많은 노드들이 네트워크에 참여하도록 유도할 수 있습니다.

DAS는 검증인이 블롭 데이터를 빠르고 효율적으로 확인할 수 있는 방법입니다. 검증인들은 블롭의 데이터가 50% 이상 가용 가능한 지 검증합니다. 가용 가능한 데이터가 50% 이상이면 데이터 가용성이 유효하다고 판단합니다. 이러한 방식이 가능한 이유는 Erasure coding을 이용했기 때문입니다.

[출처: https://blog.naver.com/redhattt/221386458958?viewType=pc]

Erasure coding은 우선 전체 데이터를 n개로 나누고, 이를 인코딩하여 n의 절반인 k개의 parity 데이터를 추가로 생성합니다. 총 n+k개의 데이터가 만들어집니다. 이 데이터의 일부가 손실되더라도 남은 데이터를 다시 디코딩하여 원본 데이터를 복구할 수 있습니다.

이를 설명하는 간단한 예시를 하나 들어보겠습니다. 바로 Err-mail 예시입니다. Alice가 Err-mail로 Bob에게 자신의 전화번호인 ‘555629’를 보내려고 하는 상황입니다. Err-mail은 email 시스템과 같지만, 전체 메일의 절반 정도가 손실된다고 가정하겠습니다.

  1. 일단 Alice는 자신의 전화번호를 a=555, b=629 두 부분으로 나눕니다. 그리고 Bob에게 “A=555”, “B=629”라는 메시지를 보냅니다.

2. Alice는 자신의 전화번호(a, b)로 다음과 같은 선형 함수를 구성합니다. 즉 f(1)은 555이고, f(2)는 629인 선형 함수를 구성했습니다.

[출처 : https://en.wikipedia.org/wiki/Erasure_code]

3. Alice는 f(3), f(4), f(5) 를 추가로 계산하여 Bob에게 “C=703”, “D=777”, “E=851”이라는 메시지를 보냅니다.

4. Bob은 f(i)의 형식을 이미 알고 있고, Alice가 보낸 메시지의 절반인 “D=777”, “E=851”만 받습니다. 즉 A, B, C는 받지 못했습니다.

5. Bob은 자신이 받은 두 값으로 다시 a와 b를 계산하여 Alice의 전화번호를 알아낼 수 있습니다.

[출처: https://en.wikipedia.org/wiki/Erasure_code]

즉 데이터의 일부가 손실되어도 남은 데이터를 이용하여 전체 데이터를 다시 복구할 수 있기 때문에, 블롭에 데이터가 50% 이상 가용 가능한지만 확인하면 됩니다.

3. 프로토 댕크샤딩

프로토 댕크샤딩은 앞에서 설명한, 최종 목표인 댕크샤딩 구현을 위한 기반을 마련하는 단계입니다. 프로토 댕크샤딩에서는 블롭을 도입하고, 이 블롭을 이용한 blob-carring transaction이라는 새로운 트랜잭션을 도입했습니다.

3–1. 블롭

블롭이란 새로운 데이터 형태로, 롤업 데이터를 위한 저장 공간입니다. 블롭 한 개의 크기는 125kb이고, 프로토 댕크샤딩에서는 블록당 2MB의 블롭 데이터 저장공간을 제공합니다. 최종 댕크샤딩에서는 32MB를 목표로 하고 있습니다.

3–2. 블롭 트랜잭션

3–2–1. BlobTransactionNetworkWrapper

[출처: https://hackmd.io/@Yicheng-Chris/H1z_hygci]

블롭 트랜잭션의 데이터를 담은 BlobTransactionNetworkWrapper의 구조입니다. 이를 살펴보면 크게, SignedBlobTransaction, blob_kzg, blobs로 구성되어 있습니다.

  • SignedBlobTransaction에는 블롭 데이터 요약본인 blob_versioned_hashes를 새롭게 포함시켰습니다.
  • 노드들은 EVM 실행 레이어에서 접근 가능한 blob_versioned_hashes와, 컨센서스 레이어에 있는 blob_kzg 커밋값과 매칭하는지 검증합니다

3–2–2. 블롭 트랜잭션의 생명주기

[출처: https://blog.quillaudits.com/ethereum/eip-4844-explained/]

블롭 트랜잭션의 생명주기는 다음과 같습니다.

  1. 처음으로, 레이어 2 롤업에서 트랜잭션이 시작됩니다.
  2. 비용 절감을 위해 사용자 트랜잭션을 묶고, 그들을 이더리움 스마트 컨트랙트를 통해 최종적으로 커밋합니다.
  3. 시퀀서는 트랜잭션 데이터를 일반적인 트랜잭션 형식이 아닌 블롭 형식으로 형성하고, 수수료와 함께 해당 트랜잭션을 이더리움의 멤풀에 제출합니다.
  4. 블롭 트랜잭션과 관련된 수수료와 MEV에 따라 검증자에 의해 블록에 포함됩니다. 각 에포크마다 블록 제안자로 무작위로 선택된 검증자가 있고 이들은 블록을 빌드하거나 제3빌더로부터 블록을 받을 수 있습니다.
  5. 마지막 단계입니다. 블록이 이더리움에 제안되고 마무리되면, 일반적인 트랜잭션은 이더리움의 실행 레이어를 통해 실행됩니다. 그러나 블롭 트랜잭션은 합의 레이어에 임시로 저장되며 최대 3주동안 보관 후 삭제됩니다.

4. 업그레이드 효과

4–1. 개선된 효과 및 장점

가장 주된 업데이트 내용인 프로토-댕크샤딩(EIP-4844)을 포함한 덴쿤 업데이트는 레이어2의 확장성을 개선하고 네트워크의 효율성과 보안을 강화하는 것이 목표입니다. 덴쿤 업그레이드에서 진행되는 이더리움 개선 제안(EIP)는 9개가 있으며, 각각 기대하는 역할은 다음과 같습니다.

> 보안강화

  • EIP-4788: 비콘 체인 데이터를 스마트 컨트랙트에 저장하여 실행 레이어에 노출, 네트워크의 보안과 기능 개선을 목표로 합니다.
  • EIP-6780: 자체 파괴 코드를 업데이트하여 스마트 컨트랙트 해지를 제한하고 사용자 데이터 보호와 자금 보안을 강화합니다.

> 확장성 개선

  • EIP-4844: 프로토 댕크샤딩을 통해 롤업 사용을 위한 임시 데이터 블롭을 제공하고 저렴한 거래를 촉진합니다.
  • EIP-7514: 한 에포크 동안 활성화할 수 있는 유효성 검사기 수를 제한하여 확장성을 관리합니다.

> 네트워크 효율성

  • EIP-1153: 데이터 저장을 최적화하고 가스비를 경제적으로 만들기 위해 설계된 EVM 코드를 도입합니다.
  • 이더리움 가상 머신(EVM)에서 메모리를 더 간단하고 저렴하게 복사할 수 있는 MCOPY를 추가합니다.
  • EIP-7516: 실행 중인 블록의 블롭 기본 수수료 값을 반환하는 BLOBBASEFEE 연산 코드를 도입합니다.

> 네트워크 안정성

  • EIP-7044: 유효성 검사기 종료 메시지의 신뢰성에 대한 제한을 제거합니다.
  • EIP-7045: 비콘 체인 블록의 일부로 증명을 포함할 수 있는 시간이 증가했습니다.

4–2. 프로토-댕크샤딩의 효과

이 9개의 EIP 중 가장 주목받는 프로토-댕크샤딩은 높은 가스 수수료와 거래량이라는 두 가지 문제에 대해 효과적인 솔루션을 제공합니다. 프로토 댕크샤딩은 ‘댕크샤딩’의 프로토 타입으로, 향후 댕크 샤딩을 구현해내기 전에 임시로 도입된 초기 수정안 입니다.

댕크샤딩은 레이어2가 보내는 데이터를 ‘블롭’이라는 별도의 데이터 저장 공간을 만들어 임시로 저장하기 때문에 레이어2인 롤업의 데이터 저장 부담이 낮아집니다. 이 임시 저장 공간을 도입하면 사용자가 트랜잭션 블록에 첨부되는 데이터를 더 적은 비용으로 로드할 수 있고, 일정 기간이 지나면 데이터가 삭제되기 때문에 공간을 절약하는 동시에 트랜잭션 비용을 절감할 수 있습니다. 비탈릭 부테린 이더리움 창립자가 인용한 폴리마켓 데이터에 따르면, 업데이트 전 하나의 블롭이 처리하는 데이터의 가스비는 0.06ETH 이지만, 업데이트 후 한 블롭이 처리하는 양의 가스비는 0.001 ETH일 것으로 분석됩니다.

[출처: https://medium.a41.io/eip-4844-시리즈-2-proto-danksharding-a-deep-dive-7b734f0fdb92]

일반적으로, 이더리움에 대량의 데이터를 게시하는 것은 상당한 비용을 수반합니다. 이는 주로 이더리움 네트워크가 트랜잭션의 일부로 ‘콜 데이터’라 불리는 특정 필드에 데이터를 영구적으로 저장하기 때문입니다. 이더리움에서 데이터를 저장하는 표준 방식은 네트워크 자원을 사용하기 때문에 그만큼의 가스 수수료가 발생하는 구조입니다. 레이어2 프로젝트들은 롤업, 사이드 체인 등을 활용해 콜데이터에 트랜잭션을 기록합니다. 특히 롤업은 레이어2에서 수많은 트랜잭션을 처리하고 그 결과 값들을 배치 단위로 묶은 위 레이어1에 저장하는 기술로 각광받았으나, 이 방식 역시 이더리움에 직접 저장되기 때문에 네트워크 처리량에 제한이 있었습니다. 이러한 확장성 문제 속에서 이번 업그레이드 댕크 샤딩은 블록당 최대 4개의 블롭을 허용하여, 각 블롭은 최대 125kB의 추가 데이터를 포함할 수 있게 되면서, 블록의 크기를 증가시키는 대신에 롤업의 비용이 크게 절감될 수 있게 만들었습니다.

[출처: https://medium.a41.io/eip-4844-시리즈-2-proto-danksharding-a-deep-dive-7b734f0fdb92]

이런 경제적 측면 뿐만 아니라, 확장성 측면에서도 데이터 저장 용량이 크게 증가하면서 메인 체인이 과부화 되는 현상을 막아 더 다양한 트랜잭션들이 자유롭게 생성된다는 장점을 이끌어 낼 수 있습니다. 또한, 개발자 친화적 측면으로 접근하면, 롤업 제공사들이 제공하는 API를 통해 쉽게 데이터를 관리할 수 있다는 장점을 얻을 수 있습니다.

4–3. 리스크 및 한계

하지만 프로토 댕크샤딩의 블롭 트랜잭션도 데이터를 메인 체인에 직접 저장하는 방식이 아니기 때문에, 롤업 제공 업체의 보안 상태에 따라 리스크가 발생할 수 있습니다. 또한, 새로운 시스템으로의 전환은 기존 인프라와의 호환성 문제를 일으킬 수 있습니다. 업그레이드가 비교적 최근에 이루어져 구체적인 한계점이 나타나지 않았지만, 더 많은 사용자 경험이 공유된다면 한계점에 대한 더 명확한 이해를 얻을 수 있을 것입니다.

5. 다음 예상 업그레이드, 버클트리

사용자에게 더 많은 통제권을 제공하려는 이더리움의 비전은 정기적인 업그레이드를 거치며 수행되고 있습니다. 덴쿤 업그레이드의 다음 단계로 페트라(Petra,Prazh+Electra)가 거론되고 있으며, 해당 업그레이드에서 이더리움의 데이터 구조를 “Verkle Trees”로 변경할 것으로 예상됩니다. 이미 버클 트리 테스트넷이 가동 중인 상황이며, 클라이언트에 대한 미해결 업데이트만이 남아있습니다.

또, 지난 2월 19일, 이더리움의 창시자인 비탈린 부테린은 X(구: 트위터)에서 다음과 같은 말을 남겼습니다.

[출처 : https://x.com/VitalikButerin/status/1759365739671412841?s=20]

Verkle trees는 스테이킹 노드가 거의 0에 가까운 하드 디스크 공간 안에서 실행되고, 거의 즉각적인 동기화를 지원함으로써 더 좋은 단일 스테이킹 사용자 경험을 가능하게 한다. — Vitalik Buterin

Verkle trees는 이더리움에서 statelessness를 가능하게 하는 데이터구조입니다. 버클 트리에 대해 알아보기에 앞서, Statelessness 개념에 대한 이해가 필요합니다.

5–1. Statelessness

[출처 : https://www.btcc.com/ko-KR/academy/crypto-basics/ethereum-roadmap-to-2024]

현재 이더리움은 상태를 저장하기 위해 위 사진과 같은 Patrica Merkle Trie, 흔히 Merkle Tree로 알려진 데이터 구조를 사용하고 있습니다. 블록체인을 검증하려면 각 클라이언트가 헤드 블록에 대한 전체 상태 트리와, 여러 이력 블록에 대한 상태 데이터를 저장해야 합니다.

이더리움의 진정한 탈중앙화를 위해서, 높은 디스크 요구 사항을 줄여 노드에 대한 접근을 쉽게 만드는 게 중요한데, 현재는 상태 데이터를 저장하는데 필요한 저장공간의 요구사항이 큰 상황입니다.

이러한 배경에서 등장하게 된 게 바로 statelessness입니다.

Stateless client란, 새로운 블록 검증을 위해 전체 상태 데이터 베이스를 저장할 필요가 없는 클라이언트입니다. 즉, 대량의 데이터 저장없이 새로운 블록을 검증할 수 있습니다. 잠시 증인을 활용한 블록 검증 과정을 짚고 넘어가겠습니다.

블록 검증은 블록에 포함된 트랜잭션을 다시 실행한 뒤, 변경 사항을 이더리움의 상태 트리에 적용하고, 새로운 루트 해시를 계산하는 과정을 의미합니다. 이렇게 검증 과정에서 계상된 상태 루트 해시가 처음에 블록과 함께 제공된 상태 루트 해시와 동일하다면, 그 블록은 검증된 블록이 되는 것입니다.

Stateless client는 블록을 검증하기 위해 상태 복사본을 사용하는 대신, 블록과 함께 도착하는 상태 데이터에 대한 ‘증인(witness)’을 사용합니다. 증인은 블록에 트랜잭션을 실행하는 데 필요한 상태 데이터의 조각입니다. 검증자는 증인을 사용하여 블록을 검증할 수 있습니다.

블록이 네트워크에 안전하게 브로드캐스트되기 위해서는 검증자가 12초 슬롯 내에서 블록 검증을 처리해야 합니다. 이를 위해서는 증인의 크기가 매우 작아야 하는데, 증인이 너무 크면 일부 노드에서 다운로드하여 체인을 따라잡는데 오래 걸릴 수 있고, 이는 인터넷 연결이 빠른 노드만 블록을 검증하는데 참여할 수 있게 되어 중앙집중화 문제로도 이어집니다.

머클 트리를 사용하는 현재 데이터 구조는 해시화를 사용해 데이터를 효율적으로 압축할 수 있음에도, 트리의 크기가 커지게 되면 이 증인의 크기도 굉장히 커지게 되어 stateless에 적합하지 않습니다. 따라서, 머클 트리보다 증인의 크기가 작은 Verkle trees로 데이터 구조를 변경함으로써 stateless client를 만들 수 있습니다.

다음으로, 머클 트리와 버클 트리의 주요 차이점을 중심으로 버클 트리에 대해 간략하게 살펴보겠습니다.

5–2. Verkle trees

Verkle Trees란 Vector commitment와 Merkle Trees의 합성어로, 데이터를 트리 구조로 요약하는 방법입니다. 이름에서 추측할 수 있듯이, Verkle trees는 머클 트리에서 사용하던 해시를 Vector commitment로 바꾸는 것이 주요 변화 중 하나입니다. Vector commitment는 밴더나치 타원 곡선을 기반으로 연산함으로써 증인의 크기를 크게 줄일 수 있습니다.

증인의 크기는 트리의 크기에 영향을 받지만, 예를 들어, 증인이 1000개의 leaf를 커버해야한다면, 머클 트리는 약 3.5MB크기의 증인을, 버클 트리는 150KB크기의 증인을 생성합니다. 대략 증인의 크기를 23배나 줄인 것 입니다.

[출처 : https://ethereum.org/ko/roadmap/verkle-trees/]

또 다른 변화는 키의 크기입니다. 기존 키의 크기가 20byte였던 것에 비해, Verkle trees는 31byte의 stem과 1byte의 suffix가 합쳐진 32byte의 키를 가집니다.

버클 트리 자체는 확장 노드(extension node)와 내부 노드(inner node)라는 두 유형의 노드로 구성됩니다. 확장 노드는 stem은 같고, suffix가 다른 256개의 값을 나타내고, 내부 노드는 최대 256개의 값을 가질 수 있으며, 다른 내부 노드 또는 확장 노드가 될 수도 있는 노드입니다. 이또한 16개의 하위 노드를 가지는 머클 트리와의 차이점이라고 볼 수 있습니다.

버클 트리는 머클 트리보다 훨씬 평평한 구조를 가지고 있으며, 중간 노드가 적어 증인을 생성하는데 필요한 데이터가 적습니다. 즉, 버클 트리를 사용하면 따로 디스크에 상태를 저장할 필요가 없으며, 블록 자체에 블록을 검증하는데 필요한 모든 것이 포함되어있습니다. 이처럼 버클 트리는 작은 증인을 가능하게 하여 Stateless client로 가는 첫 단계를 열어주며, 다음 업그레이드로 기대 받고 있습니다.

결론

지금까지 이더리움의 확장성 문제와 이를 해결하기 위한 덴쿤 업그레이드의 중요성에 대해 살펴보았습니다. 덴쿤 업그레이드는 프로토 댕크샤딩을 통해 이더리움의 트랜잭션 처리량을 증가시키고 가스 비용을 줄이는 등의 효과를 가져왔습니다. 특히, 프로토 댕크샤딩은 데이터 저장 공간을 효율적으로 활용하여 네트워크 효율성을 향상시킴으로써 사용자들에게 경제적 이점을 제공했습니다. 이렇게 이더리움 커뮤니티와 개발자들은 지속적으로 업그레이드를 통해 사용자 경험을 개선하고 네트워크의 안전성을 강화하는 데 힘쓰고 있습니다. 따라서 이더리움은 이번 덴쿤 업그레이드에서 그치지 않고 더 높은 단계로 도약하기 위해 힘쓸 것 입니다.

그라고 현재, 이더리움의 발전을 이끌어갈 중요한 요소로 버클트리가 주목되고 있습니다. 버클트리는 stateless client를 위한 중요한 요소로, 증인의 크기를 크게 줄여 네트워크의 탈중앙화와 보안성을 높일 것으로 기대됩니다. 계속되는 이더리움의 기술적 발전은 블록체인 기술의 발전과 탈중앙화된 경제의 혜택을 더욱 널리 퍼뜨리는 데 기여할 것 입니다. 이러한 발전은 블록체인 기술의 성숙과 함께 더욱 빠르고 안전한 디지털 경제를 형성하리라 기대합니다.

참고자료

--

--