안녕하세요.
이전에 머클트리에 대해서 글을 써봤지만 정확히 어떠한 용도라 사용되는지에 대한 이해가 완벽하지 못한 상태에서 글을 썻기에 다시 글을 쓰고자 머클 트리에 대해서 다시 한번 이야기 하고자 합니다.
우선 머클 트리에 대해서 이야기하기 전에 SPV노드에 대해서 알아야하는데
https://jeongbincom.tistory.com/75?category=802192
위 게시글에 SPV노드가 무엇인지 자세히 설명해놓았으니 한번 읽어보시는게 좋을 듯 합니다.
SPV노드는 간단히 말해 블록의 모든 데이터를 가지고 있지 않고 블록의 헤더만 가지고 있는 노드를 의미합니다.
이러한 SPV노드는 필요시 풀노드에게 특정 데이터를 요청해서 받는데요. 이 부분에서 머클 트리가 사용되게 됩니다.
우선 머클트리에 대해서 한번 알아보도록 하죠.
머클트리는 다음그림과 같은 구조를 가지고 있습니다.
하기 그림에서 거래 A와 거래 B는 각각 고유의 해쉬값을 가지고 있고, 거래 A와B를 더하여 A+B의 해쉬값을 다시 계산하여 상위해쉬로 계산합니다. 이과정을 더이상 리프노드가 없을때까지 반복하게 되면 최종적으로 하나의 머클루트가 남게 됩니다. 이 머클루트가 블록의 헤더에 포함이 되어 SPV 노드에서 특정거래가 블록에 포함되어 있는지 검증하는데 사용됩니다.
머클루트를 이용하여 특정거래가 해당블록에 포함되어 있는지 검증하기 위해서 머클패스가 사용됩니다.
예를 들어 하기 예에서 거래 K가 블록에 포함되어있는지 검증하기 위해 제공되는 머클패스는 H(L), H(IJ), H(MNOP), H(ABCDEFGH) 가 됩니다.
거래 K와 위의 머클패스를 제공받게 되면 어떤 노드라도 해쉬계산을 통해 머클루트를 계산해낼수 있고, 그값을 블록헤더에 포함된 머클루트와 비교하여 해당거래가 블록에 포함되어 있는지 검증할수 있습니다.
다음 그림에서 거래 K가 블록에 포함되어 있는지 검증하는 과정은 다음과 같습니다.
1. 거래 K와 머클패스로 제공된 Hash(L)을 사용하여 Hash(KL)을 계산
2. 머클패스로 제공된 Hash(IJ)와 계산된 Hash(KL)을 사용하여 Hash(IJHL) 계산
3. 계산된 Hash(IJKL)과 머클패스로 제공된 Hash(MNOP)를 사용하여 Hash(IJKLMNOP) 계산
4. 머클패스로 제공된 Hash(ABCDEFGH)와 계산된 Hash(IJKLMNOP)를 사용하여 Hash(ABCDEFGHIJKLMNOP)를 계산
5. 계산된 Hash(ABCDEFGHIJKLMNOP)와 헤더에 포함된 머클루트를 비교하여 동일한 값이면 거래 K가 블록에 포함되어있음이 증명됨
위 내용을 최종적으로 말하자면 A가 B에게 50을 보낸다는 트랜잭션을 생성하였을 경우
해당 A에게 UTXO가 50이 있는지를 확인해야합니다. 그러기 위해서 이전 블록에서 A가 50이 있는지 확인을 하게 됩니다.
그 부분에서 블록헤더만을 가지고 해당 트랜잭션에 필요한 tx(hash) 값들을 풀노드에게 받아 정상적으로 블록헤더가 나오는지 확인하여 블록의 트랜잭션 여부를 확인하는 것입니다.
틀렸거나 이상한 부분이 있다면 댓글에 글을 써주시면 감사하겠습니다.
긴 글 읽어주셔서 감사합니다.
'BlockChain > BitCoin' 카테고리의 다른 글
[BitCoin] 블룸 필터 (0) | 2019.05.02 |
---|---|
[BitCoin] 타원 곡선 암호화 (0) | 2019.05.02 |
[BitCoin] 단순지불검증(SPV) 노드 (0) | 2019.04.16 |
[BitCoin] 비트코인 네트워크 (0) | 2019.04.16 |
[BitCoin] 비트코인내에서의 거래 (0) | 2019.04.16 |
댓글