블록으로 연결된 (= 체인) 것이 = 블록체인! Linked list
각 하나 하나의 블록을 구성하는 요소들은 아래와 같다
블록 1개의 구성 요소
1. 블록헤더(Block Header) : 블록의 정체성 (비전, 이전 블록의 해시, 머클루트, 타임스탬프, 난이도 목표, 난스)
2. 거래카운터 : 거래의 개수
3. 거래 : 블록에 기록된 거래내역 (한 블록 당 평균 500개의 거래)
이 중 1번 블록헤더를 구성하는 3가지 요소
1. 이전 (previous) 블록들과 연결되어 있음을 나타내는 이전 블록의 해시(Hash)값을 갖는 데이터
2. 난이도, 타임스탬프, 난스 : 채굴 경쟁과 직접적 연관이 되는 부분
3. 머클루트 (Merkle Root)
* 난스(nonce)란? 임의로 생성되는 암호화 토큰으로 재생 공격 방지하는데 사용
블록헤더의 세 번째 요소 - 머클루트, Merkle Root 란 무엇일까?
머클루트 Merkle Root , 머클 트리 Merkle Tree
1) 머클 트리, Merkle Tree
머클 트리는 = 이진 트리 (binary trees) 이다. 두 개의 거래를 한 쌍으로 묶는다. 각 쌍은 하나의 뿌리를 가지고 있다.
위의 과정은 두 개씩 묶은 다음 SHA256 암호화 방법을 통해 해시값을 나타내고 그렇게 묶은 값들을 다시 두 개씩 묶기를 반복하면 결국 한 개의 꼭대기(root)에 위치한 데이터가 만들어진다. 즉, 거래가 아무리 많아도 결국 두쌍이 합쳐지고 또 그 합쳐진 것들이 두 쌍을로 또 짝지어지기를 반복하면서 하나만 함축되며 결국 요약된 2) 머클루트 Merkle Root 의 용량은 32bytes로 항상 같다.
머클 트리는 특정 거래를 찾을 때 쉽고 효율적이다. 거래량이 기하급수적으로 많더라도 결국 하나를 찾기위한 경로는 단순해진다. (완전탐색 (모든 경우를 찾는 방법)이 아닌 이진 트리 방법으로 위에서 아래로 해싱한 경우의 수만큼만 찾으면 된다.) 거래의 수가 N 증가할 때마다 특정 거래를 찾는 경우의 수는 log2(N)으로 늘어난다.
거래가 1024개라면 특정 거래를 찾기위해 log2(1024) = 10 이므로 10번의 경로만 확인해보면 된다. 또한 거래 내역을 위조하는 경우, 또는 그러한 시도가 있따고 해도 머클트리의 경로를 따라가다 보면 해시값을 추적하고 확인할 수 있기 때문에 거래 위변조도 쉽고 빠르게 알 수 있다.
블록체인의 용량은 시간이 지날수록 늘어난다. 거래가 전 세계 이곳저곳에서 늘어나고 따라서 노드가 생기므로 모든 노드를 보유할 수 있는 컴퓨터는 성능이 매우 좋은 컴퓨터이다. 하지만 위의 머클 트리의 이진 트리 방식은 블록데이터의 일부만 보유하는 'light node' 로 우리의 핸드폰, 노트북으로도 쉽고 빠르게 특정 거래를 찾을 수 있다.
즐, 간단하게 말하자면
1) 머클 트리, Merkle Tree
블록에서 머클 트리의 역할은 거래를 쉽고 효율적으로 거래를 찾을 수 있게하고 확실한 인증을 위한 이진트리 기반의 데이터 구조
2) 머클루트 Merkle Root
머클트리의 root, 뿌리 노드, 가장 위에 있는 노드이다.
'Block Chain' 카테고리의 다른 글
[Klaytn] 클레이튼이란? 안전한가? 클레이 코인 시세 (0) | 2022.02.24 |
---|---|
[solidity Ganache-cli web3 solc] smart Contract 만들어 배포하기 (0) | 2022.02.21 |
[SPDX란?] Warning: SPDX license identifier not provided in source file (0) | 2022.02.21 |
[블록체인] 이더리움 solidity 공부 크립토 좀비 level 2 해설 (0) | 2022.02.16 |
블록체인 공부 시작 방법 / 크립토 좀비 / Crypto Zombie / 이더리움 solidity Lesson 1 해석 (0) | 2022.02.10 |
댓글