블록체인 구성중에 머클트리 질문드립니다
첨부한 사진에 보이는 것처럼 블록에는 머클트리해시값이 있는데요.
궁금한것이, 블록안에는 여러개의 거래가 있는데요. 머클트리해시값이 생성되고나서
새로운 거래가 블록안에 생기면 어떻게 되나요? 머클트리해시값은 거래정보들을가지고
해시값을 만드는건데요. 값이 바뀌지 않나요?
아니면, 블록이 거래로 꽉 찼을때 마지막에 만들어지는 걸까요? 궁금합니다.
그렇다면 거래가 꽉 차기전에는 머클트리해시값이 없는채로 블록이 존재하고 있는건지요.
블록체인 잘 아시는분 답변 부탁드립니다. 감사합니다.
안녕하세요 김광호님,
일단 머클트리를 설명드리기 전에 이더리움의 블록 생성 과정에 대해서 잠깐 말씀을 드려야 할 것 같습니다.
대부분의 POW 합의 알고리즘을 사용하는 블록체인 플랫폼들은 블록을 생성하는 일명 '채굴'을 하는 노드(Node) 라고 불리는 특별한 클라이언트가 있습니다.
노드는 개인도 단순히 이더리움의 경우 Geth 의 명령어 몇가지만으로 뚝딱뚝딱 실행해 보실 수 있습니다.
이러한 특수한 클라이언트들은 단순히 거래만을 발생시키는 여러 사용자들의 거래정보들을 한데 모아 블록이라고 하는 비가역적인 데이터 셋을 생성합니다.
이때, 현존하는 대부분의 블록체인은 머클트리를 사용하여 블럭을 구조화하죠.
이 머클 트리는 아래 그림과 같이 구성 되어있는데요,
즉, Top Hash 를 구한 이후에 새로운 거래 내역을 추가하는것은 계산을 또 다시 해야만 하는 아주 비효율적인 방법입니다.
그래서 대부분의 블록체인은 블럭에 어떤 거래들을 포함할지 결정하고 블럭을 생성하기 시도합니다.
블럭이 한번 생성되어 다른 노드들에게 전파되고 이더리움의 경우 6컨펌이 일어나게 되면 더이상 새로운 거래를 추가하거나 하는 일은 일어날 수 없습니다.
다만, 각 노드들이 담는 거래 내역은 완전히 다를 수 있기 때문에 A 노드가 블럭을 생성하였다고 하더라도 6 컨펌을 받지 못한다면 기 생성되었던 머클 루트가 달라질 수는 있습니다.
도움이 되었기를 바랍니다.