Cardano의 글로벌 상태 이해


https://cexplorer.io/article/understanding-cardano-s-global-state
블록체인의 역사는 블록체인의 글로벌 상태로 볼 수 있습니다. 그러나 새로운 거래를 검증하기 위해 노드에는 이 기록의 일부만 필요합니다. 블록이 추가될 때마다 블록체인이 확장되므로 지속적으로 성장하는 상황에서 새로운 거래를 검증하는 것이 비효율적입니다. 이 글에서는 블록체인의 역사를 통해 새로운 거래를 검증하고 새로운 블록을 구축하는 데 활용되는 글로벌 상태가 어떻게 형성되는지 설명할 것입니다.
블록체인은 거래의 역사일 뿐이다

블록체인은 거래의 기록으로 볼 수 있습니다. 체인의 각 블록에는 거래 목록이 포함되어 있으며, 새로운 블록이 추가될 때마다 블록체인의 기록(및 글로벌 상태)이 변경됩니다.

아래 그림에서는 블록체인에 새로 추가된 블록과 전역 상태의 변화 사이의 상관 관계를 볼 수 있습니다. 새로 추가된 각 블록은 상태 전환을 나타냅니다.

네트워크 합의는 네트워크의 모든 노드(정직한 대다수의 노드)가 블록체인의 현재 상태에 동의하도록 보장하는 중요한 메커니즘입니다. 합의를 통해 네트워크는 한 상태에서 다른 상태로 안전하게 전환할 수 있습니다. 즉, 새로운 블록이 블록체인에 추가되기 전에 모든 노드가 해당 블록의 유효성에 동의해야 합니다.

블록체인이 올바르게 작동하려면 분산 네트워크의 모든 노드의 전역 상태가 동일해야 합니다. 이러한 일관성은 블록체인의 무결성과 보안을 보장하고 추가 상태 변경을 촉진하는 데 필요합니다.

모든 네트워크 노드에서 새로운 상태로의 전환은 즉시 발생하지 않습니다. 비록 짧기는 하지만 네트워크 대기 시간으로 인해 점진적인 프로세스입니다. Cardano 네트워크에서 새로운 상태로의 전환은 새 블록을 생성하는 노드에서 시작되고 모든 네트워크 노드가 이 블록을 수신하면 종료됩니다. 블록이 유효하고 모든 노드에서 승인되면 전역 상태의 변경과 함께 상태 전환이 발생합니다.

실제로 글로벌 상태의 변화는 블록체인 역사의 변화만을 반영하는 것은 아닙니다. 후속 블록 변환을 검증하기 위한 컨텍스트도 마찬가지입니다. 이 맥락은 모든 개별 거래를 포괄하는 블록체인의 완전한 역사가 아닙니다. 대신 이는 이 기록의 하위 집합, 특히 활성 UTxO 세트 또는 UTxO 세트입니다.

그림에서 블록체인에 추가된 각 블록이 UTxO의 활성 세트(새 블록을 검증하기 위한 전역 상태)를 어떻게 변경하는지 확인할 수 있습니다. UTxO 세트는 5개의 새로운 블록이 추가됨에 따라 처음(STATE 0)부터 5번의 연속 변경을 거쳤습니다.


분산 네트워크의 모든 노드는 독립적으로 작동하며 고유한 블록체인 버전과 활성 UTxO 세트를 유지합니다. 노드가 블록체인 끝에 추가되도록 제안된 새 블록에 대한 후보를 수신할 때마다 검증을 거쳐야 합니다. 이 검증 프로세스의 입력은 새 블록과 활성 UTxO 세트입니다. 블록 헤더에 캡슐화된 다른 매개변수와 함께 노드는 블록 내의 모든 거래를 검증해야 합니다. 이 검증의 결과는 블록을 로컬 버전의 블록체인에 통합할지 여부에 대한 노드의 독립적인 결정입니다. 이 동일한 절차는 네트워크 내의 모든 노드에서 실행됩니다.

그림에서는 BLOCK 5 다음에 추가될 것으로 예상되는 새로운 BLOCK 6에 대한 검증이 어떻게 이루어지는지 확인할 수 있습니다. 검증을 위한 입력은 새로운 블록과 활성 UTxO 세트입니다. 유효성 검사의 출력은 새 블록이 유효한지(블록체인의 로컬 버전에 추가될지) 또는 유효하지 않은지 여부를 유효성 검사기가 결정하는 것입니다.
UTxO 세트

노드가 블록체인의 로컬 버전에 새 블록을 추가할 때마다 UTxO 세트의 로컬 버전도 변경됩니다.

UTxO 세트는 트랜잭션 출력으로 생성되었으며 향후 트랜잭션에 사용될 가능성이 있는 모든 UTxO로 구성됩니다. 따라서 이는 Cardano 블록체인의 전체 역사에 존재하는 모든 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 세트를 얻으려면 일반적으로 Genesis 블록부터 시작하여 블록체인의 전체 기록을 처리해야 합니다.

활성 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 세트의 변환을 보여줍니다. STATE 0에서는 후속 블록에 통합될 6개의 트랜잭션을 관찰합니다. 빨간색 UTxO는 트랜잭션 입력으로 사용되는 UTxO입니다. 이는 해당 UTxO가 사용된다는 의미입니다. 녹색 UTxO는 생성될 것입니다. STATE 1은 새로운 블록이 추가된 후의 상태를 나타냅니다. 빨간색 UTxO가 UTxO 세트에서 제거되고 녹색 UTxO가 추가되었습니다. 결과적으로 UTxO 세트의 모든 UTxO는 소비 가능합니다. 새로 추가된 녹색 UTxO를 파란색으로 생각하세요.

그림의 트랜잭션은 STATE 0에서 구축되어 네트워크에 제출된 블록을 나타냅니다. STATE 1에서는 이미 블록체인에 추가되었습니다. 그림에는 표시되지 않았지만 STATE 1에서는 이미 새로운 블록이 생성되고 있습니다. UTxO 세트의 UTxO를 참조하는 새로운 트랜잭션을 상상할 수 있습니다.
결론

실제로 각 UTxO는 한 번만 사용할 수 있으며 이는 이중 지출 공격을 방지하는 데 도움이 되는 기본 규칙입니다. UTxO가 활용되면 다른 트랜잭션의 입력으로 재사용할 수 없습니다. 블록 검증 중에 검증자가 모든 UTxO 입력이 고유하고 UTxO 세트 내에 존재하는지 확인하는 것은 간단합니다. 거래 검증 프로세스와 결합된 UTxO 모델의 아키텍처는 블록 검증자가 잠재적인 이중 지출 공격을 식별하고 방지하는 작업을 단순화합니다. 이는 블록체인 기술의 주요 보안 기능 중 하나입니다.

일회용 객체로 구성된 UTxO 세트는 네트워크 내에서 높은 수준의 병렬화를 촉진한다는 이점을 제공합니다. 트랜잭션 검증은 서로 독립적이며 UTxO의 독립적인 소비를 반영합니다. 또 다른 이점은 제출 전에 트랜잭션을 로컬에서 검증하여 네트워크 검증도 통과할 수 있다는 것입니다. 로컬 및 네트워크 검증은 모두 동일한 입력 UTxO에 의존합니다. 로컬 검증과 네트워크 검증 사이의 기간 동안 트랜잭션이 블록에 포함되기 전에 입력 UTxO는 변경되지 않은 상태로 유지됩니다. 따라서 거래가 실패할 이유가 없어야 합니다.