Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
05-08 19:26
관리 메뉴

ulismoon

[BlockChain] 블록체인에 관하여 - 2 본문

카테고리 없음

[BlockChain] 블록체인에 관하여 - 2

ulismoon 2017. 8. 2. 16:41

이번 글부터는 저번 글에서 설명한 것들을 한단계씩 들어가볼 생각이다.

이번 글에서는 적당히 전체 블록체인 네트워크의 흐름/구조를 설명할 생각이다.

기술적으로 깊지 않은 내용만을 원한다면 이번 글만 잘 읽고 이해하면 될 것이다.


1. Node

노드는 블록체인 네트워크에 붙어있는 지갑을 뜻한다. 노드의 종류에는 모든 블록체인의 정보를 다 가지고 있는 Full Node, 헤더만 가지고 있는 LightWeight Node, 지갑은 다른 곳에 두고 웹 인터페이스를 통해 이용만 하는 Web Node가 있다. 웹 노드의 경우 내 컴퓨터의 용량을 차지하지 않고 어디서든 사용하기 편하다는 장점이 있지만, 서비스를 제공하는 업체가 문닫고 도망가면 거기있던 비트코인은 소실된다는 단점이 있다. 웹 노드를 서비스하는 웹서비스의 경우 보통 개인키도 그쪽에서 보관하고 사용자에게 주지 않는다. LightWeight Node는 블록체인 정보를 모두 저장하기에는 너무 부담이 크고 그걸 다 쓸 일도 없기 때문에(지금 비트코인 블록체인을 모두 싱크하려면 100GB 정도의 용량과 24시간 이상의 시간이 필요하다) 블록 헤더만을 받아서 저장하고, 상세 정보가 필요할 경우 주변의 Full Node에게 관련 정보를 요청한다. Full Node는 블록체인의 모든 정보를 다 가지고 있으며, 많은 용량이 필요한 대신 스스로 누구의 도움도 받지 않고 모든 거래에 대한 검증이 가능하다. 보통 Full Node 에는 Tx. Pool 이나 Miner 들이 같이 포함되어 있어 블록을 채굴할 수 있다.


1.1 Full Node 의 구조

쉽게 설명하기 위해 Full Node는 모든 기능을 다 가지고 있는 노드라고 가정한다. 당연히 이 노드는 0번부터 지금까지의 모든 블록 정보를 다 가지고 있고, 누군가 만들어 네트워크에 퍼지기는 했으나 아직 블록에 실려 인증받지 못한 거래들을 담아두는 Tx. Pool, 여기서 가져온 정보를 가지고 새 블록을 만들어내는 Miner가 있다. 쟤들이 하는 일은 밑에서 다시 설명한다.


2. Block

블록은 크게 헤더와 바디로 구성된다.

헤더에는 이전 블록 해시, 난이도, 넌스(Nonce), 타임스탬프, 머클 루트(Merkle Root) 가 들어있다.

바디에는 각종 거래 정보가 들어있다. 특이점으로, 모든 블록에 담기는 첫 거래는 코인베이스 주소(보통 0x0)로부터 자신에게로 보상을 주는 거래이다.

Miner는 자신이 가진 Tx. Pool에서 적당한 거래들을 건져 블록에 넣고 블록을 채굴한다.

채굴에 성공한 블록 정보는 역시나 P2P Network를 따라 전 세계로 전파된다. 그리고 블록 채굴에 성공한 노드는 보상(2017년 8월 2일 현재 12.5BTC 또는 5ETH)을 받는다.


3. Mining

블록을 생성하는 과정을 마이닝이라고 하는데, 이는 실제로 광산에서 광물을 채굴하는 것과 비슷하기 때문에 붙여진 이름이다.(재수보기 + 무한곡괭이질)

N-1번 블록이 생성되었다는 소식을 접한 노드는 이 정보를 바탕으로 즉시 N번 블록을 채굴하기 시작한다.

블록을 생성하기 위해 새 블록 정보와 같이 전달돼온 이전 블록의 해시를 사용하고, N번 블록의 채굴 시각을 기록하기 위한 타임스탬프를 지정한다.

그리고 Tx. Pool에서 적절한 기준에 따라(보통 담겨있던 시간과 수수료)거래를 꺼내 담고, Merkle Tree를 구성한다. 이 트리의 맨 위의 값이 Merkle Root이며, 이 값은 헤더에 담긴다. 머클은 나중에 설명할건데, 일단 거래 검증을 위해 사용되는 값이라고만 알아두자.

마이닝에 있어 중요한 것은 난이도넌스인데, 마이닝의 목표는 난이도 목표값보다 더 작은 값을 가지는 해시(비트코인의 경우 SHA256)값을 찾는 과정이다. 주사위 던지기로 예를 들면 난이도 목표가 6이라고 하고 주사위를 던지면 무조건 성공할 것이다. 주사위의 모든 값은 목표인 6 이하니까. 난이도가 올라가면 목표값이 점점 작아지게 된다. 예를 들어 주사위 6개를 던져 눈의 합이 7 이하인 걸 목표로 해보자.

같은 입력값으로는 같은 해시가 나오고, 입력값이 약간만 바뀌어도 해시값은 예측할 수 없이 변하기 때문에 이 변화를 위해 값을 막 넣어보는 자리가 Nonce 자리이다. 한번만 쓰인 숫자라고 해서 Number + Once = Nonce 란다. 네이밍센스 참... 뭔가 보통 설명할 때 "마이닝은 복잡한 수학문제를 푸는 과정이에요" 라고 설명하는 곳이 많은데, 이거 그냥 Brute Force로 해시값 찾는 박치기 하는거다. 수학 계산은 계산이겠지만 이걸 문제푸는거라고 할 수 있을까? 그냥 랜덤대입 하는건데... 여튼 이런 과정을 거치다보면 어떤 Nonce 값에서는 난이도 목표값보다 더 작은 해시를 찾아낼 것이고, 이 순간 이 값을 만들어내는 Nonce를 해답으로 하는 블록이 생성되었다고 한다. 그리고 이때 만들어진 SHA256 해시를 이 블록의 해시값이라 한다.

마이닝에 성공한 노드는 자기가 찾아낸 Nonce 를 블록에 박아서 블록 해시와 함께 주변 노드에 전파한다. N번 블록 정보를 전달받은 주변 노드들은 블록 정보와 전달받은 해시를 가지고 맞는 블록인지 검증한 후, 자기에게 연결된 또 다른 노드에 전파한다. 이렇게 얼마간의 시간이 지나면 전 세계가 N번 블록의 생성을 확인할 수 있다.

이렇게 주변에 내가 캔 블록을 전파한 노드는 블록에 심어진 정보대로 보상을 획득하게 된다. 그리고 내가 블록에 넣은 거래들이 지불하는 수수료도 보상으로 함께 획득한다. 수수료는 거래를 생성하는 사람이 직접 output을 깎아 지정할 수도 있으나, 보통 지갑이 적정 수준을 알아서 계산한다.

다른 곳에서 열심히 N번 블록을 만들던 마이너들은 이 정보를 받는 순간 하던 일을 관두고 전달받은 N번 블록 정보를 기반으로 N+1번 블록을 캐기 시작한다. 얘들은 지금까지 헛짓한거다.

<사람들이 헷갈려하는게 Tx. Pool에 어떠한 거래도 없으면 마이너들이 놀고 있다고 생각하는 건데, 안 그렇다. 거래가 있건 없건 마이너는 계속 블록을 캐고, 블록은 계속 생성된다. 단지 블록의 바디가 비어있는 블록이 생성될 뿐이다. 이 경우 기본 채굴 보상은 받지만 추가 수수료 보상이 0이다.>



전체 스토리를 다시 한번 보자.

어디선가는 Full Node를 돌리고, 어디선가는 LightWeight Node를 돌린다. 

어디서든 거래를 생성할 수 있으며, input, output, hash를 가진 거래 정보를 주변 노드에 전파한다.

이걸 전달받은 Full Node는 거래를 검증한 후 Tx. Pool에 담아놓고 나중에 블록을 생성할 때 갖다 쓴다.

N-1번 블록이 생성된 것을 확인한 Full Node는 하던 일을 관두고 N-1번 블록의 해시, 현재의 타임스탬프, Tx. Pool에서 적당히 건진 거래들과 그걸 가지고 만든 머클루트를 넣고 넌스를 뺑뺑이 돌려가며 난이도를 만족하는 해시값을 찾기 위해 Brute Force 질을 한다.

운좋게 난이도를 만족하는 해시값을 찾으면 이때의 Nonce 값을 블록에 기록하고 찾아낸 해시값과 같이 주변 노드에 전파한다.

N번 블록 정보를 받은 Full Node는 받은 정보로 새 블록을 검증한 뒤, 문제가 없으면 하던 일을 버리고 방금 받은 정보를 기반으로 N+1번 블록을 캐기 시작한다.

이게 전 세계에서 막 일어나면 그게 블록체인 네트워크이다. 


뭐 그런거다. 

기본적인 그림은 이렇다. 

알고보면 별 거 없다.



다음 글부터는 여기서 허술하게 설명했던 걸 좀 더 깊이 들어가고, 블록체인이 그래서 왜 안전한지에 대한 설명도 할 것이다.

Comments