https://cexplorer.io/article/cardano-and-sharding
Cardano는 모놀리식 블록체인이며 Ouroboros Leios를 업그레이드해도 변경되지 않습니다. 많은 블록체인 프로젝트 팀은 더 높은 확장성을 달성하기 위해 샤딩을 구현했습니다. 이론적으로 Cardano는 언젠가는 샤딩을 가질 수 있습니다. 그러나 이것은 Ouroboros Leios가 구현되기 전에는 확실히 발생하지 않을 것입니다. 합의 관점에서 모놀리식 블록체인과 샤드 블록체인의 차이점을 살펴보겠습니다. 주제가 복잡하므로 의도적으로 일부 측면에만 집중하겠습니다. 독자의 편의를 위해 이 기사는 완전하고 포괄적인 정보를 제공하는 것을 목표로 하지 않습니다.
모놀리식 및 샤드 블록체인의 과제
모놀리식 블록체인은 합의, 데이터 가용성 및 실행과 같은 시스템의 모든 핵심 구성 요소를 동일한 계층 또는 공간에서 처리합니다. 네트워크 합의에 참여하는 모든 노드는 트랜잭션과 블록을 공동으로 검증하는 단일 공간을 공유합니다.
샤딩된 블록체인은 시스템을 샤드라고 하는 더 작은 하위 그룹으로 분할합니다. 각 샤드는 트랜잭션의 일부를 독립적으로 병렬로 처리할 수 있습니다. 노드는 샤드 간에 분할됩니다. 네트워크에 1000개의 노드와 10개의 샤드가 있는 경우 특정 규칙에 따라 100개의 노드가 각 샤드에 배포됩니다.
그러나 샤드는 여전히 하나의 시스템의 일부이므로 서로 독립적이지 않습니다. 모놀리식이든 샤딩을 사용하든 각 시스템은 유효한 단일 전역 상태를 유지해야 합니다.
글로벌 상태는 블록체인에서 자산의 소유권 및 이전을 나타냅니다. 글로벌 상태는 합의에 참여하는 노드에 의해 저장되고 업데이트됩니다. 블록체인이 제공하는 주요 혁신 중 하나는 이중 지출 공격에 대한 보호라는 점을 잊지 마십시오. 까다로운 점은 분산 네트워크 내에서 이 작업을 관리하는 것입니다. 중앙 집중식 서버의 경우 이는 쉬운 작업입니다.
보안 관점에서 네트워크의 모든 노드는 글로벌 상태를 인식해야 합니다.
모놀리식 블록체인에서는 전역 상태가 모든 노드에 저장되므로 언제든지 데이터 일관성과 완전성을 쉽게 유지할 수 있습니다. 그러나 이로 인해 리소스(스토리지, 대역폭, 계산) 측면에서 노드에 대한 요구 사항이 발생합니다. 모놀리식 시스템은 중앙 집중화 경향이 있고 노드 성능 요구 사항이 더 높으며 높은 확장성을 달성하기가 매우 어렵습니다(거의 불가능하지는 않지만).
샤드 블록체인에서는 개별 샤드에서 유지되기 때문에 글로벌 상태의 일관성을 유지하기가 더 어렵습니다. 각 샤드에는 모든 데이터가 없기 때문에 전역 상태에 대한 부분적인 정보만 있습니다. 전체 샤드에서 전역 상태가 일관되도록 보장하기 위해 몇 가지 동기화 메커니즘(프로토콜)이 있어야 합니다. 이로 인해 보안 관점에서 복잡성과 문제가 발생합니다. 반면 트랜잭션이 샤드에서 검증되기 때문에 높은 확장성을 달성하기가 상대적으로 쉽습니다. 그러나 샤드 수는 교차 샤드 통신의 필요성으로 인해 제한됩니다.
모놀리식 블록체인은 더 간단한 합의를 가질 수 있고 더 투명합니다. Cardano의 경우 Ouroboros Leios로 업그레이드한 후에는 타이밍이 다른 3가지 버전의 블록이 있으므로 이는 사실이 아닙니다. 또 다른 이점은 더 높은 데이터 가용성 덕분에 더 쉬운 보안입니다. 이중 지출 및 재생 공격에 대한 저항을 확보하는 것이 더 쉽습니다. 높은 데이터 가용성 덕분에 보안을 훨씬 더 쉽게 확보할 수 있습니다. 모놀리식 블록체인은 이중 지출 및 재생 공격에 매우 강합니다.
모놀리식 블록체인의 가장 큰 과제는 탈중앙화와 보안을 희생하지 않고 트랜잭션(및 블록)의 빠른 완결성을 달성하는 것입니다. 복잡성(더 높은 통신 요구 사항)은 노드 수에 따라 증가하여 확장성을 제한할 수 있습니다.
Cardano가 Nakamoto 스타일 합의, 즉 확률론적 최종성을 사용한다는 점을 추가해 보겠습니다. 따라서 최종성을 증명할 수 있는 네트워크(이더리움)에 비해 트랜잭션의 최종성은 느립니다.
샤드 블록체인의 가장 큰 장점은 트랜잭션 검증을 위한 병렬화를 통해 높은 확장성을 확보할 수 있다는 것입니다. 즉, 트랜잭션 유효성 검사는 부분적으로 독립적인 여러 노드 그룹(샤드) 간에 분산됩니다. 이는 개별 노드의 저장 공간, 대역폭 및 연산 능력 요구 사항을 줄여주기 때문에 추가적인 이점이 있습니다. 네트워크는 더 분산될 수 있으며 자체 노드를 실행하는 것이 더 경제적일 수 있습니다. 단점은 특히 샤드의 동기화 및 관리, 샤드 간 통신, 샤드 간 충돌 해결 등의 측면에서 복잡성입니다. 샤딩을 구축하는 팀의 가장 큰 과제는 인터넷에 의존하는 비교적 복잡한 시스템에서 높은 보안과 안정성을 달성하는 것입니다. .
교차 샤드 통신 오버헤드
이제 자산과 애플리케이션의 관점에서 샤딩된 블록체인을 살펴보겠습니다. 샤드당 제한된 수의 애플리케이션과 자산만 있는 경우(극단적인 경우 샤드당 단일 애플리케이션 및 단일 토큰 유형) 시스템의 사용자 친화성과 유용성이 저하될 것이 분명합니다. 예를 들어 하나의 샤드에는 ADA 코인만, 두 번째 샤드에는 HOSKY, 세 번째 샤드에는 DJED만 있는 것은 말이 되지 않습니다. 이러한 환경에서 탈중앙화 거래소는 어떻게 기능할 수 있을까요? 어느 샤드에 배치하시겠습니까?
이 문제는 교차 샤드 통신으로 해결됩니다. 샤드가 시스템에서 정보를 교환하고 작업을 조정할 수 있도록 하는 프로세스입니다. 교차 샤드 트랜잭션에는 여러 샤드가 포함됩니다. 샤드 전체에서 원자성과 일관성을 보장해야 합니다. 몇 가지 간단한 예를 통해 이를 시연해 보겠습니다.
Alice가 샤드 1에서 샤드 2의 Bob에게 토큰 X를 보내려는 경우 시스템은 트랜잭션이 두 샤드에서 유효하고 최종적이며 일관성이 있고 Alice가 다른 샤드에서 토큰 X를 이중 지불할 수 없도록 해야 합니다. 보시다시피, 하나의 샤드에 있는 노드는 이 트랜잭션의 유효성을 검사하고 최종(완료)으로 선언할 수 없습니다. 트랜잭션을 검증하려면 두 샤드의 노드가 모두 필요합니다. 또한 토큰 X가 다른 샤드에서 사용되지 않도록 해야 합니다. (다른 샤드의) 다른 노드도 토큰 X의 상태에 대해 최소한 부분적으로 알고 있어야 합니다. 제가 글로벌 상태에 대해 이야기했던 때를 기억하십니까?
응용 프로그램의 경우 매우 유사합니다. 교차 샤드 스마트 계약에는 여러 샤드와 다른 샤드의 데이터(또는 논리) 간 통신이 필요합니다. 예를 들어, DEX 스마트 계약(샤드 3에 배포됨)이 샤드 1의 토큰 X를 샤드 2의 토큰 Y로 교환하려는 경우 시스템은 스마트 계약이 토큰 X의 데이터 및 상태에 액세스하고 확인할 수 있는지 확인해야 합니다. 각 샤드의 토큰 Y와 스왑이 샤드 전체에서 원자적으로 그리고 일관되게 실행됩니다.
이제 확장성, 샤드의 시간 동기화, 스토리지(데이터 가용성), 통신(대역폭), 충돌 해결, 공격 방지, 글로벌 상태 유지 등의 맥락에서 이 모든 것이 무엇을 의미하는지 상상해 보십시오. 크로스 샤드 동기화는 프로세스입니다. 모든 샤드가 시스템의 글로벌 상태에 대한 일관되고 최신 보기를 갖도록 보장합니다.
교차 샤드 트랜잭션(또는 스마트 계약)의 유효성 검사를 위해 다른 샤드에 대한 샤드의 의존성은 샤드가 완전히 자율적이지 않기 때문에 원하지 않는(하지만 필요한) 기능입니다(주변 환경과 독립적임). 하나의 샤드에 문제가 있는 경우(예: 공격, 네트워크 문제 또는 성능 저하로 인해) 다른 샤드, 즉 전체 시스템에 영향을 미칠 수 있습니다. 따라서 네트워크 합의는 매우 신중하게 설계되어야 하며 이러한 상황을 고려해야 합니다.
합의 샤딩을 구현하려는 팀에게는 한 가지 큰 과제가 있습니다. 많은(절반이 넘는) 거래에 교차 샤드 통신이 필요한 경우에는 어떻게 됩니까? 이 경우 샤딩된 블록체인은 처음에 예상했던 것만큼 효율적이지 않을 수 있습니다. 다행스럽게도 샤드 블록체인이 이미 존재하므로 개별 구현을 관찰하고 비교할 수 있습니다.
확장성 측면에서 트랜잭션 완결성
주제를 이해하려면 확장성의 맥락에서 트랜잭션 완결성을 이해해야 합니다. 최종성은 트랜잭션이 네트워크에 의해 확인되면 되돌리거나 변경할 수 없음을 의미합니다. 이를 통해 시스템의 보안과 무결성을 보장하고 이중 지출 또는 재생 공격을 방지합니다.
완결성은 확인을 기다리거나 충돌을 해결하는 대기 시간과 오버헤드를 줄이므로 시스템의 성능과 효율성에 영향을 미칩니다.
간단히 말해서 트랜잭션 X가 최종적으로 완료될 때까지 트랜잭션 X에 의해 이전된 자산에는 특정 소유자가 없습니다(원래 보낸 사람 또는 새로운 받는 사람일 수 있음). 분명히, 이 자산(불확실한 소유자와 함께)을 다른 트랜잭션 Y에 다시 사용하는 것은 "위험"합니다. 왜냐하면 이전 트랜잭션 X가 되돌려지면 트랜잭션 Y(누군가가 보내려고 하는 것)도 되돌려야 하기 때문입니다. 문제가 연결될 수 있습니다. 블록체인은 단일 트랜잭션을 되돌리기 어렵기 때문에 전체 블록을 되돌려야 합니다. 이것은 데이터의 일관성을 크게 깨뜨릴 것입니다.
완결성은 일반적으로 확장성에 중요하지만 샤드 간 거래를 더 빠르고 간단하게 할 수 있기 때문에 특히 샤드된 블록체인에 중요합니다. 트랜잭션이 최종적이지 않으면 샤드 간에 불일치 또는 충돌이 발생하여 시스템의 확장성과 보안에 영향을 미칠 수 있습니다. 예를 들어, Shard 1이 Alice에서 Bob에게 토큰 X를 전송하는 트랜잭션을 확인했지만 Shard 2가 아직 확인하지 않은 경우 Alice는 Shard 2에서 토큰 X를 다시 사용하려고 시도하여 이중 지출이 발생할 수 있습니다. 이를 방지하기 위해 시스템은 Alice 또는 Bob이 다른 샤드에서 토큰 X를 사용하도록 허용하기 전에 트랜잭션이 두 샤드에서 최종인지 확인해야 합니다.
최종성이 확장성에 중요한 또 다른 이유는 보다 효율적이고 유연한 합의 프로토콜을 가능하게 하기 때문입니다. 합의 프로토콜은 노드가 블록체인 상태에 동의하고 충돌을 해결하는 방법을 결정하는 규칙입니다. 트랜잭션이 최종적이지 않으면 시스템의 확장성과 보안에 영향을 줄 수 있는 분기 또는 재구성을 생성할 수 있습니다.
예를 들어, 노드 A가 트랜잭션 T1을 포함하는 블록을 확인하지만 노드 B는 트랜잭션 T2를 포함하는 다른 블록을 확인하면 블록체인에서 포크를 생성하여 혼란이나 불일치를 유발할 수 있습니다. 이를 해결하기 위해 시스템은 분기 또는 재구성(예: 가장 긴 체인 규칙)을 처리할 수 있는 합의 프로토콜을 사용해야 합니다. 그러나 이러한 프로토콜은 느리거나 비용이 많이 들거나 복잡할 수 있어 시스템의 확장성과 성능을 제한할 수 있습니다.
샤드 블록체인은 샤드 내에서뿐만 아니라 샤드 간 통신에서도 빠른 트랜잭션 완결성(provable finality)이 보장되지 않으면 효율적이고 안정적으로 작동할 수 없습니다.
시스템 처리량을 계산하는 방법은 무엇입니까?
처리량이 더 높은 시스템을 예측하기는 어렵습니다. 문제는 트랜잭션이 독립적으로, 즉 병렬로 검증될 수 없다는 것입니다. UTXO와 계정 기반 블록체인 사이에는 몇 가지 차이점이 있지만 이에 대해 알아보겠습니다. 트랜잭션의 유효성을 검사하기 위해 교차 체인 통신이 필요한 경우 오버헤드와 대기 시간이 발생하여 처리량이 감소합니다. 샤드 처리량에 샤드 수를 곱하여 샤드된 시스템의 총 처리량을 계산하는 것은 불가능합니다.
마찬가지로 검증자당 처리 용량에 검증자 수를 곱하여 모놀리식 시스템의 처리량을 계산하는 것은 불가능합니다. 유효성 검사기는 처리 용량이 다를 수 있으므로 가장 강력한 유효성 검사기가 전체 시스템 성능에 영향을 미칠 수 있습니다. 또한 특정 합의에 따라 다릅니다.
모놀리식 블록체인에서 높은 확장성(및 빠른 완결성)을 달성하는 것은 쉽지 않습니다. 많은 과제가 있으며 팀은 장단점 사이에서 신중하게 균형을 유지해야 합니다. 더 빠른 완결성은 일반적으로 더 빠른 블록 생성 및 전파를 요구하며, 이는 시스템의 보안 및 분산화를 손상시킬 수 있습니다(포크 또는 재구성의 위험). 더 빠른 완결성은 일반적으로 더 정교한 프로토콜 또는 메커니즘(많은 노드가 각각의 새 블록 생성 내에서 투표에 참여해야 함)을 필요로 하며, 이는 시스템의 단순성과 투명성을 손상시킬 수 있습니다. 최종성이 빠른 합의는 노드 간에 더 많은 통신 또는 동기화가 필요할 수 있으며, 이로 인해 대기 시간 또는 오버헤드가 증가할 수 있습니다.
샤드 블록체인은 현재 처리량이 더 높지만(적어도 서류 상으로는), 안정성은 교차 샤드 트랜잭션을 처리해야 하는 더 높은 시스템 부하에서만 분명해집니다.
회계 모델과 합의는 확장성에 어떤 영향을 줍니까?
처리량에 영향을 미칠 수 있는 것은 회계 모델입니다. Ethereum 및 대부분의 SC 플랫폼에서 사용하는 계정 기반 모델은 병렬 트랜잭션 처리를 허용하지 않습니다. 유효성 검사 중에 트랜잭션 순서를 유지하는 데 필요합니다(시스템은 공유된 전역 상태를 유지합니다). 즉, 트랜잭션은 상호 의존적입니다. 트랜잭션을 검증할 때 검증 시점에서 불변(원자성)이어야 하는 전역 상태를 고려해야 합니다.
계정 기반 모델은 각 계정이 다른 계정이나 트랜잭션에 의존(또는 충돌)할 수 있기 때문에 샤드 내에서뿐만 아니라 샤드 간에 트랜잭션을 순차적으로 처리해야 합니다. 샤드를 통한 병렬화는 시스템의 처리량을 향상시킬 수 있지만 샤드 간 통신이 효율적으로 처리되는 경우에만 가능합니다.
Cardano는 트랜잭션의 병렬 처리를 허용하는 Extended-UTXO(또는 간단히 UTXO/eUTXO) 모델을 사용합니다. 트랜잭션은 유효성 검사 중에 서로 종속되지 않습니다. 블록에서의 순서는 중요하지 않습니다.
UTXO 모델은 각 UTXO가 독립적이고 다른 UTXO(또는 계정)를 참조하지 않고도 확인할 수 있기 때문에 샤드 내 및 샤드 간 트랜잭션의 병렬 처리를 더 많이 허용합니다.
카르다노는 잠재적으로 샤딩된 블록체인이 될 수 있지만 우선 팀은 빠른 완결성(증명 가능한 완결성)을 구현해야 합니다. 확률론적 최종성으로 인해 샤딩을 고려하는 것은 의미가 없습니다. 적어도 우리의 관점에서는. Ouroboros Leios가 구현되면 샤딩을 고려할 수 있습니다.
트랜잭션과 블록의 최종성으로 돌아가 봅시다. 최종성은 노드의 투표(승인) 트랜잭션을 기반으로 합니다. 트랜잭션이 네트워크의 특정 비율의 노드에서 승인되면 되돌릴 수 없게 됩니다. Cardano 네트워크에서 블록(및 트랜잭션)의 완결성은 이제 블록체인에 추가되는 각각의 새 블록에 따라 가중치가 증가함에 따라 느려집니다. Cardano 네트워크에서 노드의 10%만 투표(새 블록을 추가하여 이전 블록을 모두 승인)하는 데 최대 1시간이 걸릴 수 있습니다.
결론
탈중앙화 블록체인(L1)의 확장성은 매우 복잡한 주제입니다. 팀과 Cardano 커뮤니티는 샤딩 구현을 고려해야 하지만 트랜잭션의 완결성을 높이지 않고는 불가능합니다. Ouroboros Leios가 구현될 때까지 기다려야 합니다. 그런 다음 샤딩에 대해 생각하는 것이 합리적일 것입니다.