머클루트

개굴·2023년 5월 2일
0

Blockchain

목록 보기
5/6

머클루트 넌 뭐야?

  • 머클루트(Merkle root)는 블록체인에서 트랜잭션의 무결성을 검증하기 위해 사용되는 해시 함수의 일종으로 머클루트는 머클트리(Merkle tree)라고도 불리는 이진 트리 구조에서 생성됨
  • 머클트리는 블록체인에서 사용되는 트랜잭션 데이터(거래 데이터 || Tx)를 처리하기 위해서 사용되는 자료구조

머클루트 왜 사용되지 ?

  • 머클 트리는 트랜잭션 데이터의 무결성을 검증하기 위해 사용

머클루트 어떻게 만들어지는 데?

  • 이진 트리 구조를 사용하여 가장 하단에 각 SPV 노드는 트랜잭션 하나를 저장
  • 부모 노드는 자식 노드들의 해시 값을 이용하여 생성
  • 이러한 과정을 반복하여 마지막에 생성된 최상의 하나가 루트 노드가 바로 머클루트
  • 이진트리를 사용 보통 2의 제곱이 아닐 시 마지막 값을 2의 제곱이 될 때 까지 중복으로 사용

머클루트 생성

  • 거래가 8개 일 때
          Root Hash
           /      \
      Hash1         Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx8

- Hash(직렬화 후 다시 sha256 64자리 ) 
  • 거래가 7개 일 때
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx7
  • 거래가 6개 일 때
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx5 Tx6
  • 거래가 5개 일 때
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx5 Tx5 Tx5

머클루트 검증

채굴자 (풀노드X)

  1. 채굴자(풀노드X)는 새로운 블록을 생성
  2. 생성된 블록은 풀 노드에 전송
  3. 풀 노드는 새로운 블록을 검증하고, 이전 블록과 연결하여 블록체인에 추가
  4. 새로운 블록이 추가된 블록체인은 모든 풀 노드에게 동기화
  5. SPV 노드는 블록 헤더와 머클루트값을 사용하여 블록체인의 일부분을 다운로드
  6. SPV 노드는 검증을 요청하는 TX의 해시값을 풀 노드에 보내어, 해당 거래의 정보 받음
  7. SPV노드는 풀보드가 보내준 포함된 블록의 머클루트값과 path를 확인하여, 해당 거래의 유효성을 검증

채굴자 (풀노드 )

1.채굴자(풀노드)는 새로운 블록을 생성 후 검증하고, 이전 블록과 연결하여 블록체인에 추가
2.새로운 블록이 추가된 블록체인은 모든 풀 노드에게 동기화
3.SPV 노드는 블록 헤더와 머클루트값을 사용하여 블록체인의 일부분을 다운로드
4.SPV 노드는 검증을 요청하는 TX의 해시값을 풀 노드에 보내어, 해당 거래의 정보 받음
5.SPV노드는 풀노드가 보내준 포함된 블록의 머클루트값과 path를 확인하여, 해당 거래의 유효성을 검증

  • 거래가 8개 일 때 Tx4 검증
    • Tx3, Hash3, Hash2
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx8
  • 거래가 7개 일 때 Tx7 검증
    • Tx7, Hash5, Hash1
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx7 Tx7
  • 거래가 6개 일 때 Tx5 검증
    • Tx6, Hash6, Hash1
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx6 Tx5 Tx6
  • 거래가 5개 일 때 Tx5 검증
    • Tx5, Hash6, Hash1
          Root Hash
           /      \
      Hash1        Hash2
       /  \         /  \
  Hash3  Hash4  Hash5  Hash6
  / \    /  \    / \    / \
Tx1 Tx2 Tx3 Tx4 Tx5 Tx5 Tx5 Tx5

왜 풀노드에게 SPV는 검증Path 요청해 ?

  • SPV(Simplified Payment Verification)는 전체 블록체인을 다운로드할 필요 없이 비트코인 네트워크에서 거래를 확인하는 방법임
  • SPV 클라이언트는 블록 헤더만 다운로드 되어 있어 혼자서 검증 불가능
    • 풀노드에게 path를 요청 후 데이터 받아 검증
  • SPV 프로세스는 사용자가 지갑에 액세스할 때 발생
  • SPV는 전체 블록체인을 다운로드할 필요 없이 비트코인 네트워크에서 트랜잭션을 검증하는 방법

0개의 댓글