본문으로 건너뛰기
learncave블록체인과 비트코인의 작동 원리
Chapter 02채굴은 왜 비싸고 코인은 왜 2,100만 개에서 멈출까

작업증명과 발행량 상한

해시 사슬은 고친 흔적을 드러내지만, 다시 계산하면 흔적을 지울 수 있었습니다. 비트코인은 그 계산을 일부러 비싸게 만들고, 비용을 치른 사람에게 새 코인을 줍니다. 이 방식이 장부를 지키는 원리와, 코인이 약 2,100만 개에서 멈추는 까닭을 살펴봅니다.

읽는 시간 5분선행 챕터 01 (장부를 모두가 나눠 갖는다는 것)핵심 개념 3개

다시 계산하는 데 비용이 들게 만들기

앞 챕터에서는 해시를 다시 계산해 고친 흔적을 지울 수 있었습니다. 해시 계산이 너무 싸기 때문입니다. 비트코인 백서의 해법은 블록 하나를 만드는 데 일부러 많은 계산이 들게 하는 것입니다. 이것을 조건에 맞는 해시를 찾기까지 많은 계산을 들였음을 보여 주는 방식입니다.이라고 부릅니다.

방법은 이렇습니다. 블록 안의 해시 결과를 바꾸려고 블록에 넣어 두고 하나씩 바꿔 보는 숫자입니다.라는 숫자를 하나씩 바꿔 가며 해시를 계산합니다. 그러다 해시가 0 여러 개로 시작하는 값이 나오면 성공입니다.[1] 요구하는 0이 많을수록 찾기는 훨씬 어려워집니다. 하지만 찾은 답이 맞는지는 해시 한 번으로 확인합니다.[1]

한 사람이 산더미처럼 쌓인 회색 자갈 앞에 앉아 그릇에 담은 자갈을 하나하나 고르고 있고, 앞쪽에는 주황색 자갈 하나만 따로 놓여 있다. 오른쪽에는 이미 골라낸 자갈이 쌓여 있다.
조건에 맞는 돌 하나를 찾으려면 수많은 돌을 일일이 걸러 봐야 하지만, 찾은 돌이 맞는지는 한눈에 확인됩니다. 작업증명도 논스를 바꿔 가며 해시를 수없이 계산해야 하고, 찾은 답은 한 번에 검증됩니다.
쉽게 말하면

네 자리 번호 자물쇠를 0000부터 하나씩 돌려 여는 장면을 떠올려 보세요. 맞는 번호를 찾기는 오래 걸리지만, 알려 준 번호가 맞는지는 한 번에 확인됩니다. 자물쇠 번호가 논스, 열리는 조건이 해시가 0으로 시작하는 것, 열어 보는 한 번이 검증입니다. 다만 작업증명은 매번의 시도가 서로 독립입니다. 오래 돌렸다고 다음 시도가 유리해지지 않습니다.[2]

직접 해 보면 감이 옵니다. learncave 블록이라는 글자 뒤에 0부터 숫자를 붙여 가며 SHA-256을 계산했습니다. 그리고 결과가 0으로 몇 자리 시작하는지 셌습니다.

앞자리 0의 개수 평균적으로 필요한 시도 이번에 실제로 걸린 시도
1개 16번 16번
2개 256번 18번
3개 4,096번 3,155번
4개 65,536번 17,209번
5개 1,048,576번 465,059번
6개 16,777,216번 17,122,109번

0을 한 자리 더 요구할 때마다 평균 시도는 16배로 늘어납니다. 16진수 한 자리가 0일 확률이 16분의 1이기 때문입니다. 실제 횟수는 운에 따라 평균보다 훨씬 적거나 많기도 합니다. 6개짜리는 1,700만 번 넘게 시도해서야 찾았습니다. 그래도 그 답이 맞는지는 계산 한 번으로 확인됩니다.

흔한 착각

채굴을 “어려운 수학 문제를 푸는 일”로 설명하는 경우가 많습니다. 실제로는 풀이를 궁리하는 일이 아니라, 숫자를 바꿔 가며 될 때까지 시도하는 일입니다. 미국 국립표준기술연구소(NIST)는 이 과정에 알려진 지름길이 없다고 설명합니다.[2] 계산력이 큰 쪽이 유리한 것도 더 영리해서가 아니라 1초에 더 많이 시도하기 때문입니다.

계산 과정 보기

평균 시도 횟수는 16의 거듭제곱입니다. 0이 6개라면 16⁶ = 16,777,216번입니다. 6개짜리로 찾은 값은 learncave 블록17122108이고, 그 해시는 00000098c3fb…로 시작합니다.

블록 간격과 난이도 조정

장비가 빨라지면 블록도 점점 빨리 나올 것입니다. 그래서 블록이 너무 빨리 나오면 조건을 더 어렵게 바꿉니다.[1] 이것을 블록이 너무 빨리 나오면 조건을 어렵게, 늦게 나오면 쉽게 바꾸는 규칙입니다.이라고 합니다. NIST에 따르면 비트코인은 2,016블록마다 난이도를 다시 정합니다.[2] 그래서 블록이 대략 10분에 하나씩 나오고, 조정은 약 2주에 한 번 일어납니다.[2]

계산 과정 보기

2,016블록 × 10분 = 20,160분 = 14일입니다.

오래된 기록일수록 고치기 어려운 이유

이제 앞 챕터의 질문으로 돌아갑니다. 과거 블록을 고친 사람은 그 블록의 작업증명을 다시 해야 합니다. 그 뒤에 쌓인 블록의 작업증명도 모두 다시 해야 합니다. 그동안 정직한 참여자들은 계속 새 블록을 쌓습니다. 고친 사람은 그들을 따라잡고 앞질러야 합니다.[1]

어느 사본을 따를지도 여기서 정해집니다. 참여자들은 언제나 가장 긴 사슬, 곧 작업이 가장 많이 들어간 사슬을 따릅니다.[1] 이것이 비트코인의 다수결입니다. IP 주소 하나에 한 표를 주면 주소를 많이 만든 사람이 이깁니다. 작업증명은 계산력에 따라 표를 주므로, 속이려면 실제 계산력을 갖춰야 합니다.[1]

백서는 공격자가 몰래 다른 사슬을 만들어 끝내 따라잡을 확률도 계산했습니다.[1] 받는 사람이 블록 6개를 기다린 경우를 그 식으로 계산하면 다음과 같습니다.

공격자의 계산력 비중 끝내 따라잡을 확률
10% 약 0.024%
20% 약 1.4%
30% 약 13.2%
45% 약 76.6%
50% 이상 100%

공격자의 계산력이 작으면 블록이 쌓일수록 확률이 빠르게 0에 다가갑니다. 하지만 절반에 가까워지면 기다리는 것만으로는 거의 막을 수 없습니다. 그래서 백서는 정직한 참여자의 계산력이 공격자보다 많아야 안전하다고 전제합니다.[1] NIST도 이런 공격은 어렵다기보다 비싸며, 오래된 블록일수록 더 비싸다고 설명합니다.[2]

계산 과정 보기

백서 11절의 식을 파이썬으로 옮겨, 10%일 때 백서 표의 값(0.0002428)과 같은 값이 나오는 것을 확인했습니다. 20%, 30%, 45%는 같은 식으로 직접 계산한 값입니다. 50% 이상이면 백서의 식에서 바로 100%가 나옵니다.

채굴 보상: 새 코인은 어디서 나오는가

누군가 이 비싼 계산을 맡아야 장부가 지켜집니다. 그래서 백서는 블록을 만든 사람에게 새 코인을 주기로 했습니다.[1] 중앙 발행 기관 없이 코인을 처음 나눠 주는 방법이면서, 네트워크를 지키게 하는 보상입니다. 백서는 이것을 금을 캐는 일에 견주었고, 들어가는 자원은 CPU 시간과 전기입니다.[1] 블록을 만드는 일을 채굴이라고 부르는 것도 이 비유에서 왔습니다.

보상에는 그 블록에 담긴 거래의 수수료도 더해집니다. 백서는 정한 수량의 코인이 다 풀리면 보상이 모두 수수료로 넘어갈 수 있다고 적었습니다.[1]

2,100만 개는 어디서 나오는가

백서에는 “미리 정한 수량”이라는 말만 있고, 2,100만 개라는 숫자는 없습니다.[1] 그 숫자는 비트코인 소프트웨어의 규칙에서 나옵니다. 대표 구현인 Bitcoin Core는 블록 보상을 50 BTC에서 시작해 21만 블록마다 절반으로 줄입니다.[3] 코드 주석은 이것이 대략 4년마다 일어난다고 적고 있습니다.[3] 이 주기를 블록 보상이 절반으로 줄어드는 주기입니다. 비트코인에서는 21만 블록입니다.라고 부릅니다.

첫 21만 블록 동안은 블록마다 50개, 다음은 25개, 그다음은 12.5개씩 나옵니다. 이렇게 절반씩 줄어드는 양은 끝없이 더해도 처음 몫의 두 배를 넘지 못합니다. 첫 21만 블록의 몫이 1,050만 개이므로, 총량은 2,100만 개에 다가갑니다.

0700만1,400만2,100만042만84만126만168만210만약 8년약 16년약 24년약 32년약 40년21만 블록: 1,050만 개 (50%)84만 블록: 93.75%168만 블록: 99.6%
가로축은 블록 번호이고, 아래 작은 글씨는 블록이 평균 10분마다 나온다고 가정한 경과 연수입니다. 반감이 일어날 때마다 곡선의 기울기가 절반으로 꺾이므로, 발행량 대부분이 처음 몇 차례의 반감 안에 나온다는 것을 읽으면 됩니다.

그래프처럼 발행량 대부분은 처음 몇 번의 반감 안에 나옵니다.

그런데 실제 총량은 2,100만 개보다 조금 적습니다. 비트코인은 1 BTC를 1억 비트코인을 세는 가장 작은 단위로, 1 BTC의 1억분의 1입니다.로 나눠 세고, 모든 금액을 사토시 단위 정수로 다룹니다.[4] 보상을 절반으로 줄일 때는 사토시 아래 소수점을 버립니다.[3] 이 규칙대로 다시 더하면 총량은 20,999,999.9769 BTC입니다. 2,100만 개보다 0.0231 BTC 적습니다.

보상은 반감을 거듭하다가 33번째 반감에서 0이 됩니다. 비트코인 네트워크는 2009년에 출범했습니다.[2] 블록이 평균 10분마다 나온다면, 새 코인이 끊기는 때는 2140년 무렵입니다.

흔한 착각

“코드에 2,100만이라는 숫자가 있으니 정확히 2,100만 개가 나온다”는 생각도 틀립니다. Bitcoin Core의 MAX_MONEY 값은 2,100만 BTC이지만, 이것은 금액이 범위를 벗어나는지 보는 검사값입니다. 코드 주석은 실제 총공급량이 여러 이유로 2,100만 BTC보다 적다고 밝힙니다.[4] 위의 0.0231 BTC는 그 이유 가운데 사토시 버림 하나만 반영한 값입니다.

계산 과정 보기

총량 = 210,000 × 50 × (1 + 1/2 + 1/4 + 1/8 + …) = 210,000 × 50 × 2 = 21,000,000

괄호 안은 공비가 1/2인 등비급수이고, 끝없이 더하면 1 ÷ (1 − 1/2) = 2에 다가갑니다. 반감 주기는 21만 블록 × 10분 = 약 1,458일이므로 약 3.99년입니다.

실제로는 Bitcoin Core가 50 BTC의 사토시 값을 반감 횟수만큼 오른쪽으로 비트 이동해 보상을 정하고, 이 연산은 소수점 아래를 버립니다.[3] 이 규칙을 그대로 옮겨 파이썬으로 다시 더했습니다.

COIN = 100_000_000                      # 1 BTC = 1억 사토시
total = sum(210_000 * ((50 * COIN) >> h) for h in range(64))
print(total)          # 2099999997690000 (사토시)
print(total / COIN)   # 20999999.9769 (BTC)

아홉 번째 반감까지는 보상이 사토시 단위로 나누어떨어집니다. 열 번째 반감에서 보상이 4,882,812.5사토시가 되어야 할 자리에서 처음으로 0.5사토시를 버리고, 그 뒤로도 버림이 이어집니다. 그래서 0.0231 BTC(231만 사토시)가 덜 발행됩니다.

보상은 32번째 반감 뒤 블록당 1사토시까지 줄었다가 33번째 반감에서 0이 됩니다. 33 × 210,000 = 6,930,000이므로 블록 번호 6,930,000부터는 새 코인이 나오지 않습니다. 6,930,000 × 10분은 약 132년이고, 비트코인 네트워크가 2009년에 출범했으므로 2140년 무렵에 해당합니다.

발행량 상한이 약속하지 않는 것

상한은 비트코인이 몇 개까지 생기는지만 정합니다. 그 한 개로 무엇을 얼마나 살 수 있는지는 정하지 않습니다. 영란은행은 디지털 화폐가 예금이나 지폐와 달리 누구의 부채도 아니라고 설명합니다. 참여자들이 의미 있다고 합의하는 만큼만 의미를 갖는다는 것입니다.[5] 돈의 액면 금액과 일정한 돈으로 살 수 있는 물건과 서비스의 양입니다.명목 수익률과 실질 수익률 챕터에서 보기을 구분하는 법은 명목 수익률과 실질 수익률에서 다뤘습니다.

반대 의견도 있습니다. 영란은행은 공급이 미리 고정된 화폐가 경제의 주된 돈이 되면 물가 하락(디플레이션)을 부를 수 있다고 지적했습니다. 가격과 실물 경제의 출렁임도 키울 수 있다고 봤습니다.[5]

상한이 자연법칙이 아니라 소프트웨어 규칙이라는 점도 기억해 둘 만합니다. NIST는 개발자와 채굴자, 사용자가 저마다 영향력을 가진다고 설명합니다. 충분한 사용자가 받아들이면 규칙을 바꾼 갈래(포크)가 생길 수 있습니다.[2]

보상이 줄면 채굴 수익이 전기 요금에 못 미칠 수 있다는 걱정도 있습니다. NIST는 그러면 블록이 늦게 나오고 공격에 약해질 수 있다고 보고, 이를 블록체인의 한계로 꼽습니다.[2]

이렇게 발행된 코인도 결국 장부의 한 줄입니다. 그 한 줄을 누가 옮길 수 있는지는 무엇이 정할까요? 다음 챕터에서 거래에 서명하는 비밀 값입니다. 이것을 가진 사람이 그 코인을 옮길 수 있습니다.지갑, 개인 키, 거래소 보관 챕터에서 보기와 지갑, 거래소 같은 제3자가 고객 자산의 개인 키를 대신 관리하는 방식입니다.지갑, 개인 키, 거래소 보관 챕터에서 보기의 차이를 다룹니다.

용어 정리

작업증명
조건에 맞는 해시를 찾기까지 많은 계산을 들였음을 보여 주는 방식입니다.
논스
해시 결과를 바꾸려고 블록에 넣어 두고 하나씩 바꿔 보는 숫자입니다.
난이도 조정
블록이 너무 빨리 나오면 조건을 어렵게, 늦게 나오면 쉽게 바꾸는 규칙입니다.
반감기
블록 보상이 절반으로 줄어드는 주기입니다. 비트코인에서는 21만 블록입니다.
사토시
비트코인을 세는 가장 작은 단위로, 1 BTC의 1억분의 1입니다.

용어 사전 전체 보기

정답 0 / 3

Q1채굴자가 새 블록을 만들 때 실제로 하는 일은 무엇입니까?

Q2블록 보상이 50개에서 시작해 21만 블록마다 절반이 됩니다. 사토시 아래를 버리는 규칙을 빼고 보면 총발행량은 얼마에 다가갑니까?

Q3보상을 절반으로 줄일 때 사토시 아래를 버리는 규칙까지 반영하면 규칙대로 계산한 총발행량은 어떻게 됩니까?

  • 작업증명은 조건에 맞는 해시가 나올 때까지 시도하는 일이라, 옛 기록을 고치려면 그 뒤의 작업을 모두 다시 해야 합니다.
  • 블록 보상은 50개에서 시작해 21만 블록마다 절반이 되고, 이 규칙은 백서가 아니라 소프트웨어 코드에 있습니다.
  • 총량은 2,100만 개보다 조금 적은 20,999,999.9769개에서 멈추지만, 상한이 코인의 구매력을 약속하지는 않습니다.
진도는 이 브라우저에 저장되고, 로그인하면 다른 브라우저에서도 이어집니다.
  1. ABitcoin: A Peer-to-Peer Electronic Cash System (비트코인 백서) · Satoshi Nakamoto (bitcoin.org)원저자가 쓴 1차 자료입니다. 작업증명과 난이도의 원리(4절), 가장 긴 사슬 규칙(5절), 블록 보상과 수수료(6절), 공격자가 따라잡을 확률의 식과 표(11절)를 가져왔습니다. 50개, 21만 블록, 2,100만 개라는 수치는 백서에 없습니다.본문으로
  2. ABlockchain Technology Overview (NISTIR 8202) · 미국 국립표준기술연구소(NIST)정부 표준기관의 기술 보고서입니다. 2,016블록마다 난이도를 조정해 약 10분 간격을 맞춘다는 점, 작업증명에 지름길이 없다는 점, 자원 소모, 51% 공격의 비용, 개발자와 사용자의 거버넌스, 보상 부족의 위험, 2009년 네트워크 출범을 가져왔습니다.본문으로
  3. ABitcoin Core v30.0 src/validation.cpp (GetBlockSubsidy) · Bitcoin Core 개발자 (GitHub)대표 구현의 소스 코드입니다. 블록 보상이 50 BTC에서 시작해 21만 블록마다 오른쪽 비트 이동으로 절반이 된다는 규칙과 '대략 4년마다'라는 주석을 확인했습니다.본문으로
  4. ABitcoin Core v30.0 src/consensus/amount.h · Bitcoin Core 개발자 (GitHub)대표 구현의 소스 코드입니다. 1 BTC가 1억 사토시라는 정의와, MAX_MONEY(2,100만 BTC)가 총공급량이 아니라 검사값이며 실제 총공급량은 2,100만 BTC보다 적다는 주석을 가져왔습니다.본문으로
  5. AThe economics of digital currencies (Quarterly Bulletin 2014 Q3) · 영란은행(Bank of England)중앙은행 발행물입니다. 디지털 화폐가 누구의 부채도 아니라는 점, 공급이 고정된 화폐가 디플레이션과 변동성을 부를 수 있다는 비판을 가져왔습니다.본문으로