「비트코인은 2,100만 개까지만 발행돼요.」 거래소 소개 페이지에도, 입문서 첫 장에도 거의 같은 문장이 들어가 있어요. 그런데 그 2,100만이라는 숫자가 코드의 어느 줄에서 나오는지, 그리고 코드가 블록마다 실제로 더하는 금액을 끝까지 합산하면 그 숫자가 나오는지는 따로 물어볼 수 있는 질문이에요.
Bitcoin Core 소스에서 발행량을 정하는 자리는 세 곳이에요. 블록 보조금을 계산하는 함수 하나, 반감기 간격 상수 하나, 상한 상수 하나. 세 파일을 직접 받아서 코드가 더하는 금액을 사토시 정수로 끝까지 합산했어요.
결론부터 적을게요. 코드가 더하는 합계는 20,999,999.9769 BTC예요. 상한 상수는 21,000,000 BTC 니까 차이는 2,310,000 사토시, 즉 0.0231 BTC예요. 어림값이 어긋난 게 아니라 두 갈래로 정확히 분해되는 숫자예요.
![]()
조회일은 2026년 9월 21일이에요. 이 글은 반감기의 4년 주기 해설도, 가격 전망도, 채굴 수익성도 다루지 않아요. 다루는 것은 「코드가 더하는 합계가 상한 상수와 다르다」는 산수 하나예요. 2,100만이라는 숫자가 무슨 뜻인지부터 알고 싶은 분이라면 비트코인과 사토시 단위, 2,100만 개 상한을 기초부터 정리한 글을 먼저 보셔도 좋아요.
발행량을 정하는 코드는 여섯 줄이에요
보조금을 정하는 함수는 src/validation.cpp 안에 있어요. 실행되는 줄만 보면 여섯 줄이에요.
CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
// Force block reward to zero when right shift is undefined.
if (halvings >= 64)
return 0;
CAmount nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
nSubsidy >>= halvings;
return nSubsidy;
}
읽는 순서대로 뜯어 볼게요. 먼저 블록 높이를 반감기 간격으로 나눠서 몇 번째 구간인지를 정수로 구해요. 그 값이 64 이상이면 0 을 돌려주고 끝나요. 아니면 50 BTC 에서 시작해서 구간 번호만큼 오른쪽으로 시프트해요.
여기서 제일 중요한 한 줄이 마지막 시프트예요. 반으로 줄이는 연산이 나눗셈이 아니라 정수 우시프트거든요. 금액의 단위는 사토시 정수이고, CAmount 는 64비트 정수형이에요. 그래서 나눠서 소수점이 생기는 순간 그 소수부는 반올림되지 않고 버려져요. 이 한 줄이 뒤에서 볼 0.0231 BTC 의 대부분을 만들어요.
금액 단위는 src/consensus/amount.h 에 있어요.
inline constexpr CAmount COIN{100'000'000};
inline constexpr CAmount MAX_MONEY{21'000'000 * COIN};
1 BTC 가 100,000,000 사토시니까 50 * COIN 은 5,000,000,000 사토시예요. 그리고 상한 상수는 2,100,000,000,000,000 사토시예요.
반감기 간격 210,000 은 체인마다 적혀 있어요
nSubsidyHalvingInterval 이라는 이름의 값이 src/kernel/chainparams.cpp 에 다섯 번 대입돼요. 체인별로 적어 두는 구조라 값이 다를 수 있는데, 실제로 다른 건 하나뿐이었어요.
| 체인 | 반감기 간격 |
|---|---|
| 메인넷 | 210,000 |
| 테스트넷3 | 210,000 |
| 테스트넷4 | 210,000 |
| 시그넷 | 210,000 |
| 레그테스트 | 150 |
레그테스트는 개발자가 로컬에서 체인을 직접 굴려 보는 환경이에요. 간격이 150 이면 반감기를 몇 초 안에 여러 번 지나가게 만들 수 있어서, 반감기 관련 동작을 시험하기 쉬워요. 이 글의 합산은 전부 메인넷 값 210,000 으로 했어요.
투자 정보 안내
본 글은 암호화폐 시장에 대한 객관 데이터·정보 제공 목적이며, 특정 코인 매수·매도 권유가 아닙니다. 암호화폐는 변동성이 매우 크고 원금 전액 손실이 가능하므로 본인 판단과 책임 하에 결정하세요.
상한 상수는 발행 총량이 아니라고 코드가 직접 적어 뒀어요
여기서 흥미로운 건, 2,100만이 적혀 있는 파일이 그 숫자의 성격을 먼저 밝혀 뒀다는 점이에요. MAX_MONEY 바로 위 주석에 이렇게 적혀 있어요.
Note that this constant is not the total money supply, which in Bitcoin currently happens to be less than 21,000,000 BTC for various reasons, but rather a sanity check.
이 상수는 발행 총량이 아니고, 여러 이유로 실제 총량은 2,100만 BTC 보다 적다고, 이건 온전성 검사용 한도라고 적어 둔 거예요. 같은 주석은 이 상수가 합의에 직접 영향을 주는 값이어서 값을 고치면 체인이 갈릴 수 있다고도 덧붙여요. 그러니까 코드는 처음부터 「상한」과 「합계」를 구분해 두고 있었어요. 이 글은 그 주석이 말한 차이를 숫자로 재 보는 거예요.
보조금이 0 이 되는 건 33번째 구간이에요
함수에 64 라는 숫자가 있으니 「64번 반감기가 지나면 채굴이 끝난다」로 읽는 설명이 자주 보여요. 그런데 사토시 정수로 따라가면 훨씬 앞에서 0 이 돼요. 보조금이 한 자리 수로 내려가는 구간을 적어 보면 이래요.
| 반감기 회차 | 시작 블록 | 코드가 주는 보조금 |
|---|---|---|
| 29 | 6,090,000 | 9 사토시 |
| 30 | 6,300,000 | 4 사토시 |
| 31 | 6,510,000 | 2 사토시 |
| 32 | 6,720,000 | 1 사토시 |
| 33 | 6,930,000 | 0 사토시 |
1 사토시를 오른쪽으로 한 번 더 시프트하면 0 이에요. 그래서 보조금이 0 이 되는 첫 블록은 6,930,000번이고, 보조금이 붙는 구간은 0회차부터 32회차까지 33구간이에요. 함수의 64 이상 조건이 가리키는 블록은 13,440,000번인데, 보조금은 그보다 6,510,000블록 앞선 자리에서 이미 0 이 되니 이 조건은 실제 체인에서 밟히는 자리가 아니라 우시프트가 정의되지 않는 경우를 막는 방어선이에요. 주석에도 오른쪽 시프트가 정의되지 않을 때 보상을 0 으로 강제한다고만 적혀 있어요.
끝까지 더한 합계는 20,999,999.9769 BTC 예요
구간마다 블록 210,000개가 같은 보조금을 받으니 합산은 단순해요. 앞 여섯 구간과 전체를 적으면 이래요.
| 반감기 회차 | 블록 보조금 | 구간 발행량 |
|---|---|---|
| 0 | 50 BTC | 10,500,000 BTC |
| 1 | 25 BTC | 5,250,000 BTC |
| 2 | 12.5 BTC | 2,625,000 BTC |
| 3 | 6.25 BTC | 1,312,500 BTC |
| 4 | 3.125 BTC | 656,250 BTC |
| 5 | 1.5625 BTC | 328,125 BTC |
| 0회차부터 32회차까지 | 20,999,999.9769 BTC |
앞 네 구간만 더해도 19,687,500 BTC 로 전체의 93.75퍼센트예요. 반감기가 등비수열이라 앞쪽에 몰리는 구조이고, 뒤쪽 29구간이 나머지 6.25퍼센트를 나눠 가져요.
사토시 정수로는 합계가 2,099,999,997,690,000 사토시예요. 상한 상수 2,100,000,000,000,000 사토시에서 2,310,000 사토시가 모자라요.
2,310,000 사토시는 두 갈래로 정확히 갈려요
이 차이가 왜 생기는지 보려면, 먼저 절삭이 없는 이상적인 합계를 구해 보면 돼요. 50 BTC 에서 시작해 210,000블록마다 정확히 절반이 되는 값을 무한히 더하면, 등비수열 합이라 처음 구간 발행량의 두 배가 돼요. 50 × 210,000 × 2 = 21,000,000 이에요. 상한 상수의 2,100만이라는 깔끔한 숫자는 여기서 나온 거예요.
그러니까 실제 코드가 그 값에 못 미치는 이유는 둘뿐이에요. 소수점을 버리는 것과, 무한히 더하지 않고 멈추는 것이에요.
| 빠지는 자리 | 금액 |
|---|---|
| 정수 우시프트로 버려지는 소수부 | 2,065,527.82 사토시 |
| 33회차 이후 지급되지 않는 꼬리 | 244,472.18 사토시 |
| 합계 | 2,310,000 사토시 |
두 값을 분수로 정확히 계산해서 더하면 반올림 없이 2,310,000 사토시로 딱 맞아요. 꼬리 쪽은 계산이 아주 단순한데, 33회차 이후 이상적인 발행량은 1,050,000,000,000,000 사토시를 2의 32제곱으로 나눈 값이고 그게 244,472.1758 사토시예요. 절삭 쪽이 꼬리보다 여덟 배 이상 커요. 「마지막 비트코인을 못 캐서 모자라다」는 설명보다 「블록마다 사토시 소수부를 버려서 모자라다」는 쪽이 사실에 가까워요.
투자 정보 안내
본 글은 암호화폐 시장에 대한 객관 데이터·정보 제공 목적이며, 특정 코인 매수·매도 권유가 아닙니다. 암호화폐는 변동성이 매우 크고 원금 전액 손실이 가능하므로 본인 판단과 책임 하에 결정하세요.
절삭이 처음 생기는 자리는 반감기 10회차예요
절삭은 처음부터 생기지 않아요. 50 BTC 를 사토시로 쓰면 5,000,000,000 사토시이고, 이 수를 소인수로 쪼개면 2^9 × 5^10 이에요. 2 가 아홉 개뿐이라서 아홉 번까지는 나누어떨어지고 열 번째에서 남아요.
그래서 절삭이 처음 생기는 구간은 반감기 10회차, 블록 2,100,000번부터예요. 이 구간의 정확한 보조금은 4,882,812.5 사토시인데 코드는 4,882,812 사토시를 줘요. 블록마다 0.5 사토시가 사라지고, 구간 전체로는 105,000 사토시가 사라져요.
구간별로 사라지는 양은 계속 줄어드는 게 아니에요. 버려지는 값이 그 구간 보조금의 이진 소수부라서 회차마다 오르내려요.
| 반감기 회차 | 정확한 보조금 | 코드가 주는 보조금 | 구간에서 사라지는 양 |
|---|---|---|---|
| 10 | 4,882,812.5 사토시 | 4,882,812 사토시 | 105,000 사토시 |
| 13 | 610,351.5625 사토시 | 610,351 사토시 | 118,125 사토시 |
| 17 | 38,146.97265625 사토시 | 38,146 사토시 | 204,257.8 사토시 |
| 26 | 74.50580596 사토시 | 74 사토시 | 106,219.3 사토시 |
| 32 | 1.16415321 사토시 | 1 사토시 | 34,472.2 사토시 |
제일 많이 사라지는 구간은 17회차로 204,257.8 사토시예요. 이 표는 전체 23개 구간 가운데 다섯 개만 뽑은 것이고, 10회차부터 32회차까지 전부 더한 값이 앞에서 본 2,065,527.82 사토시예요. 9회차까지는 절삭이 0 이에요.
오늘 높이 967,951번에서 남은 발행량
같은 계산을 지금 높이에 적용해 볼게요. 2026년 9월 21일에 확인한 체인 팁 높이는 967,951번이었어요. 서로 무관한 공개 API 두 곳에 각각 물어서 같은 값을 받았어요.
이 높이는 반감기 4회차 구간, 즉 블록 840,000번부터 1,049,999번까지 사이예요. 그래서 지금 블록 보조금은 3.125 BTC 예요.
| 항목 | 값 |
|---|---|
| 0회차부터 3회차까지 완료분 | 19,687,500 BTC |
| 4회차 구간 누적분 | 399,850 BTC |
| 제네시스 블록부터 누적 발행 | 20,087,350 BTC |
| 코드 합계에 대한 비율 | 95.654퍼센트 |
| 남은 발행량 | 912,649.9769 BTC |
| 남은 비율 | 4.346퍼센트 |
4회차 구간 누적분은 3.125 BTC 에 블록 127,952개를 곱한 값이에요. 제네시스 블록을 포함해 세니까 967,951에서 840,000을 빼고 1을 더한 개수예요.
다음 반감기가 시작되는 블록은 1,050,000번이고, 남은 블록은 82,049개예요. 날짜는 적지 않을게요. 블록 간격 10분은 목표값이고 실제 간격은 난이도 조정으로 사후에 맞춰지는 값이거든요. 굳이 곱해 보면 820,490분, 569.8일이 나오지만 이건 가정 하나가 들어간 참고치예요. 실제 간격이 어떻게 흔들리는지는 난이도 조정 주기를 블록 수로 직접 재 본 글에 적어 뒀어요. 반감기 자체의 구조가 궁금하시면 반감기와 블록 보조금을 기초부터 정리한 글이 있어요.
이 합계조차 상한이에요
지금까지 구한 20,999,999.9769 BTC 는 「코드가 더하는 금액」이에요. 실제로 쓸 수 있는 양은 이보다 또 적은데, 그중 일부는 코어 소스가 직접 표시해 두고 있어요.
첫째는 제네시스 블록이에요. 블록을 체인에 연결하는 함수 안에 이런 주석과 함께 특수 처리가 들어 있어요.
Special case for the genesis block, skipping connection of its transactions (its coinbase is unspendable)
제네시스 블록은 트랜잭션 연결을 건너뛰고, 그 코인베이스는 쓸 수 없다고 적어 둔 거예요. 그래서 이 50 BTC 는 합계에는 들어가지만 지갑으로는 나오지 않아요.
둘째는 코인베이스가 겹친 블록 두 개예요. 코어에는 쓸 수 없는 블록인지 판정하는 함수가 따로 있고, 그 안에 높이 91,722번과 91,812번이 하드코딩돼 있어요. 같은 파일의 다른 주석은 이 두 쌍에서 어떤 일이 있었는지 이렇게 적어요.
by the time BIP34 activated, in each of the existing pairs the duplicate coinbase had overwritten the first before the first had been spent.
나중 코인베이스가 앞선 것을 덮어썼고, 덮이기 전에 앞선 것은 쓰이지 않았다는 뜻이에요. 두 블록 다 보조금이 50 BTC 인 0회차 구간이에요.
| 코드가 쓸 수 없다고 표시한 것 | 금액 |
|---|---|
| 제네시스 블록 코인베이스 | 50 BTC |
| 높이 91,722번 코인베이스 | 50 BTC |
| 높이 91,812번 코인베이스 | 50 BTC |
| 합계 | 150 BTC |
이 150 BTC 를 빼면 20,999,849.9769 BTC 가 돼요. 다만 이건 코드가 표시해 준 것만 뺀 값이에요. 잃어버린 키나 소각 주소로 보낸 코인은 코드가 알 수 없는 영역이라 이 글에서는 세지 않았어요.
이 글이 재지 않은 것
범위를 분명히 적어 둘게요.
- 유통량을 잰 게 아니에요. 노드의 UTXO 집합을 세지 않았고, 코드가 더하는 금액만 계산했어요. 실제 집계는 노드가 직접 세어야 나오는 값이에요.
- 반감기 날짜를 예측하지 않았어요. 블록 수까지만 적었어요.
- 다른 구현체는 보지 않았어요. Bitcoin Core 의 최신 소스만 받았어요. 다른 구현이 같은 규칙을 따르는지는 이 글에서 확인하지 않았어요.
- 가격이나 채굴 수익성은 다루지 않아요. 남은 발행량이 4.346퍼센트라는 값은 산수 결과이고, 그 숫자에서 가격 방향이 따라 나오지는 않아요.
자주 묻는 질문 (FAQ)
Q. 비트코인 발행량은 정확히 2,100만 개인가요?
코드가 더하는 금액을 끝까지 합산하면 그보다 조금 적어요. 사토시 정수로 2,099,999,997,690,000 사토시, 즉 20,999,999.9769 BTC 예요. 상한 상수는 2,100,000,000,000,000 사토시라서 차이가 2,310,000 사토시 생겨요. 그리고 그 상수가 적힌 파일 자체가 이건 발행 총량이 아니라 검사용 한도라고 밝혀 뒀어요. 2,100만은 틀린 숫자가 아니라 상한이에요.
Q. 0.0231 BTC 는 왜 생기나요?
정수 절삭 약 2,065,527.82 사토시와 33회차 이후 꼬리 약 244,472.18 사토시가 합쳐진 값이에요. 분수로 정확히 계산해 더하면 2,310,000 사토시로 딱 맞아요. 절삭 쪽이 여덟 배 이상 크다는 점이 포인트예요.
Q. 마지막 블록 보조금이 0 이 되는 건 64번째 반감기 아닌가요?
보조금은 32회차에서 이미 1 사토시이고 다음 시프트에서 0 이 돼요. 그래서 0 이 되는 첫 블록은 6,930,000번이에요. 함수의 64 이상 조건이 가리키는 13,440,000번은 실제로 밟히지 않는 방어선이에요.
Q. 지금까지 발행된 양과 남은 양은 얼마인가요?
높이 967,951번 기준으로 누적 20,087,350 BTC, 코드 합계의 95.654퍼센트예요. 남은 발행량은 912,649.9769 BTC, 4.346퍼센트예요. 이 값도 코드가 더하는 금액이고 지갑에서 쓸 수 있는 양과는 다른 숫자예요.
Q. 다음 반감기까지 얼마나 남았나요?
블록으로는 82,049개예요. 날짜는 적지 않아요. 블록 간격 10분은 목표값이고 실제 간격은 난이도 조정으로 사후에 맞춰지는 값이라, 10분을 곱해 나오는 569.8일은 가정이 들어간 참고치예요.
Q. 코드 합계가 곧 유통량인가요?
아니에요. 코어 소스가 직접 쓸 수 없다고 표시한 금액만 해도 제네시스 코인베이스 50 BTC 와 코인베이스가 겹친 두 블록 100 BTC 를 합쳐 150 BTC 예요. 잃어버린 키는 코드가 표시해 주지 않으니 그건 세지 않았어요.
정리
- Bitcoin Core 의 보조금 함수는 실행되는 줄이 여섯 줄이고, 반으로 줄이는 연산이 나눗셈이 아니라 정수 우시프트예요. 이 한 줄에서 절삭이 생겨요.
- 반감기 간격은
chainparams.cpp에 다섯 번 적혀 있고 메인넷·테스트넷3·테스트넷4·시그넷은 210,000, 레그테스트만 150 이었어요. - 상한 상수가 적힌 파일 주석이 이 값은 발행 총량이 아니라 검사용 한도이며 실제 총량은 2,100만 BTC 보다 적다고 직접 적어 뒀어요.
- 코드대로 끝까지 더한 합계는 20,999,999.9769 BTC이고 상한과의 차이는 2,310,000 사토시예요.
- 그 차이는 절삭 2,065,527 사토시 남짓과 33회차 이후 꼬리 244,472 사토시 남짓으로 갈리고, 분수로 정확히 더하면 2,310,000 에 딱 맞아요. 절삭이 처음 생기는 자리는 반감기 10회차, 블록 2,100,000번부터예요.
- 보조금이 0 이 되는 첫 블록은 6,930,000번이고, 함수 안의 64 이상 조건이 가리키는 13,440,000번은 실제로 밟히지 않아요.
- 높이 967,951번 기준 누적 20,087,350 BTC, 남은 발행량 912,649.9769 BTC, 다음 반감기까지 82,049블록 남았어요. 날짜는 적지 않았어요.
- 이 합계조차 상한이어서, 코드가 쓸 수 없다고 표시한 150 BTC 는 합계 안에 있지만 지갑으로 나오지 않아요.
이 글은 매매 권유가 아닌 정보 제공 글입니다. 가상자산은 변동성이 크고 원금 손실 위험이 있으며, 투자 판단과 그 결과에 대한 책임은 본인에게 있습니다.