Categories: 블록체인 글

블록체인 입문 3편: 채굴 수익성 계산과 Stratum 프로토콜 완전 분석

시리즈: 파이썬 개발자가 블록체인을 파헤치다
이번 편은 실전 수익 계산부터 채굴 풀의 TCP 통신까지 다룹니다.

채굴 수익성: 공식부터 이해하자

일일 채굴량(ETH) = (내 해시레이트 / 네트워크 해시레이트) × 블록보상 × 일일 블록 수
일일 수익(원)   = 일일 채굴량 × ETH 가격
일일 순이익     = 일일 수익 - 전기비용 - 감가상각 - 풀 수수료

실전 계산 (2022년 이더리움 채굴 전성기)

# 파라미터
my_hashrate     = 500e6        # 500 MH/s (RTX 3080 × 5)
network_hashrate = 900e12      # 900 TH/s
block_reward    = 2            # ETH
block_time      = 13           # 초
eth_price       = 2_000_000   # 원

# 계산
daily_blocks = 86400 / block_time              # 6,646개
my_share     = my_hashrate / network_hashrate  # 0.000056%
daily_eth    = my_share * block_reward * daily_blocks  # 0.0073 ETH
daily_revenue = daily_eth * eth_price          # 14,600원

# 전기비용
power_draw   = 1100   # W (220W × 5)
kwh_per_day  = power_draw * 24 / 1000         # 26.4 kWh
elec_cost    = kwh_per_day * 130              # 3,432원 (130원/kWh)

daily_profit = daily_revenue - elec_cost       # 11,168원
monthly_profit = daily_profit * 30            # 335,040원
breakeven_months = 5_000_000 / monthly_profit # ≈ 15개월

수익성 민감도 분석

수익에 가장 큰 영향을 미치는 변수 순서:

순위변수비고
1ETH 가격2배 오르면 수익 2배
2네트워크 난이도참여자 2배 → 수익 절반
3전기요금가정용/산업용/해외 최대 10배 차이
4GPU 전성비RTX 3070: 0.5 MH/W > RTX 3080: 0.45 MH/W
5풀 수수료1~3%

왜 풀 채굴이 필수인가?

혼자 채굴하면 블록 발견까지 평균 268일을 기다려야 합니다.

import math

solo_block_time_days = 1 / (my_share * daily_blocks)
print(f"Solo 채굴 평균 대기: {solo_block_time_days:.0f}일")
# → 268일

# 분산도 계산 (지수 분포)
# 표준편차 = 평균 (포아송 과정)
# → 수익이 극도로 불규칙

풀에 참여하면 매일 안정적인 수익이 생기고, 분산이 거의 없어요. 기댓값은 같지만 현금흐름의 안정성이 완전히 달라집니다.


Stratum 프로토콜: 풀과 채굴기가 대화하는 방법

채굴기와 풀 서버는 Stratum 프로토콜(TCP + JSON-RPC) 로 통신해요.

1. 연결 및 구독

// 채굴기 → 풀 서버
{
  "id": 1,
  "method": "mining.subscribe",
  "params": ["ethminer/0.19.0"]
}

// 풀 서버 → 채굴기
{
  "id": 1,
  "result": ["0xdeadbeef", "0x00000001"]
  //         session_id     extranonce
}

2. 인증

// 채굴기 → 풀 서버
{
  "id": 2,
  "method": "mining.authorize",
  "params": ["0xMyWallet.worker1", "x"]
  //          지갑주소.워커이름    비밀번호(보통 무시)
}

3. 작업 수신 (풀 → 채굴기, 실시간 푸시)

{
  "method": "mining.notify",
  "params": [
    "bf",             // job_id
    "0x1234...abcd",  // seed_hash (어떤 DAG를 쓸지 결정)
    "0x5678...ef01",  // header_hash (채굴 대상)
    "0x00000000ffff...", // target
    true              // clean_jobs (이전 작업 무효화 여부)
  ]
}

4. Share 제출 (채굴기 → 풀)

{
  "id": 4,
  "method": "mining.submit",
  "params": [
    "0xMyWallet.worker1",
    "bf",           // job_id
    "0x00000001",   // extranonce2
    "0x504e86ed",   // ntime
    "0x5e8012a4"    // 찾은 nonce!
  ]
}

// 풀 서버 응답
{"id": 4, "result": true}  // 수락
{"id": 4, "result": false} // 거절 (stale 등)

풀 난이도 vs 네트워크 난이도: Share 시스템

풀은 채굴기에게 실제 네트워크보다 훨씬 쉬운 목표를 줍니다.

네트워크 목표: 0x00000000FFFFFFFF... (앞 8자리 0, 매우 어려움)
풀 목표:       0x0000FFFFFFFFFFFF... (앞 4자리 0, 쉬움)

채굴기가 풀 목표를 달성한 결과를 제출하면 Share로 인정돼요.

def process_share(header, nonce, mix_hash, pool_target, network_target):
    result = hashimoto_light(header, nonce)  # DAG 없이 cache로 검증

    if result > pool_target:
        return "REJECT: invalid share"

    # Share 기여도 기록
    record_contribution(worker_id, pool_target)

    if result <= network_target:
        # 실제 블록 발견!
        submit_to_network(header, nonce, mix_hash)
        distribute_reward()
        return "BLOCK_FOUND"

    return "ACCEPT: share counted"

보상 분배 방식 비교

PPS (Pay Per Share)

# Share 1개의 기댓값
share_value = block_reward / (network_target / pool_target)
# → 즉시 지급, 풀이 분산 리스크 부담
# → 수수료 높음 (2~3%)

PPLNS (Pay Per Last N Shares)

# 블록 발견 시
N = 100_000  # 최근 N개 share 기준
my_shares_in_window = count_my_shares(last_N_shares)
my_reward = (my_shares_in_window / N) * block_reward
# → 수수료 낮음 (0.5~1%), 풀 호핑 방지

Vardiff (가변 난이도)

풀은 채굴기마다 난이도를 자동 조정해요. 목표는 채굴기당 약 5~10초마다 Share 1개 제출입니다.

// 풀 → 채굴기: 난이도 조정 통보
{
  "method": "mining.set_difficulty",
  "params": [512]
}

서버가 꺼지면?

  • 일반 풀 참여자: 페널티 없음. 재시작 시 자동 재연결
  • Active Delegate (ARK): 차례에 블록 못 만들면 missed block 기록 → 신뢰도 하락 → 투표 이탈 가능

핵심 정리

개념설명
수익성 공식(내 해시 / 전체 해시) × 보상 × 일일 블록 – 전기비용
Stratum채굴기-풀 간 TCP JSON-RPC 통신 프로토콜
Share풀 난이도를 만족한 해시 결과, 기여도 증명
PPSShare마다 즉시 지급, 안정적
PPLNS블록 발견 시 비율 지급, 수수료 저렴

다음 편 예고

4편에서는 탈중앙화의 불편한 진실을 파헤칩니다. 충분한 자본이 있다면 블록체인을 통제할 수 있을까요? 그리고 양자컴퓨터가 등장하면 어떻게 될까요?


채굴 수익성을 직접 계산해보고 싶다면 minerstat.com 같은 사이트를 활용해보세요!

Recent Posts

블록체인이 진짜 파는 것: “나는 못 고친다”

체인 위의 데이터 — 3부작 중 3편 · ChainLab 앞의 두 편은 배관에 관한 것이었습니다…

2개월 ago

데이터를 소비하는 것이 스마트컨트랙트일 때

체인 위의 데이터 — 3부작 중 2편 · ChainLab 1편에서 우리는 하나의 재정의에 도달했습니다. 블록체인은…

2개월 ago

무료 데이터를 블록체인에 얹어 판다는 것

체인 위의 데이터 — 3부작 중 1편 · ChainLab 솔깃한 아이디어가 하나 있습니다. 부동산 실거래가…

2개월 ago

한국에선 왜 아직? — 규제 이야기, 쉽게 (5/5)

기술은 세계 최고 수준인데, 왜 우리나라에선 AI 결제가 아직 잘 안 굴러갈까요? 답은 '실력'이 아니라…

2개월 ago

에스크로 — 돈을 안전하게 맡기는 금고, 그런데 왜 어려울까 (4/5)

중고거래 안전결제, 다들 써보셨죠? AI 결제에도 이게 필요합니다. 문제는, 생각보다 훨씬 까다롭다는 거예요. 중고거래를 떠올려…

2개월 ago

AP2 & MPP — ‘미리 허락받는’ 결제 vs ‘탭 열어두는’ 결제 (3/5)

앞 편의 x402가 자판기였다면, 이번 두 방식은 '용돈 한도'와 '술집 외상장부'에 가깝습니다. 앞 편 복습:…

2개월 ago