2024년 4월 30일
UTxO 모델은 트랜잭션의 병렬 처리를 가능하게 하며, 이는 높은 확장성과 트랜잭션의 빠른 완결성을 달성하는 데 필수적인 기능입니다. 이 글에서는 네트워크 합의를 개선하여 네트워크 처리량을 늘리고 트랜잭션 완결성을 높일 수 있는 다양한 전략에 대해 자세히 살펴보겠습니다. 이 글에서는 입력 보증자, 샤딩, 이중지불 공격에 대한 보호가 확장성을 어떻게 제한하는지에 대해 알아볼 것입니다.
UTxO 모델의 기본 특징
UTxO는 독립적이고 불변하는 객체입니다. 트랜잭션의 출력으로 UTxO가 생성되면, 새로운 트랜잭션에서 소비될 때까지 변경되지 않은 상태로 유지됩니다. 소비되면 완전히 소진되고 새 트랜잭션의 출력으로 새 UTxO가 생성됩니다.
이 그림에서는 사용자가 새 트랜잭션을 연속적이고 병렬적으로 제출하는 과정을 보여줍니다. 각 트랜잭션은 빨간색 화살표로 표시된 것처럼 UTxO 세트의 입력 UTxO를 고유하게 가리키며, 이는 빨간색 UTxO로 연결됩니다. 상태 1이라는 용어는 새로운 블록을 수락한 후 각 노드에 나타나는 새로운 글로벌 상태를 나타냅니다. 빨간색 UTxO는 UTxO 세트에서 제거되었습니다. 녹색 화살표가 녹색 UTxO를 가리키는 것으로 표시된 새로 형성된 UTxO가 추가되어 UTxO 세트가 업데이트되었습니다.
UTxO 모델은 트랜잭션 유효성 검사 중 글로벌 상태를 관리하는 데 중추적인 역할을 합니다. 카르다노의 글로벌 상태는 UTxO 세트라고도 하는 활성 UTxO 모음으로 표현됩니다. 새로운 블록이 추가될 때마다 새로 생성된 모든 UTxO는 UTxO 세트에 통합됩니다. 반대로 트랜잭션에 의해 소비(사용)된 UTxO는 UTxO 세트에서 제거됩니다. UTxO는 일회용 엔티티로 인식될 수 있습니다.
네트워크의 모든 노드는 개별 UTxO 세트를 유지합니다. 컨센서스를 준수하는 대부분의 노드는 가장 최근에 추가된 블록을 포함해 동일한 블록체인 기록을 보존하기 때문에 동일한 UTxO 세트(글로벌 상태)를 보유합니다. 그럼에도 불구하고 네트워크 데이터 전송 지연으로 인해 글로벌 상태는 모든 노드에서 동시에 즉각적으로 변경되지 않고 약간의 지연이 발생합니다. 블록 생성자 노드가 새로운 블록을 네트워크에 배포하는 순간 모든 노드가 동일한 글로벌 상태를 공유한다고 가정할 수 있습니다(즉, 마지막 블록을 수신하고 그에 따라 글로벌 상태를 업데이트했다는 의미).
트랜잭션의 완결성을 높이는 방법은 무엇인가?
카르다노는 나카모토식 합의와 유사한 합의 메커니즘을 사용합니다. 이는 블록의 확률적 완결성, 그리고 결과적으로 트랜잭션의 완결성으로 대표됩니다. 이는 트랜잭션이 블록 1이라고 하는 새로운 블록에 포함되면 확인(confirmation) 횟수가 0이 된다는 것을 의미합니다. 블록이 추가되면 비슷한 시기에 생성된 대체 블록으로 대체될 수 있으므로 이 블록이 블록체인에 지속되지 않을 가능성이 존재합니다. 블록이 블록체인에서 지속될 것이라는 확신은 블록 1을 넘어 새로운 블록이 추가됨에 따라 증가합니다. 이를 종종 확인 횟수의 증가라고 합니다.
그림에서 블록 0 이후 블록체인의 포크가 발생한 것을 볼 수 있습니다. 두 개의 대체 블록 1이 생성되었습니다. 더 많은 블록이 추가되어 상위 체인이 우세했습니다. 상위 체인에는 트랜잭션 TX 1이 있었습니다.
카르다노는 트랜잭션 완결성이 낮습니다. 카르다노의 블록 시간은 20초로 설정되어 있습니다. 이는 트랜잭션에 10번의 확인이 필요한 경우 약 200초, 즉 약 3분을 기다려야 한다는 것을 의미합니다.
UTxO 세트 내 UTxO의 독립성 덕분에 트랜잭션의 유효성 검사도 상호 배타적입니다. 각 노드는 트랜잭션 또는 트랜잭션 그룹의 유효성을 검사할 수 있습니다. 블록 내 트랜잭션의 순서는 서로 영향을 미치지 않으므로 중요하지 않습니다. 따라서 노드는 트랜잭션을 수신하는 즉시 개별 트랜잭션의 유효성을 검사할 수 있을 뿐만 아니라 트랜잭션을 네트워크에 배포하기 전에 어떤 형태로든 승인 또는 투표를 추가할 수도 있습니다. 이후 트랜잭션을 수신하는 모든 후속 노드는 앞서 트랜잭션을 수신한 노드의 승인 여부도 확인합니다.
그림에서 TX 1 트랜잭션이 확산되는 다른 모든 노드에서 점차적으로 승인을 수집하는 과정을 볼 수 있습니다. 노드 4가 새 블록을 생성할 때 트랜잭션에는 이미 4개의 승인이 있습니다. 노드 4가 멤풀을 가장 먼저 수정했다는 점에 유의하세요. NODE 4는 트랜잭션 TX 1에서 이전 입력 UTxO(빨간색)를 제거하고 새로 생성된 UTxO(녹색)를 삽입했습니다.
노드의 메모리 풀에 더 오랜 기간 동안 있었던 트랜잭션은 일반적으로 더 많은 승인을 받으며, 블록에 추가될 때 더 높은 우선순위를 부여받을 수 있습니다. 이는 이미 카르다노 트랜잭션의 특징이며, 카르다노는 선입선출 방식으로 작동하기 때문입니다. 결정적으로, 트랜잭션이 네트워크 내 대다수의 노드로부터 승인을 받으면 블록체인이 재구성되더라도 폐기될 가능성이 줄어듭니다.
트랜잭션 포함에 대한 합의에 도달하는 과정은 새로운 블록의 생성과는 별개로 더 빠르고 독립적으로 진행될 수 있습니다.
트랜잭션이 포함된 블록에 몇 개의 확인만 있더라도(어쩌면 단 한 개일 수도 있습니다), 네트워크 노드 사이에는 이미 트랜잭션이 블록체인의 일부가 되어야 한다는 합의가 있을 것입니다. 승인 횟수가 많은 가장 오래된 트랜잭션이 가장 빠른 시일 내에 블록체인에 포함되도록 네트워크를 설계할 수 있습니다.
그러나 블록체인의 잠재적 재구성은 트랜잭션의 완결성에 대한 문제를 제기합니다. 트랜잭션이 많은 수의 승인을 받았음에도 불구하고 이론적으로 블록체인에서 일시적으로 제거될 수 있습니다. 이는 체인의 일부(블록체인의 가장 최근 블록)가 대체 버전으로 교체될 때 발생할 수 있습니다. 이 새로운 하위 체인 버전의 블록에는 다른 트랜잭션 세트가 포함될 수 있습니다. 따라서 트랜잭션의 완결성을 높이려면 블록체인의 재구성을 방지하기 위해 합의를 변경하거나 트랜잭션 승인 횟수를 반영하도록 규칙을 수정해야 합니다.
아래 이미지에서 블록체인의 원치 않는 재구성을 확인할 수 있습니다. 상위 체인의 TX1은 4번의 승인과 1번의 확인을 받았습니다(블록 2). 그럼에도 불구하고 결국 TX 1 트랜잭션이 없는 하위 체인이 우세했습니다.
트랜잭션의 완결성은 네트워크 전파 과정에서 노드들이 블록체인에 통합하는 데 동의함으로써 향상될 수 있습니다. 트랜잭션의 유효성 검증은 입력된 UTxO의 존재(UTxO 세트에 존재)만 확인하면 되기 때문에, 즉 사용 가능하다는 것을 의미하는 UTxO 모델 덕분에 가능합니다.
아래 글에서는 네트워크가 다음 블록을 생성하기 전에 트랜잭션의 완결성을 더 빠르게 달성하는 것이 이론적으로 어떻게 가능한지 보여드리겠습니다.
또한, 네트워크 내에서 새로 추가된 블록에 대한 합의를 가속화함으로써 완결성을 높일 수 있습니다. 이는 노드가 블록이 블록체인에 추가되기 전 또는 직후에 블록에 투표함으로써 달성할 수 있습니다.
입력 보증자
입력 보증자(Input Endorser)는 카르다노의 확장성을 개선하기 위한 계획입니다. 이 개선 사항은 블록(합의 블록)이 블록체인에 추가되기 전에 투표하는 형태로 볼 수 있습니다.
입력 보증자는 3가지 유형의 블록을 사용합니다: 입력 블록(IB), 보증 블록(EB), 랭킹 블록(RB)입니다. 각 유형의 블록은 다른 주기로 발행됩니다. 일부 블록은 동일한 슬롯에서 발행될 수 있습니다. 입력 블록은 가장 빠른 빈도로 발행됩니다.
입력 보증자는 제출된 모든 트랜잭션을 추적하고 이러한 트랜잭션을 미리 구성된 블록에 묶습니다. 입력 보증자 기능의 주요 목적은 트랜잭션 선택과 블록 생성을 분리하는 것입니다.
이 모델에서는 트랜잭션이 멤풀로 이동하는 도중에 동의를 수집할 수 있습니다. 이는 입력 보증자가 블록체인의 선형성을 유지하면서 병렬성과 동시성 요소를 합의에 통합하기 때문입니다.
입력 보증자 알고리즘은 네트워크에서 더 많은 노드의 동시 참여를 허용하기 때문에 트랜잭션 선택 단계에서 많은 수의 트랜잭션을 쉽게 준비할 수 있습니다. 보증자 노드는 트랜잭션을 검증하고 사전 승인하여 랭킹 블록 생성자의 계산 부담과 대역폭 수요를 줄이는 동시에 트랜잭션 풀의 다양성과 가용성을 향상시킵니다. 또한, 검증 가능한 보증 증명을 제공함으로써 아직 체인에 통합되지 않은 트랜잭션의 확인을 신속하게 처리합니다.
입력 보증자의 배포는 노드가 트랜잭션을 독립적으로 검증할 수 있는 UTxO 모델 덕분에 가능합니다. 블록체인이 선형적인 블록 시퀀스라는 점에서 시스템에서 보존되어야 하는 유일한 선형성은 블록의 순위 지정 수준입니다. 랭킹 블록을 포함한 블록 내의 트랜잭션 시퀀스는 중요하지 않습니다. 흥미롭게도 랭킹 블록은 트랜잭션을 저장하지 않으며, 단지 보증 블록을 통해 트랜잭션에 대한 참조를 포함할 뿐입니다.
이 이미지는 사용자가 활성 UTxO 세트(글로벌 상태)에서 입력 UTxO(빨간색 UTxO로 표시됨)를 참조하는 트랜잭션을 제출하는 모습을 보여줍니다. 이러한 트랜잭션은 병렬 검증을 거친 후 입력 블록에 통합됩니다. 노드는 이러한 입력 블록을 동시에 보증할 수 있습니다. 이 시스템은 랭킹 블록이 블록체인에 첨부되는 최고 수준의 합의에서 선형성과 최고 수준의 검증을 유지하여 이중지불 공격 등으로부터 보호합니다.
블록체인에 블록이 새로 추가될 때마다 글로벌 상태도 변경됩니다. 위에서 설명한 것처럼, 소비된 UTxO는 UTxO 세트에서 제거되고 동시에 새로운 UTxO(트랜잭션의 녹색 UTxO)가 삽입됩니다.
참고: 위 이미지는 UTxO의 소비만 보여줄 뿐, UTxO 세트에 새 UTxO가 삽입되는 것은 보여주지 않습니다.
이중지불 공격에 대한 보호
이중지불 공격에 대한 보호는 트랜잭션의 확장성과 병렬 처리를 제한하는 요소 중 하나입니다. 트랜잭션의 유효성을 검사하기 위한 입력은 글로벌 상태입니다. 노드는 현재 유지 중인 글로벌 상태의 컨텍스트에서 트랜잭션의 유효성을 검사합니다.
계정 모델은 기본적으로 노드가 글로벌 상태를 사용하는 방식과 트랜잭션 유효성 검사의 병렬화 및 확장성에 관한 옵션에 영향을 미칩니다.
UTxO 모델의 맥락에서, 사용자가 동일한 입력 UTxO를 참조하는 두 개의 트랜잭션을 제출하면 이중지불 공격이 발생할 수 있습니다. 이는 같은 돈을 두 번 사용하려는 것과 비슷합니다. 정교한 공격자는 서로 다른 노드, 즉 네트워크의 서로 다른 위치를 통해 트랜잭션을 네트워크에 제출할 수 있습니다. 즉, 특정 노드 그룹에서는 동일한 UTxO를 사용하는 다른 트랜잭션이 도착할 때까지 두 트랜잭션이 모두 유효한 것으로 간주됩니다. 이때 충돌이 발생합니다.
이상적인 시나리오에서는 이중지불 공격이 가장 빠른 시일 내에 식별됩니다. 한 트랜잭션은 새 블록에 포함되고 다른 트랜잭션은 삭제됩니다. 포함된 트랜잭션은 글로벌 상태에 영향을 미칩니다. 소비된 UTxO는 더 이상 사용할 수 없게 되며, 두 번째 트랜잭션은 이미 소비된 UTxO를 참조하므로 영구적으로 무효화됩니다.
입력 보증자가 구현되면 입력 블록 또는 보증 블록 단계에서 이중지불 공격이 잠재적으로 감지될 수 있습니다. 이러한 탐지가 발생하지 않더라도, 공격은 랭킹 블록을 구성하는 동안 노드에 의해 확실히 식별될 것입니다.
이 이미지는 이중지불 공격 시도를 보여줍니다. 트랜잭션 TX 1은 트랜잭션 TX 2와 다른 입력 블록에 배치됩니다. 그 후 두 트랜잭션은 별도의 보증 블록에 포함됩니다. 이 단계에서 네트워크는 잠재적으로 충돌하는 트랜잭션을 식별하고 그 중 하나를 삭제할 수 있습니다. 그러나 이런 일이 발생하지 않는다면 랭킹 블록을 구성하는 동안 충돌이 해결됩니다. 랭킹 블록을 구축하는 노드는 충돌하는 트랜잭션을 감지하고 문제를 해결하는 데 필요한 모든 정보를 보유하고 있습니다.
이 시스템은 트랜잭션의 병렬 처리를 용이하게 하는 동시에 충돌을 결정적으로 해결하고 이중지불 공격을 저지할 수 있는 기능을 유지합니다. 대부분의 트랜잭션은 랭킹 블록에 통합되지만, 충돌하는 트랜잭션은 검증을 통과할 가능성이 없습니다.
트랜잭션의 완결성이 블록 랭킹 레벨에서 확인 횟수가 아니라 승인 횟수에 따라 결정되는 개선안을 상상해 보시기 바랍니다. 이는 네트워크 내 트랜잭션 전파 속도에 따라 완결성이 대략 비례한다는 것을 의미합니다. 사용자가 트랜잭션을 네트워크에 제출하는 데 사용한 노드는 반드시 승인 횟수를 알고 있어야 합니다. 이를 위해서는 보증 블록을 전파하는 메커니즘이 필요합니다. 트랜잭션을 시작한 노드는 보증 블록을 수신하고 그 안에서 사용자의 트랜잭션에 대한 승인 횟수를 관찰하게 됩니다. 이 정보는 지갑이나 블록체인 탐색기를 통해 사용자에게 표시될 수 있습니다. 트랜잭션이 가상적으로 51%의 지분으로부터 승인을 받았고 충돌하는 트랜잭션이 없는 것이 거의 확실하다면, 이론적으로는 트랜잭션이 최종 승인된 것으로 간주할 수 있습니다. 그러나 트랜잭션은 랭킹 블록의 일부가 될 때에만 궁극적인 완결성을 얻게 됩니다.
UTxO 모델과 샤딩
샤딩은 블록체인의 확장성을 향상시키는 핵심 기술입니다. 블록체인 네트워크는 '샤드’라고 하는 작은 부분 또는 하위 네트워크로 나뉩니다. 전체 컴퓨팅 및 스토리지 워크로드는 샤드로 나뉩니다.
샤딩은 시스템에서 병렬 처리의 한 형태입니다. 각 샤드는 독립적으로 작동하며 자체 트랜잭션 세트를 처리할 수 있습니다. 이러한 트랜잭션의 병렬 실행은 전체 시스템 효율성과 처리량을 증가시킵니다.
각 샤드는 글로벌 상태의 일부를 유지합니다. 이를 로컬 상태라고 합니다. 전체 블록체인의 글로벌 상태는 이러한 모든 로컬 상태의 총합입니다.
샤드 간 통신은 샤딩의 중요한 측면입니다. 이는 서로 다른 샤드 간에 트랜잭션이나 정보가 교환되는 과정을 말합니다. 이는 샤딩된 블록체인 네트워크의 처리량이 샤드 간 통신의 영향을 크게 받기 때문에 매우 중요합니다.
UTxO 모델은 계정 기반 모델보다 샤딩에 더 유리합니다.
UTxO 모델의 맥락에서 트랜잭션은 검증의 기본 단위 역할을 합니다. 트랜잭션은 여러 당사자가 동시에 독립적으로 검증할 수 있는 엔티티입니다. 이러한 검증의 결과는 항상 동일합니다. 카르다노는 트랜잭션 검증을 결정론적으로 실행합니다. 여러 당사자는 블록에 관계없이, 즉 트랜잭션이 블록에 통합되는 시점과 블록 내 트랜잭션의 순서에 관계없이, 어떤 순서로든 트랜잭션을 동시에 검증할 수 있습니다.
이와 대조적으로 이더리움의 계정 기반 모델에서는 블록이 검증의 기본 단위입니다. 트랜잭션은 상호 의존적입니다. 이더리움 트랜잭션은 개별적으로 유효성을 검사할 수 없으며, 일반적인 글로벌 상태와 관련해서만 유효성을 검사할 수 있습니다. 이더리움의 글로벌 상태는 트랜잭션의 시퀀스로 개념화할 수 있습니다. 트랜잭션 검증의 결과는 이 시퀀스 내에서의 위치에 따라 달라집니다.
회계 모델의 차이는 샤딩의 구현에 큰 영향을 미칩니다.
간단히 설명하자면, 카르다노 네트워크를 하나의 샤드라고 생각해 보겠습니다. 10개의 샤드가 있다면, 이는 10개의 카르다노 네트워크가 나란히 운영되는 것과 비슷할 것입니다. 이론적으로 이는 네트워크 처리량을 10배 증가시킬 수 있습니다. 그러나 실제로는 샤드 간 통신, 데이터 일관성 및 보안 보장 필요성, 네트워크 지연 시간, 관리 오버헤드(샤드 간 부하 분산, 노드 가입 및 탈퇴 관리, 트랜잭션 라우팅 등) 등의 요인으로 인해 실제로는 그렇지 않을 수 있습니다.
UTxO 모델을 사용하는 블록체인의 경우, 글로벌 상태가 자연스럽게 병렬 처리를 허용하고 각 샤드 내에서 트랜잭션을 독립적으로 검증할 수 있기 때문에 샤딩을 구현하는 것이 비교적 간단합니다.
두 샤드에서 검증이 필요한 트랜잭션을 생성하는 것이 비교적 쉽기 때문에 UTxO 모델은 샤드 간 통신에 있어 장점이 있습니다.
샤드 1의 글로벌 스테이트에서 입력 UTxO를 받고 샤드 2의 글로벌 스테이트에서 출력 UTxO를 생성하는 트랜잭션을 상상해 보세요. 이 트랜잭션은 두 샤드 모두에서 블록체인의 일부가 될 것입니다. 여기서 장점은 블록에 관계없이, 즉 블록 내 트랜잭션의 순서와 상관없이 유효성 검사를 수행할 수 있다는 것입니다.
입력 보증자가 있는 각 샤드에서 크로스 샤드 트랜잭션은 제출 직후에 보증(승인)을 받을 수 있습니다. 트랜잭션이 샤드 1에 제출되면 샤드 2로 즉시 전달되며, 두 샤드에서 트랜잭션은 동시에 승인을 받습니다. 두 샤드 모두에서 트랜잭션은 매우 짧은 시간 내에 51%의 지분을 가진 사람들로부터 지지를 받을 수 있습니다. 샤드 간에 보증 블록을 공유하는 메커니즘이 있어야 합니다(크로스 체인 트랜잭션과 관련된 데이터의 하위 집합이면 충분할 것입니다). 각 샤드가 랭킹 블록에 트랜잭션을 삽입할 때, 특정 샤드는 많은 수의 승인 덕분에 다른 샤드의 랭킹 블록에 트랜잭션이 삽입될 것을 높은 수준의 확실성으로 기대할 수 있습니다.
이론적으로 샤드 1은 트랜잭션이 랭킹 블록에 삽입될 때까지 기다릴 필요가 없습니다. 물론 이는 다수의 지분으로부터 많은 수의 승인을 받은 트랜잭션이 항상 다음 블록 중 하나에 삽입되도록 보장하는 메커니즘(및 인센티브)이 있다는 가정 하에서만 가능합니다.
그림에서 트랜잭션 TX 1을 볼 수 있는데, 이 트랜잭션은 샤드 1에서 UTxO를 입력받습니다. 트랜잭션의 결과는 샤드 2에서 생성되는 출력 UTxO로, 샤드 간에 값이 전송된다고 할 수 있습니다. 트랜잭션은 샤드 1의 입력 블록에 도달합니다. 샤드 1은 트랜잭션을 샤드 2로 전달합니다. TX 1은 샤드 2의 입력 블록에 도착합니다. 트랜잭션 TX 1은 점차적으로 두 샤드의 보증 블록에 도달하고 마지막으로 랭킹 블록에 도달합니다. 트랜잭션이 랭킹 블록에 삽입되는 즉시 해당 샤드의 로컬 상태가 변경됩니다. 입력된 UTxO는 샤드 1의 로컬 스테이트에서 제거됩니다. 샤드 2의 로컬 스테이트에 새로운 UTxO가 생성됩니다.
UTxO 모델은 입력 보증자와 샤딩 모두에 적용할 수 있는 등 여러 가지 이점을 제공합니다. 앞서 언급한 예시는 이 두 기술의 통합을 보여줍니다. 입력 보증자가 자리를 잡으면 샤딩은 카르다노의 확장성을 향상시킬 수 있는 잠재력을 가지고 있습니다. 그러나 입력 보증자는 트랜잭션 완결성을 신속하게 처리하여 샤드 간 통신이 느려지는 것을 방지하고 글로벌 상태의 무결성을 보장해야 합니다.
이더리움에서 샤딩을 구현하기 어려운 이유는 무엇인가?
이더리움은 계정 기반 모델에서 운영되며, 각 계정에는 연관된 상태가 있습니다. 이더리움의 글로벌 상태는 본질적으로 모든 계정과 현재 자산 잔액의 데이터베이스입니다. 새로운 블록이 생성될 때마다 시스템 상태는 해당 블록 내의 트랜잭션을 기반으로 업데이트됩니다.
트랜잭션은 발신자의 잔고가 충분한지 확인하여 처리됩니다. 성공하면 발신자의 잔고는 감소하고 수신자의 잔고는 증가합니다. 그러면 이더리움 가상 머신(EVM)은 현재 상태와 트랜잭션에서 새로운 상태를 계산하며, 이는 다음 트랜잭션의 기초가 됩니다. 블록체인 상태의 지속적인 진화는 트랜잭션 순서가 검증에 매우 중요하다는 것을 의미합니다.
각 트랜잭션은 잠재적으로 모든 계정의 상태를 변경할 수 있으며, 그 결과는 처리 순서에 따라 달라질 수 있습니다. 일관성을 유지하고 이중지불을 방지하기 위해 각 유효성 검사 중에 글로벌 상태를 '잠금’하여 한 번에 하나의 트랜잭션만 처리할 수 있도록 합니다. 이 잠금 메커니즘은 시스템 무결성을 위해 매우 중요하며, 동시 트랜잭션으로 인해 불일치나 이중지불이 발생하는 것을 방지합니다.
트랜잭션 입력은 공유 리소스인 계정 잔고입니다. 즉, 트랜잭션 제출 시점의 잔고는 검증 시점의 잔고와 다를 수 있으며, UTxO 모델과 달리 트랜잭션 입력은 비결정적입니다.
이더리움에서 잔고는 트랜잭션에 의해 언제든지 수정될 수 있는 영속적인 실체이지만, 두 트랜잭션이 동시에 동일한 잔고를 수정할 수는 없습니다.
그림에서 사용자가 5개의 트랜잭션을 제출하는 과정을 볼 수 있습니다. 트랜잭션은 병렬로 제출할 수 있습니다. 여러 트랜잭션이 동일한 잔고를 조정한다는 점에 유의하세요. 예를 들어 TX 1과 TX 2는 같은 잔고에서 값을 뺍니다. 트랜잭션 TX 3과 TX 4는 같은 잔고에 값을 더합니다. 상태 1에서 상태 4까지는 트랜잭션이 순차적으로 처리되어 글로벌 상태가 점진적으로 업데이트되는 것을 나타냅니다. 글로벌 상태는 동일한 잔고, 즉 트랜잭션을 통해 상태가 연속적으로 여러 번 변경될 수 있는 영구적인 객체로 구성됩니다.
하나의 트랜잭션이 샤드 1의 잔고와 샤드 2의 잔고를 동시에 변경해야 한다면 샤드 간 통신이 얼마나 더 복잡해질지 상상해 보세요. 이더리움 블록에서 트랜잭션의 순서는 검증 결과에 중요한 역할을 합니다. 현재 EVM 구현에서는 두 샤드가 트랜잭션을 블록에 포함시키고 검증 결과에 대한 정보를 서로에게 전달해야 합니다. 샤드 1에서는 트랜잭션 검증이 성공하여 잔고에서 가치가 차감되는 반면, 샤드 2에서는 트랜잭션 검증이 실패하여 가치가 잔고에 반영되지 않는다는 것은 말이 되지 않습니다. 샤드 간 통신은 각 샤드에서 블록을 구성하는 기능을 심각하게 제한합니다.
그림에서 트랜잭션 TX 1은 제출 후 멤풀에 삽입되는 것을 볼 수 있습니다. 이 트랜잭션은 멤풀에서 블록 1에 삽입됩니다. 트랜잭션 TX 1의 유효성 검사는 샤드 1의 현재 로컬 상태를 변경하지만, 샤드 1은 샤드 2의 유효성 검사 결과를 알아야 합니다. 따라서 샤드 1은 블록 2(샤드 2)의 트랜잭션 검증 결과에 대해 샤드 2와 통신을 합니다. 따라서 샤드 2는 트랜잭션 TX 1을 블록 2에 삽입하고 검증을 수행해야 합니다. 그런 다음 검증 결과를 샤드 1에 전달할 수 있습니다. 샤드 1은 블록 1에 다른 트랜잭션을 추가하기 전에 샤드 2의 검증 결과를 알고 있어야 합니다.
실제로 제공된 예시는 샤딩의 단순화된 (순진한) 구현입니다. 이는 이더리움 팀이 현재의 합의 메커니즘으로 샤딩을 구현할 때 직면한 중대한 과제를 잘 보여줍니다.
계정 기반 블록체인에서 샤드 간 통신 중에 트랜잭션 원자성을 유지하는 것은 복잡한 작업입니다. 시스템의 무결성을 유지하기 위해서는 트랜잭션이 완전히 실행되거나 전혀 실행되지 않도록 하는 것이 중요합니다.
이 문제를 해결하기 위해 2단계 커밋 프로토콜을 비롯한 다양한 전략과 프로토콜이 제안되었습니다. 그러나 이러한 솔루션도 장단점과 복잡성이 존재합니다. 몇몇 프로젝트가 계정 기반 모델을 사용해 블록체인 내에서 샤딩을 성공적으로 구현했다는 점은 주목할 만한 사실입니다.
결론
합의 메커니즘을 변경하는 것은 네트워크 확장성을 향상시키는 한 가지 방법일 뿐입니다. 확장성은 2차 레이어 솔루션, 계층화된 아키텍처 또는 효율성 향상을 통해 개선할 수도 있습니다. 예를 들어, 플루투스 V2는 이전 버전인 플루투스 V1보다 더 효율적이어서 블록 공간을 절약할 수 있습니다. 이러한 효율성 덕분에 블록당 더 많은 트랜잭션을 처리할 수 있어 네트워크 처리량이 증가합니다. 그러나 입력 보증자는 효율성 향상보다 더 큰 확장성 개선을 제공할 수 있습니다.
카르다노 커뮤니티의 일부 구성원은 입력 보증자보다는 ZK 암호화를 통한 확장성 향상에 더 중점을 두어야 한다고 생각합니다. 카르다노는 장(Chang) 하드포크를 통해 ZK 암호화를 통합할 예정입니다. 카르다노의 결정론 덕분에 시퀀서가 필요 없는 ZK 롤업을 구성하는 것이 가능해질 것입니다.
일회성 객체로 구성된 글로벌 상태는 병렬화가 가능하기 때문에 UTxO 모델은 입력 보증자 또는 샤딩에 매우 적합합니다. 네트워크의 여러 노드는 샤딩의 경우에도 병렬로 서로 독립적으로 트랜잭션의 유효성을 검사할 수 있습니다.
* Source: Exploring Scalability Options of the UTxO Model
* Translation: Ilhun@CryptoVeri enics_sky@naver.com
1 post - 1 participant