2024년 5월 2일
블록체인의 기록은 글로벌 상태(global state)로 볼 수 있습니다. 그러나 새로운 트랜잭션의 유효성을 검사하기 위해 노드는 이 기록의 일부만 필요합니다. 블록이 추가될 때마다 블록체인은 확장되므로, 지속적으로 증가하는 컨텍스트 내에서 새로운 트랜잭션의 유효성을 검사하는 것은 비효율적입니다. 이 글에서는 새로운 트랜잭션을 검증하고 새로운 블록을 생성하는 데 활용되는 글로벌 상태가 블록체인의 기록에서 어떻게 형성되는지 설명합니다.
블록체인은 트랜잭션의 기록에 불과하다
블록체인은 트랜잭션의 기록으로 볼 수 있습니다. 체인의 각 블록에는 트랜잭션 목록이 포함되어 있으며, 새로운 블록이 추가될 때마다 블록체인의 기록(따라서 글로벌 상태)이 변경됩니다.
아래 그림에서 블록체인에 새로 추가된 블록과 글로벌 상태의 변화 사이의 상관관계를 확인할 수 있습니다. 새로 추가된 각 블록은 상태 전환을 나타냅니다.
네트워크 합의는 네트워크의 모든 노드(정직한 대다수의 노드)가 블록체인의 현재 상태에 동의하도록 보장하는 중요한 메커니즘입니다. 합의를 통해 네트워크는 한 상태에서 다른 상태로 안전하게 전환할 수 있습니다. 즉, 새로운 블록이 블록체인에 추가되기 전에 모든 노드가 블록의 유효성에 대해 동의해야 합니다.
블록체인이 올바르게 작동하려면 분산 네트워크의 모든 노드에서 글로벌 상태가 동일해야 합니다. 이러한 일관성은 블록체인의 무결성과 보안을 보장하고 추가적인 상태 변경을 용이하게 하기 위해 필요합니다.
모든 네트워크 노드에서 새로운 상태로의 전환은 즉각적으로 이루어지지 않습니다. 네트워크 지연 시간으로 인해 비록 짧은 시간이지만 점진적인 과정을 거치게 됩니다. 카르다노 네트워크에서 새로운 상태로의 전환은 새로운 블록을 생성하는 노드에서 시작되며, 모든 네트워크 노드가 이 블록을 수신했을 때 완료됩니다. 블록이 유효하고 모든 노드에 의해 승인되면 상태 전환이 이루어졌으며, 이는 글로벌 상태의 변화와 함께 이루어집니다.
실제로 글로벌 상태의 변경은 블록체인 기록의 변화만을 반영하는 것은 아닙니다. 후속 블록의 유효성 검사를 위한 컨텍스트도 함께 변화합니다. 이 컨텍스트는 모든 개별 트랜잭션을 아우르는 블록체인의 전체 기록이 아닙니다. 대신, 이는 이 기록의 하위 집합, 즉 활성 UTxO 또는 UTxO 세트의 일부입니다.
그림에서 블록체인에 추가된 각 블록이 활성 UTxO 세트(새 블록의 유효성을 검사하기 위한 글로벌 상태)를 어떻게 변경하는지 확인할 수 있습니다. 5개의 새로운 블록이 추가됨에 따라 UTxO 세트는 처음(상태 0)부터 5번의 연속적인 변화를 거쳤습니다.
분산 네트워크의 모든 노드는 고유한 버전의 블록체인과 활성 UTxO 세트를 유지하면서 독립적으로 운영됩니다. 노드가 블록체인 끝에 추가될 새 블록의 후보를 받을 때마다 검증을 거쳐야 합니다. 이 검증 과정의 입력은 새로운 블록과 활성 UTxO 세트입니다. 노드는 블록 헤더에 캡슐화된 다른 파라미터와 함께 블록 내 모든 트랜잭션의 유효성을 검사해야 합니다. 이 검증의 결과는 블록을 로컬 버전의 블록체인에 통합할지 여부에 대한 노드의 독립적인 결정입니다. 이 동일한 절차는 네트워크 내의 모든 노드에서 실행됩니다.
그림에서 블록 5 다음에 추가되는 새로운 블록 6의 유효성 검사가 어떻게 진행되는지 확인할 수 있습니다. 검증을 위한 입력은 새 블록과 활성 UTxO 세트입니다. 검증의 출력은 새 블록이 유효한지(로컬 버전의 블록체인에 추가될지) 아니면 유효하지 않은지 검증자의 결정입니다.
UTxO 세트
노드가 블록체인의 로컬 버전에 새 블록을 추가할 때마다 UTxO 세트의 로컬 버전도 변경됩니다.
UTxO 세트는 트랜잭션 출력으로 생성되어 향후 트랜잭션에 사용될 가능성이 있는 모든 UTxO로 구성됩니다. 따라서 이는 카르다노 블록체인의 전체 기록에 존재하는 모든 UTxO의 일부에 불과합니다.
글로벌 상태의 맥락에서 UTxO를 간략히 설명해 보겠습니다.
UTxO는 한 번만 사용할 수 있는 독립적이고 불변하는 객체입니다. 소비할 때는 완전히 소비해야 합니다. UTxO는 일회성 객체입니다.
트랜잭션의 출력으로 UTxO가 생성되면 새 트랜잭션에서 소비될 때까지 변경되지 않은 상태로 유지됩니다. 소비되면 완전히 소비되고 새 트랜잭션의 출력으로 새 UTxO가 생성됩니다.
트랜잭션이 제출될 때, 트랜잭션은 하나 이상의 UTxO를 입력으로 참조하며, 이는 소비될 예정입니다.
입력 UTxO가 소비되면 새 UTxO가 생성되거나 여러 개의 새 UTxO가 생성될 수 있습니다. 트랜잭션에서 입력 UTxO의 누적 값은 모든 출력 UTxO의 총 값과 같아야 합니다.
트랜잭션과 관련하여 검증자의 역할은 이를 확인하는 것입니다:
- 모든 입력 UTxO가 실제로 현재 UTxO 세트의 일부인지, 즉 사용되지 않았고 원장에 존재하는지 확인합니다.
- 입력 UTxO의 총값이 출력 UTxO의 총값보다 크거나 같아서 가치 보존을 보장합니다.
- 트랜잭션은 입력 UTxO의 소유자가 올바르게 서명하여 정당한 소유자만 UTxO를 사용할 수 있도록 보장합니다.
블록체인의 기록은 사용 및 미사용된 모든 UTxO의 그래프로 볼 수 있습니다. 이 그래프는 블록체인에서 발생한 모든 트랜잭션에 대한 완전하고 감사 가능한 이력을 제공합니다.
아래 이미지에서 트랜잭션에서 UTxO가 어떻게 소비되는지 확인할 수 있습니다. 새로운 트랜잭션에서 출력 UTxO(녹색)는 입력 UTxO(빨간색)가 됩니다. 소비되지 않은 모든 UTxO(파란색)는 새로운 트랜잭션의 유효성 검사에 필요한 글로벌 상태의 하위 집합을 나타냅니다. 파란색 UTxO는 모두 트랜잭션 입력, 즉 소비될 수 있습니다. 녹색 UTxO는 이미 소비되었으므로 다시 소비할 수 없습니다.
새로운 블록의 유효성 검사(새 블록의 새로운 트랜잭션)에 필요한 블록체인의 현재 상태는 사용되지 않은 모든 UTxO의 모음으로 나타낼 수 있습니다. 이들은 UTxO 세트에 통합됩니다.
따라서 새로운 트랜잭션의 유효성을 검사하기 위해 블록체인의 전체 기록을 알고 있을 필요는 없습니다(또는 활성 메모리에 저장되어 있을 필요도 없습니다). 대신 사용되지 않은 UTxO의 활성 세트(모든 파란색 UTxO)만 있으면 됩니다. 그러나 활성 UTxO 세트를 얻으려면 일반적으로 제네시스 블록부터 시작하여 블록체인의 전체 기록을 처리해야 합니다.
활성 UTxO 세트에는 과거에 생성된, 즉 이전 상태에서 생성된 UTxO도 포함된다는 점에 유의하는 것이 중요합니다.
그림의 각 상태에서는 하나의 블록이 생성되었습니다. 새로운 상태 N+5에서는 상태 N+2, N+3, N+4의 UTxO가 포함된 UTxO 세트가 트랜잭션 검증에 사용됩니다. N+5 상태에서 생성된 새 블록에는 트랜잭션 10의 UTxO를 사용하려는 트랜잭션 14와 트랜잭션 11의 UTxO를 사용하려는 트랜잭션 15가 있습니다.
상태 N+5에서 새로운 블록이 블록체인에 추가되었습니다. 따라서 새로운 UTxO도 생성되어 활성 UTxO 세트에 삽입되었습니다. 동일한 상태 전환 내에서 소비된 모든 UTxO는 활성 UTxO 세트에서 제거되었습니다.
그림에서 상태 간 트랜지션에 관계없이 사용되지 않은 모든 UTxO로 구성된 UTxO 세트를 볼 수 있습니다.
사용자들은 지속적으로 새로운 트랜잭션을 제출하며, 그 중 일부는 동시에 제출될 수도 있습니다. 네트워크의 목표는 모든 트랜잭션을 처리하는 것이며, 이는 유효한 트랜잭션을 블록체인에 통합하는 것을 목표로 합니다. 블록체인에 새로운 블록이 추가된다는 것은 글로벌 상태의 변화를 의미합니다.
새로운 트랜잭션은 UTxO 세트의 UTxO를 참조합니다. 세트의 UTxO는 모든 트랜잭션의 입력으로 사용되며, 새 블록이 블록체인에 추가될 때 발생하는 변화의 일부를 나타냅니다. 새로 추가된 블록에서 트랜잭션의 입력이었던 모든 UTxO는 UTxO 세트에서 제거됩니다.
새로 추가된 블록의 각 트랜잭션은 하나 이상의 새로운 UTxO를 포함하며, 이는 UTxO 세트에 통합됩니다. 이는 변경의 또 다른 부분입니다.
새로운 블록이 블록체인에 추가되면, 노드는 동시에 UTxO 세트에서 사용된 UTxO를 제거하고 새로 생성된 UTxO를 추가합니다.
이미지는 UTxO 세트의 변화를 보여줍니다. 상태 0에서는 다음 블록에 통합될 6개의 트랜잭션을 볼 수 있습니다. 빨간색 UTxO는 트랜잭션 입력 역할을 하는 것으로, 소비될 트랜잭션입니다. 녹색 UTxO는 생성될 트랜잭션입니다. 상태 1은 새 블록이 추가된 후의 상태를 나타냅니다. 빨간색 UTxO는 UTxO 세트에서 제거되고 녹색 UTxO가 추가되었습니다. 따라서 UTxO 세트의 모든 UTxO는 사용 가능합니다. 새로 추가된 녹색 UTxO는 파란색으로 생각하면 됩니다.
그림의 트랜잭션은 상태 0에서 생성되어 네트워크에 제출된 블록을 나타냅니다. 상태 1에서는 이미 블록체인에 추가되었습니다. 그림에 표시되지 않은 상태 1에서 이미 새로운 블록이 생성되고 있습니다. UTxO 세트에서 UTxO를 참조하는 새로운 트랜잭션을 상상할 수 있습니다.
결론
실제로 각 UTxO는 한 번만 사용할 수 있으며, 이는 이중 지불 공격을 막는 데 도움이 되는 기본 규칙입니다. 한 번 사용된 UTxO는 다른 트랜잭션의 입력으로 재사용할 수 없습니다. 블록 검증 과정에서 검증자는 모든 UTxO 입력이 고유하고 UTxO 세트 내에 존재하는지 간단하게 확인할 수 있습니다. 트랜잭션 검증 과정과 결합된 UTxO 모델의 아키텍처는 블록 검증자가 잠재적인 이중 지불 공격을 식별하고 방지하는 작업을 간소화합니다. 이는 블록체인 기술의 주요 보안 기능 중 하나입니다.
일회용 객체로 구성된 UTxO 세트는 네트워크 내에서 높은 수준의 병렬화를 촉진하는 이점을 제공합니다. 트랜잭션의 유효성 검사는 서로 독립적으로 이루어지며, 이는 UTxO의 독립적인 소비를 반영합니다. 또 다른 장점은 제출 전에 트랜잭션을 로컬에서 검증하여 네트워크 검증도 통과할 수 있다는 것입니다. 로컬 유효성 검사와 네트워크 유효성 검사는 모두 동일한 입력 UTxO에 기반합니다. 트랜잭션이 블록에 포함되기 전인 로컬 검증과 네트워크 검증 사이의 기간 동안 입력 UTxO는 변경되지 않습니다. 따라서 트랜잭션이 실패할 이유가 없습니다.
* Source: https://cexplorer.io/article/understanding-cardano-s-global-state
* Translation: Ilhun@CryptoVeri enics_sky@naver.com
1 post - 1 participant