누구나 이해할 수 있는 "이더리움 2.0 단편화 디자인"
편집자 주: 이 기사의 출처는탄소 사슬 값(ID: cc-value)편집자 주: 이 기사의 출처는
탄소 사슬 값(ID: cc-value)
탄소 사슬 값(ID: cc-value)
우리가 7-11시에 아침을 살 때 계산원이 한 명만 있으면 계산대까지 긴 줄을 기다려야 하고, 계산원이 두 명이면 즉시 두 배가 되고, 계산원이 네 명이면 아마 없을 것이다. 대기열이 필요합니다. 이것이 한 사람의 작업을 여러 사람에게 나누어 효율성을 높이는 샤딩의 기본 논리입니다.
이더리움의 분산 원장 관점에서 볼 때: 샤딩 전에는 메인 체인의 원장만 있어 초당 12~45건의 트랜잭션을 처리할 수 있습니다.트랜잭션 양이 이 데이터보다 크면 대기해야 합니다. 샤딩은 하나의 원장을 64개의 원장으로 바꾸어 동시에 거래를 처리하게 하는 것으로, 이는 7-11시에 64개의 금전 등록기를 열어 현금을 모으는 것과 같습니다.
샤딩의 논리는 간단하지만 구현하기 어려운 이유는 무엇입니까? 하나의 원장을 64개의 원장으로 나누면 많은 새로운 문제에 직면하게 되므로 샤딩 기술이 해야 할 일은 이를 해결하는 것입니다. 이 기사는 이더리움 2.0의 샤딩이 무엇인지 알아보기 위해 이러한 질문에서 시작합니다.
보조 제목
조각화 방법
1. 트랜잭션을 샤드에 할당
샤드는 트랜잭션과 트랜잭션을 블록으로 패키징하는 유효성 검사기를 포함합니다.샤드를 완성하는 첫 번째 단계는 트랜잭션과 유효성 검사기를 샤드에 할당하는 방법을 결정하는 것입니다. 먼저 할당 트랜잭션을 살펴보겠습니다.
이해하기 위해 세 마을의 이야기를 사용합시다: 어촌 마을, 사냥꾼 마을, 농부 마을이 있습니다. 예전에는 3마을의 장부를 하나의 가계부로 보관하는 것이 조금 느렸는데 지금은 3개의 장부로 변경되어 어느 장부를 어떤 장부를 보관하는 데 사용하는 걸까요?
한 가지 방법은 거기에 원장 3개를 넣고 트랜잭션이 온 후 앞에 Queue가 없으면 어떤 원장에 기록을 하게 되지만 이렇게 하면 각 원장마다 소유자 계정 정보가 있어야 하는 문제가 발생하고 그렇지 않으면 줄을 서기 위해 당신에게 올 것이고 당신은 내 계정이 없습니다.
이 때문에 이 샤딩 방식의 주요 문제점 중 하나는 단일 원장에 저장되는 데이터의 양을 줄일 수 없다는 점이며, 이 저장 요구 사항은 부기에 참여하려는 노드에게 높은 문턱입니다. 이중 지출 문제를 해결하십시오. 한 사람이 동시에 다른 샤드에서 동일한 돈을 사용할 수 있기 때문입니다.
또 다른 방법은 어촌마을 장부 1장, 오리온마을 장부 1장, 농촌마을 장부 1장인데, 장부에는 자기 마을의 계좌 정보만 있고, 자기 마을 내 거래만 기록하는 방식이다. 이러한 방식으로 3개의 원장을 동시에 보관할 수 있으며 부기 효율성이 높고 스토리지 요구 사항이 적습니다. 이것이 바로 이더리움이 채택한 샤딩 방법입니다: 상태 샤딩, 각 샤드는 자체 샤드에 속한 계정 상태만 저장합니다. 구현 측면에서 이더리움의 사용자는 자연 마을에 의한 샤딩이 아닌 가입할 샤드를 선택합니다.
상태 샤딩의 가장 큰 문제는 어촌 사람들이 오리온 마을 사람들과 거래를 원하면 어떻게 될까요? 어촌 장부에는 오리온 마을 사람들의 기록이 없고, 오리온 마을 장부에는 어부들의 기록이 없다. 사실 이것은 샤딩 기술인 크로스 샤드 통신이 직면한 가장 큰 테스트입니다. 이 문제가 완전히 해결되면 Ethereum 2.0을 사용할 수 있습니다. 이 문서에서는 2부에서 이 문제에 대한 몇 가지 솔루션에 대해 설명합니다.
2. 검증자를 샤드에 할당
서로 다른 샤드에 트랜잭션을 정렬한 후 다음으로 해결해야 할 문제는 장부 기록원을 샤드에 할당하는 방법, 즉 검증자를 할당하는 것입니다.
이더리움에는 64개의 샤드가 있고 각 샤드에는 128개의 검증자가 있습니다. ? Ethereum의 솔루션은 모든 유효성 검사기에서 샤드에 대한 유효성 검사기를 무작위로 선택하고 유효성 검사기를 6.4분(한 에포크 길이)마다 변경하는 것입니다. 이런 식으로 공격자는 샤드에 있는 사람들의 2/3를 제어할 확률이 1조분의 1 미만입니다(추론은 참조 1 참조).
비콘 체인의 주요 작업 중 하나는 샤드 체인에 검증자를 할당하는 것이며, 이 작업에서 가장 중요한 것은 임의성 구현입니다. 첫 번째는 무작위성의 중요성이며, 검증자를 무작위로 할당할 수 없으면 원장의 보안을 보장할 수 없으며, 두 번째는 무작위성의 어려움 블록체인에서 무작위성을 달성하기가 극히 어렵습니다. 실제로 엔지니어링 구현이라고 할 수 있는 입증된 무작위 알고리즘은 없습니다.
Ethereum의 솔루션은 RANDAO+VDF를 사용하여 난수를 제공하여 난수를 달성하는 것입니다. RANDAO를 RAN(랜덤)과 DAO로 분해하면 쉽게 이해할 수 있는데, 그룹의 각 사람이 독립적으로 난수를 제안한 다음 모든 사람의 난수를 결합하여 마지막으로 사용한 난수를 생성하는 것을 의미합니다. 다른 사람이 제공한 숫자는 누구도 알기 어렵기 때문에 최종 합산 숫자를 예측하는 것도 어렵습니다.
그러나 RANDAO 모델에는 결함이 있습니다. 즉, 마지막 숫자를 제공한 사람이 속일 수 있는 기회가 있습니다. 그는 이전의 모든 사람이 제공한 난수의 합계를 알고 있으며 자신이 제공한 숫자를 조정할 수 있습니다. 최종 결과를 자신에게 유익하게 만들기 위해.
이 문제를 해결하기 위해 이더리움은 VDF(Verifiable Delay Function)를 도입했는데, 그 기능은 매우 간단하며, 마지막으로 난수를 제공한 사람이 자신이 난수를 제공하기 전에 모든 이전 사람들의 난수 합계를 계산하는 것을 방지하고, 따라서 난수를 조작할 방법이 없습니다. (RANDAO+VDF에 대한 자세한 소개는 참고문헌 2 참조)
3. 샤드는 릴레이어에 의해 저장됩니다.
회전 원장의 검증자가 새로운 문제를 가져올 것이라는 사실을 눈치채셨는지 모르겠습니다. 그가 모든 계정 정보를 가지고 있지 않다면 계정을 유지하는 방법은 무엇입니까? 그가 모든 계정 정보를 가지고 있다면 그는 상태 샤딩 없이 다시 전체 원장을 보유하고 있는 것입니다.
이 문제를 해결하기 위해 이더리움은 중요한 새 디자인인 상태 비저장 클라이언트를 제안했습니다. 단순화된 이해는 어촌의 장부를 어촌에 두고 오리온 마을의 장부를 오리온 마을에 두는 것으로 검증자는 장부를 보유하지 않고 서로 다른 마을 사이를 돌아다니는 역할만 담당한다. 계정을 유지하십시오.
그렇다면 각 마을의 장부는 누가 관리할까요? 이더리움은 서로 다른 샤드의 계정 상태를 저장하고 특정 샤드만 서비스할 수 있는 릴레이어(상태 제공자)의 역할을 도입했습니다. 릴레이어의 작업은 이해하기 쉽지만 서비스 비용을 지불하는 방법, 정직성을 보장하는 방법... 이러한 관련 메커니즘의 설계는 해결해야 할 새로운 문제이며 커뮤니티가 관리하는 거버넌스 문제이기도 합니다. 회원들은 토론에 참여해야 합니다.
그러나 트랜잭션이 시작된 후에 트랜잭션이 증명될 수 있도록 각 사용자에게 모든 이전 계정을 저장하도록 요구할 수는 없습니다. 이때 샤드의 모든 계정 상태를 저장하는 "릴레이"가 필요합니다. 사용자가 요구를 제기하면 사용자가 거래의 증인 데이터를 검증자에게 제공하는 데 도움이 될 수 있습니다.
Vitalik Buterin은 3월 11일에 상태 루트를 다항식 커밋으로 대체할 것을 제안하는 기사를 게시했습니다. 이 기술은 여기서 사용됩니다. 영지식 증명 방법을 사용하여 거래에 대한 증거를 제공하며, 이는 다음의 계산 결과를 제공하는 것으로 이해할 수 있습니다. 검증을 위해 모든 관련 데이터를 검증자에게 직접 제공하는 대신 이 방법은 증인 데이터의 크기를 크게 줄이고 다양한 오버헤드를 효과적으로 줄일 수 있습니다. (Vitalik의 새로운 방법에 대한 자세한 소개는 참고문헌 3을, 무상태 클라이언트에 대한 자세한 소개는 참고문헌 4를 참조하십시오.)
이쯤 되면 원장을 여러 원장으로 나누는 작업, 즉 샤드로 나누는 작업이 완료된다.
보조 제목
샤드 간 트랜잭션
어촌 사람들은 어촌 사람들과만 거래하고, 오리온 마을 사람들은 오리온 마을 사람들과만 거래하면 각 마을마다 계좌를 유지할 수 있습니다. 이것은 새로운 기술이 필요하지 않습니다. . 그런데 어촌 사람들이 오리온 마을 사람들과 장사를 하려고 한다면 어떻게 서로 다른 원장들이 서로 통신할 수 있을까? 이것은 상태 샤딩이 직면한 가장 까다로운 문제입니다.
이 문제를 해결하는 방법에는 두 가지가 있는데, 하나는 동기식(강하게 결합)이고 다른 하나는 비동기식(느슨하게 결합)입니다.
어촌 마을에 A라는 사람이 있고 오리온 마을에 B라는 사람이 있다고 가정하면 A가 B에게 100위안을 주고자 합니다. 회계사는 원장의 A에서 100을 빼고 오리온마을의 회계사는 원장의 B에 100을 더하여 거래가 완료된 후 두 마을에서 동시에 새로운 블록을 생성한다.
비동기식이란: A가 이체를 개시하면 어촌계좌는 A를 100감소시켜 새로운 블록을 생성하고, 오리온마을의 장부담당자는 나중에 어떤 식으로든 이 메시지를 받아 A의 돈이 실제로 입금되었음을 확인한 후 줄이면 자신의 장부에서 B에 100을 더하면 거래가 완료되지만 두 마을은 비동기적으로 새 블록을 생성합니다.
동기화 방식은 친근해 보이고 트랜잭션 실행 프로세스의 모양과 느낌은 비샤딩과 동일하지만 "지속적인 상태 변경"을 처리하기 어렵다는 큰 문제를 숨기고 있습니다. 무슨 뜻이에요?
A가 B에게 100위안만 이체하면 거래내역을 들은 후 어촌과 오리온마을은 누구나 이렇게 계좌를 유지하고 있음을 쉽게 확인할 수 있다. B에 100을 더합니다. 부기를 완료하십시오. 그러나 A가 B에게 100을 이체한 후 B에게 50을 이체하면 연속적인 상태변화가 발생하지만 A는 총 120에 불과하다.
각 검증인이 혼자서 상대방의 검증인과 통신을 하게 되면 통신 오버헤드가 급격히 증가하게 되어 일정한 결과를 얻기가 극히 어려울 것입니다. 촌장은 상대방에게 확실한 결과를 알려주고 비용이 증가할 뿐만 아니라 이더리움의 합의 메커니즘 자체가 확실한 결과(최종성)를 달성할 수 없기 때문에 달성하기 어렵습니다.
비동기식 방식은 "대기"하는 방식이기 때문에 지속적인 상태 변화에 문제가 없을 것입니다. 상태가 확인되면 다음 단계로 진행하여 100 또는 50을 뺀 후 B에 100 또는 50을 더하기로 결정합니다.
비동기 방식의 문제점은 원자성 오류입니다. 트랜잭션은 실행되든 실행되지 않든 원자적이어야 하지만 비동기 방식에서는 트랜잭션의 일부가 확인되고 다른 일부는 폐기될 수 있습니다.
예를 들어 어촌이 A에서 100을 뺀 블록은 어촌의 메인체인에서 최종 확정되었지만, 오리온빌리지가 B에 100을 더한 블록은 오리온빌리지의 사이드체인에서 결국 버려졌다. Atomic failure는 문제이지만 설계로 해결할 수 있습니다.이 부분에 대한 자세한 소개는 기사 끝 부분의 참조 5를 참조하십시오.
Ethereum은 몇 가지 비동기 아키텍처 모델에 대해 논의했습니다.최신 모델은 2019년 10월 DevCon 5 컨퍼런스에서 Vitalik이 제안했습니다.기본 아이디어는 비콘 체인을 사용하여 정보를 전송하는 것입니다. 연결 방법은 아래 그림과 같으며, 이렇게 어떤 프래그먼트도 자신의 새로운 트랜잭션을 패키징할 때 비콘 체인을 통해 다른 모든 프래그먼트의 정보를 알 수 있습니다. 슬롯은 서로 다른 샤드 간에 비동기식입니다.
이 방법은 교차 샤드 트랜잭션의 대기 시간을 줄이지 만 모든 샤드에 대한 증명 데이터를 저장해야 하는 비콘 체인에 대한 요구 사항을 증가시킵니다. , 6.4분, 32블록 크로스링크 1회), 이는 필연적으로 다양한 관련 오버헤드를 증가시킬 것이고, 이로 인해 이더리움의 프래그먼트 수는 다른 설계 방향에서 1024개에서 64개로 변경되어 총 링크 수를 줄입니다. (아키텍처에 대한 자세한 소개는 참조 6 참조)
현재의 일부 샤딩 설계 방식으로 볼 때 동기식 모델은 샤드와 샤드 자체 간에 통신하는 경향이 있는 반면 비동기식 모델은 제3자를 통해 샤드와 샤드 간에 통신하는 경향이 있습니다. 여러 오버헤드의 균형 문제. 크로스 샤드 트랜잭션의 설계 및 구현은 아직 진행 중이며 결국 이더리움 2.0이 어떤 아키텍처를 채택할지 불확실합니다.
보조 제목
샤드 간 스마트 계약
샤딩과 교차 샤드 거래를 도입한 후, 이더리움 2.0 개발로 가는 길의 궁극적인 빅보스는 교차 샤드 스마트 계약입니다. 크로스 샤드 트랜잭션과 크로스 샤드 스마트 계약의 차이점은 트랜잭션에는 전역 변수만 있는 반면 스마트 계약에는 로컬 변수가 있다는 것입니다. 지역 변수는 어떤 문제를 일으키나요?
샤딩 후 이더리움은 물리적인 관점에서 64개의 원장을 갖지만 추상적인 관점에서 원장은 하나뿐입니다. 원장은 큰 나무로 상상할 수 있으며 트리의 각 잎은 계정 상태 데이터를 저장합니다. 64그루의 나무, 그리고 이 나무들의 뿌리를 비컨체인에 부여하여 새로운 큰 나무를 형성하고, 64개의 원장을 합쳐 하나의 원장으로 만든다(이것은 대략적인 비유일 뿐이다).
교차 샤드 트랜잭션에서 샤드는 다른 샤드의 계정 상태를 알아야 할 때 항상 트리를 따라 상태를 저장하는 리프를 찾은 다음 자체 샤드 계정 상태를 변경하고 트랜잭션을 완료할 수 있습니다. 이 트리를 통해 서로 다른 샤드들이 정보의 소통을 완성한다고 볼 수 있다.
하지만 샤드 간 스마트 컨트랙트의 경우 문제가 발생하는데, 이 트리의 잎사귀에 저장된 데이터는 모두 전역 변수이고 로컬 변수가 없기 때문에 한 샤드의 스마트 컨트랙트가 다른 샤드의 스마트 컨트랙트를 호출하면 두 정보를 지역 변수에 전달합니까? 나무는 그들을 섬길 수 없습니다.
현재 체계적인 스마트 계약 교차 샤드 설계 체계는 없지만 두 가지 제안이 있습니다. 하나는 실행을 위해 연결된 스마트 계약을 동일한 샤드에 넣는 것, 즉 스마트 계약 교차 샤드를 제거하는 것입니다. 스마트 계약 자체가 병렬로 실행될 수 있도록 SIMD(Single Instruction Stream Multiple Data Stream) 기술 사용을 제안합니다.
참조:
1.《 Minimum Committee Size Explained》이더리움 2.0은 2단계에서 스마트 계약을 도입할 것입니다. 즉, 스마트 계약의 교차 샤딩은 2단계까지 실현되지 않으며 이 단계 이후에만 이더리움이 2.0 시대에 진입했음을 진정으로 선언할 수 있습니다.
3.《Using polynomial commitments to replace state roots》; 저자, Chih-Cheng Liang;
4."이더리움 2.0: 임의성"; 저자, Bruno Škvorc, 번역가, Jhonny, A Jian;
5.; 저자, 비탈릭 부테린;"Eth2.0 중계 네트워크 및 수수료 메커니즘"
6.《Eth2 shard chain simplification proposal》; 저자, John Adler, 번역가, IAN LIU, A Jian;
7."블록체인 조각화의 개념과 과제"; 저자, Alexander Skidanov, 번역가, Jhonny, Echo, A Jian;
8.《Merge blocks and synchronous cross-shard state execution》; 저자, 비탈릭 부테린;


