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

 ● 채굴(마이닝)이란 무엇인가? (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

+ Recent posts