개인이 채굴 소프트웨어를 직접 만들 수 있습니다. 실제로 많은 오픈소스 채굴 프로그램이 존재하며, 이를 참고하거나 커스터마이즈하거나 맨땅에서 직접 구현하는 것도 가능합니다.
🛠️ 개인이 만드는 채굴 소프트웨어: 개요
✔️ 기본 구성
- 노드 연동
- 비트코인 노드(bitcoind) 또는 채굴풀과의 통신
getblocktemplate
또는 Stratum 프로토콜 사용
- 블록 헤더 생성
- 거래 묶음 (Mempool or Template)
- 머클루트 계산
- 블록 헤더 구성
- Nonce 브루트포스
SHA256(SHA256(BlockHeader + nonce))
반복- 조건 만족 시 → 블록 제출
- 조건 비교
- 나온 해시값 < Target 인지 확인
- 채굴 결과 제출
submitblock
RPC or Stratumsubmit
📦 오픈소스 예시 (학습용 + 참고용)
이름 | 설명 |
---|---|
BFGMiner | FPGA/ASIC용 채굴기 제어 소프트웨어 (C 기반) |
CGMiner | GPU/FPGA/ASIC 지원 (C 기반) |
btcpool | BTC.com의 고성능 채굴풀 소스 |
cpuminer-multi | CPU 기반 solo mining 테스트 가능 |
🧑💻 직접 만들어보고 싶다면?
필요한 기술
- 언어: C / C++ / Python / Rust 등
- SHA-256 구현: 표준 해시 라이브러리 or 직접 구현
- 멀티스레딩: 병렬 처리로 넌스 탐색 가속
- RPC or Stratum 프로토콜: 노드/풀과 통신
예시 흐름 (Python 기준)
import hashlib
def double_sha256(data: bytes) -> str:
return hashlib.sha256(hashlib.sha256(data).digest()).hexdigest()
def mine(block_header: bytes, target_prefix='00000000'):
nonce = 0
while True:
full_data = block_header + nonce.to_bytes(4, 'little')
hash_result = double_sha256(full_data)
if hash_result.startswith(target_prefix):
return nonce, hash_result
nonce += 1
🧱 Node와 연결하기
- bitcoind에서:
bitcoin-cli getblocktemplate bitcoin-cli submitblock <hex>
- 또는 Stratum 서버 구현 (채굴풀)
✅ 요약
항목 | 설명 |
---|---|
직접 채굴 SW 만들 수 있나? | ✅ 가능! 실제 많은 오픈소스도 존재 |
필요한 기능은? | 블록 헤더 생성 + 넌스 브루트포스 + 해시 비교 + 결과 제출 |
실제 연결 방법은? | RPC (getblocktemplate ) or Stratum |
추천 출발점 | cpuminer , BFGMiner , Python 프로토타입 작성 |
Stratum은 비트코인 등 암호화폐 채굴을 위한 경량 통신 프로토콜로,
**채굴기(Miner)**와 채굴풀(Pool) 간의 작업 분배 및 결과 제출을 담당합니다.
HTTP+JSON-RPC 기반의 무거운 getwork
/getblocktemplate
보다 훨씬 효율적으로 설계되었죠.
🔌 Stratum 프로토콜: 개념 요약
역할 | 대상 |
---|---|
클라이언트 | ASIC 채굴기, GPU 마이너 |
서버 | 채굴풀 (Stratum 서버) |
목적 | 블록 템플릿 전송, 작업 분배, 채굴 결과 수신 |
포맷 | JSON over TCP |
📶 연결 흐름 구조
1. 채굴기 → 서버: 접속 요청 (TCP 소켓)
2. 채굴기 → 서버: 로그인 (authorize)
3. 서버 → 채굴기: 작업 할당 (job)
4. 채굴기 → 서버: 결과 제출 (submit)
5. 서버 → 채굴기: 응답 (OK / reject)
🧱 주요 메시지 구조 (JSON-RPC 기반)
1. mining.subscribe
{
"id": 1,
"method": "mining.subscribe",
"params": ["MyMiner/0.1"]
}
용도: 채굴기가 서버에 구독 요청 (작업 받기 시작)
2. mining.set_difficulty
{
"id": null,
"method": "mining.set_difficulty",
"params": [16384]
}
용도: 서버가 채굴기에게 난이도 설정 (작업 기준)
3. mining.authorize
{
"id": 2,
"method": "mining.authorize",
"params": ["worker1", "password"]
}
용도: 채굴기가 풀 서버에 로그인 요청
4. mining.notify
{
"id": null,
"method": "mining.notify",
"params": [
"job_id_abc123",
"prevhash",
"coinb1",
"coinb2",
["merkle_branch"],
"version",
"nbits",
"ntime",
true
]
}
용도: 새로운 작업(job) 할당
→ 블록 헤더 구성 요소들을 전달
prevhash
: 이전 블록 해시coinb1/coinb2
: Coinbase TX 앞뒤 구조merkle_branch
: 머클 경로ntime
: 현재 시간nbits
: 타겟값 압축 표현job_id
: 작업 식별자
5. mining.submit
{
"id": 4,
"method": "mining.submit",
"params": [
"worker1",
"job_id_abc123",
"extraNonce2",
"ntime",
"nonce"
]
}
용도: 채굴기가 유효한 해시를 찾았을 때 제출
6. result
(서버 응답)
{
"id": 4,
"result": true,
"error": null
}
or
{
"id": 4,
"result": false,
"error": "Low difficulty share"
}
⚙️ 기타 구조 특징
항목 | 내용 |
---|---|
연결 방식 | TCP + JSON (보통 포트 3333, 4444 등) |
데이터 전송 | 한 줄 JSON per message (개행 문자 기준) |
효율성 | 기존 RPC보다 경량화, 실시간성 우수 |
확장성 | ZCash, Ethereum 등도 변형 Stratum 사용 중 |
🧠 Stratum 구현 라이브러리 (예시)
- Python:
stratum-mining
- Node.js:
node-stratum-pool
- Rust:
stratum-server
✅ 요약
구성 요소 | 설명 |
---|---|
mining.subscribe | 작업 시작 요청 |
mining.set_difficulty | 난이도 설정 |
mining.notify | 작업 템플릿 전달 |
mining.submit | 결과 제출 |
result | 유효성 응답 |
비트코인 네트워크를 “운영”하는 사람과
비트코인을 “채굴”해서 보상받는 사람은
보통 다른 역할을 가진 서로 다른 프로그램을 사용합니다.
🧱 비트코인 시스템의 역할별 구성요소
역할 | 사용하는 소프트웨어 | 기능 |
---|---|---|
✅ 풀 노드 운영자 | bitcoind , bitcoin-qt | – 블록체인 전체 저장- 거래 검증- 블록 전파- 네트워크 합의 유지 |
✅ 채굴자 / 마이너 | cgminer , bfgminer , ASIC miner + 컨트롤러 | – 블록 템플릿 받아서 연산- SHA256 해시 반복- 유효한 블록 제출 |
✅ 채굴풀 서버 | stratum-pool , btcpool , slushpool core | – 채굴자들과 연결- 작업 분배- 제출된 작업 수신- 블록 보상 분배 |
✅ 일반 사용자 | Electrum , Sparrow Wallet 등 지갑 앱 | – 송금/수신- 개인키 보관- 서명/검증 |
🔍 bitcoind
는 뭘까?
- Bitcoin Core 노드 프로그램 (정식 이름:
bitcoind
) - 네트워크 유지/검증의 기반 인프라
- 주요 기능:
- 전체 블록체인 데이터 저장
- 새 거래/블록 수신 및 검증
- 다른 노드와 통신 (P2P)
- RPC API 제공 (
getblocktemplate
,submitblock
,sendrawtransaction
등)
즉, 채굴기나 채굴풀도 결국 bitcoind에 붙어서 연산을 할 뿐,
실제 비트코인을 “나눠주는” 권한은 없고, 블록체인에 기록되도록 만드는 것이 전부입니다.
🎯 진짜 “비트코인을 나눠준다”는 건?
실제로는 이런 과정을 거칩니다:
bitcoind
를 구동하고, 블록체인 동기화- 새 블록이 생성되면 → Coinbase 거래로 3.125 BTC를 채굴자 주소로 송금
- 이 송금은 자동 생성된 트랜잭션이며, 100블록이 지나야 사용 가능 (maturity rule)
- 해당 주소의 개인키를 가진 지갑만 이 코인을 쓸 수 있음
즉, 비트코인을 “주는 프로그램”이 따로 있는 게 아니라,
블록 생성 + 블록체인 합의 참여 → 기록된 트랜잭션이 곧 보상 지급입니다.
✅ 요약
질문 | 답변 |
---|---|
bitcoind 와 채굴기는 같은 프로그램인가요? | ❌ 기능 다릅니다 |
bitcoind 는 뭘 하나요? | 🌐 네트워크 유지, 블록 검증, 전체 체인 운영 |
채굴 프로그램은 뭘 하나요? | ⛏ 연산만 담당 (SHA256 brute-force) |
“비트코인을 나눠준다”는 건? | ✅ 블록 보상 트랜잭션을 통해 자동으로 지급됨 |
답글 남기기