이더리움 상하이 업그레이드, 그 이후

user-image
Declan Kim
Researcher/
디스프레드
2023.05.03

[Xangle Digest]

※해당 컨텐츠는 4월 21일 외부에서 기발간 된 컨텐츠입니다. 컨텐츠에 대한 추가적인 주의사항은 본문 하단에서 확인해주세요.

 

목차

상하이 업그레이드, 그 이후 일주일
상하이 업그레이드란?
무엇이 달라졌을까?
수많은 예상, 현황은 어떨까?
성공적이었던 상하이, 다음 타자는?

 

 

 

 

 

상하이 업그레이드, 그 이후 일주일

지난 4월 12일 상하이 업그레이드(Shanghai Upgrade)가 이루어진 이후로 일주일이 지났다. 상하이 업그레이드는 작년 9월 PoW(작업 증명)에서 PoS(지분 증명)로의 전환을 꿰한 ’더 머지(The Merge)’ 이후 큰 변화가 없던 이더리움 생태계에 약 반년만에 이루어진 대규모 업그레이드이다.

2020년 12월 이후 2년이 넘는 기간 동안 오직 스테이킹(Staking)만 가능했던 비콘 체인(Beacon Chain)으로부터 출금이 가능하게 되었기 때문에 상하이 업그레이드는 이더리움 로드맵에 있어서 매우 중요한 마일스톤(milestone) 임을 부정할 수 없을 것이다. 이더리움이 암호화폐 생태계에서 가지는 독보적인 위치와 영향력, 그리고 그 규모를 고려했을 때 이번 업그레이드에 사람들의 이목이 집중되었던 것은 당연한 일이었으며 이를 둘러싼 수많은 루머와 예상이 쏟아져 나왔었다. 이번 글에서는 상하이 업그레이드가 가져온 핵심 변화와 현황에 집중하여 ETH 출금이 가능해진지 일주일이 지난 현재, 시장은 어떻게 흘러가고 있는지 확인해 보겠다.

 

상하이 업그레이드란?

상하이, 카펠라(Capella), 그리고 샤펠라(Shapella)까지 이번 업그레이드를 일컫는 다양한 용어가 존재하지만 명확히 구분하자면, 각 용어는 하드포크(hardfork)가 발생한 체인을 기준으로 다음과 같이 나눌 수 있다.

  • 상하이 업그레이드(Shanghai Upgrade): 이더리움 실행 레이어(Execution layer, 메인넷)에서 발생한 하드포크
  • 카펠라 업그레이드(Capella Upgrade): 이더리움 합의 레이어(Consensus Layer, 비콘 체인*)에서 발생한 하드포크
  • 샤펠라 업그레이드(Shapella Upgrade): 상하이 업그레이드와 카펠라 업그레이드를 합쳐 통합적으로 사용되는 용어

*비콘 체인(Beacon Chain): 이더리움의 합의 레이어. 이더리움 2.0에서 밸리데이터들이 비콘 체인에 자신의 ETH를 스테이킹 할 수 있다.

 

이더리움 2.0 내 합의 레이어와 실행 레이어, 출처: luozhu.mirror.xyz

 

따라서 엄격히 구분하자면 상하이 업그레이드는 이더리움 실행 레이어 상에서 이루어진 업그레이드 내용만 포함하고 있다. 하지만 많은 커뮤니티 구성원과 더불어 시장 참여자들이 이번 업그레이드를 가리키는 용어로 상하이 업그레이드를 대표적으로 사용하고 있기 때문에, 레이어별로 용어를 구분 지을 필요 없이 상하이 업그레이드로 통합하여 사용하여도 큰 차이가 없이 받아들여지고 있다. 따라서 본 아티클에서도 지난 12일에 발생한 업그레이드를 일컫는 용어로 상하이 업그레이드를 사용하였다.

상하이 업그레이드는 실행 레이어와 합의 레이어에서 동시에 하드포크가 진행된 첫 번째 업그레이드이자, 블록 높이가 아닌 정확한 시간을 기준으로 업그레이드가 이루어진 첫 번째 케이스다. 가장 최근에 발생한 대규모 업그레이드인 ‘더 머지(The Merge)’의 경우 15537394번째 블록에서 업그레이드가 이루어질 것이라는 발표만 있었을 뿐, 정확한 시점을 알 수 없어 블록 생성을 실시간으로 모니터링하여 자체적으로 머지 시간까지 카운트다운을 해주는 wenmerge.com라는 사이트가 존재했었다(현재는 다른 용도로 사용). 하지만 상하이 업그레이드의 경우 업그레이드가 발생할 정확한 시각을 초단위까지 계산할 수 있었는데, 이는 슬롯(slot)과 에포크(epoch)로 작동되는 비콘 체인의 특성 덕분이다.

 

슬롯과 에포크, 출처: ethos.dev

 

슬롯이란 매 12초마다 비콘 체인 내에서 생성되는 블록을 의미하며, 32개의 슬롯이 모이면 하나의 에포크가 구성된다(약 6.4분에 하나). 상하이 업그레이드의 경우 업그레이드가 진행될 슬롯으로 6209536번째 슬롯을 지정함으로써 업그레이드가 이루어질 정확한 시점을 계산할 수 있었던 것이다.

 

무엇이 달라졌을까?

상하이 업그레이드는 다음 5개의 EIP(Ethereum Improvement Proposal)를 포함하고있다.

  • EIP-3651: Warm Coinbase
  • EIP-3855: PUSH0 instruction
  • EIP-3860: Limit and meter initcode
  • EIP-4895: Beacon chain push withdrawals and operations
  • EIP-6049: Deprecate SELF-DESTRUCT

 

이 중 상하이 업그레이드의 핵심이자 시장에 가장 직접적으로 영향을 끼칠 변화를 담고 있는 EIP는 비콘 체인에 스테이킹된 ETH 출금(withdrawal)과 관련된 내용을 다루고 있는 EIP-4895이다. EIP-4895 외에 4개의 EIP가 존재하기는 하지만 이들은 사용자에게 직접적으로 큰 영향을 끼치지 않기 때문에 핵심만 간단히 짚어본 후, 다시 EIP-4895에 집중하겠다.

 

  • EIP-3651: COINBASE address를 cold address에서 hot address로 옮김으로써 가스비 감소
  • EIP-3855: PUSH0 instruction을 추가함으로써 상수 0을 입력하기 위한 가스비 감소
  • EIP-3860: initcode의 최대치를 기존 24576에서 49152로 증가시킴으로써 컨트랙트가 풍부한 기능을 구현할 수 있도록 함
  • EIP-6049: SELFDESTRUCT 옵코드(opcode)의 사용을 중지

 

EIP-4895

상하이 업그레이드 이전에 비콘 체인에 대한 스테이킹은 출금이 불가능한 일방향 서비스였지만, 상하이 업그레이드로 인한 EIP-4895의 적용 이후 출금 기능이 활성화되면서 ETH 스테이커들은 예치 원금과 스테이킹 이자 보상을 이더리움 메인넷 상으로 가져올 수 있게 되었다. EIP-4895에서 주목할 세부사항으로 다음 두 가지를 꼽을 수 있다.

  1. Pull vs. Push
  2. Partial vs. Full

 

Pull vs. Push

첫 번째로 Pull vs. Push는 비콘 체인 내 ETH를 출금하는 방식으로 우리가 기술적으로 주목해야 하는 부분이다. 현재 대부분의 PoS 네트워크에서 스테이킹한 토큰을 출금할 때 가스비를 소모하여 실행 레이어에 출금 요청(withdrawal request)을 보내 자금을 출금하는 pull 방식을 사용하고 있다. 하지만 이더리움의 비콘 체인 내 출금은 push 방식을 사용하는데, push 방식이란 사용자가 직접 출금 요청을 실행 레이어에 보낼 필요 없이 합의 레이어 내의 withdrawal queue를 활용하여 출금을 수행하는 방식을 의미한다.

push 방식에서는 출금을 위한 대부분의 작업이 시스템레벨, 즉 유저의 개별적인 트랜잭션 요청을 거치지 않고 프로토콜에서 자체적으로 이루어지는 새로운 운영 방식 내에서 이루어진다. Push 방식은 pull 방식과 다르게 출금 트랜잭션을 처리하는 과정에서 가스비 소모하지 않으며 블록 공간을 차지하지 않는다는 장점을 가지고 있다.

 

Partial vs. Full

다음으로 partial과 full은 밸리데이터들이 요청할 수 있는 두 가지의 출금 종류이다. 밸리데이터들 각자가 비콘 체인에 보유한 ETH는 크게 밸리데이터에게 요구되는 최소 스테이킹 물량인 32 ETH와 이로 인해 발생한 스테이킹 보상으로 나눌 수 있다. Partial 출금은 32 ETH를 초과하는 물량, 즉 스테이킹 보상에 해당하는 물량만 출금을 요청하는 것이며, 이와 반대로 full 출금은 32 ETH까지 포함하여 밸리데이터가 스테이킹한 물량 전체를 출금하는 것을 의미한다. 따라서 partial 출금을 진행한 밸리데이터들과는 다르게 full 출금을 한 밸리데이터들은 밸리데이팅의 최소 조건인 32 ETH 마저도 출금하기 때문에 밸리데이터로서의 자격을 잃고 네트워크 운영에서 빠지게 된다.

여기서 우리는 한 가지 질문을 할 수 있다. 만약 수많은 초기 밸리데이터들이 수익 실현을 위해 업그레이드 직후 그들의 자금을 빼내는 상황이 발생한다면 갑작스러운 매도 압력 증가로 인해 이더리움의 가격이 하락하지 않을까 하는 의문을 던질 수 있다. 이더리움 네트워크 측 역시 위와 같은 사태를 방지하고자 합의 레이어가 안전한 울타리 내에서만 출금이 가능하도록 출금 방식을 설계하였다. 아래 모식도를 통해 partial 및 full 출금이 Push 방식을 통해 어떻게 메인넷으로 출금되는지 단계별로 알아보겠다.

 

Push 출금 진행 과정

 

1. 밸리데이터 체크 및 출금 요청 전송

1번 과정은 비콘 체인에서 ETH를 출금하길 원하는 밸리데이터들이 출금 요청을 전송하였는지 확인하는 단계이다. 밸리데이터가 출금(Partial&Full) 하기 위해서는 각자의 출금 크레덴셜(Withdrawal Credential)을 기존 0x00-에서 0x01-로 변경해야 한다.

withdrawal credential을 0x01-로 변경한 밸리데이터, 출처: beaconcha.in

 

2. 합의 레이어

Partial 출금과 full 출금은 합의 레이어에서 서로 다른 로직을 통해 처리된다. 먼저, partial 출금은 1번에서 크레덴셜을 0x01로 바꾸는 것만으로도 자동적이고 즉각적으로 출금 요청이 처리되어 withdrawal queue에 쌓이게 된다. 반면 모든 ETH를 빼내는 full 출금의 경우, 크레덴셜만 변경한다고 자동적으로 출금 요청이 처리되지 않는다. 밸리데이터 역할 자체를 그만두는 중대한 사항인 만큼 크레덴셜 변경과 더불어 full 출금을 요청한 밸리데이터가 직접 exit 요청을 전송해야만 full 출금 요청이 처리될 수 있다. 이처럼 크레덴셜 변경과 exit 요청을 모두 완료한 밸리데이터가 전송한 full 출금 요청은 withdrawal queue에 들어가기 전에 exit queue에 먼저 등록된다.

이후 exit queue에서는 epoch당 8개의 속도로 full 출금 요청을 withdrawal queue로 보낸다. 하나의 epoch에 한 번에 들어갈 수 있는 full 출금 요청의 수는 ‘churn limit’에 의해 결정되며, 해당 limit은 현재 네트워크 내에 존재하는 active 밸리데이터의 수에 비례한다. 비교적 작은 규모의 출금 요청인 partial 출금 요청은 중간 과정을 거치지 않고 withdrawal queue로 바로 전송되는 반면, 큰 규모의 full 출금 요청은 exit queue라는 중간 과정을 거치도록 만들어 그 속도를 제한하고 있다. 해당 구조를 통해 안정적인 속도로 출금이 이루어지도록 하려는 프로토콜 측의 노력을 엿볼 수 있다.

3. 엔진 API

이더리움 합의 레이어와 실행 레이어는 엔진(Engine) API를 통해 서로 상호작용한다. 앞선 과정을 거쳐 합의 레이어 내 withdrawal queue에 쌓여있는 partial과 full 출금 요청은 엔진 API를 통해 실행 레이어로 보내지게 되는데, 이때는 슬롯(매 12초마다 생성)당 16개의 출금 요청이 들어가는 일정한 속도로 출금 요청이 처리된다.

4. 실행 레이어

이미 출금과 관련한 대부분의 작업은 합의 레이어 단에서 처리되었기 때문에, 실행 레이어에서는 withdrawal queue로부터 넘어온 16개의 출금 요청을 받아 각 출금 주소에 ETH 잔액을 증가시키는 작업만 수행한다.

 

수많은 예상, 현황은 어떨까?

이더리움이 현재 크립토 생태계에서 가지고 있는 위상과 규모를 고려한다면, 스테이킹이 시작된 지 2년여 만에 가능해진 ETH 출금은 ETH 자체는 물론 크립토 생태계에 상당한 영향력을 가져다줄 것으로 예상된다. 지금부터 각 카테고리별로 상하이 업그레이드가 이루어지기 전의 예측과 업그레이드 이후 일주일이 지난 현황을 비교해 보며 시장의 움직임에 대해 평가해보려 한다.

ETH 출금 추이

ETH 출금 추이는 상하이 업그레이드의 핵심이며 해당 업그레이드가 시장에 끼칠 영향을 파악하기 위해 가장 먼저 확인해야 하는 수치이다. 앞서 밸리데이터들이 스테이킹한 ETH를 빼내는 방식에는 32 ETH를 제외한 보상분만 출금하는 partial과 전체 금액을 출금하는 full 방식이 있다고 설명하였다. 온체인데이터 분석 플랫폼 ‘글래스노드(Glassnode)’에 따르면 상하이 업그레이드 이전, 밸리데이터들의 평균 ETH 보유량은 34 ETH에 달했다. 따라서 만약 모든 밸리데이터들이(당시 약 520k) 스테이킹 보상에 해당하는 2 ETH에 대한 partial 출금을 요청한다고 하더라도 총 1백만여 개에 달하는 ETH를 모두 메인넷으로 출금하는 데에는 약 4~6일이 소요될 것이라는 의견이 존재하였다.

Full 출금의 경우에는 8 exits/epoch라는 속도를 고려했을 때 partial과 동일한 계산을 적용하면 첫 4~6일 동안 약 210k~320k ETH가 출금될 수 있다. 이제 ETH 출금의 실제 현황을 살펴보고 예상과 비슷하게 흘러가고 있는지 확인해 보겠다.

 

총 ETH 출금량(좌), Partial 출금 비율(중), Full 출금 비율(우), 출처: Dune

 

ETH 출금이 가능해지고 일주일이 지난 현재까지(4/19 기준) 약 1.08m ETH가 출금되었으며 이 중 partial이 차지하는 비율은 78%(약 846k ETH), full은 22%(239k ETH)를 차지하고 있다. 따라서 ETH의 출금은 예상과 거의 일치함을 알 수 있으며 오히려 더 낮은 속도로 출금되고 있다.

 

총 ETH 출금 추이, 출처: Nansen.ai

 

출금이 가능해진 4/12 이후 전체적인 출금 추이(위 그래프)를 살펴보면 4/15를 제외하고는 현재까지 지속적으로 출금량이 줄어드는 추세를 보이고 있다. 4/15만 눈에 띄게 높은 출금량을 기록하였는데, 그 원인 중 하나로 업그레이드가 이루어진 이후 이루어진 출금 요청(크레덴셜을 0x01로 변경)이 withdrawal queue에 쌓여있다가 한 번에 처리된 것이 지목되고 있다(관련 트윗).

여기에 더해 위 그래프에 아직 반영되지 않은 데이터들도 해당 추세가 안정적으로 유지될 것이라는 의견에 힘을 싣고 있다. 아직 출금 신청을 하지 않은 밸리데이터들, 즉 출금을 할 수 있는 잠재적 밸리데이터들의 비율이 전체의 14.4%에 불과하기에 이미 85%가 넘는 밸리데이터들이 출금 요청을 완료하였다는 사실을 알 수 있다. 또한 현재 출금 대기 중인 ETH는 전체의 5.27%에 불과하며 이중 약 95%(939k ETH)가 full 출금에 해당한다. 상기한 사실에 더해 현재 이더리움 밸리데이터들의 평균 ETH 보유량이 32.46 ETH임을 고려한다면, 현재 대기 중인 full 출금이 약 3주 정도의 기간에 걸쳐 모두 처리가 완료된 이후에는 비콘 체인 내에는 대규모의 partial 혹은 full 출금이 발생할 동력이 거의 남아있지 않게 될 것이다. 이미 일주일 만에 전체 출금 요청의 52%가 넘는 요청을 처리했으며 눈에 띄는 대규모 출금 요청 변수도 관찰되지 않기 때문에 현재와 같은 출금 추이의 완만한 감소 형국이 견고해질 것으로 예상한다.