[Blockchan A-Z] 논스 범위(Nonce Range)

bolee·2022년 8월 20일
0

Blockchan A-Z

목록 보기
13/33

MODULE 2 (A) - CRYPTOCURRENCY INTUITION
06. NONCE RANGE

논스 범위에 대해 알아보자.

논스(Nonce)와 논스 범위(Nonce Range)

<그림>

논스는 블록 안의 필드이며 채굴자가 암호화 퍼즐을 푸는 방법이다.
채굴자는 논스 외에는 어떤 것도 변경할 수 없다. 그래서 이 전체와 해시를 변경하기 위해 논스를 변경해야 한다.
논스를 변경하여 퍼즐을 풀면 체인에 블록을 추가하게 되어 보상을 받게 된다.

또한 논스는 무한하지 않으며, 논스는 32비트(32 bit = 4 byte) 숫자이다.
즉, 논스에 대한 각 블록에는 32비트 메모리만 할당됐다는 뜻이며, 이는 논스는 범위를 가진 정수라는 것이다.

논스는 부호가 없는 정수 즉, 양수 값만 가지며 그 범위(논스 범위)는 0에서 4294967295 사이이다.

채굴 난이도와 논스 범위

채굴 난이도(골든 논스를 찾을 확률)와 논스 간의 상관 관계를 살펴보기 위해 선행 제로가 18개인 대상을 찾는다고 가정하고, 먼저 채굴 난이도를 계산하면 다음과 같다.

Difficulty:
Total possible 64-digit hexadecimal number: 16×16×...×16=16641.1579×107716\times16\times...\times16=16^{64}\approx1.1579\times10^{77}
Total valid hashes (with 18 leading zero): 16×16×...×16=1664182.4519×10552×105516\times16\times...\times16=16^{64-18}\approx2.4519×10^{55}\approx2×10^{55}
Probability that a Randomly picked hash is valid: 2×1055/1077=2×1022=0.000000000000000000022\times10^{55}/10^{77}=2×10^{−22}=0.00000000000000000002%

이처럼 무작위로 해시나 논스를 선택했을 경우 0.00000000000000000002%로 아주 적은 퍼센트를 얻게 된다.

위에서 논스 범위에 대해 알아보았으니, 이제 이 정보를 추가해 채굴 난이도와 논스 간의 상관 관계를 살펴 볼 것이다.

The Nonce is a 32-bit number, the Max Nonce = 232=42949672954×1092^{32} = 4294967295\approx4\times10^{9}

먼저, 논스는 부호없는 32비트 숫자이기 때문에 최대 논스이자 가능한 논스는 대략 40억이라고 할 수 있다.

여기에서 찾으려는 채굴 난이도와 논스 사이의 상관 관계는 논스가 100% 확실하게 해시나 퍼즐에 무차별 대입하기에 충분한가이다.

이를 위해 최상의 상황 즉, 논스의 범위만큼 서로 다른 해시를 생성할 수 있다고 가정하였을 때, 이 중 하나가 유효할 확률은 논스 범위에 채굴 난이도를 곱한 값이고 결과는 아래와 같다.

Probability that ONE of None Range will be valid: 4×109×2×1022=8×10131012=0.0000000000014\times10^9\times2\times10^{-22} = 8\times10^{-13} \approx 10^{-12} = 0.000000000001%

결과값인 0.0000000001%의 확률은 아직도 적은 확률이다.
즉, 0부터 약 40억까지의 전체 논스 범위를 거친다고 해도 암호화 퍼즐의 솔루션을 찾을 가능성은 0.0000000001%인 것이다.

그래서 결론은 하나의 논스 범위는 충분하지 않다는 것이고, 전체 논스를 모두 거친다고 해도 골든 논스를 찾을 가능성은 낮다.

그렇다면 솔루션이 있기는 한 걸까?
솔루션을 찾을 확률이 이렇게 낮으면 퍼즐을 푸는 것이 의미가 있을까?
40억에 다다르면 어떻게 되는 것일까?

이러한 질문들에 대한 답을 찾기 위해 먼저 보통의 채굴자가 초당 1억 개를 해싱(100MH/s)한다고 가정하자.
이는 약 40억 개의 해시 또는 가질 수 있는 논스를 40억 번 반복 하는데 40초가 걸린다는 것이다.
즉, 이 채굴자가 있다면 40초만에 전체 논스 범위를 거칠 수 있다.

그렇다면 거기서 끝일까?
사실 끝이 아니다.

<그림>

사실 위의 블록 구조에서 나타내지 않은 타임스탬프(Timestamp) 필드가 존재한다.
타임스탬프는 블록이 채굴된 때를 나타내며, 매 초마다 기록된다.
또한 이 타임스탬프는 유닉스 타임을 사용한다.

유닉스 타임(Unix Time)
1970년 1월 1일부터 지금까지 경과한 시간(초)으로 지금까지 몇 초가 흘렀는지 보여준다.
컴퓨터나 프로그래밍에 많이 쓰인다.

이러한 유닉스 타임스탬프는 블록이 채굴되기 전, 매 초마다 업데이트된다.
즉, 문제에 관한 솔루션을 생성하는데 타임스탬프가 1초마다 업데이트되기 때문에 해싱 함수의 쇄도 효과로 인해 이 블록의 정보도 1초마다 업데이트 된다는 것이다.

그렇기 때문에 그 의미를 설명하자면 타이머를 두면 타이머 업데이트 전까지 논스 범위를 거칠 시간이 1초가 있다는 것이다.

이것은 모든 논스를 다시 유효하게 만들어주고, 모든 논스가 다시 유효하다는 것은 중요하다.
모든 논스가 다시 유효하기 때문에 다시 시도해 볼 수 있고, 해시를 얻을 수 있는 타임스탬프와 논스의 무한한 수의 조합을 얻을 수 있다.

채굴 풀의 경우는 어떠할까?
먼저 아래 링크를 통해 Hash Rate를 확인해 보자

Total Hash Rate - blockchain.com

2022년 8월 기준 전체 네트워크의 해시율은 초당 약 2억 조의 해시(200 million TH/s)이다.
물론 한꺼번에 처리하지는 않고 대부분은 서로 경쟁하지만 그것을 감안하더라도 여전히 엄청난 해시임에는 분명하다.

이렇게 아주 큰 해시율을 가지는 채굴 풀은 아주 빠르게 논스 범위를 순식간에 거칠 것이다.
즉, 채굴 풀은 1초가 되기도 전에 시간이 흐르자마자 바로 논스를 거칠 것이기 때문에 위에서 보았던 한 채굴자가 겪었던 문제는 채굴 풀에게는 아무런 문제가 되지 않을 것이다.

이 경우 채굴 풀이 0부터 40억까지의 논스를 정말 빠르게 거치기 때문에 업데이트될 때까지 1초를 기다렸다가 다시 시도하게 되면 능력을 낭비하게 된다.
채굴 풀 입장에서는 아무것도 안 하고 가만히 앉아 있는 것이기 때문이다.

하지만 시스템이 이런 식이면 안 되고 이런 제약도 없어야 한다.
이것이 바로 문제다.

그래서 이러한 문제를 채굴자가 트랜잭션을 선택하는 방법을 통해 해결하는데, 이는 다른 포스트에서 다룰 것이다.

0개의 댓글