즐코

작업증명 POW / nonce / 난이도 bits? 본문

BlockChain

작업증명 POW / nonce / 난이도 bits?

YJLEE_KR 2022. 6. 13. 00:40

작업증명, 논스, 난이도 개념이 헷갈려서 우선 전체적으로 개념 정리를 간단하게 해보았다. 

 

 

1/ 작업증명 POW (Proof Of Work)

- 새로운 블록을 블록 체인에 추가하는 작업을 완료했음을 증명하는 것

- 블록을 블록체인에 추가하려면 새로운 블록의 블록 해시를 계산해내야하는데, 그 블록의 헤더 정보 중 하나인 nonce 값을 구해야 그 블록 해시를 구할 수 있기 때문에 결국 nonce를 구하는 게 작업 증명이다.  

 

2/ nonce

- number used only once 한번만 쓰인 숫자를 뜻함

- 최초 0에서 시작하여 조건을 만족하는 해시값을 찾아낼 때까지 1씩 증가시키면서 반복적으로 계산한 블록 해시값이 특정 숫자보다 작은 값이 나오면 그 때의 nonce 값으로 계산한 블록 해시가 그 블록의 블록 해쉬로 확정되고 새로운 블록으로서 블록 체인에 추가

- 블록 해시가 특정 숫자보다 낮게 나올 때의 논스값이 작업 증명을 나타내는 논스값이다!

- 블록의 모든 해시, 정보들 중 채굴자가 바꿀 수 있는 유일한 값

 

근데 나는 여기서, 이 작업 증명의 성공 기준이 되는 블록 해시값은 어떻게 정해지는지 헷갈렸다.. 

그건 바로 작업 난이도에 의해 결정된다고 한다.

 

3/ 작업 난이도

- 논스값 계산의 어려운 정도

- 블록 헤더의 bits 라는 값으로 난이도를 조절한다고 함

난이도 조절 하는 방법 
 
원래,블록 해시는 무조건 256비트(32바이트/64글자)의 숫자값이지만, 이해를 위해 만약 1바이트의 숫자라고 가정해본다.
그러면, 1바이트의 숫자값을 블록 해시값으로 산출하는 해시함수는 256가지, 즉 0~255 사이의 값을 결과로 산출할 것이다.
이 때, 블록 헤더의 bits 라는 값이 난이도를 조절한다고 했는데, 자세히 말하자면, 그 bits가 만약 128이라면, 해시값은 128보다 작다라는 힌트를 나타낸다고 보면 된다. 그러면 이 bits로 해시값을 찾아낼 확률을 생각해볼 수 있다. 

해시값을 찾아낼 확률 = bits보다 작은 수의 개수 / 해시 함수가 산출할 수 있는 모든 가짓수 

만약 블록 해시가 128보다 작다면  128가지 숫자(0~127까지) / 256 (1바이트로 나타낼 수 있는 0~255까지) = 50%
만약 블록 해시가 64보다 작다면 64가지 숫자(0~63까지) / 256 (1바이트로 나타낼 수 있는 0~255까지) = 25%

이렇게 bits 값이 작아질수록 해시를 맞출 확률은 줄어드는 것이다.

실제론 bits가 위처럼 간단한 숫자로 제공되는건 아니고 지수, 계수를 사용하는 표현 방식으로 나타낸다고 한다.
난이도는 보통 2,160개의 블록이 생성되는데 소요되는 시간이 2,160개의 블록 생성 평균 시간인 21,600분 (블록당 평균 10분 * 2,160블록) 보다 오래 걸리면 낮아지고, 적게 걸리면 높아지는 유동적인 방식으로 조정되어 적용된다고 한다. 

 

4/ 보상

- 거래 수수료 + 비트코인 = 총 2번의 보상을 받는 셈 

- 거래 수수료 : 채굴자는 블록에 포함된 거래를 컨펌하면 일종의 거래 수수료를 받게 된다. 블록에 포함된 모든 거래를 유효한 거래로 확정시켜준 대가이다. 

- 비트코인 : 논스값을 찾아 블록을 체인에 올리게 되면 비트코인이 새로 생성된다고 한다.

- 채굴자가 블록을 처음 구성할 때, 채굴자의 지갑으로 일정량의 비트코인이 입금되는 거래를 그 블록의 첫 거래 (generation transaction)로 추가하는 방식으로 비트코인의 새로운 발행이 이뤄진다고 한다. 

Comments