[카테고리:] 미분류

  • 비트코인 넌스

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


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

             [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이 많이 붙은 해시를 찾는가?✅ 그 조건이 있어야 시간이 걸리고, 경쟁이 생김
    넌스는 왜 넣었나?✅ 해시 퍼즐에 도전할 수 있는 자유도 변수, 공정한 경쟁 장치

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