본 글은 비트코인의 작동 원리를 이해하기 쉽게 설명해 놓은 해외 사이트 Learn me a bitcoin 내에 있는 Merkle Root 페이지를 번역한 글입니다. 읽은 것을 개인적으로 이해하기 쉽게 정리하여 작성한 글이다 보니, 어색한 부분이 있을 수도 있습니다. 원문을 읽고자 하시는 분은 위의 링크를 참조해 주세요. 😀
머클 루트(Merkle root)
- 블록 내 모든 트랜잭션에 대한 지문입니다.
머클 루트는 TXID를 하나의 쌍으로 해시하여, 블록 내 모든 트랜잭션에 대한 간결하고 고유한(unique) 지문을 생성합니다.
이 머클 루트는 블록 헤더(Block Header)의 필드에 들어가므로, 모든 블록 헤더에는 블록 내 모든 트랜잭션에 대한 지문이 포함된다고 할 수 있습니다.
왜 머클 루트를 사용하나요?
블록 내 모든 트랜잭션에 대한 고유한 지문을 머클 루트를 사용하지 않고 만든다고 가정해 봅시다. 그냥 트랜잭션의 모든 TXID를 한 번에 모아서 해시해서 간단하게 고유한 해시값을 만들 수도 있습니다. (여기서 이 해시 결과를 Simple Hash라고 칭하겠습니다.)
근데 나중에 어떤 하나의 TXID가 그 Simple Hash에 포함된 게 맞는지 확인하려면, 다른 모든 TXID도 알아야 합니다. 왜냐하면 그 Simple Hash를 만들었던 과정 자체를 반복해서 (모든 TXID를 한 번에 모아서 해시 함수 실행) 똑같은 Simple Hash라는 결과가 나오는지 확인해야 하니까요.
하지만 머클 트리를 사용하여 TXID가 머클 루트의 일부인지 확인하려면, 트리 경로를 따라 일부 해시값만 알면 됩니다.
결과적으로 블록 헤더에 대한 지문으로 머클 루트를 사용함으로써, 우리는 나중에 블록의 다른 모든 TXID를 알 필요 없이도 블록에 어떤 특정 트랜잭션이 존재하는지 여부를 손쉽게 확인할 수 있습니다.
✅ 머클 트리(Merkle tree)는 전체 집합을 알지 않아도 특정 항목이 집합에 포함되어 있는지를 효율적으로 증명하는 방법입니다.
머클 트리는 비트코인에서 언제 유용하게 사용되나요?
머클 트리 덕분에, 전체 블록체인을 다운로드하고 저장하는 부담 없이도 거래가 블록에 포함되었는지 확인할 수 있는 "가벼운 노드" (또는 "경량 지갑")를 만들 수 있습니다.
즉, 머클 트리는 블록체인 전체를 다운로드하지 않아도 거래가 블록에 포함되었는지 검증할 수 있는 경량화된 지갑을 만드는 데에 있어서 유용합니다.
머클루트는 어떻게 만들 수 있나요?
다음은 비트코인에서 머클 루트가 생성되는 방법을 설명하는 기술 다이어그램입니다.
머클 루트 도출 코드 스니펫 (Ruby 및 PHP)
- merkleroot.rb By Greg Walker
- merkleroot.php By Greg Walker
'블록체인 > 비트코인' 카테고리의 다른 글
넌스 (Nonce) (0) | 2023.04.07 |
---|---|
비츠(Bits) (0) | 2023.04.07 |
블록 헤더(Block header) (0) | 2023.04.07 |
블록(Blocks) (0) | 2023.04.07 |
후보 블록(Candidate Block) (0) | 2023.04.07 |