본문 바로가기
PYTHON/네트워크보안과 블록체인

[PYTHON] 비트코인 채굴(BITCOIN MINING)

by G허니 2024. 8. 11.

 

비트코인 채굴은 새로운 비트코인을 생성하고 거래를 검증하는 과정입니다. 이 과정은 블록체인 네트워크의 안전성을 유지하고, 거래의 불변성을 보장하는 데 필수적입니다. 채굴자는 복잡한 수학 문제를 해결하여 새로운 블록을 생성하고, 이 블록에 포함된 거래를 기록합니다. 성공적으로 블록을 생성한 채굴자는 비트코인으로 보상을 받게 됩니다.

 

채굴의 주요 과정
  1. 해시 함수 사용: 채굴 과정에서 채굴자는 특정 조건을 만족하는 해시 값을 찾습니다. 이 해시 값은 블록의 내용과 nonce(임의의 수)를 기반으로 생성됩니다.
  2. 작업 증명(Proof of Work): 채굴자는 "작업 증명"을 통해 해시 값을 찾기 위해 많은 계산을 수행해야 합니다. 이 과정은 컴퓨터의 처리 능력을 요구하며, 시간과 에너지를 소모합니다.
  3. 블록 생성: 조건을 만족하는 해시 값을 찾으면, 해당 블록이 블록체인에 추가되고, 채굴자는 보상으로 새로운 비트코인을 받습니다.

 

비트코인 채굴 코드

 

import time
import hashlib

# 메시지와 target bits 입력
msg = input("메시지의 내용? ")
target_bits = input("Target bits? ")

# target 값 계산
exponent = int(target_bits[:2], 16)
coefficient = int(target_bits[2:], 16)
target = coefficient * 2 ** (8 * (exponent - 3))

# 메시지와 extra nonce 초기화
message = msg.encode()
extra_nonce = int(time.time())

start_time = time.time()

# nonce 값 계산
nonce = 0
while True:
    # 해시 계산
    hash_result = hashlib.sha256(message + extra_nonce.to_bytes(4, 'little') + nonce.to_bytes(4, 'little')).digest()
    
    # 결과 출력
    if int.from_bytes(hash_result, 'big') < target:
        print(f"Target: 0x{target:064x}")
        print(f"메시지: {msg}, Extra nonce: {extra_nonce}, nonce: {nonce}")
        print(f"실행 시간: {time.time() - start_time:.9f}초")
        print(f"Hash result: 0x{hash_result.hex()}")
        break
    
    # nonce 값 변경
    nonce += 1
    if nonce == 2**32:
        extra_nonce = int(time.time())
        nonce = 0

 

  1. 입력 받기: 사용자로부터 메시지와 target bits를 입력받습니다. 메시지는 블록의 내용이 되고, target bits는 채굴 조건을 정의합니다.
  2. target 값 계산: 입력된 target bits를 바탕으로 목표 해시 값을 계산합니다. 여기서 exponent와 coefficient를 사용하여 최종 target 값을 산출합니다.
  3. ** 메시지와 extra nonce 초기화**: 메시지를 바이트로 변환하고, extra_nonce를 현재 시간으로 초기화합니다. extra_nonce는 해시 계산 시 추가적인 변동성을 제공합니다.
  4. nonce 값 계산: 채굴을 위한 nonce 값을 0부터 시작하여 반복적으로 증가시킵니다.
  5. 해시 계산: SHA-256 해시 함수를 사용하여 메시지, extra_nonce, 그리고 현재 nonce의 조합으로 해시 값을 계산합니다.
  6. 조건 확인: 계산된 해시 값이 목표 target 값보다 작은지 확인합니다. 조건을 만족하면 결과를 출력하고 채굴을 종료합니다.
  7. nonce 값 변경: 조건을 만족하지 않을 경우, nonce 값을 1 증가시킵니다. 만약 nonce가 2^32에 도달하면 extra_nonce를 현재 시간으로 변경하고 nonce를 0으로 초기화합니다.

이 코드와 설명을 통해 비트코인 채굴의 기본 원리와 과정에 대한 이해를 높일 수 있습니다. 비트코인 채굴은 복잡한 수학적 문제를 해결하는 과정을 포함하며, 이로 인해 비트코인의 안전성과 거래의 무결성을 보장합니다.

 

깃허브

https://github.com/Ghoney99/Network-Secure-and-BlockChain