MODULE 2(A) - CRYPTOCURRENCY INTUITION
03. UNDERSTANDING MINING DIFFICULTY
채굴 난이도에 대해 알아보자
채굴 난이도에 관하여 2가지 질문이 있을 수 있다.
현재 대상(Currnt Target) 즉, 채굴을 위한 대상(Target)은 무엇이며 이에 대해 어떤 느낌을 받는지?
a. 비트코인이나 다른 화폐를 채굴하는 채굴자라면 이 난이도가 어떻게 느껴질까?
b. 채굴 난이도의 의미는 무엇일까?
채굴 난이도 산출 방식과 조절 방식?
<그림>
대상을 살펴볼 때 선행 제로를 이용한다.
하지만 선행 제로를 만들기 위한 풀을 표기한 위 그림에서 선행 제로를 만들기 위한 풀은 매우 작은 영역을 차지한다.
만약 현재 대상을 선행 제로 4개로 설정한다면, 이 풀 크기에서 약 4분의 1만이 해당된다는 것을 알 수 있다. 즉, 전체 풀 중 4분의 1 말이다.
그러나 16진수를 사용할 때에는 선행 제로를 1개 늘린다고 하면 이는 풀의 크기를 16배로 줄이는 작업이 된다.
즉, 추가되는 선행 제로의 수가 두 개가 된다면 16분의 1의 16분의 1이 되고, 선행 제로를 3개 추가한다면 위 그림에서 선행 제로를 만족하는 유효한 부분의 16분의 1의 16분의 1의 16분의 1이 될 것이다.
선행 제로가 4개라면 그 영역이 너무 작아 도표에 표시되지도 않을 것이다.
그렇다면 이러한 것들을 어떻게 파악할 수 있을까?
XXXXX: 0 - 99,999 (100,000 options)
0XXXX: 0 - 9,999 (10,000 options)
위에 표시된 10진법을 중심으로 두 숫자를 비교해 본다면, 위에 숫자는 5자리, 그리고 아래 숫자에도 5자리 숫자여야 한다.
단, 아래 숫자의 경우 첫 번째 숫자가 선행 제로여야 한다. 즉, 실제로는 4자리 숫자인 것이다.
위에 위치하는 숫자는 옵션이 0에서부터 99999까지로 십만 개에 달하고, 아래 위치하고 있는 숫자는 0에서 9999까지로 총 만 개의 옵션이 있다.
즉, 하나의 선행 제로를 요청하는 것만으로도 풀 크기를 10배 줄일 수 있는 것이다.
이처럼 16진수의 경우에는 모든 숫자가 16개의 값을 가지므로 선행 제로의 경우에도 풀 크기를 16배로 줄이는 것이다.
실제로 선행 제로가 하나라도 있으면 옵션의 수를 상당히 감소 시켜 준다.
Current target = 0000000000000000005d97dc0000000000000000000000000000000000000000
* 선행제로 = 18개
18개의 선행 제로를 가지는 현재 대상이 위와 같다고 가정하자.
지금은 선행 제로만 중점적으로 살펴볼 것인데, 나머지 부분은 선행 제로에 비하면 큰 차이를 만들지 않기 때문이다.
이제 골든 논스를 찾을 확률을 계산해 볼 것이다. 즉, 무작위로 논스를 골랐을 때 골든 논스가 나올 확률이다.
먼저, 64자인 이 값에 있어서 가능한 16진수 조합의 경우의 수는 다음과 같다.
Total possible 64-digit hexadecimal number
:
이들 중에서 가능한 조합이 즉, 18개의 선행 제로를 갖는 16진수 조합은 다음과 같이 계산 할 수 있다.
Total valid hashes (with 18 leading zero)
:
선행 제로는 바꾸거나 대체할 수 없이 반드시 0이어야 하기 때문에, 18개의 선행 제로 이후의 각 자리수마다 16개의 옵션이 있기 때문이다.
이는 선행 제로를 만들기 위한 전체 풀이며 제한된 조건을 반영한 풀이다. 즉, 골든 논스가 있는 풀이다.
약 이란 매우 큰 숫자이지만 전체 가능한 조합의 수인 에 비하면 작은 수라고 할 수 있다.
따라서 무작위로 선정한 해시가 유효하거나 임의로 선택한 논스가 유효한 해시 또는 골든 논스가 될 확률을 구해 보는 것이고, 이를 구하면 다음과 같다.
Probability that a Randomly picked hash is valid
: %
바로 위 결과가 무작위로 고른 논스가 골든 논스가 될 확률이다.
이러한 확률 속에서 채굴자들이 골든 논스를 찾는다. 따라서 기계들이 쉼 없이 작동하는 것도 당연한 일이다.
유효한 해시를 생성할 확률이 아주 낮고, 따라서 기계나 채굴자가 블록을 생성할 수 있는 확률도 아주 낮다는 점이 바로 문제이다.
그리고 난이도가 조정되어서 상승하게 되어 선행 제로의 수도 따라 오르게 된다면, 확률도 낮아집니다.
Difficulty = current target / max target
채굴 난이도는 현재 대상을 최대 대상으로 나눈 값이다.
먼저 짚고 싶은 건 난이도를 어떻게 조정하느냐이다.
난이도는 2,016블록마다 조정된다. 이는 단지 2주 주기일 뿐이다.
비트코인의 경우 이상적으로 모든 블록은 10분마다 하나씩 생성된다.
이렇게 계산해 보면 2주 만에 총 2,016개 블록이 나온다. 정확히는 2주 안에 2,016개의 블록이 생성되는 것이다.
따라서 2주에 한 번씩 난이도가 조정된다.
위에서 알아보지 못한 것이 있다. 바로 최대 대상이다.
최대 대상은 비트코인 초기부터 존재하던 대상으로 아래 대상으로 부터 출발하였다.
Max target = 00000000FFFF0000000000000000000000000000000000000000000000000000
최대 16진수 수였다면 모든 자릿수가 F
로만 구성되어 있어야 될 것 같은데, 왜 이 대상에서부터 시작된 걸까?
라는 의문이 들 수 있다.
<그림>
만약 모든 자릿수가 F인 값은 전체 가능한 16진수의 경우 중 가장 위에 존재한다.
따라서 만약 맨 위에 있는 값을 대상으로 설정한다면 모든 채굴자가 선택하는 논스가 바로 골든 논스일 것이다.
즉, 반복하는 과정에서 매번 블록을 채굴할 수 있기 때문에 첫 2주가 지나 난이도가 조정되기도 전에 너무 빠르게 블록이 채굴된다.
그래서 의도적으로 선행 제로가 많은, 총 8개의 선행 제로 난이도에서 채굴을 시작한 것이다.
난이도는 이러한 최대 대상과 현재 대상의 관계를 통해 구할 수 있다. 즉, 난이도는 현재 대상을 최대 대상으로 나눈 값이다.
이를 통해서 비트코인을 채굴하는 것이 처음에 비해 얼마나 더 어려워졌는지를 나타내는 것이다.
다시 말해, 비트코인을 채굴하는 것이 얼마나 어려워졌는지, 초창기 비트코인을 채굴하던 때와 비교해서 지금은 얼마나 걸리는지를 난이도를 통해 알 수 있는 것이다.
Network Difficulty - blockchain.com
앞서 말했듯, 난이도가 2주마다 조정되는데, 여기서 중요한 점은 난이도가 중앙 당국에서 조정되는 것이 아니라는 점입니다
즉, 오직 노드에 의해서만 난이도가 조정됩니다.
따라서 여러분이 비트코인 소프트웨어를 설치하면 비트코인 프로토콜에 코딩되어 있는 알고리즘이 자동으로 난이도를 조정할 것이다.
2주가 언제부터 시작되고 또 언제부터 끝나는지를 동기화하고, 매 2주마다 노드가 2,016개 블록을 채굴하는 데에 걸린 시간을 확인할 것이다.
대략 한 블록을 채굴할 때에 10분이 걸려서 총 20,160분이 걸리는데, 이보다 적거나 많다면 난이도가 조정된다.
이렇게 난이도와 모든 노드가 조정되고, 알고리즘이 모두 같으니 전부 다 같은 난이도를 갖게 될 것이다.