225 / 736TARGET

Mining Target

채굴 결과가 넘어서는 안 되는 숫자

야나는 채굴자가 계산을 반복한다는 것은 알지만, 무엇을 기다리는지는 아직 궁금합니다. 한 번 시도할 때마다 해시가 나오며, 이는 아주 큰 숫자로 이해할 수 있습니다. 아무 결과나 되는 것은 아닙니다. 정해진 경계보다 낮아야 하며, 경계와 같은 값도 허용됩니다. 이 경계를 Mining Target이라고 합니다. 낮을수록 성공은 드물어집니다. 다른 네트워크 참여자는 찾은 결과가 정말 조건을 만족하는지 쉽게 확인할 수 있습니다.

Mining Target은 블록의 간결한 데이터 요약인 헤더의 해시와 비교하는 숫자입니다. 유효한 작업 증명을 위해서는 해시가 올바른 목표값 이하여야 합니다. Bitcoin 네트워크에서는 목표값이 양수이고 해당 블록의 규칙에 맞아야 하며, 채굴자가 마음대로 선택할 수 없습니다.

설명을 위해서만 상한을 20이라고 해 봅시다. 결과 19와 20은 통과하고 21은 통과하지 못합니다. 실제 채굴의 숫자는 훨씬 크지만 관계는 같습니다. hash ≤ target은 엄밀히 작기만 해야 한다는 뜻이 아니라 같아도 된다는 뜻입니다. Bitcoin Core는 네트워크 참여자가 블록과 거래를 검증할 때 사용하는 소프트웨어입니다. 여기서 참고하는 v29.0도 전체 헤더의 해시를 이렇게 비교합니다. 탐색 중에 바꾸는 nonce는 입력값 중 하나이며, 목표값 이하가 되어야 하는 최종 결과 자체가 아닙니다. [1]

야나는 성공한 해시가 긴 영의 나열로 시작하는 그림을 봅니다. 유용한 설명입니다. 표시 길이가 같다면 앞에 영이 많을수록 작은 숫자입니다. 하지만 앞부분의 영 개수가 같은 두 해시도 목표값의 서로 다른 쪽에 놓일 수 있습니다. 나머지 숫자도 중요합니다. 따라서 영을 세는 것으로 전체 hash ≤ target 비교를 대신할 수 없습니다. 규칙은 보기 좋은 문자 무늬가 아니라 정확한 수치 조건을 요구합니다. [1]

비트는 영 또는 일을 나타내며, 여덟 비트가 한 바이트를 이룹니다. Bitcoin은 긴 숫자 전체를 헤더에 저장하는 대신 32비트 nBits 필드를 사용합니다. 계수, 이동을 정하는 지수, 부호 비트로 256비트 숫자 공간의 목표값을 인코딩합니다. 예를 들어 0x04123456을 디코딩하면 0x12345600이 됩니다. 접두사 0x는 문자도 사용하는 십육진수 표기라는 뜻입니다. 이는 인코딩 예시이지 현재 네트워크 목표값이 아닙니다. 기본적인 이해에는 숫자 자체와 짧게 표현한 방식을 구분하면 충분합니다. [3] [5]

원시 데이터에서 같은 숫자가 거꾸로 보일 수 있습니다. 80바이트 헤더에서 nBits는 네 바이트를 차지하며, 가장 낮은 자릿값의 바이트가 먼저 오는 little-endian 방식으로 저장됩니다. 그래서 숫자 0x1d00ffff는 데이터에 ff ff 00 1d로 나타납니다. 바이트 순서는 목표값의 변화가 아니라 저장 방식입니다. 원시 데이터를 다룰 때 필요한 세부 사항이며, 블록 탐색기를 보통 읽는 사람은 화면의 숫자를 뒤집을 필요가 없습니다. [2]

야나는 더 큰 숫자를 저장하면 탐색을 쉽게 만들 수 있다고 생각할 수 있습니다. 하지만 소프트웨어는 nBits를 읽을 수 있는지만 확인하지 않습니다. Bitcoin Core v29.0의 DeriveTarget은 음수 목표값, 영, 수치 범위를 벗어난 오버플로, 해당 네트워크의 최대 허용 목표값인 powLimit보다 큰 값을 거절합니다. 디코딩 성공은 표현된 숫자를 알아냈다는 뜻일 뿐, 그 숫자를 사용할 수 있다는 허가는 아닙니다. [1]

허용 범위 안의 목표값도 특정 블록에는 틀릴 수 있습니다. Bitcoin Core는 nBits를 이전 블록과 네트워크 규칙을 바탕으로 계산한 GetNextWorkRequired의 결과와 비교합니다. 일치하지 않으면 bad-diffbits 오류가 납니다. 스스로 정한 쉬운 목표값 아래의 해시를 찾았더라도 헤더의 잘못된 값은 정당화되지 않습니다. 야나는 요구 조건을 낮추는 것만으로 승인받는 블록을 만들 수 없습니다. 규칙을 검증하는 컴퓨터인 다른 노드가 거절하기 때문입니다. [4]

256비트 해시가 균등하게 분포하는 모델에서는 모든 가능한 결과가 같은 확률로 나옵니다. 허용된 목표값 T에 대해 영부터 T까지 양 끝을 포함한 값이 통과합니다. 따라서 한 번의 시도가 성공할 확률은 p = (T + 1) / 2^256이며, p는 성공 확률입니다. 분자에 하나를 더한 이유는 영도 포함하기 위해서입니다. 이 관계는 목표값이 낮을수록 탐색이 어려워지는 이유를 설명합니다. 기계가 초당 몇 번 시도하는지나 다음 블록이 정확히 언제 나오는지는 알려 주지 않습니다. [1]

야나가 조건을 만족하면 필요한 계산 작업을 했다는 것을 증명한 것이지, 블록 안의 모든 내용이 올바르다는 것을 증명한 것은 아닙니다. Bitcoin Core는 거래들을 묶어 계산한 요약값, coinbase라는 특별한 보상 거래, 블록 제한, 거래의 유효성도 검사합니다. 여기서 coinbase는 거래소가 아니라 블록의 첫 거래를 뜻하는 기술 용어입니다. 낮은 해시로도 잘못된 내용을 고칠 수는 없습니다. 목표값은 중요한 규칙의 일부이지, 나머지를 무시할 허가가 아닙니다. [4]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Share Difficulty, Proof of Work, Nonce, Block Header, Bitcoin. 다음 항목에서도 이 글을 참조합니다 ASIC Miner, Nonce, Mining Share, Share Difficulty.

DOC · 001Bitcoin Core v29.0 — Proof-of-work checks1차 출처 DOC · 002Bitcoin Developer Reference — Block headers and nBits문서 DOC · 003Bitcoin Core v29.0 — Compact arithmetic1차 출처 DOC · 004Bitcoin Core v29.0 — Contextual and block validation1차 출처 DOC · 005NIST — Binary data units문서
개정일: 1차 출처 우선 · 투자 조언이 아닙니다