본문 바로가기
블록체인 이론

머클트리

by gun_poo 2024. 2. 21.

비트코인에서의 머클트리와 이더리움에서의 머클트리의 구조는 다소 차이가 있다.

 

우선 머클 트리(Merkle Tree)는 블록체인 기술에서 데이터의 무결성을 검증하는 데 사용되는 데이터 구조이다. 이 구조는 특히 거래 데이터의 무결성을 효율적으로 검증하기 위해 설계되었다. 여기서 "무결성"이란 데이터가 변경되지 않았음을 의미한다.

 

비트코인 머클트리

  • 머클 트리의 기본 원리
    • 머클 트리는 기본적으로 이진 트리 구조를 가지며, 각 노드는 자식 노드의 해시값을 합친 후, 그 결과를 다시 해시한 값으로 구성된다. 이 과정은 트리의 최상단에 도달할 때까지 반복되며, 최상단에 위치한 노드를 "머클 루트"라고 한다.
  • 거래 해시와 머클 트리
    • 1. 거래 해시화: 블록 내의 각 거래는 해시 함수를 통해 고유한 해시값으로 변환된다. 이 해시값은 거래의 디지털 지문과 같은 역할을 한다.
    • 2. 트리 구성: 이 해시값들은 이진 트리 형태로 정렬된다. 가장 가까운 두 거래의 해시값을 합쳐(이를 '부모 노드'라고 함) 새로운 해시값을 생성하고, 이 과정을 트리의 모든 레벨에 대해 반복한다.
      • 이진트리 : 이진 트리(Binary Tree)  노드가 최대  개의 자식 노드를 가질  있는 트리 구조
    • 3. 머클 루트 생성: 최종적으로, 트리의 최상단에 도달하여 단 하나의 해시값, 즉 머클 루트가 생성된다. 이 머클 루트는 블록 내 모든 거래의 요약 정보를 담고 있다.
  • 머클 트리의 장점
    • 데이터 무결성 검증: 머클 루트를 통해 블록 내의 모든 거래 데이터가 변경되지 않았음을 효율적으로 검증할 수 있다. 블록 내의 어떤 데이터라도 변경되면, 그 변경은 머클 루트에 반영되어 머클 루트의 값이 달라진다.
    • 효율성: 전체 거래 데이터를 다운로드하지 않고도 특정 거래가 블록 내에 포함되었는지를 검증할 수 있다. 이는 "경량 노드"나 "SPV(Simplified Payment Verification) 클라이언트"가 전체 블록체인을 다운로드하지 않고도 거래를 검증할 수 있게 한다.
  • 예시
    • 블록 내에 4개의 거래(A, B, C, D)가 있다고 가정해보자. 각 거래의 해시값을 HA, HB, HC, HD라 한다. 이 해시값들을 이용해 머클 트리를 구성하면 다음과 같은 과정을 거친다:
      • 1. HA와 HB의 해시값을 합쳐 HAB를 생성, HC와 HD의 해시값을 합쳐 HCD를 생성
      • 2. HAB와 HCD를 합쳐 최종 머클 루트를 생성
    • 이 과정을 통해, 블록 내의 모든 거래 정보를 단 하나의 해시값(머클 루트)내의 모든 거래 정보를 단 하나의 해시값(머클 루트)으로 요약할 수 있다. 이 머클 루트는 블록 헤더에 포함되어 블록체인 네트워크 전체와 공유한다. 머클 트리의 구조 덕분에, 블록 내의 어떤 거래 데이터가 변경되면, 그 변경은 머클 루트의 값에도 반영되어, 머클 루트의 값이 달라지게 된다. 이는 블록 내의 데이터 무결성이 보장됨을 의미한다.
  • 머클 트리를 통한 검증 과정
    • 머클 트리를 사용하면, 전체 거래 목록을 다운로드하지 않고도 특정 거래가 블록에 포함되었는지를 검증할 수 있다. 예를 들어, 거래 A가 블록에 포함되었는지 확인하려면, 거래 A의 해시값(HA)과 거래 A를 검증하기 위해 필요한 "머클 경로"만 있으면 된다.
    • 머클 경로는 특정 거래를 머클 루트까지 연결하는 데 필요한 모든 해시값의 집합. 이 경로와 거래 A의 해시값을 사용하여, 머클 루트를 독립적으로 계산하고, 이 계산된 머클 루트가 블록 헤더에 저장된 머클 루트와 일치하는지 확인함으로써 거래 A의 포함 여부를 검증할 수 있다.
  • 머클 트리의 파급 효과
    • 블록 내의 하나의 데이터가 변경되면, 해당 데이터의 해시값이 변경되고, 이는 부모 노드의 해시값 변경으로 이어진다. 이 변경은 머클 트리를 따라 최상위 노드인 머클 루트까지 전파된다. 따라서, 머클 루트의 값이 달라지게 되며, 이는 블록 내의 데이터가 변경되었음을 즉각적으로 알 수 있는 강력한 지표가 된다.
  • 결론
    • 머클 트리는 블록체인 기술에서 데이터 무결성을 효율적으로 검증할  있는 중요한 메커니즘이다. 이를 통해 블록체인 네트워크는 높은 수준의 보안과 투명성을 유지할  있으며, 사용자는 블록 내의 거래가 변경되지 않았음을 신뢰할  있다.

 

 

이더리움의 머클 트리 구조

 

이더리움은 비트코인과는 다르게, 머클 패트리샤 트리(Merkle Patricia Tree, MPT)라는 특별한 형태의 머클 트리를 사용한다. 이 구조는 데이터의 저장, 검색, 수정이 빈번하게 발생하는 이더리움의 특성을 고려하여 설계되었다. 머클 패트리샤 트리는 효율성, 보안성, 그리고 유연성을 제공한다.

머클 패트리샤 트리의 특징

 

1. 트라이(Trie) 구조: MPT는 트라이의 한 형태로, 키-값 쌍을 저장하는 검색 트리이다. 이더리움에서는 이 구조를 사용하여 상태(state), 트랜잭션, 영수증의 데이터를 저장한다.

2. 경로 압축: MPT는 경로 압축을 사용하여 노드 간의 경로를 최적화하고, 저장 공간을 절약한다.

3. 세 가지 유형의 노드: MPT는 리프 노드(leaf node), 확장 노드(extension node), 분기 노드(branch node)의 세 가지 유형의 노드를 가진다. 이를 통해 효율적인 데이터 저장 및 검색이 가능하다.

 

이더리움에서의 사용

이더리움은 세 가지 주요 유형의 머클 패트리샤 트리를 사용한다:

 

1. 상태 트리(State Trie): 모든 계정의 상태(잔액, 스토리지, 코드, nonce)를 저장한다. 각 블록 후의 최종 상태가 이 트리에 저장된다.

2. 트랜잭션 트리(Transaction Trie): 블록 내의 모든 트랜잭션을 저장한다. 이를 통해 특정 트랜잭션이 블록 내에 포함되었는지 검증할 수 있다.

3. 영수증 트리(Receipts Trie): 각 트랜잭션의 실행 결과를 저장하는 영수증을 포함한다. 이는 트랜잭션이 성공적으로 실행되었는지, 어떤 로그 이벤트가 발생했는지 등의 정보를 제공한다.

4. 스토리지 트리(storage Trie): 컨트렉트 계정의 storage 정보가 담겨 있다. ethereumAccount 배열 안에 storageRoot에 root 값이 들어간다. key 값(path)은 약간의 계산 과정을 거친다.

 

머클 패트리샤 트리의 주요 용어

 

Node: 트리를 구성하는 기본 단위로, 여러 형태가 있다.

Blank Node: 비어 있는 노드.

Leaf Node: [key, value] 구조로, 거래 정보 등을 저장한다.

Branch Node: 17개의 요소를 가진 배열로, 앞의 16개는 자식 노드를 가리키고, 마지막 요소는 노드 자체의 값이다.

Extension Node: [key, value] 구조로, 공통 경로를 가진 노드들을 연결한다.

Hex-Prefix Encoding: 키 값을 인코딩하는 방식으로, 노드의 타입과 경로의 길이 정보를 포함한다.

 

머클 패트리샤 트리의 동작 원리

머클 패트리샤 트리는 - 쌍을 저장하며, 값의 공통 부분을 따라 데이터를 조직화한다. 데이터가 추가되거나 변경될 , 해당 경로에 있는 노드들의 해시값이 업데이트되어, 최종적으로 루트 노드의 해시값이 변경된다. 구조는 데이터의 무결성을 보장하며, 특정 데이터가 트리에 포함되어 있는지를 효율적으로 검증할 있게 한.

 

머클 패트리샤 트리의 장점

데이터 무결성: 상태 트리의 루트 해시는 블록 헤더에 저장되어, 블록체인의 모든 상태 변경이 무결성을 유지하도록 한다.

경량 노드 지원: 경량 노드는 전체 블록체인 데이터를 다운로드하지 않고도, 특정 데이터가 블록체인에 포함되었는지 검증할 수 있다.

데이터 복구: 상태 트리의 구조 덕분에, 노드는 네트워크의 다른 노드로부터 필요한 부분만을 요청하고 다운로드하여 자신의 로컬 데이터베이스를 복구하거나 업데이트할 수 있다. 이는 특히 네트워크에 새로 참여한 노드가 전체 블록체인의 상태를 동기화할 때 유용하다.

 

이더리움 머클 패트리샤 트리의 도전 과제

 

복잡성: 머클 패트리샤 트리는 구현과 유지 관리 측면에서 상당한 복잡성을 가진다. 이는 특히 새로운 개발자가 이더리움 플랫폼에 참여하거나 기존 시스템을 수정할 때 장벽이 될 수 있다.

성능 문제: 머클 패트리샤 트리의 복잡한 구조는 때때로 데이터 검색과 업데이트에 있어 성능 저하를 초래할  있다. 이더리움은 이러한 문제를 해결하기 위해 지속적으로 최적화 작업을 수행하고 있다.

'블록체인 이론' 카테고리의 다른 글

Nonce  (0) 2024.02.21
이더리움 Nonce 검증  (0) 2024.02.21
암호학  (0) 2024.02.19
공개 범위에 따른 블록체인(컨소시엄)  (0) 2022.02.14
공개 범위에 따른 블록체인(프라이빗)  (0) 2022.02.14

댓글