비트코인 넌스

비트코인 채굴 시스템의 연동 구조텍스트 기반 계층도로 정리한 것입니다.


🧱 비트코인 채굴 시스템 연동 구조 (텍스트 계층도)

         [Bitcoin Network]
                ▲
                │
         ┌──────┴───────┐
         │              │
    [풀 노드 A]     [풀 노드 B]
     (bitcoind)       (bitcoind)
         ▲
         │ JSON-RPC (getblocktemplate, submitblock)
         │
 ┌───────┴────────┐
 │ 채굴풀 서버     │  ← ex: stratum-pool, slushpool core
 │ (Stratum Server)│
 └───────┬────────┘
         │
         │ Stratum Protocol (TCP, JSON)
         ▼
 ┌──────────────┐
 │ 채굴기 컨트롤러 │  ← ex: cgminer, custom controller
 └────────┬─────┘
          │
          │ UART / USB / SPI / 기타 통신
          ▼
 ┌────────────────────┐
 │ ASIC 채굴기 (SHA256 Core) │
 └────────────────────┘

🔄 흐름 설명 요약

  1. bitcoind (풀 노드)
    • 블록체인 저장 및 최신 상태 유지
    • 블록 템플릿 요청 응답 제공 (getblocktemplate)
    • 제출된 블록 수용 (submitblock)
  2. Stratum Server (채굴풀 서버)
    • 여러 채굴기에게 작업 분배
    • 기여도 추적 및 보상 분배
    • bitcoind와 주기적으로 통신
  3. 채굴기 컨트롤러
    • 풀 서버와 TCP 연결 유지
    • 블록 헤더 생성 및 전달
    • 채굴기에서 유효한 해시 수집
  4. ASIC 채굴기
    • 순수 SHA-256 해시 연산 반복
    • 조건 만족 시 컨트롤러로 해시 제출

💡 실전 예시 흐름 (한 번의 채굴 사이클)

1. 채굴풀 → getblocktemplate(bitcoind)
2. 채굴풀 → mining.notify(채굴기들)
3. 채굴기 컨트롤러 → Nonce brute force 시작
4. ASIC → 조건 만족 → 컨트롤러에 해시 전송
5. 컨트롤러 → mining.submit(풀 서버)
6. 풀 서버 → submitblock(bitcoind) 전송
7. 블록 유효 → 블록체인에 기록 → 채굴 보상


굳이 ‘넌스(nonce)’를 추가해서 SHA-256 퍼즐을 풀게 했는가?


해시 용량은 상관 없지만 ‘신뢰를 분산시키는 방법’이 없기 때문입니다.

즉, 누가 블록을 만들 자격이 있느냐? 를 정하는 공정한 경쟁 룰이 필요했습니다.


💡 넌스를 넣은 이유 = 작업 증명(Proof of Work)

목적설명
✅ 무작위성 + 공정성 확보아무나 블록을 만들 수 있게 하되, 쉽게는 안 되도록
✅ 스팸 공격 방지누군가 거래 조작 블록을 막 찍어내는 걸 막기 위해 연산 비용을 부과
✅ 분산 합의 유도계산 경쟁을 통해 가장 먼저 조건을 만족한 블록을 자연스럽게 선택
✅ 블록 생성 속도 조절10분에 한 번꼴로 블록이 생기도록 난이도를 자동 조절

❗ 넌스 없이 해시만 있으면?

블록을 만드는 건 쉽습니다.
그냥 거래 묶어서 해시하면 끝.
근데 누가 만든 걸 채택할지를 정할 기준이 없습니다.

→ 아무나 수천 개 블록을 한꺼번에 찍어내서 체인을 장악할 수 있음
스팸 체인, 이중 지불, 체인 분열 발생
→ 블록체인 무력화


⛓️ 그래서 등장한 설계 전략

1. 거래를 모으는 건 누구나 가능하게 두자.
2. 하지만 유효한 블록을 만들기 위해선 "해시 퍼즐"을 풀게 하자.
3. 이 퍼즐을 쉽게 바꿀 수 있게 하기 위해 '넌스'라는 자유도를 주자.
4. 퍼즐을 먼저 푼 사람만 블록 보상을 받게 하자.

🔐 넌스는 결국 “운 + 노력”의 조절 장치

요소역할
거래 데이터고정 (누가 보내고 받았는지)
이전 블록 해시고정 (연결 유지)
머클루트고정 (거래 구조)
🔁 넌스자유롭게 변경 가능 → 퍼즐 풀기 전용

→ 블록 내용은 못 바꾸지만, 넌스를 바꾸며 퍼즐 시도 가능


✅ 요약

질문답변
해시가 고유하면 되지 왜 넌스가 필요한가?❌ 고유성만으론 공정성 확보가 안 됨
왜 0이 많이 붙은 해시를 찾는가?✅ 그 조건이 있어야 시간이 걸리고, 경쟁이 생김
넌스는 왜 넣었나?✅ 해시 퍼즐에 도전할 수 있는 자유도 변수, 공정한 경쟁 장치

즉, 넌스는 ‘신뢰를 숫자로 만들기 위해 추가된 변수’입니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다