728x90
머클 트리는 데이터의 무결성과 인증을 위한 이진 트리의 형태로 이루어진 데이터 구조이다
이진 트리는 데이터를 노드로 가지며, 각 노드는 두 개의 자식 노드를 가질 수 있다
머클 트리는 이러한 이진 트리의 특별한 형태로, 각 노드가 하나 또는 그 이상의 트랜잭션 데이터의 해시값을 저장하게 된다
📝 먼저, 블록의 구성에 대해서 먼저 알아보자
- 블록헤더 : 블록의 정체성 (비전, 이전 블록의 해시, 머클루트, 타임스탬프, 난이도 목표, 난스)
- 거래 카운터 : 거래의 개수
- 거래 : 블록에 기록된 거래내역 (블록 당 평균 500개의 거래)
즉, 블록은 다음과 같이 구성된다
1. 블록의 정체성을 띠는 데이터를 가진 블록헤더
2. 해당 블록에 거래의 개수를 알려주는 거래 카운터
3. 그리고 가장 많은 공간을 차지하는 거래목록들
이 중 블록의 정체성을 갖게하는 1번 블록헤더는 또 3가지로 구성된다
1. 현재 블록이 이전(previous) 블록들과 연결되어 있음을 나타내는, 이전 블록의 해시값을 갖는 데이터
2. 난이도, 타임스태프, 난스 : 이전 포스팅에 설명했듯 채굴 경쟁과 직접적 연관이 되는 부분
3. 머클루트 (Merkle Root)
1번은 해당 블록이 이전의 블록들과 연결되게끔 해주는 것이고, 2번은 채굴기의 연산과 직접적으로 연관된 것들이다
그럼 이제 3번에 대해서 알아보자
📔 머클루트 (Merkle Root) 란?
머클루트는 머클 트리의 가장 위에 있는 노드, 즉 루트 노드의 해시값을 말한다
이를 이해하기 위해서는 먼저 머클 트리의 구조와 작동 방식을 알아야 한다
머클 트리의 작동 방식 :
- 단말 노드의 생성 :
머클 트리는 각 거래의 해시값으로 시작한다
즉, 각 거래를 해시한 값이 트리의 단말 노드가 된다 - 상위 노드의 생성 :
인접한 두 해시값 (단말 노드의 해시값 또는 상위 노드의 해시값)을 합쳐서 다시 해시한 값을 상위 노드의 해시값으로 사용한다
이 과정을 모든 노드에 대해 반복하게 되면, 트리의 최상위 노드, 즉 머클루트를 얻게 된다
이러한 구조 덕분에 머클 트리는 다음과 같은 장점을 가진다
✔️ 데이터 무결성 확인 :
트리의 어떤 데이터가 변경되면, 그 변경은 머클루트에까지 영향을 미친다
따라서 머클루트만 확인하면 전체 데이터의 무결성을 검증할 수 있다
✔️ 효율적인 데이터 검증 :
특정 거래가 머클 트리에 포함되어 있는지 확인하기 위해서는
해당 거래의 해시값과 몇 개의 인접노드의 해시값만 있으면 된다
이를 '머클 경로' 라고 한다. 머클경로를 통해 특정 거래의 포함 여부를 빠르고 효율적으로 검증할 수 있다
따라서, 머클루트는 블록체인에서 블록 내의 모든 거래의 무결성을 보장하는게 중요한 요소이다
블록 헤더에 머클루트를 포함함으로써, 해당 블록에 포함된 모든 거래의 정합성을 빠르게 확인할 수 있다
728x90
'BlockChain' 카테고리의 다른 글
[BlockChain] 난이도 조정 알고리즘 코드 추가 (0) | 2023.09.12 |
---|---|
[BlockChain] 마이닝(Mining) / 블록채굴 난이도 이해하기 (0) | 2023.09.09 |
[Block Chain] TypeScript 로 체인 만들기 (1) | 2023.09.06 |
[Block Chain] TypeScript 로 블록 만들기 (0) | 2023.09.06 |
[BlockChain] 블록체인(Blockchain) 비트코인 개념 이해하기 (0) | 2023.09.04 |