Difficulty Adjustment는 블록을 찾는 난이도를 자동으로 조절하는 방식입니다. 채굴자들이 블록을 너무 빨리 찾으면 탐색 조건을 더 어렵게, 너무 느리게 찾으면 더 쉽게 만듭니다. 덕분에 연산 능력이 크게 변해도 Bitcoin은 대략적인 속도를 유지할 수 있습니다. 모든 규칙을 검증하는 각 노드가 같은 기준으로 조정 결과를 확인하며, 관리자가 값을 정하지 않습니다.
많은 새 장비가 채굴에 참여한다고 생각해 보세요. 전체적으로 초당 더 많은 계산을 시도하므로 난이도가 같다면 평균적으로 블록을 더 빨리 찾습니다. 블록은 확인된 거래를 모은 묶음이며, 블록이 만들어질 때 새로운 비트코인이 발행될 수도 있습니다. 조정이 없다면 강력한 장비는 발행 속도까지 높일 것입니다. 채굴자는 블록 헤더의 숫자 지문인 해시를 반복해서 계산하고, 결과가 충분히 작을 때 성공합니다. 기준을 엄격하게 만들면 한 번의 시도가 성공할 확률이 낮아져 평균적으로 더 많은 작업이 필요합니다. [3]
Bitcoin의 실제 운영 네트워크인 mainnet에서는 2 016블록마다 난이도를 다시 계산합니다. 블록당 평균 10분이라면 약 2주입니다. 하지만 타이머가 작동하는 것은 아닙니다. 블록 높이라고 부르는 순번이 해당 값에 도달해야 조정됩니다. 많은 채굴자가 갑자기 장비를 끄면 남은 블록을 찾는 데 더 오래 걸릴 수 있습니다. 네트워크는 먼저 이전 난이도로 그 기간을 마쳐야 합니다. mainnet에는 즉시 적용되는 비상 난이도 인하가 없습니다. [1] [2]
계산에 사용하는 시간이 목표인 14일 대신 10일이었다고 가정해 봅시다. 다음 기간에는 채굴이 더 어려워집니다. 난이도는 대략 14 대 10의 비율, 즉 40%만큼 높아집니다. 반대로 측정한 기간이 28일이면 난이도는 대략 절반으로 낮아집니다. 이 간단한 예시는 수치 표현의 정밀도 제한에 따른 오차를 생략하고, 허용되는 최저 난이도가 계산을 제한하지 않는다고 가정합니다. 이후 연산 능력이 그대로라면 새 설정은 예상 블록 간격을 다시 10분에 가깝게 만듭니다. [1] [2]
10분은 장기 평균이지 약속된 대기 시간이 아닙니다. 두 블록이 연달아 나올 수도 있고, 다음 블록을 훨씬 오래 기다릴 수도 있습니다. 내 거래가 바로 다음 블록에 들어간다는 보장도 없습니다. 수수료와 다른 대기 거래도 영향을 줍니다. 난이도 조정은 BTC 가격을 통제하거나 채굴자의 수익을 보장하지 않습니다. 블록 하나에서 새로 발행할 수 있는 비트코인 양도 바꾸지 않습니다. 그 양을 주기적으로 절반으로 줄이는 Halving은 별도의 규칙을 따릅니다. [2] [3]
규칙은 target이라는 숫자 기준을 사용합니다. target이 작을수록 채굴은 어려워지며, 난이도라고 부르는 수치는 이 관계를 반대 방향으로 표현합니다. 새 target은 이전 target에 측정한 시간을 곱하고 목표 시간인 1 209 600초로 나눈 값입니다. 계산 전에 측정한 시간을 목표 시간의 4분의 1부터 4배 사이로 제한하여 한 번의 조정 폭을 제한합니다. 또한 target은 허용되는 최댓값 powLimit을 넘을 수 없습니다. 헤더에는 정밀도가 제한된 압축 표현인 nBits로 저장되므로 앞서 든 예시의 비율은 근삿값입니다. [1] [2]
Bitcoin Core는 완료된 기간의 마지막 블록과 첫 블록의 헤더 타임스탬프를 비교합니다. 2 016블록 사이에는 2 015개의 간격이 있으며, 규칙은 이 역사적 특징을 유지합니다. 타임스탬프는 네트워크 규칙이 허용하는 범위에서 채굴자가 기록합니다. 블록을 발견한 정확한 시각을 측정한 값도, 이전 블록들로 계산하는 별도의 시간 값인 Median Time Past도 아닙니다. 조정의 목적을 이해하는 데 꼭 필요한 세부 사항은 아니지만, 계산을 정확히 재현하려면 중요합니다. [1]
웹사이트에는 다음 난이도 변화의 예상치가 자주 표시됩니다. 기간이 끝나기 전에는 새 블록이 계속 나오므로 예상치도 달라질 수 있습니다. 완료된 조정은 자신의 노드로 확인할 수 있습니다. 기간 경계에 있는 블록의 시간을 비교하고 nBits를 숫자 target으로 변환한 뒤, 제한과 정밀도 손실까지 반영해 계산을 재현합니다. Full Node, 즉 Bitcoin 규칙을 독립적으로 검증하는 노드는 블록을 받아들일 때 필요한 target을 확인합니다. 이 설명은 mainnet에 해당하며, 테스트 네트워크에는 다른 규칙이 적용될 수 있습니다. [1] [2]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Proof of Work, 채굴, Timechain / Blockchain, Block Subsidy. 다음 항목에서도 이 글을 참조합니다 Timechain / Blockchain, Proof of Work, 채굴, Halving.