위험 경고: '가상화폐', '블록체인'이라는 이름으로 불법 자금 모집 위험에 주의하세요. — 은행보험감독관리위원회 등 5개 부처
검색
로그인
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
시장 동향 보기
이더리움 전복된 이더리움: 2.0 성능 혁신을 달성하기 위한 암호화 도입
安比(SECBIT)实验室
特邀专栏作者
2020-06-15 02:21
이 기사는 약 5285자로, 전체를 읽는 데 약 8분이 소요됩니다
블록 생산자는 더 이상 트랜잭션을 확인하고 패키징하기 위해 블록을 저장할 필요가 없습니다.

편집자 주: 이 기사의 출처는앰비랩스(ID: secbitlabs), 승인을 받아 Odaily에서 재인쇄했습니다.

편집자 주: 이 기사의 출처는

앰비랩스(ID: secbitlabs)

, 승인을 받아 Odaily에서 재인쇄했습니다.

이더리움도 성능 향상을 위해 다양한 방법을 시도했는데, 2.0 출시 전날 암호화폐를 "시도"했다. 이더리움 2.0은 "분산 시스템 + 암호화"를 기반으로 하는 퍼블릭 체인이 될 것입니다.

이런 관점에서 보면 이더리움을 전복시키는 것은 타인이 아니라 자기 자신이라고 말할 수 있을 것입니다. 분산 시스템 설계라는 단일 아이디어에서 벗어나 분산 시스템 + 암호화의 결합 설계의 길에 착수했습니다.

이 기사에서는 분산 시스템 설계가 이더리움 2.0의 암호화 설계와 결합되어 퍼블릭 체인의 성능에서 돌파구를 달성하는 방법을 소개하려고 합니다.

보조 제목

상태 샤딩: 단일 원장에서 다중 원장으로

블록체인은 분산 원장이며 블록 노드는 계정을 유지하는 채굴자이며 트랜잭션을 원장에 기록하는 역할을 담당합니다. 부기 권리를 놓고 경쟁하는 것 외에도 블록 생산자의 가장 중요한 작업 또는 자신의 작업은 그들이 포장하는 거래가 합법적인지 여부를 확인하는 것입니다. 블록 생산 노드가 원장을 손에 쥐고 트랜잭션 발신자가 돈을 가지고 있는지 확인하기만 하면 되기 때문에 이 작업을 완료하는 것은 어렵지 않습니다.

조각화되지 않은 퍼블릭 체인의 경우 모든 노드가 동일한 원장을 보유하고 장부 충돌을 방지하기 위해 한 번에 하나의 블록 생성 노드만 장부를 보유할 수 있습니다. 이더리움은 실제로 하나의 원장을 여러 원장으로 나누는 상태 샤딩을 제안합니다. 레지스터 플랫폼이 여러 금전 등록기로 증가하고 여러 노드가 동시에 계정을 유지하며 전체 퍼블릭 체인의 성능이 질적으로 향상됩니다.

하지만 예를 들어 블록 생산 노드와 원장/샤드 사이의 관계를 고정하면 4개의 노드 a, b, c, d가 1번 원장을 담당한다고 판단되면 악당은 구매만 하면 됩니다. a, b, c 및 d 중 일부 원장을 파괴할 수 있으며 퍼블릭 체인의 성능이 향상되는 동안 보안은 같은 비율로 감소합니다.

이더리움이 제공하는 솔루션은 블록 생성 노드가 원장을 사용하지 않는다는 것입니다. 즉, 블록 생성 노드는 계정을 유지하기 위해 원장이 필요하지 않습니다.

이것은 두 가지 주요 이점을 가져올 것입니다: 첫째, 노드가 어떤 샤드에 할당되든 즉시 부기(블록 생성)를 시작할 수 있고 샤드의 원장을 가져와 동기화하는 데 거의 시간이 걸리지 않습니다. 두 번째는 블록 생성 노드가 원장을 저장할 필요가 없고 높은 하드웨어 구성이 필요하지 않다는 것입니다. 그리고 전체 퍼블릭 체인의 보안.

그러나 새로운 문제가 발생합니다. 블록 생산자가 원장을 가지고 있지 않은 경우 거래 발신자가 충분한 돈을 가지고 있는지 어떻게 알 수 있습니까? 이것은 암호화가 작동하는 곳입니다.

보조 제목

Vector Commitment: 쿼리에서 증명까지

원장 없이 계정을 유지할 수 있다는 것이 믿기지 않는 것처럼 들리지만 아이디어는 간단합니다. 미래에는 노드에 원장이 없고 트랜잭션 발신자는 트랜잭션을 제출할 때 암호 증명을 제출해야 하며(구분을 위해 다음 텍스트는 암호 증명을 증거로 나타냄) 트랜잭션이 다음임을 증명할 수 있습니다. 합법적인.

왜 블록생성노드는 증명을 통해 특정 거래의 합법성을 판단할 수 있을까요? 여기에는 암호화의 두 가지 중요한 개념이 관련되어 있으며 첫 번째 개념은 "구성원 증명"입니다. 개인이 집단의 일부임을 증명하는 과정을 말합니다. 특정 계정 상태가 전체 원장 상태의 일부라는 것이 증명될 수 있다면 블록 생산 노드는 물론 이 계정 상태를 믿을 수 있으며 이를 근거로 사용하여 거래의 적법성을 판단할 수 있습니다.

두 번째는 "벡터 커미션(Vector Commitment)"으로 그룹의 규모에 관계없이 그룹을 하나의 숫자로만 압축한 다음 개인이 숫자 그룹 뒤에 있는 그룹에 속함을 나타내는 구성원 자격 증명을 제공할 수 있습니다. , 그룹에서 개인의 위치를 ​​증명하고 인증서를 업데이트할 수 있습니다.

아래 그림은 Merkle 트리로, 최하위 레이어의 리프 노드는 애플리케이션 데이터를 저장하고, 리프 노드가 아닌 다른 노드는 자식 노드의 해시 값을 저장합니다. 녹색 노드와 모든 노란색 노드의 값을 알고 있으면 아래에서 위로 세 번의 해시 작업을 수행하여 Merkle 트리의 루트 값인 6c0a를 얻을 수 있습니다.

그러면 검증자가 트리 루트(6c0a)의 값을 가지고 있으면 증명 제공자는 녹색 노드의 값과 노란색 노드의 모든 값을 검증자에 대한 증명으로 가져오고 검증자는 다음을 계산할 수 있습니까? 이 머클트리에 그린노드의 값이 있는지 판단하기 위한 6c0a와 같은 해시값은? 대답은 '예'입니다. 이것은 벡터 커밋으로 수행되는 머클 트리에 대한 녹색 노드의 구성원 자격 증명이며, 이것이 비트코인 ​​SPV 노드(간단한 지불 확인)가 작동하는 방식과 거의 같습니다.

아래 그림과 같이 SPV 노드는 완전한 블록/원장을 저장하지 않고 필요한 경우 머클 트리의 루트를 각 블록에 저장합니다(머클 트리의 리프 노드는 모든 트랜잭션을 블록에 저장함). 쿼리 트랜잭션이 존재하면 전체 노드는 위의 녹색 노드와 노란색 노드 값의 패키지(Merkle 경로)와 유사한 트랜잭션 증명을 요청하고 SPV 노드는 총계를 계산합니다. 해당 값의 해시 값이 자신의 손에 있는 머클 트리 루트의 값과 같은지 여부 동일하면 트랜잭션이 머클 트리의 구성원임을 의미합니다. 즉, 트랜잭션이 존재합니다.

이미지 설명

SPV 노드는 멤버십 증명을 통해 트랜잭션의 존재 여부를 판단합니다.증명 시스템은 세 부분으로 구성됩니다: 노드에는 짧은 요약(트리 루트)이 있고, 증명 공급자는 증명을 제공하며, 노드는 증명을 계산하여 일치하는지 확인합니다. 자신의 손 일치의 요약.

이 시점에서 우리는 쿼리 사고를 증명 사고로 바꾸는 "원장 없는 계정 확인"을 완료했으며 다음으로 달성하려는 것은 "원장 없는 계정 유지"입니다.

이더리움 2.0 샤드에 있는 블록 생산 노드의 경우에도 그 증명 시스템은 추상, 증명, 검증의 세 부분으로 구성되지만 트랜잭션 발신자가 제공한 증명(전체 노드가 아님)을 사용해야 합니다. 거래가 합법적인지(오래된 거래가 존재하는지 여부보다), 이 판단을 회계의 근거로 사용합니다.

보조 제목

무국적: 원장 증명에서 행동 증명으로

매일 마을 사람들 사이에 3건의 거래만 있는 작은 마을을 상상해 보세요. A는 이제 B에게 5위안을 이체하려고 합니다. 전통적인 생각은 매우 간단합니다. 촌장이 A의 계좌에 5위안이 있는지 확인하고 있다면 이 새로운 거래를 기록합니다.

이제 사고 방식을 바꾸십시오. A가 오늘 아침에 B에게 5위안을 이체하려고 하고 촌장이 어제 아침 A의 계좌에 10위안이 있다는 것을 알고 있다고 가정하면 A가 어제 3개의 거래가 자신과 관련이 없음을 증명할 수 있다면 오늘 아침 그의 계좌에 아직 10달러가 있다는 뜻인가요? 이런 식으로 촌장은 장부를 확인하지 않고 이 새로운 거래를 기록할 수 있습니까? 대답은 '예'입니다.

A가 어제 거래를 했다면? 매우 간단합니다.이 때 A는 거래가 없었다는 것을 증명하지 않고 어제 거래가 한 번 뿐이고 거래 비용이 3 위안임을 증명합니다.촌장은 여전히 ​​7 위안이 있다는 것을 알고 있으므로 기록 할 수 있습니다. 새 거래.

이 생각의 변화는 매우 중요하며 이해해야합니다. 이것이 "무국적"의 신비입니다. 원장을 보유하고 있지 않은 SPV 노드도 트랜잭션 조회 시 실제로 원장 또는 상태를 사용해야 하지만 자체적으로 상태를 저장하지 않고 전체 노드로 이동하여 획득하는 것을 어렵지 않게 발견할 수 있습니다. 이 상태의 증명 ; 그러나 이 새로운 아이디어 하에서 상태의 역할은 "행동 증명"으로 완전히 대체될 수 있으며 이 체인은 상태 비저장 방식으로 설계될 수 있습니다. (참고: "행동 증명"이라는 단어는 출처가 없으며 이해하기 쉽도록 저자가 설명합니다.)

무국적을 달성하는 방법은 무엇입니까? 행동 증명의 도움으로 부기를 완료하는 방법은 무엇입니까? 여전히 회원 인증 방법입니다. Merkle 트리를 사용하여 이 멤버십 증명을 완료할 수 있습니까? 이론적으로는 가능하지만 "무상태" 애플리케이션 시나리오의 경우 이를 사용하는 오버헤드가 너무 높습니다. 이 기사에서는 원장 없는 부기를 위한 Aggregable Subvector Commitments를 통한 멤버십 증명을 소개합니다.

Aggregatable Subvector Commitments(aSVC)는 Alin Tomescu, Ittai Abraham, Vitalik Buterin(Ethereum), Justin Drake(Ethereum Square), Dankrad Feist(Ethereum), Dmitry Khovratovich의 "Aggregated Subvector Commitments for Stateless Cryptocurrencies" 논문의 최근 연구 노력입니다. (이더 리움). 작업 프로세스는 다음과 같습니다.

1. 샤딩 초기화, 즉 가계부 구축 시 계정의 초기 상황을 판단한다. 샤드가 설정될 때 100개의 계정이 있고 이 계정에 초기 잔액이 있다고 가정하면 i번째 계정을 나타내기 위해 v(i)를 사용해야 하며 이는 (주소 i, 잔액 i와 같은 값의 쌍입니다. ) 사용 V 모든 계정을 나타내며 (주소 1, 잔액 1) (주소 2, 잔액 2)...(주소 100, 잔액 100)과 같은 값의 집합입니다.

동시에 두 개의 값을 생성해야 하는데, 첫 번째 값은 c라고 하는데, 이는 V에 대한 약속으로 이때 샤드의 모든 계정과 잔액을 나타냅니다. 블록 생산 노드는 c를 손에 쥐고 있습니다(이해하기 쉽도록 Merkle 트리의 루트와 비교할 수 있음). 이는 향후 검증을 위한 요약입니다.

두 번째는 π(i)라고 하는데, 이는 v(i)가 V의 구성원이며 i번째 계정을 나타내고 해당 계정의 잔액이 총계정원장 V에 있음을 증명합니다. 각 계정은 향후 트랜잭션을 보낼 때 블록 노드에 제출되는 증명인 자체 π(i)만 보유하고 있습니다.

초기화 단계에서 커밋 및 증명 생성에는 초기 "상태"가 필요합니다.

2. 첫 거래. 계정 i는 전체 샤드의 첫 번째 트랜잭션을 개시하는데 이때 π(i)와 트랜잭션을 블록노드에 제출해야 하며 블록노드는 π(i)를 계산하여 결과가 c와 일치하는지 확인한다. 일치하면 발신인의 계좌 잔액이 얼마인지 믿을 수 있으며 이를 통해 제출한 거래가 합법적인지 여부를 판단할 수 있습니다.

3. 다음은 핵심 포인트: c 및 π(i)를 업데이트합니다.

c(원장 전체에 대한 약정)는 상태에 따라 더 이상 생성되지 않으며 첫 번째 트랜잭션 및 첫 번째 트랜잭션으로 인한 잔액 변경 전에 c를 사용하여 생성되며 π(i)(계정의 자체 증명)이 아닙니다 상태에 따라 생성되며 첫 번째 트랜잭션이 발생하기 전에 π(i)로 생성되고 첫 번째 트랜잭션에 의한 계정 변경이 발생합니다.

c와 π(i)의 업데이트를 완료한 후, 블록 생산 노드는 모든 사용자의 새로운 잔액을 약속할 수 있는 새로운 약속(new c)을 갖게 되고 계정도 새로운 증명(new π(i) 새로운 균형을 증명하십시오 )).

유사하게 각 트랜잭션은 c를 한 번 변경하고 모든 π(i)를 한 번 변경하지만 이 변경은 더 이상 상태 데이터에 의존하지 않고 이전 트랜잭션뿐만 아니라 이전 c 및 π(i)에 따라 달라집니다. 새로운 트랜잭션의 검증이 필요할 때 블록 생산 노드는 항상 최신 c를 손에 쥐고 있으며 c와 블록 생성 노드에서 제공하는 π(i)를 통해 트랜잭션이 합법적인지, 블록으로 패키징할 수 있는지 여부를 판단할 수 있습니다. 계정.

그래서 이 시점에서 "장부 없이도 계정을 보관할 수 있다"는 것이 마침내 실현됩니다. 블록 생산자든 계정이든 그들이 손에 들고 있는 것은 원장의 상태가 아니라 일종의 암호 증명입니다. 무국적과 샤딩이 완벽하게 일치하는 것처럼 보이지만 무국적은 샤딩을 위한 설계가 아니라 퍼블릭 체인을 위한 설계라는 점을 언급해야 합니다.

aSVC의 설계 목표는 효율적인 멤버십 증명이 되고 위 과정에서 통신 오버헤드 및 계산 오버헤드를 줄여서 이 체계가 상태 비저장 블록체인 구현에 사용될 수 있도록 하는 것입니다. 논문의 관점에서 aSVC 방식을 사용하면 c와 π(i)의 크기는 수십 바이트에 불과하고 π(i)의 업데이트 시간은 O(1)이며 검증 시간도 O( 1) 여러 증명을 하나의 O(1) 증명으로 집계하는 것을 지원합니다.이 낮은 오버헤드 구현은 정확히 aSVC의 모든 것입니다. 그러나 Ethereum Researcher Forum에서 Vitalik의 토론과 마찬가지로 aSVC는 여전히 추가 최적화가 필요합니다.

기사 끝에는 전체 텍스트에 대한 간략한 요약이 있습니다. 분산 시스템의 상태 샤딩 설계는 암호화의 회원 증명 설계와 결합되어 Ethereum 2.0 성능의 돌파구를 달성합니다.

1. 안전을 위해 이더리움 2.0의 상태 샤딩은 블록 생성 노드를 무작위로 할당해야 합니다.

2. 블록 생성 노드에 원장이 필요한 경우 원장 동기화는 새로운 성능 병목 현상이 되며 원장 스토리지는 PoS의 분산화에도 영향을 미칩니다.

4. 생각의 첫 번째 변화: 원장을 조회하는 방식을 원장을 증명하는 방식으로 변경합니다. 이것은 암호화의 도움으로 수행되어야 합니다.

5. 두 번째 생각의 변화: 원장의 상태를 증명하는 방식을 거래 행위를 증명하는 방식으로 바꾸고, 원장 없이 무국적 및 부기를 실현합니다. 이것은 암호화의 도움으로 수행되어야 합니다.

6. 암호화를 위한 많은 도구가 있습니다.목표가 있을 때 적절한 도구를 선택하고 조합하여 응용 프로그램 요구 사항에 따라 솔루션을 구성하고 솔루션을 최적화해야 합니다.

보조 제목

이스터 에그: 집계 가능한 하위 벡터 약속

기사에서는 aSVC의 작업을 자연어로 설명하고 있으며, 관심 있는 분들은 aSVC의 API 정의를 통해 보다 명확하게 이해할 수 있습니다. 아래 그림과 같이 첫 번째 빨간색 상자는 초기화 중에 커밋 c를 생성하는 것이고, 두 번째 빨간색 상자는 거래에 따라 c를 업데이트하는 것이고, 첫 번째 녹색 상자는 초기화 중에 증명 π(i)를 생성하는 것입니다. 두 번째 녹색 상자는 트랜잭션 업데이트 π(i)에 대한 것이며 파란색 상자는 검증을 위해 c 및 π(i)를 사용하는 블록 노드입니다.

위의 프로세스에서 핵심 작업은 트랜잭션으로 인한 변경에 따라 이전 c를 새 c로 변경하고 이전 π(i)를 새 π(i)로 변경하는 것입니다. 업데이트가 완료될 수 있어야 할 뿐만 아니라 이 업데이트의 오버헤드도 허용 가능해야 하며 이는 aSVC가 해결해야 하는 핵심 문제입니다. aSVC가 수행하는 방법을 소개하기 위해 c의 업데이트를 예로 들어 보겠습니다.

위에서 언급했듯이 c가 약속하는 것은 V이고, c에서 새로운 c로 가는 것은 실제로 V를 약속하는 것에서 새로운 V를 약속하는 것입니다. V의 경우 일련의 포인트로 구성되며, (주소 1, 잔액 1)이 하나의 포인트, (주소 2, 잔액 2)가 또 다른 포인트... (주소 100, 잔액 100)이 100번째 포인트입니다.

라그랑주 보간법의 도움으로 이 일련의 점을 다항식(다항식으로 표현되는 곡선이 이 모든 점을 통과함)으로 바꿀 수 있습니다. 즉, 일련의 점에 대한 커밋이 다항식에 대한 커밋으로 바뀔 수 있습니다. ; c에서 새로운 c로 가는 것은 하나의 다항식에서 다른 다항식을 커밋하는 것과 같습니다.https://eprint.iacr.org/2020/527.pdf

开发者
ETH
Odaily 공식 커뮤니티에 가입하세요