논스
논스는 비트코인 채굴자가 블록 헤더에 넣어 가며 조건에 맞는 해시를 찾는 숫자입니다. 채굴자는 논스를 바꾸어 블록 헤더를 다시 해시하고, 그 결과가 네트워크가 정한 목푯값 이하인지 확인합니다.
논스와 목푯값
채굴 경쟁에는 두 요소가 필요합니다. 목푯값은 어떤 해시를 유효한 작업증명으로 인정할지 정하는 기준이고, 논스는 결과를 바꾸기 위해 채굴자가 조정하는 대표적인 입력입니다. 목푯값이 낮을수록 조건을 만족하는 해시의 범위가 좁아져 탐색이 어려워집니다.
채굴자는 블록 헤더를 준비한 뒤 논스를 넣어 SHA-256을 두 번 적용한 이중 해시를 계산합니다. 해시 결과를 숫자로 해석했을 때 목푯값 이하이면 작업증명 조건을 만족합니다. 결과가 기준보다 크면 논스를 바꾸고 다시 계산합니다.
32비트 헤더 필드
블록 헤더의 논스 필드는 4바이트, 즉 32비트 부호 없는 정수입니다. 따라서 0부터 4,294,967,295까지의 값을 넣을 수 있습니다. 논스 하나를 바꾸면 해시 결과 전체가 달라지므로, 어떤 값이 조건을 만족할지 미리 계산하는 지름길은 없습니다. 채굴은 가능한 입력을 바꾸어 가며 결과를 확인하는 반복에 가깝습니다.
논스는 암호나 비밀번호가 아닙니다. 특정 답을 미리 정해 두고 찾아내는 값도 아닙니다. 블록 헤더를 구성하는 여러 값 가운데 해시 결과를 바꾸기 위해 사용하는 탐색용 필드입니다.
논스 범위를 넘으면
32비트 논스의 값을 모두 시도해도 조건을 만족하지 않을 수 있습니다. 그때 채굴자는 채굴 보상을 지급하는 코인베이스 거래의 추가 논스인 엑스트라논스처럼 다른 허용된 입력을 바꿀 수 있습니다. 코인베이스 거래가 바뀌면 머클 루트와 블록 헤더도 달라지므로 새로운 논스 범위를 탐색할 수 있습니다.
다만 논스만 맞으면 블록이 자동으로 유효해지는 것은 아닙니다. 거래, 이전 블록과의 연결, 코인베이스 보상 등 다른 합의 규칙도 모두 통과해야 합니다. 작업증명은 유효한 블록이 갖추어야 할 조건 가운데 하나입니다.
찾기와 확인
채굴자는 조건을 만족하는 입력을 찾기 위해 많은 해시를 계산하지만, 다른 노드는 제안된 블록 헤더를 다시 해시해 목푯값 이하인지 확인할 수 있습니다. 누가 몇 번 시도했는지를 기록할 필요는 없습니다. 결과가 규칙에 맞는지 확인하면 됩니다.
논스는 채굴자가 바꾸는 숫자이고, 목푯값은 결과를 판정하는 기준입니다. 두 개념을 함께 보면 채굴이 정답을 추론하는 일이라기보다, 정해진 규칙 아래에서 입력을 바꾸고 해시를 검사하는 과정임을 이해할 수 있습니다.