패러다임: 이더리움 상태 성장을 위한 과제와 솔루션
원저자: Storm Slivkoff, Georgios Konstantopoulos
원곡: 루피, 포사이트 뉴스
이더리움 상태 성장과 가스 한도와의 관계는 널리 오해되고 있습니다. 상태 성장이 이더리움의 주요 확장 병목 현상이라고 널리 알려져 있습니다. 그러나 국가 성장에 대한 논의는 용어의 부정확성과 상세한 정량적 증거의 부족으로 인해 방해를 받는 경우가 많습니다.
데이터 기반 접근 방식을 취하면 국가 성장 문제를 더 명확하게 만들 수 있습니다. 이 백서에서는 고해상도 데이터 세트를 활용하여 상태 성장의 크기와 형태를 이해합니다. 그 과정에서 우리는 놀라운 결론에 도달했습니다. 현대 소비자 하드웨어는 적어도 10년 동안 현재의 성장 상태를 유지할 수 있다는 것입니다. 또한, 소프트웨어와 하드웨어의 지속적인 개선으로 인해 이 활주로는 무기한 연장될 수 있습니다.
우리는 이더리움이 다음과 같은 명확한 로드맵을 갖고 있다고 믿습니다: 1) 확장 병목 현상으로 인한 상태 성장을 완전히 제거합니다. 2) 가스 한도를 글로벌 규모의 분산 금융 시스템을 지원하는 수준으로 늘립니다. 이 기사 시리즈의 목표는 이 확장을 위한 로드맵을 이해하고 개발하기 위한 과학적 접근 방식을 개발하는 것입니다.
이 기사는 주로 상태 성장을 소개하는 이더리움 확장에 관한 일련의 기사 중 첫 번째 부분이며, 2부는 역사적 성장에 대해, 3부는 상태 액세스에 대해, 4부는 가스 제한에 대해 설명합니다.
국가 성장이란 무엇입니까?
상태 증가라는 용어는 데이터 크기가 Ethereum 노드 하드웨어의 용량을 초과하는 Ethereum 확장 병목 현상을 요약하는 데 자주 사용됩니다. 그러나 국가 성장을 이렇게 단일한 방식으로 생각해서는 안 됩니다. 다양한 유형의 이더리움 데이터가 있으며, 각각은 노드의 기본 하드웨어 구성 요소와 고유한 관계를 가지고 있습니다. 따라서 각각의 다양한 확장 병목 현상을 설명하려면 정확한 용어를 사용하는 것이 중요합니다.
상태는 새로운 이더리움 블록을 구축하고 검증하는 데 필요한 데이터 세트입니다. 상태는 계약 바이트 코드, 계약 저장, 계정 잔액 및 계정 난수로 구성됩니다. 히스토리는 노드가 최초 블록에서 최신 블록까지 동기화하는 데 필요한 데이터 세트입니다. 역사는 블록과 거래로 구성됩니다. 상태와 기록은 겹치지 않는 데이터 세트입니다. 이러한 정의에 따르면 노드의 하드웨어에 큰 압력을 가하는 현상이 최소한 3가지 있습니다.
상태 성장: 새 계정, 새 계약 바이트 코드 및 새 계약 저장의 축적입니다.
역사적 성장: 새로운 블록과 새로운 거래의 축적.
상태 액세스: 블록을 구축하고 확인하는 데 사용되는 일련의 읽기 및 쓰기 작업입니다.
각 병목 현상은 노드의 하드웨어 제한과 고유한 관계를 갖습니다. 가장 관련된 네 가지 하드웨어 제한 사항은 다음과 같습니다.
네트워크 IO는 노드가 동료와 안정적인 합의에 도달하기 위해 유지해야 하는 업로드 및 다운로드 속도의 양입니다.
스토리지 크기는 블록을 구축, 검증 및 배포하기 위해 노드가 영구 스토리지에 보관해야 하는 데이터의 양입니다.
메모리 크기는 블록체인의 끝과 동기화를 유지하기 위해 노드가 메모리에 캐시해야 하는 데이터의 양입니다.
스토리지 IO는 블록체인의 끝과 동기화를 유지하기 위해 노드가 수행해야 하는 초당 읽기 및 쓰기 작업의 양입니다.
이러한 병목 현상과 하드웨어 제한 간의 관계는 그림 1에 나와 있습니다.

그림 1: 이더리움 확장 병목 현상
다이어그램 상단부터 시작하여 이더리움이 트랜잭션을 실행할 때마다 해당 트랜잭션에 사용되는 모든 리소스의 가격은 가스로 책정됩니다. 따라서 이더리움의 가스 한도는 모든 형태의 온체인 활동을 제한하는 1차원 수량입니다. 가스 한도의 하류에는 블록 크기와 블록당 작업이 있습니다. 블록당 바이트 수가 많을수록 기록이 더 빨리 증가합니다. 블록당 IO 작업이 많을수록 상태 액세스 속도가 높아지고 (일반적으로) 상태 증가율도 높아집니다.
따라서 확장 병목 현상은 다음과 같이 노드의 하드웨어 제약 조건과 관련됩니다.
대규모 상태 증가를 지원하려면 노드에 충분한 저장 공간과 메모리 공간이 있어야 합니다. 상태가 너무 커지면 스토리지에 맞지 않거나 자주 액세스되는 상태 부분이 메모리에 맞지 않아 성능이 저하됩니다.
엄청난 역사적 성장을 지원하려면 노드에는 대량의 블록 데이터를 공유할 수 있는 충분한 네트워크 대역폭과 해당 데이터를 저장할 수 있는 충분한 스토리지 용량이 있어야 합니다.
많은 수의 상태 액세스를 지원하려면 노드에는 핫 상태를 캐시하기 위한 대용량 메모리와 충분한 읽기 및 쓰기 작업을 지원하기 위한 대용량 스토리지 IO가 있어야 합니다.
특히 상태 성장의 경우 주요 과제는 소비자 하드웨어의 지속적인 개선보다 상태 크기가 더 빠르게 증가하지 않도록 하는 것입니다. 노드 메모리와 스토리지는 유한한 리소스이므로 상태 증가가 멈추거나 하드웨어가 정기적으로 업그레이드되지 않으면 결국 병목 현상에 도달하게 됩니다. 다행스럽게도 메모리와 스토리지 하드웨어는 수년에 걸쳐 계속해서 개선되었습니다. 그럼에도 불구하고 이러한 개선에 대한 정확한 예측은 불확실하며, 이러한 급속한 성장이 무한정 계속될 것으로 가정해서는 안 됩니다.
다가오는 EIP-4844에 도입된 데이터 블롭은 이러한 확장된 관계에 몇 가지 변화를 가져올 것입니다. EIP-4844 이후에는 디스크에 쌓이는 이력이 훨씬 줄어들 것으로 예상되며, 대량의 Blob 데이터 전송 시 네트워크 IO가 크게 증가할 수 있습니다.
이 문서에서는 메모리 크기와 상태 액세스 패턴보다는 주로 상태 크기와 상태 증가율에 중점을 둘 것입니다. 우리는 향후 작업에서 다른 주제를 조사할 것입니다.
이더리움 상태의 구성
상태 성장을 이해하는 다음 단계는 상태의 전체 크기와 각 상태의 기여 크기를 조사하는 것입니다. 현재 이더리움 상태 데이터의 양은 약 245.5GB입니다. 이 숫자는 reth 노드를 사용하여 측정되었지만 노드당 클라이언트 수는 다음과 같이 대략 비슷합니다.시트표시됩니다. 계정, 계약 바이트 코드 및 계약 저장은 각각 상태의 14.1%, 4.3% 및 81.7%를 차지합니다.
그림 2는 다양한 스마트 계약 프로토콜이 얼마나 많은 상태 크기를 차지하는지 보여줍니다. 아래 그림에서 각 계약 카테고리의 크기는 해당 스토리지 슬롯과 바이트코드가 차지하는 바이트 수를 나타냅니다.

그림 2: 이더리움 상태 분포
그림 2의 숫자는 노드 클라이언트가 디스크에 저장해야 하는 총 바이트 수를 나타냅니다. 여기에는 인덱스 및 기타 유형의 스토리지 오버헤드에서 사용되는 데이터가 포함됩니다. 계정당, 저장소 슬롯당 평균 저장소 크기는 각각 133.6바이트와 191.3바이트입니다.
그림 2의 가장 중요한 정보는 다음과 같습니다.
토큰은 국가에 가장 큰 기여를 합니다. 이더리움 상태에 가장 큰 기여를 하는 것은 ERC-20과 ERC-721 토큰으로 각각 상태의 27.2%와 21.6%를 차지합니다. 토큰이 너무 많은 상태를 차지하는 이유는 각 토큰에 대한 각 사용자의 잔액이 자체 32바이트 저장소 슬롯에 개별적으로 저장되어야 하기 때문입니다. 따라서 이더리움 상태 크기의 절반은 전체 이더리움 사용자 수와 각 사용자가 보유한 총 토큰 수에 비례합니다.
이더리움 상태의 최소 7.4%는 휴면 상태입니다. Ethereum 상태에서 가장 큰 계약 중 일부는 더 이상 활성화되지 않습니다. 이러한 프로토콜은 블록 공간과 상태 공간이 지금보다 훨씬 저렴했던 시기에 출시되었으며, 게임, 도박, 사기 카테고리의 대부분의 프로토콜뿐만 아니라 IDEX, Etherdelta를 포함하여 더 이상 활성화되지 않은 많은 DEX를 포함합니다. , 그리고 오아시스. 이들 프로토콜은 함께 이더리움 상태의 최소 7.4%를 구성합니다. ERC-20, ERC-721 및 기타 카테고리의 롱테일 프로젝트도 포함되어 있으므로 실제 휴면 수준은 더 높습니다.
L2 크로스체인 브리지는 이더리움 상태의 2% 미만을 차지합니다. 압축, ZK 증명, 향상된 인코딩과 같은 기술을 활용하여 L2 트랜잭션은 메인넷보다 상태를 더 효율적으로 활용합니다. L2는 메인넷 상태의 2%만을 차지하지만 L2는 메인넷보다 초당 총 트랜잭션이 5배 더 많습니다.
이더리움 상태는 얼마나 빠르게 성장하고 있나요?
상태 성장의 가장 중요한 측면은 시간에 따른 상태 성장률입니다. 이 비율은 국가 문제의 심각성과 변화 추세를 나타냅니다.
그림 3은 2015년 이더리움이 출시된 이후 상태 성장률을 보여줍니다. 이러한 성장률은 각 계약 카테고리 내의 계약 바이트코드와 계약 스토리지를 합산하여 계산됩니다.


그림 3: 시간 경과에 따른 이더리움 상태 성장
다음은 그림 3의 가장 중요한 정보 중 일부입니다.
현재 상태는 월간 최대 5.99GB에서 감소한 월별 약 2.62GB로 증가하고 있습니다. 이 숫자는 5년 이내에 전체 상태 크기가 396GB에서 606GB 사이가 될 것으로 예측합니다. 현재의 성장률을 연간 12.8%라고 설명할 수도 있지만, 국가가 지속적으로 성장하는 동안 절대 성장률은 감소해 왔기 때문에 단순한 지수 성장은 적절한 모델이 아닐 수 있습니다.
최근 주 성장의 감소는 주로 NFT 활동의 감소로 인한 것입니다. 다양한 유형의 네트워크 활동 간에 어느 정도 상관관계가 있을 것으로 예상할 수 있지만 개별 상태 기여자 간에는 놀라운 독립성이 있습니다. 예를 들어, 지난 몇 년 동안 전체 주 성장은 감소했지만 ERC-20 주 성장은 실제로 2020년 이후 매년 증가했습니다.
주 성장률은 2021년 이후 최저 수준에 도달했습니다. 이러한 하락은 상당히 놀라운 일이지만, 상태가 주로 새 토큰의 잔액에 비례한다는 점을 고려하면 의미가 있습니다. 상태 성장률이 계속 감소한다면 이더리움이 더 높은 가스 한도를 지원할 수 있는 능력이 있다고 생각할 수도 있습니다. 이것이 사실일 수도 있지만, 다음을 기억하는 것이 중요합니다: 1) 현재 가스 가격 모델에서는 새로운 성장률 급증을 막을 수 있는 것이 없으며 2) 상태만이 가스 한도 하류의 유일한 병목 현상이 아닙니다.
상태 성장에 허용되는 값은 무엇입니까?
이제 우리는 이더리움 상태의 1) 크기, 2) 구성, 3) 성장률을 알고 있습니다. 허용 가능한 상태 성장 값의 범위를 어떻게 결정합니까? 질문은 예측할 수 없는 시장의 힘과 이더리움이 어떤 균형을 이루어야 하는지에 대한 철학적 선택에 달려 있기 때문에 복잡합니다.
미래의 하드웨어가 개선되지 않는다고 가정하고 평균 소비자 하드웨어에서 현재 상태의 성장 수준이 얼마나 오래 지속될 수 있는지 가장 간단한 모델부터 시작해 보겠습니다. 그림 3에서 볼 수 있듯이 최근 몇 년 동안 연간 주 증가율은 31GB/년에서 72GB/년 사이였습니다. 현재 일반 소비자 하드웨어의 최대 저장 용량은 약 4TB이고 메모리 용량은 약 64GB입니다. 이를 통해 간단한 스토리지 및 메모리 요구 사항 예측 모델을 만들 수 있습니다.
스토리지: 노드는 현재 총 약 1TB의 상태 데이터를 저장해야 합니다. 실제로 이는 많은 노드가 최소 2TB 크기의 디스크를 사용하고 있음을 의미합니다. 단순화를 위해 미래의 역사적 성장을 무시하고 마치 EIP-4444 이후 세계에 있는 것처럼 행동합시다. 향후 실행 시간은 다음과 같이 (남은 저장 용량)/(상태 증가율)로 계산할 수 있습니다.시트표시됩니다. 따라서 노드 스토리지 하드웨어는 2TB의 공간을 소모하지 않고도 10년 이상 현재 상태의 증가율을 지원할 수 있습니다. 현재 성장 수준에서 4TB이면 거의 반세기 동안 운영을 지원하기에 충분합니다.
메모리: Ethereum-on-arm 사용자는 Ethereum 노드를 실행하는 데 사용할 수 있는 최소 메모리가 약 16GB라고 보고합니다. 메모리 요구 사항이 상태 크기에 비례하여 증가한다고 가정하면 연간 30GB~72GB의 상태 증가는 연간 2GB~4.7GB의 추가 메모리 요구 사항으로 변환됩니다. 따라서 현재 가스 요금으로 32GB RAM이면 3~8년 동안 충분합니다. 64GB RAM이면 10~23년 동안 사용할 수 있습니다.
이는 많은 가정을 포함하는 단순화된 모델입니다. 이 모델의 가능한 확장 조건에는 1) 역사적 성장, 2) 메모리 요구 사항의 비선형 확장, 3) 하드웨어 비용 감소, 4) 가스 제한 증가, 5) opcode 가스 가격 조정, 6) 향후 Ethereum 아키텍처 개선이 포함됩니다. 이러한 각 요소는 비선형적으로 상호 작용하고 시간이 지남에 따라 발전할 수 있습니다. 우리는 향후 작업에서 이러한 모델 확장을 탐구할 것입니다.
장기적인 지속 가능성이 좋은 것임을 강조하는 것이 중요합니다. 최신 하드웨어가 수년간의 작동을 지원할 수 있더라도 런타임 단축을 가볍게 여겨서는 안 됩니다. 상태 증가를 가속화하기 위한 모든 계획에는 하드웨어 또는 소프트웨어 환경의 예측할 수 없는 변화를 고려하기 위한 상당한 버퍼가 포함되어야 합니다.
국가 성장 문제를 해결하는 방법은 무엇입니까?
상태 성장 문제를 해결하기 위해 다양한 솔루션이 제안되었습니다. Ethereum 아키텍처의 세 가지 개선 사항은 롤업, Verkle 시도 및 상태 만료입니다. 종합하면, 이는 단기, 중기 및 장기 국가 성장 문제를 해결하기 위한 포괄적인 로드맵을 구성합니다.
단기: 롤업은 상태 증가 문제를 해결하지는 않지만 네트워크에 대한 부담을 줄여줍니다. 그림 2와 3에서 볼 수 있듯이 Rollup은 Mainnet보다 더 효율적으로 상태를 사용할 수 있습니다. 활동을 L2로 이동하려면 사용자 종료를 지원하기 위해 일정량의 상태를 메인넷에 저장해야 합니다. 그러나 L2 트랜잭션의 상태 공간은 메인넷 트랜잭션의 상태 공간보다 훨씬 낮습니다. 따라서 Rollup은 생태계의 전체 활동을 보다 지속 가능하게 증가시킬 수 있습니다. Blob을 통해 Rollup을 더욱 저렴하게 만들 수 있는 EIP-4844의 출시로 롤업 채택이 늘어날 것으로 예상됩니다.
중기: Verkle은 검증인 노드의 상태 증가 문제를 해결하려고 시도하지만 노드가 새로운 트랜잭션을 구축해야 하는 문제는 해결하지 않습니다. Verkle 시도는 Ethereum 상태에 대한 새로운 데이터 구조입니다. 이는 보다 효율적인 라이트 클라이언트와 상태 비저장 노드를 지원합니다. 이러한 노드는 기존 상태 값을 모르더라도 새 블록을 검증할 수 있습니다. 이는 검증자 노드의 상태 증가 문제를 제거합니다. 새로운 트랜잭션을 생성하려면 여전히 상태를 저장하고 액세스해야 하지만 트랜잭션 생성은 여러 시스템에 쉽게 분산될 수 있는 작업이기 때문에 오늘날보다 더 지속 가능합니다. 범위 측면에서 Verkle의 시도는 구현하는 데 수년이 걸릴 수 있는 주요 작업을 나타냅니다.
장기: 상태 만료는 모든 노드의 상태 증가 문제를 해결하지만 추가 인프라가 필요합니다. 상태 만료를 통해 노드는 그림 2와 같이 상태의 비활성 부분을 삭제할 수 있습니다. 대부분의 기존 제안은 증명을 통해 만료된 상태의 복원을 허용하므로 상태 최대 절전 모드라는 용어가 더 적절한 이름일 수 있습니다. 만료된 상태가 시간이 지남에 따라 손실될 수 있다는 우려에 대해서는 기록(블록 및 트랜잭션 데이터)이 사용 가능한 한 상태를 재구성할 수 있습니다. 따라서 EIP-4444의 이력 보존 문제를 해결하기 위해 어떤 솔루션이 개발되더라도 상태 보존 문제도 해결될 것입니다. 그러나 Verkle이 목표를 성공적으로 달성하려고 시도하면 상태 만료가 필요하지 않을 수도 있습니다.
상태 성장 문제에 대한 더 많은 솔루션이 있으며 다른 솔루션에는 상태 임대 및 샤딩이 포함되어 있지만 역사적으로 이러한 솔루션은 사용자 경험이나 건전성에 영향을 미쳤을 수 있습니다. 더 먼 미래에 최종 솔루션을 달성하려면 이러한 솔루션을 다른 솔루션과 결합해야 할 수도 있습니다.
요약하다
상태 성장은 이더리움 확장의 주요 과제이지만 우리는 이것이 해결 가능한 문제라고 믿습니다. 데이터에 대한 우리의 해석은 이더리움이 수년 동안 현재 상태의 성장 수준을 유지할 수 있고 아키텍처 업그레이드를 위한 편안한 쿠션을 제공할 수 있음을 시사합니다.
우리는 이더리움의 가스 한도를 설계하고 이더리움을 궁극적인 확장 솔루션으로 안내하는 데 경험적 접근 방식이 중요하다고 믿습니다. 이 글은 그 목표를 향한 한 걸음에 불과합니다. 상태를 초월하는 다른 유형의 데이터도 있으며, 각각은 이더리움 노드와 이더리움 가스 한도에 부담을 줍니다. 우리는 향후 작업에서 이러한 다른 병목 현상을 탐색할 수 있기를 바랍니다.


