Eth 2.0이 구현할 샤딩(sharding)이란?
편집자 주: 이 기사의 출처는블록체인 캠프 (ID: blockchain_camp)편집자 주: 이 기사의 출처는
블록체인 캠프 (ID: blockchain_camp)
블록체인 캠프 (ID: blockchain_camp)
이더리움은 모든 블록체인에서 샤딩의 개념과 동기화된 기반 플랫폼입니다.
ETH Gas Station의 통계에 따르면 이더리움 블록체인에 트랜잭션을 추가하는 데 약 1.78분이 소요되며 32초마다 새로운 블록이 생성되고 초당 평균 15~20개의 트랜잭션이 처리됩니다. 이 생태계는 트랜잭션을 먼저 처리하려면 가스 가격을 인상해야 하는 사용자보다 채굴자를 선호하는 환경을 만듭니다.
낮은 처리량, 높은 대기 시간 및 높은 가격은 Ethereum 네트워크의 성능을 제한하기 때문에 Ethereum은 현재 강력한 확장성이 필요한 서비스 및 응용 프로그램을 배포하는 데 적합하지 않습니다.
보조 제목
샤딩은 간단히 말해서 P2P 네트워크에서 컴퓨팅 작업과 스토리지 작업 부하를 분산시킬 수 있는 파티셔닝 방식으로, 이 처리 방식 이후 각 노드는 전체 네트워크의 트랜잭션 부하를 처리할 책임이 없고 자신의 파티션(또는 조각화) 관련 정보는 괜찮습니다.
샤딩을 더 자세히 설명하기 위해 샤딩의 가장 간단한 예를 살펴보겠습니다. 이더리움 창시자 비탈릭 부테린은 이를 "1000 알트코인의 확장성 증가"라고 불렀습니다.
이 예에서는 단일 블록체인을 실행하는 대신 여러 블록체인을 실행하고 각 블록체인을 블록체인이 아닌 샤드라고 합니다. 반대로 각 샤드는 PoW 알고리즘을 사용하여 블록을 채굴할 수 있는 자체 검증자 네트워크 또는 노드 네트워크를 가지고 있으며 스테이킹 또는 투표를 통해 블록을 채굴할 수도 있습니다.
보조 제목

샤딩 챌린지
샤딩을 사용하려고 할 때 우리가 직면하는 첫 번째 문제는 각 샤드가 자체 노드 세트를 가지고 있기 때문에 각 샤드는 이더리움과 같은 단일 체인보다 덜 안전하다는 것입니다.
따라서 x개의 노드를 가진 이더리움이 하드 포크를 결정하고 샤드 체인으로 분할하고 전체 네트워크를 10개 이상의 샤드에 분산하면 각 샤드는 원래 체인의 1%의 보안을 갖게 됩니다. 즉, 원래 체인 노드의 51%가 아닌 5.1%를 제어하면 모든 샤드가 손상될 수 있습니다.
우리가 가진 두 번째 질문은 "어떤 샤드를 검증할 노드를 어떻게 선택합니까?"였습니다. 그다지 좋지 않은 행위자의 경우, 이는 네트워크 노드의 5.1%가 모두 동일한 샤드에서 검증되고 이러한 노드를 제어하는 경우에만 발생합니다. 문제입니다.
실제로 모든 샤딩 아키텍처는 노드를 샤드에 무작위로 할당합니다. 샤드에 노드를 할당하려면 샤드에 특화되지 않은 계산이 필요하며, 거의 모든 설계는 별도의 체인을 사용하여 전체 샤드 및 노드 네트워크 유지 관리를 처리합니다. Ethereum의 Beacon Chain으로 알려진 이 체인은 난수 생성, 샤드에 노드 할당, 개별 샤드의 스냅샷 캡처, 핸드셰이크 지분 처리 및 기타 다양한 기능을 담당합니다.
비콘 체인에는 몇 가지 단점이 있습니다. 앞서 언급한 기록 유지 계산을 담당하기 때문에 네트워크가 사용하는 샤드가 많을수록 비콘 체인이 수행해야 하는 작업이 많아지고 샤드가 없는 네트워크는 낮은 처리량과 높은 대기 시간을 경험할 수 있습니다. 타고난 한계가 있습니다.
그러나 샤딩된 네트워크는 곱셈적이므로 네트워크의 노드가 트랜잭션을 4배 빠르게 처리하도록 네트워크 효율성이 향상되면 비콘 체인은 4배의 샤드를 처리할 수 있어 네트워크 속도가 16배 증가합니다.
보조 제목
데이터를 샤드로 분할하는 방법은 무엇입니까?
노드가 블록체인에서 일반적으로 수행하는 기능부터 살펴보겠습니다.
거래 처리/검증
이러한 거래와 그들이 채굴한 블록을 네트워크의 다른 노드로 중계합니다.
모든 거래 내역 저장
네트워크가 성장함에 따라 노드는 네트워크의 요구 사항과 진화하는 요구 사항을 따라갈 수 있어야 합니다.
처리되는 트랜잭션의 수를 늘리려면 각 노드가 더 많은 컴퓨팅 성능을 추가해야 합니다.
릴레이되는 트랜잭션이 많을수록 노드에서 제공해야 하는 대역폭이 커집니다.
모든 데이터를 블록체인에 저장하려면 노드가 점진적으로 더 많은 저장 공간을 추가해야 합니다.
트랜잭션이 아닌 샤딩 스토리지는 이 게시물 이전에 제안되었으며 일부 프로젝트에서는 스토리지가 아닌 트랜잭션 처리를 위해 샤딩을 구현했습니다.
그러나 가장 일반적인 유형의 샤딩은 "상태 샤딩(State Sharding)"이라고 하며 각 샤드의 노드로 구성되어 있으며 각 샤드에 영향을 미치는 글로벌 네트워크의 모든 노드를 포함하는 자체 블록체인을 구축합니다. 샤드의 트랜잭션 기록, 샤드에 영향을 미치는 트랜잭션을 처리하고 샤드에서 해당 트랜잭션을 릴레이합니다.

다음으로 교차 샤드 트랜잭션, 유효하지 않은 트랜잭션 및 악의적인 동작을 다룹니다.
보조 제목
블록체인 샤딩 및 스케일링
위에서 설명한 기본 유형의 샤딩은 서로 통신할 수 없으므로 하나의 블록체인처럼 작동하기 때문에 샤딩에 대한 매우 효율적이거나 실용적인 접근 방식이 아닙니다. 간단한 결제를 예로 들면, 사용자 A와 사용자 B가 같은 샤드에 있다면 샤드에 있는 검증인들은 아무 지장 없이 거래를 처리할 수 있지만, 그들의 계정이 서로 다른 샤드에 있다면 어떻게 될까요?
사용자 A는 샤드 1#에 있고 사용자 B는 샤드 2#에 있습니다. 개별 샤드의 유효성 검사기는 서로의 샤드에 대한 권한이 없기 때문에 사용자의 계정에서 인출하거나 신용할 수 없습니다.
그러나이 문제에 대한 해결책이 있으므로 그 중 일부를 더 자세히 살펴 보겠습니다.
보조 제목
2018년 초에 Vitalik Buterin은 이 솔루션과 블록 병합을 제안했습니다.https://ethresear.ch/)
비동기 크로스 샤드 트랜잭션
(출처 참조:
보조 제목
비동기 크로스 샤드 트랜잭션
이것은 완료하기 더 쉽고 조정하기가 훨씬 더 간단한 작업이므로 동기 트랜잭션보다 선호됩니다.

마찬가지로 샤드 1#의 사용자 A가 샤드 2#의 사용자 B에게 돈을 보내고 싶어하는 예를 사용할 것입니다. 이 시나리오에서 사용자 B의 계정에 대한 입금을 담당하는 샤드는 사용자 A의 계정에 대한 입금을 담당하는 샤드가 완료되었음을 증명할 충분한 증거가 있는 후에만 트랜잭션의 B 자신의 부분을 확인합니다.
그러나 이 접근 방식은 완벽하지 않으며 샤드의 블록이 폐기될 가능성이 0이 아닙니다. 확률이 0이 아닐 때는 확률이 아무리 작아도 무시할 수 없는 약점이다.
다음 그림을 통해 그 이유를 자세히 설명할 수 있습니다.
이러한 분기가 발생하면 샤드는 하나의 체인을 버리고 다른 체인을 수락해야 합니다. 이때 체인 A, B 등이 1# 샤드에서 승인된 체인이 되고 W', X' 등이 2# 샤드에서 승인된 체인이 되면 거래가 성공적으로 완료되어 모두가 행복해집니다.
1# 샤드가 A', B' 등을 수락하고 2# 샤드가 W, X 등을 수락하면 전체 트랜잭션이 실패하지만 이 역시 트랜잭션을 재전송할 수 있으므로 허용 가능한 결과입니다.
그러나 1# 프래그먼트가 체인 A, B 등을 받아들이고 2# 프래그먼트가 체인 W, X 등을 받아들이면 어떻게 될까요? 트랜잭션의 일부(A, B 등)는 완료되지만 다른 부분(W, X 등)은 폐기됩니다.
보조 제목
샤드의 악성 노드
이제 샤딩과 작동 방식에 대해 더 잘 이해했으므로 만족할 수도 있고 더 많은 질문이 있을 수도 있지만 적어도 한 가지 고려해야 할 사항이 더 있습니다. 바로 악성 노드입니다.
1. 악성 노드
이것은 시스템이 무엇이든 관계없이 큰 거래일의 가능성이 있을 때 매우 자주 발생합니다. 누군가 시스템을 공격하기를 원할 것입니다.
2. 무효 차단 승인
악의적인 노드는 네트워크 변경을 시도하는 블록을 생성하여 네트워크를 공격할 수 있습니다. 사용자 1이 10개의 코인을 가지고 있고 사용자 2가 0개의 코인을 가지고 있다고 가정해 보겠습니다. 사용자 1이 이 10개의 코인을 사용자 2에게 보내려고 할 때 네트워크의 악의적인 노드가 블록 생성을 시도할 수 있으며 결국 사용자 1은 모든 코인을 잃게 되고 사용자 2는 1000개의 코인을 갖게 됩니다.
샤딩되지 않은 일반 블록체인에서는 모든 노드가 모든 블록을 검증하고 유효하지 않은 블록이 발견되면 모든 노드(채굴자이든 아니든)가 블록을 거부하기 때문에 이러한 유형의 공격은 불가능합니다.

기존 블록체인의 경우 악의적인 노드가 생성하는 블록의 수 또는 생성 속도에 관계없이 네트워크의 정직한 노드는 항상 이러한 블록을 무시하고 정직한 블록체인을 계속 구축합니다.
악의적인 노드가 유효하지 않은 블록을 구축하여 계정에 많은 수의 토큰을 재충전하려는 경우 체인이 둘로 분할됩니다. 이 경우 악의적인 노드의 수가 정직한 노드의 수를 초과할 수도 있습니다. 짧은 체인은 정직한 체인이고 긴 체인은 유효하지 않은 체인입니다.
일반 비샤딩 블록체인에서 각 참가자는 수신한 모든 블록의 유효성을 검사하고 상태를 확인할 책임이 있으므로 블록체인에 기득권이 있는 사람은 즉시 잘못된 체인을 인식하고 짧은 체인은 무시합니다(이 경우).
샤드 체인은 참여자가 모든 샤드에서 모든 트랜잭션을 확인할 수 없기 때문에 약간 더 복잡합니다. 따라서 샤드의 전체 히스토리에서 유효하지 않은 블록이 없는지 확인하는 방법을 찾아야 합니다.


