채굴(마이닝)과 관련된 연재 포스팅입니다. 혹시 이전 포스팅을 읽지 않으셨다면 이전 포스팅을 먼저 읽어보시는것을 추천드립니다.

 ● 채굴(마이닝)이란 무엇인가? (1/3)





'새로운 블록 생성'


채굴자(마이너)가 새로운 블록을 생성하고, 검증하는 과정에 소모된 자원에 대한 '보상'으로 비트코인을 지급받는 행위를 '채굴'이라고 합니다. 마이너가 새로운 블록을 생성하기 위해서는 어떤 특정한 수학문제를 풀어내야하며, 이때 수학문제의 풀이과정을 이해하기 위해서는 반드시 블록 해시 연산 과정해시 함수의 특징에 대한 사전 학습이 반드시 필요합니다.



'수학 문제란?'


도대체 어떤 수학문제를 푸는것일까요? 비트코인 플랫폼에서 채굴자(마이너)는 블록에 담길 정보 중 nonce 정보를 제외한 모든 구성 요소 정보를 미리 알 수 있습니다. 즉, 채굴자는 새로운 블록으 ㄹ생성하기 위하여 새로운 블록에 접한한 nonce 정보를 찾아야 합니다. 임이의 nonce 정보를 대입하고 출력한 '블록해시' 결과 값이 난이도(target)보다 작은 결과 값을 찾아야 하며, target보다 작은 블록 해시 결과 값을 찾았을 경우 새로운 블록이 생성될 수 있습니다.






이해를 돕기 위해 'nonce'에 임이의 결과 값을 넣어서 '블록해시'를 만드는 과정이 어떻게 진행되는지 확인해보겠습니다. 아래의 Json 데이터는 블록체인 인포 사이트를 통해 1번 블록의 정보를 찾아온 결과 값입니다. 

(https://blockchain.info/block-height/1?format=json)


{

"blocks": [

{

"hash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048",

"ver": 1,

"prev_block": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",

"mrkl_root": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",

"time": 1231469665,

"bits": 486604799,

"fee": 0,

"nonce": 2573394689,

"n_tx": 1,

"size": 215,

"block_index": 14850,

"main_chain": true,

"height": 1,

"tx": [

{

"lock_time": 0,

"ver": 1,

"size": 134,

"inputs": [{

"sequence": 4294967295,

"witness": "",

"script": "04ffff001d0104"

}],

"weight": 536,

"time": 1231469665,

"tx_index": 14854,

"vin_sz": 1,

"hash": "0e3e2357e806b6cdb1f70b54c3a3a17b6714ee1f0e68bebb44a74b1efd512098",

"vout_sz": 1,

"relayed_by": "0.0.0.0",

"out": [{

"spent": false,

"tx_index": 14854,

"type": 0,

"addr": "12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX",

"value": 5000000000,

"n": 0,

"script": "410496b538e853519c726a2c91e61ec11600ae1390813a627c66fb8be7947be63c52da7589379515d4e0a604f8141781e62294721166bf621e73a82cbf2342c858eeac"

}]

}

]

}

]


위의 데이터를 토대로 nonce 정보를 제외하고 블록 헤더 결과 값을 채워 넣었을 경우 아래의 그림과 같은 형태로 데이터가 구성됩니다.



블록 해시편에서 언급한 블록 해시 연산 과정을 통해 nonce 정보에 0을 대입하여 블록 해시 결과 값을 출력해보고 이러한 과정을 총 5번 반복하여 블록 해시 결과 값이 어떻게 출력되는지 확인해보도록 하겠습니다.



위의 예제 소스를 실행 결과는 아래와 같습니다.



결과 화면을 보시면 아시겠지만, 해시 함수의 특징으로 인하여 nonce 정보가 변경될 때 마다 블록 해시 결과 값은 전혀 다른 결과 값을 가지는것을 확인할 수 있습니다.  즉, nonce 정보에 어떤 값을 입력해야 target 보다 작은 블록 해시 결과 값을 얻을 수 있을지 채굴자는 미리 예측할 수 없으며, nonce 값을 1식 증가시키면서 target보다 작은 블록 해시 결과 값을 찾아내는 연산과정을 반복해야만합니다.


수학 문제를 연산하는 과정은 생각보다 단순합니다. nonce를 0부터 대입하여 target보다 작은 블록 해시 결과 값이 도출될때까지 nonce 값을 무한정 증가 시키는 작업이며, 이러한 과정을 더 빠르게 연산할 수 있도록 CPU 채굴에서 GPU를 활용한 채굴 나아가 asis라는 채굴 전용 칩까지 등장하게 된것입니다.


어느 정도 이해가 되셨나요? 심플하게 다시 정리를 해보자면


● '채굴'은 일종의 보상의 개념이다.

● 보상을 받기 위해서는 새로운 블록을 생성하기 위하여 일종의 수학문제를 풀어야한다.

● 수학문제의 정답이 되기 위한 조건은 'target'보다 작은 블록 해시 결과 값을 가지는 블록을 찾아야한다.

● 해시함수의 특징으로 인해 'target'보다 작은 '블록해시'를 만들어내기 위한 'nonce'의 값은 절대 유추할 수 없다.


그렇다면 난이도(target)은 무엇이고, 왜 필요했을까요? 다음 포스팅에서는 난이도(target)이 무엇이고 어떻게 값을 구하는지에 대한 포스팅을 이어가도록 하겠습니다.


[참고 자료]

https://jayground8.github.io/what_is_hash_and_mining/https://bitcoinwisdom.com/bitcoin/difficultyhttp://d2.naver.com/helloworld/8237898http://coinnews.tistory.com/14http://bithumb.cafe/archives/5214https://cafe.coinbang.co.kr/bbs_detail.php?bbs_num=63&tb=board_coininfor&b_category=https://steemit.com/kr/@twinbraid/2b3hcu

'비트코인 > 마이닝 원리' 카테고리의 다른 글

채굴(마이닝)이란 무엇인가? (1/3)  (1) 2018.04.13



마이닝에 대한 이해를 하기 위해서는 블록체인의 블록 구조에 대한 개념정리가 먼저 필요합니다. 채굴에 대한 설명을 하기 앞서 비트코인의 블록체인 구조에 관한 내용을 조금 설명하고 넘어가겠습니다.



Remind


'블록'은 크게 헤더와 바디정보로 구성되어있으며, 다음 그림과 같이 버전, 이전 블록 해시, 머클 루트, 타임, 난이도 목표, 논스 정보로 구성됩니다.






1. 버전 : 해당 블록이 생성된 시점의 비트코인 소프트웨어 버전 정보입니다.

2. 이전 블록 해시 : 새로운 블록이 생성된 시점의 이전 블록 해시 정보를 참조하는 정보입니다(이 요소 정보로 인하여 블록이 체인형태로 연결될 수 있었습니다).

3. 머클 루트 : 트랜잭션의 무결성 및 블로 해시의 무결성을 검증하는 역할을 수행하며, 블록 바디에 저장된 TXID 정보를 머클 트리한 결과 값입니다.

4. 타임 : 해당 블록의 대략적인 생성 시간을 의미합니다.

5. bits : 난이도 해시 목표 값을 의미하는 지표입니다.

6. nonce : 블록을 만드는 과정에서 해시 값을 구하기 위한 재료 역할을 수행합니다.





개념만 잡자! 그래서 채굴이 뭔대?





가상화폐 열풍이 불면서 '채굴'에 대한 이야기를 많이 접하셨을거라고 생각합니다. 비트코인뿐만 아니라 암호화폐에서의 채굴(인센티브) 시스템은 아주 중요한 역할을 수행합니다. 그렇다면 도대체  '채굴'은 무엇일까요? 먼저 아래의 질문에 대한 답을 여러분들은 하실 수 있으신가요?


1.중앙에서 관리 감독하는 기관이 없는 탈 중앙화된 비트코인 네트워크에서는 도대체 누가 화폐, 즉 비트코인을 어떻게 발행할까요?

2. 블록체인 기술은 분산되고 독립적인 공통장부 관리기술입니다. 그렇다는 이야기는 누군가는 거래 기록을 기록하고, 관리해야한다는 의미이며, 도대체 누가 거래기록을 기록할까요?

3. 블록은 크게 헤더와 바디정보로 구성됩니다. 블록의 바디정보에는 다수의 거래정보가 담겨져있습니다. 그렇다면 이 블록은 누가 생성할까요?


위의 질문에 대한 답을하기 앞서 먼저 '채굴'에 대한 개념을 이해하기 아주 좋은 동영상을 찾았습니다. 대략 1분 55초 분량의 아주 짧은 영상이니 꼭 시청해 보시면 좋겠습니다. (한글 자막을 지원하니, 아래의 그림과 같이 하단에 있는 자막을 설정하시고 보시면됩니다.)






채굴이란 무엇인가?









영상을 보시고나니 어느 정도 채굴에 대한 감이 잡히셨나요? 그렇다면 채굴(마이닝)이 필요했던 이유가 무엇일까요?





채굴(마이닝)이 왜 필요했을까요?


탈 중앙화된 금융거래 시스템인 비트코인 네트워크에서는 어떤 거래가 발생하고, 발생된 거래 내역이 투명하게 네트워크를 통해 공유되어야합니다. 그렇다면 누군가는 이 거래 내역을 기록하고, 기록된 거래내역을 블록에 담아 사용자들에게 전파하는 역할을 수행해야합니다. 또한, 악의 적인 사용자에 의해 잘못된 거래 기록이 전파되는것을 방지하기 위해 작성된 블록의 유효성을 검증하는 과정이 필요합니다.


앞서 이야기한 작업들을 수행하기 위해서는 서버 자원 및 전력자원이 낭비됩니다. 그렇다면 아무런 보상 없이 이러한 일을 수행하기엔 무리가 있지 않을까요?



이러한 작업들을 참여자가 자발적으로 수행할 수 있도록 별도의 인센티브 제도가 필요했으며, 이러한 작업을 수행한 참여자에게 보상의 개념으로 비트코인을 지급함으로써 네트워크에 기여도를 높일 수 있도록 하였습니다. 그리고 이러한 보상을 우리는 '채굴'이라고 표현하고 있습니다.



이제 왜 '채굴'이 필요했는지에 대하여 이해가 되셨나요? 여기까지 설명을 들으셨다면 아래와 같은 의문점이 생기실겁니다.

1. '블록'은 수학문제를 풀어서 생성이된다. 그렇다면 수학 문제는 도대체 무엇이고 어떻게 풀어야하는가?
2. 생성된 '블록'이 진짜인지 가짜인지 누가 어떻게 판단하는가?

다음 포스팅에서 위의 질문에 대한 답과 더불어 본격적으로 블록체인 기술에 대해서 파헤쳐보는 포스팅을 이어가도록 하겠습니다.



[참고자료]


https://organicmedialab.com/2014/01/11/virtuous-cycle-of-bitcoin-mining/
https://brunch.co.kr/@bumgeunsong/41
http://www.leejungmin.org/post/2017/05/30/mastering-bitcoin/


'비트코인 > 마이닝 원리' 카테고리의 다른 글

채굴(마이닝)이란 무엇인가? (2/3)  (0) 2018.04.13

+ Recent posts