용어집 / 채굴과 합의
논스
- 논스란 무엇입니까?
- 논스는 채굴업자가 목푯값보다 작은 해시를 찾는 동안 증가시키는 블록 헤더의 4바이트 카운터로, 헤더당 4,294,967,296번의 시도만 제공합니다.
BIP-320에 명시되어 있습니다.
이 단어는 “number used once”의 줄임말이며, 비트코인에서는 순전히 변경되기 위해 존재하는 유일한 헤더 필드를 가리킵니다. 4바이트는 2009년 당시에는 넉넉해 보였지만 지금은 사소한 수준입니다. 현대의 기계 한 대가 전체 범위를 1초도 안 되는 시간에 소진합니다. 따라서 채굴업자는 헤더의 다른 부분도 바꾸며, 논스는 탐색의 가장 안쪽 루프일 뿐입니다.
작동 방식
논스는 80바이트 헤더의 마지막 4바이트를 차지하며, 채굴은 그 값들을 차례로 훑는 행위입니다.
채굴업자는 후보 헤더를 구성하고, SHA-256으로 두 번 해시한 뒤, 그 결과를 목푯값과 비교합니다. 결과가 너무 크면 카운터를 증가시키고 헤더를 다시 해시합니다. 다른 것은 바꿀 필요가 없어서 루프가 저렴하게 유지됩니다. SHA-256은 64바이트 청크 단위로 동작하므로, 헤더의 처음 64바이트는 한 번 처리한 뒤 모든 시도에서 재사용할 수 있습니다.
문제는 범위입니다. 4바이트에는 4,294,967,296개의 서로 다른 값이 들어가며, 초당 200테라해시로 평가되는 ASIC은 그것을 모두 약 21마이크로초 만에 통과합니다. 따라서 탐색에는 세 가지 외부 루프가 있습니다. 채굴업자는 코인베이스 트랜잭션의 입력 스크립트에 있는 몇 바이트의 여유 공간인 추가 논스를 바꾸는데, 이는 그 트랜잭션을 바꾸고, 머클 루트를 바꾸고, 완전히 새로운 헤더를 만들어 탐색하게 합니다. 규칙이 허용하는 범위 안에서 타임스탬프를 앞당길 수도 있습니다. 그리고 BIP320 이후로는 마스크 0x1fffe000을 사용해 버전 필드의 16비트를 바꿀 수 있으며, 이는 트랜잭션 목록을 전혀 건드리지 않고 공간을 다시 65,536배로 늘립니다.
사토시 본인의 탐색은 기록을 남겼습니다. 제네시스 헤더는 값 2083236893을 담고 있는데, 이는 추가 논스 조정도, 버전 비트도 없이 2009년에 CPU에서 찾은 것입니다.
확인할 수 있는 곳
모든 블록 탐색기의 모든 블록 페이지는 승리한 논스를 표시하며, 그 숫자는 거의 아무것도 알려주지 않습니다.
기계가 공간을 예측할 수 없는 순서로 훑고, 현재 실제 변화의 대부분이 추가 논스와 버전 롤링에서 나오기 때문에, 채굴된 블록의 그 숫자는 거의 무작위에 가깝습니다. 낮거나 높은 값에서 의미를 읽어내는 것은 초보자가 흔히 하는 실수입니다. 이 필드는 펌웨어 작성자에게 더 중요합니다. Stratum은 연결된 각 기계에 추가 논스의 자기 몫을 할당하여 같은 풀의 두 작업자가 절대 같은 작업을 중복하지 않게 하며, Stratum V2는 같은 조정 문제를 중심으로 작업 협상을 다시 설계했습니다.
이 단어는 채굴과 아주 먼 곳에서도 만나게 됩니다. 암호화 방식은 두 메시지가 같은 암호문을 만들어내지 않도록 논스를 사용하고, Ethereum은 계정 논스를 트랜잭션 카운터로 사용하며, 웹 로그인은 재전송 공격을 막기 위해 논스를 사용합니다. 그중 어느 것도 블록 헤더의 필드가 아니며, 이 공유된 단어는 비트코인이 다른 분야에서 빌려온 다른 어떤 용어보다 피할 수 있는 혼란을 더 많이 일으킵니다.