난도 조정
비트코인 채굴에 참여하는 기계의 수와 성능은 계속 변합니다. 그런데 블록은 평균적으로 약 10분 간격을 유지합니다. 이 간격을 조절하는 장치가 난도 조정입니다.
난도 조정은 블록이 평균 10분에 하나씩 나오도록 2,016블록마다 채굴 문제의 어려움을 자동으로 다시 맞추는 규칙입니다. 누군가 중앙에서 버튼을 누르거나 회의를 열어 결정하는 방식이 아니라, 비트코인 규칙에 미리 포함된 계산식에 따라 이루어집니다.
왜 난도를 조정할까요?
채굴은 조건에 맞는 숫자를 찾을 때까지 값을 바꿔 가며 시도하는 계산 경쟁입니다. 자물쇠의 번호를 계속 바꾸어 가며 맞는 조합을 찾는 일과 비슷합니다.
채굴기가 두 배로 늘거나 기계 하나하나의 계산 속도가 빨라지면 전체 시도 횟수도 늘어납니다. 난도를 그대로 두면 블록이 평균 10분보다 빠르게 발견될 가능성이 커집니다. 참여자가 몰릴수록 블록이 쏟아지고, 새 비트코인의 발행 속도도 예상보다 빨라질 수 있습니다.
반대로 채굴자가 떠나거나 기계의 계산 능력이 줄면 블록 하나를 찾는 데 몇 시간씩 걸릴 수 있습니다. 그러면 거래가 블록에 포함되는 속도도 느려져 송금 처리가 사실상 멈추는 상황에 가까워질 수 있습니다.
난도 조정은 참여자가 늘거나 줄어도 블록 생성 속도가 크게 흔들리지 않도록 이 두 방향을 모두 보정합니다.
자동 온도 조절기와 같은 원리
난도 조정은 온도 조절기에 비유할 수 있습니다. 보일러의 목표 온도를 정해 두면 방이 너무 더워질 때는 열을 줄이고, 식으면 열을 높입니다. 사람이 계속 지켜보지 않아도 온도가 목표값 근처로 돌아오게 하는 장치입니다.
여기서 목표 온도에 해당하는 값이 평균 10분이라는 목표 간격입니다. 실제 방 온도에 해당하는 것은 실제 블록 생성 속도입니다.
- 블록이 너무 빠르게 나오면 채굴 문제를 어렵게 조정합니다.
- 블록이 너무 느리게 나오면 채굴 문제를 쉽게 조정합니다.
다만 이 조절은 실시간으로 이루어지지 않습니다. 정해진 주기인 2,016블록이 쌓일 때마다 한 번씩 계산됩니다. 또한 메인넷에서는 한 조정 주기에 적용할 목푯값 변화에도 제한이 있으므로, 해시레이트가 급격히 변해도 한 번에 모든 변화를 따라잡는 것은 아닙니다. 변화가 여러 주기에 걸쳐 반영될 수 있습니다. (Bitcoin Core의 다음 작업증명 목푯값 계산 규칙 참조)
2,016블록마다 실제 시간을 비교합니다
노드는 2,016블록마다 직전 구간의 첫 블록과 마지막 블록에 기록된 시간의 차이를 계산해 목표 기간인 약 2주와 비교합니다. 정확히는 2,016개 블록 사이의 2,015개 간격을 재는 방식입니다.
실제 소요 시간이 이보다 짧았다고 해서 반드시 채굴 참여나 계산 능력이 늘었다고 단정할 수는 없습니다. 블록 발견은 확률적 과정이므로, 같은 계산 능력에서도 우연히 짧거나 긴 구간이 나타날 수 있습니다. 조정식은 원인을 판별하지 않고, 블록의 시간 정보를 바탕으로 다음 목푯값을 계산합니다.
실제 소요 시간이 목표보다 짧으면 다음 2,016블록 구간에서는 그 차이를 반영해 문제가 더 어려워지는 방향으로 조정됩니다. 반대로 목표보다 길면 쉬워지는 방향으로 조정됩니다. 다만 실제 변화량은 해시레이트 변화와 블록 발견 운이 함께 반영된 결과입니다.
실제 시간이 목표에 가까웠다면 큰 조정 없이 현재 난도를 유지합니다. 이렇게 지난 구간의 실제 속도와 목표 속도를 비교해 다음 구간의 조건을 정합니다.
목푯값을 바꾸는 방식
채굴 문제의 난도를 바꾸는 방법은 당첨 기준선을 옮기는 것입니다. 채굴자가 계산한 값이 기준 숫자 이하여야 정답으로 인정된다고 생각해 보겠습니다.
- 기준을 더 낮추면 정답으로 인정되는 범위가 좁아집니다. 같은 기계로 더 많은 시도를 해야 하므로 문제가 어려워집니다.
- 기준을 더 높이면 정답으로 인정되는 범위가 넓어집니다. 계산 능력이 줄어도 블록 간격을 다시 맞추기 쉬워집니다.
비트코인에서는 이 기준이 되는 목푯값을 조정해 채굴 난도를 바꿉니다. 채굴기의 속도 자체를 느리게 하거나 빠르게 하는 것이 아니라, 정답으로 인정할 범위를 바꾸는 방식입니다.
채굴기가 늘어도 발행 속도는 유지됩니다
채굴기가 100배로 늘었다고 해서 블록이 계속 100배 빠르게 생성되는 것은 아닙니다. 다음 난도 조정에서 문제가 그에 맞게 어려워지는 방향으로 조정되기 때문입니다. 다만 한 주기의 조정 폭에는 제한이 있으므로, 급격한 변화가 한 번의 조정으로 모두 따라잡힌다고 볼 수는 없습니다. 2,016블록에 도달할 때까지의 실제 시간도 달라지고, 이후 여러 조정 주기를 거치며 변화가 반영될 수 있습니다.
반대로 채굴기가 줄어들면 문제가 쉬워져 블록 간격을 다시 목표에 가깝게 맞춥니다.
따라서 난도 조정은 블록 생성 속도를 안정시키는 역할을 하고, 비트코인의 총량 상한은 별도의 규칙이 정합니다. 채굴기가 많아진다고 비트코인의 총량 상한이 커지는 것은 아닙니다.
두 규칙은 서로 다른 일을 맡습니다.
- 난도 조정은 블록이 생성되는 속도를 평균 약 10분으로 유지합니다.
- 총량 상한은 발행될 수 있는 비트코인의 전체 한도를 제한합니다.
전체 네트워크의 계산 능력이 늘고 한 채굴자의 계산 능력은 그대로라면, 그 채굴자가 차지하는 비중과 기대 보상 몫은 줄어듭니다. 금광에서는 광부가 몰리면 더 많은 금이 나올 수 있지만, 비트코인에서는 난도 조정 때문에 네트워크 전체의 발행 속도가 같은 방식으로 늘어나지 않습니다.
누가 난도를 조정하나요?
특정 운영자나 중앙 기관이 난도 조정 값을 발표하고 승인하는 것이 아닙니다. 전 세계의 노드가 같은 장부와 같은 규칙을 바탕으로 각자 계산합니다.
같은 구간의 블록을 보고 같은 계산식을 적용하면 누구나 같은 결과를 얻습니다. 조작하고 싶어도 임의로 돌릴 수 있는 중앙의 손잡이가 없습니다. 중앙은행이 회의를 통해 정책을 정하는 방식과 달리, 여기서는 규칙에 포함된 계산식이 같은 절차를 수행합니다.
어떤 노드가 다른 값을 주장하더라도 다른 노드들이 각자의 계산 결과와 맞지 않는다고 판단하면 받아들여지지 않습니다. 난도 조정은 특정 사람의 판단보다 모두가 확인할 수 있는 규칙에 의존합니다.
정리
난도 조정은 블록 생성 속도를 안정시키기 위한 자동 규칙입니다.
- 2,016블록마다 직전 구간의 첫 블록과 마지막 블록의 시간 차이를 계산합니다.
- 목표인 약 2주와 실제 시간을 비교합니다.
- 목표보다 빨랐다면 목푯값을 낮춰 문제를 어렵게 만듭니다.
- 목표보다 느렸다면 목푯값을 높여 문제를 쉽게 만듭니다.
- 한 주기의 조정 폭에는 제한이 있으므로 급격한 변화는 여러 주기에 걸쳐 반영될 수 있습니다.
- 다음 구간에서도 블록 간격이 평균 약 10분에 가까워지도록 조정합니다.
채굴 참여자가 늘어도 공급 속도가 그만큼 늘지 않는 이유가 여기에 있습니다. 더 많은 계산 능력은 경쟁을 치열하게 만들지만, 난도 조정은 그 변화에 맞춰 정답 기준선을 다시 옮깁니다. 다만 실제 조정 구간의 시간은 계산 능력 변화뿐 아니라 블록 발견의 확률적 운에도 영향을 받습니다.