- 머클루트(Merkle root)는 블록체인에서 트랜잭션의 무결성을 검증하기 위해 사용되는 해시 함수의 일종으로 머클루트는 머클트리(Merkle tree)라고도 불리는 이진 트리 구조에서 생성됨
- 머클트리는 블록체인에서 사용되는 트랜잭션 데이터(거래 데이터 || Tx)를 처리하기 위해서 사용되는 자료구조
- 머클 트리는 트랜잭션 데이터의 무결성을 검증하기 위해 사용
- 이진 트리 구조를 사용하여 가장 하단에 각 SPV 노드는 트랜잭션 하나를 저장
- 부모 노드는 자식 노드들의 해시 값을 이용하여 생성
- 이러한 과정을 반복하여 마지막에 생성된 최상의 하나가 루트 노드가 바로 머클루트
- 이진트리를 사용 보통 2의 제곱이 아닐 시 마지막 값을 2의 제곱이 될 때 까지 중복으로 사용
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx8
- Hash(직렬화 후 다시 sha256 64자리 )
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx7
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx5 Tx6
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx5 Tx5 Tx5
채굴자 (풀노드X)
- 채굴자(풀노드X)는 새로운 블록을 생성
- 생성된 블록은 풀 노드에 전송
- 풀 노드는 새로운 블록을 검증하고, 이전 블록과 연결하여 블록체인에 추가
- 새로운 블록이 추가된 블록체인은 모든 풀 노드에게 동기화
- SPV 노드는 블록 헤더와 머클루트값을 사용하여 블록체인의 일부분을 다운로드
- SPV 노드는 검증을 요청하는 TX의 해시값을 풀 노드에 보내어, 해당 거래의 정보 받음
- SPV노드는 풀보드가 보내준 포함된 블록의 머클루트값과 path를 확인하여, 해당 거래의 유효성을 검증
채굴자 (풀노드 )
1.채굴자(풀노드)는 새로운 블록을 생성 후 검증하고, 이전 블록과 연결하여 블록체인에 추가
2.새로운 블록이 추가된 블록체인은 모든 풀 노드에게 동기화
3.SPV 노드는 블록 헤더와 머클루트값을 사용하여 블록체인의 일부분을 다운로드
4.SPV 노드는 검증을 요청하는 TX의 해시값을 풀 노드에 보내어, 해당 거래의 정보 받음
5.SPV노드는 풀노드가 보내준 포함된 블록의 머클루트값과 path를 확인하여, 해당 거래의 유효성을 검증
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx8
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx7
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx5 Tx6
Root Hash
/ \
Hash1 Hash2
/ \ / \
Hash3 Hash4 Hash5 Hash6
/ \ / \ / \ / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx5 Tx5 Tx5
- SPV(Simplified Payment Verification)는 전체 블록체인을 다운로드할 필요 없이 비트코인 네트워크에서 거래를 확인하는 방법임
- SPV 클라이언트는 블록 헤더만 다운로드 되어 있어 혼자서 검증 불가능
- 풀노드에게 path를 요청 후 데이터 받아 검증
- SPV 프로세스는 사용자가 지갑에 액세스할 때 발생
- SPV는 전체 블록체인을 다운로드할 필요 없이 비트코인 네트워크에서 트랜잭션을 검증하는 방법