비트코인 솔로 채굴로 블록을 찾을 확률은 「블록 한 개에 평균으로 필요한 해시 수」를 「내 장비의 초당 해시 수」로 나눠 기대 시간을 구하면 계산돼요. 블록 한 개에 평균으로 필요한 해시 수는 비트코인 코어가 쓰는 식 그대로 2의 256제곱을 (목표값+1)로 나눈 값이고, 2026년 11월 4일 오전 11시 42분(한국 시각)에 나온 블록 974,469의 난이도로 계산하면 약 6.37 × 10²³번이에요. 그래서 200 TH/s 장비 한 대로 혼자 캐면 평균 약 101년에 한 번이고, 1년 안에 한 개 이상 찾을 확률은 약 0.99%예요. 이 숫자는 난이도가 바뀌는 2016블록마다 같은 비율로 움직이고, 해시 시도가 서로 독립이라는 전제로 낸 확률이에요.
먼저 요약하면 이래요.
- 계산식: 기대 시간 E는 블록 한 개의 작업량을 내 해시레이트로 나눈 값이고, t 시간 안에 한 개 이상 찾을 확률은
1 - e^(-t/E)예요. - 블록 한 개의 작업량: 코어
GetBitsProof함수가2^256 / (target+1)로 계산해요. 난이도에 2의 32제곱을 곱한 값과 거의 같아요. - 이번에 넣은 난이도: 블록 974,469의 난이도 148,364,561,003,867.4예요. 블록 973,728부터 975,743까지는 같은 값이고, 975,744에서 다시 정해져요.
- 코어로 혼자 캘 때: 채굴 소프트웨어가
getblocktemplate으로 블록 틀을 받아 조립하고, 찾은 블록은submitblock으로 내요. 메인넷에서는 연결된 노드가 없거나 초기 동기화 중이면getblocktemplate이 오류를 내요. - 풀과의 차이: 같은 해시레이트라면 1년에 기대되는 블록 수는 같아요. 풀이 바꾸는 것은 결과가 들어오는 간격이고, 보상 분배 방식과 수수료는 풀마다 공개한 규칙을 따라요.
![]()
이 글이 읽은 자료
| 자료 | 어디서 | 이 글에서 쓴 부분 |
|---|---|---|
비트코인 코어 v32.1 소스 src/rpc/blockchain.cpp | GitHub bitcoin/bitcoin | GetDifficulty 함수(136행부터) |
비트코인 코어 v32.1 소스 src/chain.cpp, src/chain.h | GitHub bitcoin/bitcoin | GetBitsProof(120행부터), GetBlockProof(305행) |
비트코인 코어 v32.1 소스 src/pow.cpp | GitHub bitcoin/bitcoin | 해시와 목표값 비교(161행부터) |
비트코인 코어 v32.1 소스 src/kernel/chainparams.cpp | GitHub bitcoin/bitcoin | 메인넷 블록 간격 600초, 조정 기간 2주 |
비트코인 코어 v32.1 소스 src/rpc/mining.cpp, src/rpc/mining.h | GitHub bitcoin/bitcoin | getblocktemplate, generatetoaddress, getmininginfo 설명과 오류 문구 |
| BIP 22 getblocktemplate - Fundamentals | GitHub bitcoin/bips | 블록 틀과 submitblock 정의 |
| 블록 974,469와 973,728의 bits, 난이도 | mempool.space 공개 API, blockstream.info 공개 API | 계산에 넣은 난이도 값 하나 |
GitHub 릴리스 정보에서 비트코인 코어 최신 릴리스는 v32.1(2026년 10월 28일 공개)이었어요. 아래 행 번호는 그 태그의 파일 기준이에요.
솔로 채굴은 정확히 무엇을 맞히는 일인가요
코어의 src/pow.cpp에서 작업증명 판정은 한 줄로 끝나요. 블록 헤더의 해시값이 목표값(target)보다 크면 실패, 목표값 이하이면 통과예요. 채굴 장비는 헤더 안의 숫자를 조금씩 바꿔 가며 해시를 계속 다시 계산하고, 그중 하나가 목표값 아래로 떨어지기를 기다려요.
해시값은 0부터 2의 256제곱 빼기 1까지의 범위에 고르게 흩어진다고 보고 계산해요. 그러면 해시 한 번이 통과할 확률은 목표값 이하인 숫자의 개수, 곧 (목표값+1)을 2의 256제곱으로 나눈 값이에요. 블록 974,469의 목표값으로 계산하면 약 1.57 × 10⁻²⁴이에요. 해시 한 번이 성공할 확률이 이 정도라서, 혼자 캐는 사람에게 남는 질문은 「몇 번을 시도할 수 있느냐」 하나예요.
여기서 다른 채굴자의 해시레이트는 계산에 직접 들어가지 않아요. 남들이 얼마나 캐든 내 해시 한 번의 성공 확률은 목표값으로만 정해지고, 다른 채굴자의 힘은 난이도 조정을 거쳐 목표값에 반영돼요. 해시레이트와 난이도가 서로 어떤 관계인지는 비트코인 해시레이트와 채굴 난이도 보는 법에서 먼저 볼 수 있어요.
투자 정보 안내
본 글은 암호화폐 시장에 대한 객관 데이터·정보 제공 목적이며, 특정 코인 매수·매도 권유가 아닙니다. 암호화폐는 변동성이 매우 크고 원금 전액 손실이 가능하므로 본인 판단과 책임 하에 결정하세요.
난이도 숫자는 코어에서 어떻게 나오나요
블록 헤더에는 목표값이 그대로 들어 있지 않고, bits라는 4바이트 압축 표기로 들어 있어요. 코어의 GetDifficulty 함수는 이 bits에서 난이도를 이렇게 계산해요.
- bits의 맨 앞 1바이트를 자릿수 값(nShift)으로 꺼내요.
- 0xffff를 bits의 나머지 3바이트로 나눠요.
- 자릿수 값이 29보다 작으면 29가 될 때까지 256을 곱하고, 29보다 크면 29가 될 때까지 256으로 나눠요.
블록 974,469의 bits는 16진수 1701e5ac였어요. 맨 앞 바이트가 0x17, 곧 23이니 256을 여섯 번 곱하고, 0xffff를 0x01e5ac로 나눈 값에 그 배수를 곱하면 148,364,561,003,867.4가 나와요. mempool.space와 blockstream.info 두 곳의 API가 준 난이도 값과 소수점까지 같았어요. 이 난이도는 블록 973,728에서 시작한 조정 주기의 값이라, 블록 975,743까지 그대로예요.
조정 주기 2016블록은 코어 메인넷 설정에서 나와요. chainparams.cpp에 블록 간격 목표가 10 * 60초, 조정 기간이 14 * 24 * 60 * 60초(2주)로 적혀 있고, 2주를 10분으로 나누면 2016이에요. 실제 한 주기가 2주에서 얼마나 벗어나는지는 비트코인 난이도 조정 2주 실측 글에서 블록 단위로 쟀어요.
블록 한 개에 평균 몇 번 해시해야 하나요
이 값은 코어가 직접 계산해요. src/chain.cpp의 GetBitsProof 함수 주석은 「2의 256제곱을 (bnTarget+1)로 나눠야 한다」고 적었고, 그 결과가 블록 한 개의 작업량이에요. src/chain.h의 GetBlockProof는 이 함수를 그대로 불러 블록마다 작업량을 구해요. 같은 파일의 누적 작업량 필드(nChainWork) 주석은 작업량을 「기대 해시 횟수(expected number of hashes)」라고 풀어 적었어요. 코어 스스로 작업량을 「평균으로 필요한 해시 수」로 본다는 뜻이에요.
해시 한 번의 성공 확률이 (목표값+1)을 2의 256제곱으로 나눈 값이니, 그 역수가 곧 「한 번 성공할 때까지 평균 시도 횟수」예요. 블록 974,469 기준으로 계산하면 이래요.
| 항목 | 값 | 계산 |
|---|---|---|
| 목표값 | 16진수 1e5ac 뒤에 0이 40자리 | 0x01e5ac × 256의 20제곱 |
| 블록 한 개의 작업량 | 637,230,660,765,244,165,569,153번 (약 6.3723 × 10²³) | 2^256 / (target+1) |
| 난이도 × 2의 32제곱 | 약 6.3722 × 10²³ | 위 값과 0.0015% 차이 |
| 해시 한 번의 성공 확률 | 약 1.5693 × 10⁻²⁴ | 위 작업량의 역수 |
「난이도 × 2의 32제곱」이 거의 같게 나오는 이유도 식에서 보여요. GetDifficulty 식에서 난이도 1에 해당하는 목표값이 16진수 ffff 뒤에 0이 52자리인 수라서, 둘의 비는 65,536 ÷ 65,535, 약 1.0000153이에요. 손으로 어림할 때는 「난이도 × 약 43억」으로 충분해요.
내 해시레이트로 확률을 계산하는 순서
필요한 값은 두 개예요. 지금 난이도와 내 장비의 해시레이트예요. 코어 노드가 있다면 getmininginfo 결과의 bits, difficulty, target 필드에서 앞의 것을 바로 읽을 수 있어요.
- 블록 한 개의 작업량 W를 구해요. 정확히는
2^256 / (target+1), 어림으로는 난이도 × 2의 32제곱이에요. - 기대 시간 E를 구해요. E = W ÷ 내 해시레이트(초당 해시 수)이고, 단위는 초예요.
- 기간 t 안에 한 개 이상 찾을 확률 P를 구해요. P = 1 - e^(-t/E)예요.
- t가 E보다 아주 짧으면 P는 거의 t ÷ E와 같아요. 하루 확률은 대략 「1 ÷ E를 일 단위로 바꾼 값」이에요.
아래 표는 블록 974,469의 난이도로 계산한 값이에요. 해시레이트는 비교를 위해 정한 가정이고 특정 장비가 아니에요. 1년은 365.25일로 잡았어요.
| 해시레이트(가정) | 기대 시간 E | 하루 안에 찾을 확률 | 1년 안에 | 10년 안에 |
|---|---|---|---|---|
| 1.2 TH/s | 약 16,827년 | 약 615만분의 1 | 0.0059% | 0.059% |
| 10 TH/s | 약 2,019년 | 약 74만분의 1 | 0.050% | 0.49% |
| 100 TH/s | 약 202년 | 약 7만 4천분의 1 | 0.49% | 4.8% |
| 200 TH/s | 약 101년 | 약 3만 7천분의 1 | 0.99% | 9.4% |
| 1 PH/s | 약 20.2년 | 약 7,376분의 1 | 4.83% | 39.1% |
해시레이트가 10배면 기대 시간은 10분의 1이 돼요. 반면 기간을 10배로 늘려도 확률이 꼭 10배가 되지는 않아요. 1 PH/s의 1년 확률 4.83%가 10년에는 48.3%가 아니라 39.1%인 것처럼, 기간이 E에 가까워질수록 확률은 1을 향해 천천히 붙어요.
투자 정보 안내
본 글은 암호화폐 시장에 대한 객관 데이터·정보 제공 목적이며, 특정 코인 매수·매도 권유가 아닙니다. 암호화폐는 변동성이 매우 크고 원금 전액 손실이 가능하므로 본인 판단과 책임 하에 결정하세요.
표를 읽을 때 놓치기 쉬운 세 가지
첫째, 오래 캤다고 다음 날 확률이 올라가지 않아요. 해시 시도가 서로 독립이라는 전제에서 나온 식이라, 5년을 캐고 못 찾았어도 그다음 1년의 확률은 처음 1년과 같아요. 지수분포라고 부르는 이 계산의 성질이에요.
둘째, 「평균 101년」은 「101년이 지나면 찾는다」는 뜻이 아니에요. 200 TH/s에서 확률이 절반이 되는 시점은 E에 ln 2(약 0.693)를 곱한 약 70년이고, 101년이 지나도 찾지 못할 확률은 약 37%예요. 운이 좋으면 첫날에도 찾을 수 있고, 평생 못 찾을 수도 있어요.
셋째, 표의 모든 값은 난이도 하나에 묶여 있어요. 블록 975,744에서 난이도가 바뀌면 작업량 W도 같은 비율로 바뀌고, 기대 시간도 같은 비율로 늘거나 줄어요. 난이도가 3% 내리면 기대 시간도 3% 짧아지는 식이에요. 계산을 다시 하려면 그 시점의 bits나 difficulty 하나만 새로 읽으면 돼요.
작은 장비로 블록을 찾았다는 소식이 나와도 위 확률이 달라지지는 않아요. 한 사람의 확률이 아주 작아도 같은 시도를 하는 사람이 많으면 그중 누군가는 맞힐 수 있어요. 소식 하나로 내 확률을 가늠하기보다 내 해시레이트를 표에 넣어 보는 편이 정확해요.
비트코인 코어로 혼자 캐려면 무엇이 필요한가요
비트코인 코어가 맡는 일은 블록의 틀을 만들어 주고 찾은 블록을 받아 퍼뜨리는 것이에요. 해시 계산 자체는 채굴 장비 몫이에요.
- 블록 틀 받기:
getblocktemplate도움말은 「작업할 블록을 만드는 데 필요한 데이터를 돌려준다」고 적었고, 전체 규격은 BIP 22, 23, 9, 145를 보라고 안내해요. BIP 22는 헤더만 보내는 대신 블록 구조 전체를 보내고, 조립은 채굴 쪽에 맡긴다고 설명해요. 결과의 coinbasevalue 필드는 코인베이스 거래에 쓸 수 있는 금액 총액(사토시 단위)이에요. - segwit 규칙 표시: 요청할 때 rules 항목에 segwit 문자열을 넣어야 해요. 빠지면 코어가 「segwit 규칙을 넣고 호출해야 한다」는 오류를 내요.
- 연결과 동기화: 테스트용 체인이 아닌 메인넷에서는 연결된 노드가 0개이면 「is not connected!」, 초기 블록 다운로드 중이면 「is in initial sync and waiting for blocks...」 오류를 내고 블록 틀을 주지 않아요. 그래서 동기화를 끝낸 풀노드가 먼저 있어야 해요. 풀노드에 필요한 저장 공간은 비트코인 풀노드 용량 글에 정리했어요.
- 찾은 블록 내기: BIP 22는 찾은 블록(풀 환경에서는 share라고 부르는 결과도)을
submitblock이라는 RPC로 제출한다고 정했어요.
코어에는 generatetoaddress라는 명령도 있어요. 「지정한 주소로 채굴해 블록 해시를 돌려준다」는 설명이 붙어 있지만, 코어는 이 명령을 일반 채굴 명령이 아닌 「hidden」 범주로 등록해 두었어요. 내부 코드는 헤더의 nonce를 하나씩 올리며 작업증명 판정을 반복하는 단순한 반복문이고, 기본 시도 횟수는 100만 번이에요. 블록 974,469의 난이도에서 이 100만 번 안에 블록을 찾을 확률은 약 1.57 × 10⁻¹⁸이에요. nonce가 가질 수 있는 값 약 43억 개를 다 돌아도 약 6.7 × 10⁻¹⁵라서, 메인넷 채굴 수단으로 쓸 수 있는 크기가 아니에요.
풀에 들어가면 확률이 달라지나요
확률 계산만 놓고 보면 내 장비가 해내는 일의 양은 같아요. 200 TH/s 장비는 혼자 캐든 풀에 붙든 1년에 평균 약 0.0099개 블록에 해당하는 작업을 해요(1 ÷ 101년). 달라지는 것은 그 결과가 들어오는 모양이에요. 혼자 캐면 대부분의 해에는 아무것도 없다가 한 번 찾으면 블록 하나를 통째로 받고, 많은 장비가 해시를 합치면 합친 쪽의 기대 시간이 짧아져 블록이 자주 나와요.
풀이 그 블록 보상을 참여자에게 어떻게 나누고 수수료를 얼마 떼는지는 각 풀이 공개한 규칙을 따라요. 실제로 한 주 동안 어느 풀이 블록을 몇 개 캤는지는 채굴 풀 블록 998개 집계 글에서 볼 수 있어요. 전기요금을 넣어 손익분기 효율을 따지는 계산은 비트코인 채굴 전기요금 손익분기 글에 따로 있어요.
자주 묻는 질문
비트코인 솔로 채굴 확률은 어떻게 계산하나요?
블록 한 개의 작업량을 내 해시레이트로 나눠 기대 시간 E를 구하고, 기간 t 안에 한 개 이상 찾을 확률을 1 - e^(-t/E)로 계산해요. 작업량은 비트코인 코어 GetBitsProof처럼 2의 256제곱을 (목표값+1)로 나눈 값이고, 어림으로는 난이도에 2의 32제곱을 곱해도 돼요. 해시 시도가 서로 독립이라는 전제의 확률이에요.
200 TH/s 장비 한 대면 몇 년에 한 번 블록을 찾나요?
2026년 11월 4일 블록 974,469의 난이도로 계산하면 평균 약 101년에 한 번이고, 1년 안에 한 개 이상 찾을 확률은 약 0.99%예요. 확률이 절반이 되는 시점은 약 70년이에요. 난이도가 바뀌면 같은 비율로 달라져요.
오래 캐면 블록을 찾을 확률이 점점 올라가나요?
기간을 늘리면 그 기간 전체의 확률은 올라가지만, 이미 캔 시간이 다음 기간의 확률을 올려 주지는 않아요. 5년을 캐고 못 찾았어도 다음 1년의 확률은 처음 1년과 같아요. 해시 시도가 서로 독립이라는 전제에서 나오는 성질이에요.
비트코인 코어만 설치하면 솔로 채굴을 할 수 있나요?
코어는 getblocktemplate으로 블록 틀을 주고 submitblock으로 찾은 블록을 받아요. 그 틀을 받아 조립하는 일은 채굴 소프트웨어가, 해시 계산은 채굴 장비가 해요. 메인넷에서는 연결된 노드가 없거나 초기 동기화 중이면 블록 틀을 주지 않으니 동기화를 끝낸 풀노드가 먼저 있어야 해요. 코어의 generatetoaddress는 hidden 범주의 단순 반복 명령이라 2026년 11월 4일 난이도로는 메인넷 블록을 찾을 크기가 아니에요.
풀에 들어가면 블록을 찾을 확률이 올라가나요?
내 해시레이트가 해내는 작업의 양은 같아서, 같은 해시레이트라면 1년에 기대되는 블록 수는 혼자 캐든 풀에 붙든 같아요. 풀은 여러 장비의 해시를 합쳐 결과가 자주, 고르게 나오게 해요. 보상을 나누는 방식과 수수료는 각 풀이 공개한 규칙을 따라요.
정리
- 해시 한 번이 목표값 이하일 확률은 (목표값+1)을 2의 256제곱으로 나눈 값이고, 블록 974,469 기준 약 1.57 × 10⁻²⁴이에요.
- 블록 한 개의 작업량은 코어
GetBitsProof의 2의 256제곱 ÷ (목표값+1)이고, 이번 난이도에서 약 6.37 × 10²³번이에요. - 기대 시간은 작업량 ÷ 내 해시레이트, 기간 t 안의 확률은 1 - e^(-t/E)예요. 200 TH/s는 평균 약 101년, 1년 확률 약 0.99%예요.
- 오래 캤다고 다음 확률이 오르지 않고, 평균 기간이 지나도 못 찾을 확률이 약 37% 남아요.
- 이 값들은 블록 973,728부터 975,743까지의 난이도 기준이고, 975,744에서 난이도가 바뀌면 같은 비율로 다시 계산해야 해요.
- 코어로 혼자 캐려면 동기화된 풀노드에서
getblocktemplate으로 틀을 받고submitblock으로 내요. 풀은 기대 작업량은 그대로 두고 결과가 들어오는 모양을 바꾸며, 분배 방식과 수수료는 풀마다 달라요.
모든 내용은 2026년 11월 4일 오전 11시 49분(한국 시각)에 받은 비트코인 코어 v32.1 소스 파일, GitHub 릴리스 정보, BIP 22 원문, mempool.space와 blockstream.info의 블록 974,469·973,728 정보를 기준으로 했어요. 난이도는 2016블록마다 바뀌니 계산 전에 그 시점의 값을 다시 읽으세요.
이 글은 비트코인 코어 소스와 공개 블록 정보를 읽어 확률을 계산한 정보 제공 글이며 채굴 장비나 채굴 풀 이용, 매매 권유가 아니에요. 표의 해시레이트는 가정한 숫자이고 실제 결과를 보장하지 않아요. 가상자산은 변동성이 크고 원금 손실 위험이 있으며, 채굴과 거래의 책임은 본인에게 있어요.