티스토리 뷰
이 글은 2017, 2018년 블록체인 학회 활동때 공부한 것을 옮긴 글로
지금은 업데이트된 부분이 있을 수 있으니 유의해주세요.
[1] 블록체인이란?
블록체인이란 무엇일까요?!
말그대로 블록 + 체인 입니다.
아래 그림처럼 여러 블록들이 이어져서 만들어진 블록의 집합체를 블록체인이라고 부릅니다.
블록은 쉽게 말하면 유효한 거래정보의 묶음 이라고 할 수 있습니다.
아래에서 블록안에 어떤 것들이 있는 지 살펴보겠습니다.
[2] 블록의 구조
블록의 구조를 살펴봅시다.
1) 블록해쉬
우선 블록해쉬는 블록의 식별자 역할을 합니다.
이름은 블록 해쉬이지만 그 값은 블록 전체를 해쉬한 값이 아니라, 블록 헤더를 해쉬한 값입니다.
좀 더 구체적으로 말하면 , 블록 해쉬는 6가지의 블록 헤더 정보를 입력값으로 하고,
여기에 SHA256 해쉬 함수를 적용해서 계산되는 값입니다.
2) 블록헤더
아래에서 따로 살펴볼게요!
3) 거래정보
마이너들에게 참이라고 증명받은 거래정보들이 10분동안 모인 것들입니다.
자세한 내용은 아래에서 살펴볼게요!
4) 기타정보
기타정보는 블록 헤더와 거래 정보에 포함되지 않는 데이터로 구성된다고 하는데
구체적인 것은 잘모르겠네요
[3] 블록 헤더의 구조
블록헤더에는 여섯가지 정보가 들어갑니다.
1) 버전
소프트웨어 버전
2) Previous hash
블록 체인에서 바로 앞에 위치하는 블록의 블록 해쉬입니다. 이것 때문에 블록이 계속 연결되어있을 수 있습니다.
참고로 genesis 블록은 앞블록이 없으니까 previous hash값이 0입니다.
3) Merkle hash
개별 거래 정보의 거래 해쉬를 2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값.
이것을 이해하기 위해서는 '머클트리(Merkle Tree)'라는 데이터구조를 알아야합니다.
우선 Merkle Tree는 Ralph Merkle이라는 사람이 1979년에 특허를 낸 개념입니다.
그림처럼 두 개씩 거래를 묶어서 해쉬값을 구하고 또 그렇게 묶은 값들을 다시 두 개씩 묶어서 해싱하며
수많은 거래 값들을 그림의 가장 꼭대기에 위치한 하나의 데이터로 만들어주는 것 입니다.
트리의 가장 꼭대기 , 이 하나의 값을 머클해쉬라고 하고 이게 블록헤더에 들어가게 됩니다.
4) TIME
블록이 생성된 시간
5) BITS
난이도 조절용 수치, 계산난이도 목표
6) NONCE
해시값을 계산하기 위한 임의값
BITS와 NONCE를 이해하기 위해서는 채굴을 이해해야합니다.
왜냐면 두개는 채굴의 과정 속에 쓰이는 개념이기 때문입니다.
일단 채굴을 위해서는 어떤 특정값보다 블록해쉬가 작게 나오게 하는 nonce값을 구해야하는데
그 특정값은 작업난이도에 따라 결정이 됩니다.
우선 Bits값은 작업난이도를 구하는 데 쓰입니다.
블록헤더의 구성요소 중 5가지는 값이 고정되어 변경할 수 없고,
오직 nonce만 값을 바꿀 수 있는데,
아래 그림처럼 이 nonce값을 계속 바꿔가면서 블록해쉬를 계산해서 어떤 특정값보다 작은 해쉬값을 구해야합니다.
이렇게 구한 nonce값이
새로 만들어지는 블록의 nonce값으로 확정되고,
그 해쉬값이 새로 생성되는 블록의 블록 해쉬값으로 최종 확정되며 작업 증명이 끝나게 된다.
그래서 nonce는 최초 0에서 시작하여 조건을 만족하는 해쉬값을 찾아낼때까지의 1씩 증가시키는 임의 값이라고 생각하시면 됩니다.
[4] 블록의 구체적 모습
[5] 거래과정
아까 블록에 거래정보가 들어간다고 했잖아요!!
이게 어떻게 들어가는지 살펴보기 위해 거래 과정을 살펴볼게요
우선 전체 흐름을 보여주는 그림부터 볼게요
이 스텝을 하나씩 구체적으로 살펴볼게요!+!
1)
2)
3)
4)
5)
6)
'💻 > BlockChain' 카테고리의 다른 글
[BlockChain] Dapp 개념과 구조 (1) | 2020.11.19 |
---|
- Total
- Today
- Yesterday
- 구글 Geocoding API
- 장고 Custom Management Command
- Django FCM
- Django Heroku Scheduler
- Flutter Clipboard
- flutter 앱 출시
- flutter build mode
- Dart Factory
- Sketch 누끼
- flutter dynamic link
- drf custom error
- 플러터 얼럿
- PencilKit
- Watch App for iOS App vs Watch App
- Flutter getter setter
- Flutter 로딩
- github actions
- Flutter Text Gradient
- 장고 URL querystring
- DRF APIException
- ipad multitasking
- 플러터 싱글톤
- ribs
- flutter deep link
- SerializerMethodField
- METAL
- Python Type Hint
- Flutter Spacer
- cocoapod
- Django Firebase Cloud Messaging
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |