V 갓의 최신 연구: 블록체인 확장성의 한계, 머스크의 도지코인 확장 방식 반박
이 기사의 출처:디파이의 길이 기사의 출처:
디파이의 길
디파이의 길
, 저자: Ethereum의 창시자인 Vitalik Buterin이 승인을 받아 전달했습니다.
블록체인은 얼마나 확장 가능합니까? Elon Musk(Tesla CEO)가 "블록 시간을 10배 줄이고, 블록 크기를 10배 증가시켜 처리 수수료를 100배 줄임으로써" 바라는 대로 극단적인 중앙 집중화를 일으키고 블록을 손상시키지 않고 실제로 할 수 있는 것이 기본입니다. 체인 에센스의 속성? 그렇지 않다면 블록체인 확장성은 어느 정도 달성할 수 있습니까? 합의 알고리즘을 변경하여 확장을 선택하면 어떻게 됩니까? 더 중요한 것은 ZK-SNARK 또는 샤딩과 같은 기능을 도입하도록 기술을 변경하면 어떻게 될까요? 이론적으로 샤드된 블록체인은 더 많은 샤드를 계속 추가할 수 있습니다.
샤딩된 블록체인에서도 블록체인의 확장성을 제한하는 중요하고 다소 미묘한 기술적 요소가 있음이 밝혀졌습니다. 대부분의 경우 해당하는 확장성 솔루션이 있지만 이러한 솔루션에도 한계가 있습니다. 이 게시물에서는 이러한 확장성 체계의 많은 문제를 살펴봅니다.
모든 문제는 단순히 매개 변수를 늘리면 해결할 수 있습니다. 그러나 비용은 얼마입니까?
1 일반 사용자도 블록체인 탈중앙화에 중요한 노드를 실행할 수 있습니다.
오전 2시 35분에 지구 반대편에 있는 친구로부터 마이닝 풀(또는 스테이킹 풀) 관리를 도와주는 긴급 전화를 받습니다. 귀하의 파트너는 약 14분 전부터 귀하의 풀과 다른 여러 풀이 체인에서 갑자기 분리되었으며 원래 체인이 여전히 네트워크 컴퓨팅 성능의 79%를 전달한다고 말했습니다. 노드에 따르면 이 다수 체인(원래 체인)에서 생성된 블록은 유효하지 않습니다. 이로 인해 잔액 오류가 발생했습니다. 키 블록이 알 수 없는 주소에 실수로 450만 개의 추가 코인을 할당한 것으로 보입니다.
한 시간 후, 당신은 당신만큼 혼란스러운 두 개의 다른 마이닝 풀과 일부 블록 탐색기 및 교환과 함께 텔레그램 그룹에서 통신을 시작합니다. 마지막으로 누군가 링크를 트윗하는 것을 볼 수 있습니다. 트윗은 "새로운 온체인 지속 가능한 프로토콜 개발 기금이 공식적으로 출범했습니다."라고 말했습니다.
아침까지 트위터, 커뮤니티 포럼은 검열되지 않은 논쟁으로 가득 차 있으며 토론은 어디에나 있습니다. 하지만 이때 이전에 새로 발행된 450만 개의 토큰 중 상당 부분이 체인의 다른 자산으로 전환되었으며 수십억 달러의 DeFi 트랜잭션이 수행되었습니다. 합의 노드의 79%와 모든 중요한 브라우저 및 가벼운 지갑이 이 새로운 체인을 따르고 있습니다. 이 새로운 개발자 기금이 일부 개발 자금이 될 수도 있고, 그 돈이 모두 주요 채굴 풀, 거래소 등에 의해 잠식될 수도 있습니다. 그러나 결과에 관계없이 펀드는 모든 의도와 목적에 대해 기정사실이며 일반 사용자는 반격할 힘이 없습니다.
좋은 공연이 다가오고 있습니다. MolochDAO 등에서 자금을 지원받을 수 있습니다.
블록체인에서 이런 일이 일어날 수 있습니까? 마이닝 풀, 블록 탐색기 및 커스터디 노드를 포함한 블록체인 커뮤니티의 엘리트는 아마도 잘 조정되어 있을 것입니다. 그들은 모두 동일한 Telegram 그룹과 WeChat 그룹에 있을 가능성이 높습니다. 그들이 진정으로 자신의 이익을 위해 프로토콜 규칙을 갑자기 변경하고 싶었다면 그렇게 할 것입니다. Ethereum 블록체인은 10시간 만에 합의 실패를 완전히 해결했습니다. 블록체인에 클라이언트 구현이 하나만 있고 코드 변경 사항을 수십 개의 노드에만 배포하면 클라이언트 코드 변경 조정 속도가 빨라질 수 있습니다. 이러한 조정된 사회적 공격을 무효화하는 유일하고 확실한 방법은 분산된 커뮤니티, 즉 사용자를 능동적으로 방어하는 것입니다.
분명히 합시다. 악의적인 프로토콜 변경에 대한 저항은 블록체인을 검증하는 사용자 문화에서 비롯됩니다. PoW 또는 PoS 대신 - Hasu
이것은 Hasu가 말한 것에서 볼 수 있습니다.
커뮤니티가 서명과 블록 헤더를 확인하는 37개의 노드 러너와 80,000개의 패시브 리스너로 구성된 경우 공격자가 승리합니다. 커뮤니티의 모든 사람이 노드를 실행하는 경우 공격자는 실패합니다. 공동 공격에 대한 "무리 면역"의 정확한 임계값이 무엇인지는 알 수 없지만 한 가지는 분명합니다. 더 많은 노드가 더 좋고 더 적은 노드가 더 나쁩니다. 그리고 확실히 수십 또는 수백 개 이상이 필요합니다.
첫 번째 레벨 제목
2 그렇다면 전체 노드가 수행해야 하는 작업의 양은 얼마나 됩니까?
노드를 실행할 수 있는 사용자 수를 최대화하기 위해 일반 소비자 등급 하드웨어에 집중할 것입니다. 쉽게 사용할 수 있는 특수 하드웨어(예: Amazon)를 요구하여 일부 네트워크 용량을 추가할 수 있지만 실제로는 이것이 확장성에 크게 추가되지는 않습니다.
많은 수의 트랜잭션을 처리하는 전체 노드 기능에는 세 가지 주요 제한 사항이 있습니다.
컴퓨팅 성능: 노드를 안전하게 실행하는 데 몇 퍼센트의 CPU 성능이 필요합니까?
대역폭: 현재 인터넷 연결의 현실을 고려할 때 블록에 몇 바이트를 포함할 수 있습니까?
스토리지: 사용자에게 얼마나 많은 GB 디스크를 저장하도록 요청할 수 있습니까? 또한 읽기 속도는 얼마나 빨라야 합니까? (HDD 기계식 하드 드라이브를 사용할 수 있습니까? 아니면 솔리드 스테이트 드라이브가 필요합니까?)
블록체인이 "단순한" 기술을 사용하여 얼마나 확장할 수 있는지에 대한 많은 오해는 이러한 각 수치에 대해 지나치게 낙관적인 데서 비롯됩니다. 이 세 가지 요소를 하나씩 소개할 수 있습니다.
능력 계산
오류: 100% CPU 전원을 블록 유효성 검사에 사용할 수 있습니다.
정답: 블록 유효성 검사에 CPU 전력의 약 5-10%를 사용할 수 있습니다.
낮은 비율에 대한 네 가지 주요 이유가 있습니다.
DoS 공격 가능성에 대비한 안전 마진이 필요합니다.
노드는 오프라인 상태가 된 후 체인을 동기화할 수 있어야 합니다. 1분 동안 네트워크 연결을 끊으면 몇 초 안에 다시 네트워크와 동기화할 수 있습니다.
노드를 실행하면 배터리가 너무 빨리 소모되거나 다른 모든 애플리케이션의 속도가 느려져서는 안 됩니다.
노드는 또한 주로 p2p 네트워크에서 들어오는 트랜잭션 및 요청에 대한 유효성 검사 및 응답과 관련된 다른 비블록 생성 작업을 수행해야 합니다.
최근까지 "왜 5-10%만?"에 대한 대부분의 설명은 다른 문제에 초점을 맞췄습니다: PoW 블록이 무작위로 나타나기 때문에 블록을 검증하는 데 시간이 오래 걸리면 동시에 여러 블록을 생성할 위험이 증가합니다. 이 문제에 대한 많은 솔루션이 있습니다(예: 비트코인 NG 또는 PoS 사용). 그러나 이러한 수정은 다른 네 가지를 수정하지 않으므로 많은 사람들이 처음에 생각했던 엄청난 확장 이점을 제공하지 않습니다.
병렬성이 전부는 아닙니다. 일반적으로 단일 스레드로 보이는 블록체인 클라이언트도 병렬화되었습니다. 한 스레드에서 서명을 확인하고 다른 스레드에서 실행을 수행할 수 있으며 백그라운드에서 트랜잭션 풀 논리를 처리하는 별도의 스레드가 있습니다. 또한 모든 스레드의 활용도가 100%에 가까울수록 노드를 실행하는 데 더 많은 에너지가 소비되고 DoS에 대한 안전 마진이 낮아집니다.
대역폭
실수: 2-3초마다 10MB 블록을 생성하는 경우 대부분의 사용자는 네트워크 속도가 10MB/초 이상이므로 이러한 블록을 확실히 처리할 수 있습니다.
정답: 12초마다 1-5MB 블록을 처리할 수 있습니다. 이미 어렵습니다.
오늘날 우리는 인터넷 연결이 제공할 수 있는 대역폭의 양에 대한 광고 통계를 자주 듣습니다. 100Mbps 또는 1Gbps라는 수치가 자주 들립니다. 그러나 광고된 대역폭과 실제 예상 대역폭 간에는 다음과 같은 몇 가지 이유로 큰 차이가 있습니다.
"Mbps"는 "초당 수백만 비트"를 의미합니다. 비트는 바이트의 1/8이므로 광고의 바이트 수를 얻으려면 광고된 비트 숫자를 8로 나누어야 합니다.
p2p 네트워크는 필연적으로 자체 오버헤드를 가져옵니다. 노드는 종종 동일한 블록을 여러 번 다운로드하고 다시 업로드하게 됩니다(블록에 포함되기 전에 mempool을 통해 브로드캐스트되는 트랜잭션은 말할 것도 없습니다).
저장
저장
텍스트
오류: 10TB
텍스트
정답: 512GB
짐작할 수 있듯이 여기서 주요 주장은 이론과 실제의 차이입니다.
블록체인 프로토콜 연구원 그룹이 모든 사람이 얼마나 많은 디스크 공간을 가지고 있는지에 대한 설문 조사를 실시했습니다. 샘플 크기가 작다는 것을 알고 있지만 여전히 무언가를 말해줍니다.
또한 저장소 크기는 새 노드가 온라인 상태가 되어 네트워크에 참여하기 시작하는 데 걸리는 시간을 결정합니다. 기존 노드가 저장해야 하는 모든 데이터는 새 노드가 다운로드해야 하는 데이터입니다. 초기 동기화 시간(및 대역폭)도 노드를 실행하는 사용자에게 주요 장애물입니다. 새로운 geth 노드를 동기화하는 데 이 블로그 게시물을 작성할 당시 약 15시간이 걸렸습니다.
Ethereum 사용량이 10배 증가하면 새로운 geth 노드를 동기화하는 데 최소 일주일이 걸리며 이로 인해 네트워크 연결이 제한될 가능성이 큽니다. 이것은 공격에 대한 성공적인 대응이 이전에 노드를 실행한 적이 없는 새로운 사용자를 포함할 때 공격 중에 특히 중요합니다.
첫 번째 레벨 제목
또한 이 세 가지 비용 사이에는 상호 작용이 있습니다. 데이터베이스는 내부적으로 트리 구조를 사용하여 데이터를 저장하고 검색하므로 데이터베이스에서 데이터를 가져오는 비용은 데이터베이스 크기에 따라 대수적으로 증가합니다. 실제로 최상위 계층(또는 여러 최상위 계층)이 RAM에 캐시될 수 있기 때문에 디스크 액세스 비용은 RAM에 캐시된 데이터 크기의 배수인 데이터베이스 크기에 비례합니다.
이 그래프를 문자 그대로 받아들이지 마십시오. 서로 다른 데이터베이스는 다르게 작동하며 메모리 내 부분은 일반적으로 단일 수준(하지만 크기가 큽니다)입니다(leveldb에서 사용되는 LSM 트리 참조). 그러나 기본 원칙은 동일합니다.
예를 들어 캐시가 4GB이고 데이터베이스의 각 계층이 이전 계층보다 4배 더 크다고 가정하면 이더리움의 현재 상태인 ~64GB는 ~2번의 액세스가 필요합니다. 그러나 상태 크기가 ~256GB로 4배 증가하면 ~3개의 액세스로 증가합니다. 따라서 가스 한도가 4배 증가하면 실제로 블록 검증 시간이 ~6배 증가할 수 있습니다. 그 효과는 더 강력할 수 있습니다. 일반적으로 드라이브가 거의 가득 찼을 때보다 드라이브가 가득 찼을 때 읽기 및 쓰기가 더 오래 걸립니다.
4 그렇다면 이것이 이더리움에 의미하는 바는 무엇입니까?
오늘날 이더리움 블록체인에서 노드를 실행하는 것은 기존 하드웨어에서는 여전히 가능하지만 많은 사용자에게 어려운 일이 되었습니다. 그래서 우리는 병목 현상에 접근하고 있습니다. 핵심 개발자의 가장 큰 관심사는 스토리지 크기입니다. 따라서 현재로서는 컴퓨팅 및 데이터 병목 현상을 해결하기 위한 영웅적인 노력이나 합의 알고리즘의 변경으로 인해 허용되는 가스 한도가 크게 증가하지는 않을 것입니다. 이더리움의 가장 두드러진 DoS 취약점을 해결하더라도 가스 한도는 20%만 증가할 뿐입니다.
스토리지 크기 문제에 대한 유일한 해결책은 상태 비저장 및 상태 만료입니다. 상태 비저장을 통해 노드 클래스는 영구 스토리지를 유지하지 않고 블록체인을 검증할 수 있습니다. 상태 만료는 최근에 액세스하지 않은 상태를 해제하므로 사용자가 이러한 상태를 계속 유지하고 있다는 증거를 수동으로 제공해야 합니다. 두 경로 모두 오랫동안 사용되어 왔으며 상태 비저장의 개념 증명 구현도 시작되었습니다. 이 두 가지 개선 사항을 결합하면 이러한 우려를 크게 완화하고 훨씬 더 높은 가스 제한을 위한 문을 열 수 있습니다. 그러나 무국적 및 상태 만료가 구현된 후에도 가스 제한은 다른 제한이 다시 지배하기 시작하기 전에 약 3배 정도만 안전하게 증가할 수 있습니다.
첫 번째 레벨 제목
5 샤딩 후에는 어떻게 됩니까?
결과적으로 샤딩된 블록체인은 샤딩되지 않은 블록체인이 할 수 없는 매우 높은 트랜잭션 처리량을 안전하게 가질 수 있습니다. 유효하지 않은 블록을 성공적으로 거부하는 완전히 검증된 유효한 교체를 생성하려면 실제로 많은 암호화 독창성이 필요하지만 수행할 수 있습니다. 이론이 확립되고 초안 사양을 기반으로 하는 개념 증명이 작업 중입니다.
이더리움은 2차 샤딩을 사용할 계획이며 노드가 개별 샤드를 처리할 수 있어야 하고 비콘 체인이 각 샤드에 대해 일부 관리 작업을 수행해야 한다는 사실로 인해 전반적인 확장성이 제한됩니다. 샤드가 너무 크면 노드는 더 이상 단일 샤드를 처리할 수 없으며, 샤드가 너무 많으면 노드는 더 이상 비콘 체인을 처리할 수 없습니다. 이 두 제약 조건의 곱은 일종의 상한선을 형성합니다.
세 번 또는 기하급수적으로 샤딩하여 더 멀리 갈 수도 있습니다. 데이터 가용성 샘플링은 이 디자인에서 확실히 더 복잡해지지만 수행할 수 있습니다. 그러나 이더리움은 보조 샤드보다 높은 샤드를 채택하지 않습니다. 그 이유는 트랜잭션 샤드에서 샤드를 샤딩하는 것은 다른 위험이 허용할 수 없을 정도로 높아지기 시작하지 않는 한 추가적인 확장성 향상을 달성하는 것이 사실상 불가능하기 때문입니다.
첫 번째 레벨 제목
6 그렇다면 이러한 위험은 무엇입니까?
최소 사용자 수
샤딩되지 않은 블록체인은 단 한 명의 사용자만 참여할 의향이 있는 경우에도 작동할 수 있습니다. 이것은 샤드 블록체인의 경우가 아닙니다. 단일 노드가 전체 체인을 처리할 수 없으므로 최소한 블록체인을 함께 처리할 수 있도록 충분한 노드가 필요합니다. 각 노드가 50 TPS를 처리할 수 있고 전체 체인이 10000 TPS를 처리할 수 있는 경우 체인이 생존하려면 최소 200개의 노드가 필요합니다. 어떤 지점에서 체인에 200개 미만의 노드가 있는 경우 노드 소프트웨어가 설정된 방식에 따라 노드가 더 이상 체인을 따라갈 수 없거나 노드가 유효하지 않은 블록 감지를 중지하거나 기타 나쁜 일이 발생할 수 있습니다.
실제로 중복성이 필요하기 때문에(데이터 가용성 샘플링 포함) 안전한 최소 노드 수는 단순히 "노드 TPS로 나눈 체인 TPS"보다 몇 배 더 많습니다. 위의 예에서는 1000개의 노드라고 가정해 보겠습니다.
샤딩된 블록체인의 용량이 10배 증가하면 최소 사용자 수도 10배 증가합니다. 이제 작은 용량으로 시작하여 사용자 수가 많을 때 용량을 늘리고 사용자 수가 줄어들면 용량을 줄이는 것이 어떻습니까?
실제로 여기에 몇 가지 문제가 있습니다.
많은 사용자가 갑자기 예기치 않게 종료하면 어떻게 됩니까?
포크를 시작하는 데 필요한 최소 사용자 수를 늘려 악의적인 탈취를 더 어렵게 만듭니다.
최소 사용자 수는 1,000명이며 이는 거의 확실합니다. 반면에 최소 사용자 수는 100만 명으로 설정되어 있어 절대 용납할 수 없습니다. 최소 사용자 수를 10,000으로 설정하는 것조차 약간 위험합니다. 따라서 수백 개 이상의 샤드가 있는 샤드 블록체인을 정당화하는 것은 어려워 보입니다.
첫 번째 레벨 제목
7 역사적 검색 가능성
사용자가 진정으로 중요하게 여기는 블록체인의 중요한 속성은 영속성입니다. 기업이 도산하거나 생태계 유지에 대한 관심을 잃으면 서버에 저장된 디지털 자산은 10년 이내에 소멸된다. 반면 이더리움의 NFT는 영구적입니다.
이 위험을 정량화하는 것은 쉽습니다. 블록체인의 데이터 용량(MB/초)에 ~30을 곱하여 연간 TB 단위로 저장되는 데이터 양을 구합니다. 현재 샤딩 계획의 데이터 용량은 약 1.3MB/초이므로 연간 약 40TB입니다. 이를 10배 늘리면 연간 400TB가 됩니다. 데이터에 액세스할 수 있을 뿐만 아니라 쉽게 액세스하려면 메타데이터(예: 집계된 트랜잭션 압축 해제)도 필요하므로 연간 4PB 또는 10년 동안 40PB입니다. Internet Archive는 50PB만 사용합니다. 따라서 이는 샤딩된 블록체인의 보안에 대한 합리적인 상한선입니다.
요약하다
따라서 이더리움 샤딩 설계는 실제로 대략적으로 두 차원에서 상당히 합리적인 최대 보안 값을 목표로 한 것처럼 보입니다. 상수는 약간 증가할 수 있지만 너무 많이 증가하지는 않습니다.
첫 번째 레벨 제목
요약하다
블록체인을 확장하려는 시도에는 두 가지 접근 방식이 있습니다. 기본적인 기술 개선과 단순히 매개변수를 늘리는 것입니다. 첫째, 매개변수를 늘리는 것이 매력적으로 들립니다. 냅킨에서 수학을 하고 있다면 가정용 노트북이 ZK-SNARK, 롤업 또는 샤딩이 필요 없이 초당 수천 건의 트랜잭션을 처리할 수 있다고 확신하기 쉽습니다. 불행하게도 이 접근 방식이 근본적으로 결함이 있는 데는 미묘한 이유가 많이 있습니다.
블록체인 노드를 실행하는 컴퓨터는 블록체인을 검증하는 데 CPU 전력의 100%를 사용할 수 없습니다. 예상치 못한 DoS 공격에 대비하여 큰 안전 마진이 필요하고 mempool 작업에서 트랜잭션을 처리하는 등의 작업을 수행하기 위해 여분의 용량이 필요합니다. 다른 애플리케이션에 동시에 머신을 사용할 수 없도록 머신에서 노드를 실행합니다. 대역폭도 중요합니다. 10MB/s 연결이 초당 10MB 블록을 가질 수 있다는 의미는 아닙니다! 12초마다 1-5MB 블록일 수 있습니다. 이것은 저장과 동일합니다. 노드를 실행하기 위한 하드웨어 요구 사항을 늘리고 노드 작업을 전용 액터로 제한하는 것은 해결책이 아닙니다. 분산형 블록체인의 경우 일반 사용자가 노드를 실행할 수 있고 노드를 실행하는 것이 정상적인 활동이라는 문화를 개발하는 것이 중요합니다.


