Search
Duplicate
moon
sun

3.블록체인의 구성요소&채굴

목차(클릭하세요)
💡

1. 실제 블록의 연결 살펴보기

import datetime import hashlib block_body = { "거래내역1": { '판매자' : '파이썬', '구매자' : '김민수', '개수' : '3개', '거래시간' : '1990년 1월 1일 00시 00분 00초', '거래수수료' : '0.001개' }, "거래내역2": { '판매자' : '김민수', '구매자' : '김영수', '개수' : '3개', '거래시간' : '1990년 1월 2일 01시 02분 03초', '거래수수료' : '0.001개' } } block_header = { '블록의 생성 번호' : 0, '블록의 생성 시간' : datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), '블록의 채굴자' : "0xea674fdde714fd979de3edf0f56aa9716b898ec8", '블록 채굴자의 보상 값' : 2.132, '블록 채굴 난이도' : 12382889997310022, 'Nonce' : '0x7ccf42b8e05d031f', '블록 사이즈' : '178556 bytes', '이전 블록의 해시값' : '0xe1f3d0e83542e20735d453006cc6d8975920e7aec951c3b974eade52901e97e7', '이번 블록 몸통 내역의 해시값' : hashlib.sha256(str(block_body).encode()).hexdigest() } body_hash = hashlib.sha256(str(block_body).encode()).hexdigest() block1 = { 'header' : block_header, 'transaction' : block_body } block1
Python
복사

1-1. 블록 구조

- 헤더: 9가지 메타데이터 (블록 번호, 시간, 채굴자, 해시 등) - 바디: 실제 거래 내역들 (판매자→구매자 거래 정보)
🔗 체인 연결 원리
•
이전 블록 해시 → 현재 블록 헤더
•
하나라도 변조시 전체 체인 무효화

1-2.실제 가동 중인 블록체인 네트워크에서도 정말 이런식으로 블록이 존재할까?

>> 이더리움 블록체인 네트워크의 블록정보 확인해보기
1.
이더리움 블록체인 공개사이트에서 가장 최근에 생성된 블록 번호를 확인해보자.
•
Latest Blocks 클릭
•
블록번호를 통해 다양한 정보 확인 가능
•
2.
블록 내의 Transaction정보 클릭

1-3. 국내 가상자산거래소(업비트, 빗썸 등)에서 의 거래내역도 확인가능할까?

✅ 정답은 ‘No’
•
국내 가상 자산거래소에서 이더리움을 샀다면, 이는 가상자산 거래소의 큰 ETH지갑내부에서 거래소의 중앙화 서버 내에 분리된 사용자의 계정으로 거래가 이루어진 것
•
즉, 거래 참여자들은 분산화된 이더리움 네트워크가 아닌 중앙화된 거래소의 리소스를 사용하며 거래소에 수수료를 지불하는 개념

2. 블록체인 채굴

✅ 블록체인에서의 ‘채굴’은 구체적으로 무엇을 의미할까?
📢 ‘채굴’을 이해하기 위해 메타마스크와 연관성을 알면 좋음
[채굴] 블록체인 네트워크를 운영하는 "인프라 제공자”
1.
거래 검증 및 블록 생성
2.
네트워크 보안 유지
3.
컴퓨팅 파워 제공
4.
전력 소비하며 24시간 작업
[메타 마스크]블록체인을 사용하는 "사용자 도구”
1.
암호화폐 지갑 역할
2.
DApp 연결 도구
3.
거래 승인/전송
4.
사용자 인터페이스 제공

2-1. 메타 마스크와 블록체인의 관련성

# 사용자가 메타마스크에서 거래 요청 사용자: "김민수에게 0.1 ETH 보내기" ↓ 메타마스크: 거래 서명 후 네트워크에 전송 ↓ 채굴자들: 거래를 검증하고 블록에 포함 ↓ 블록체인: 거래 완료, 잔액 업데이트 ↓ 메타마스크: 새로운 잔액 표시
Python
복사
•
메타마스크 = 웹브라우저용 암호화폐 지갑
•
실물 지갑처럼 암호화폐를 보관하고 거래하는 도구
•
메타마스크의 기본 기능
◦
암호화폐 보관 (ETH, 토큰들)
◦
송금/수신
◦
DApp(탈중앙화 앱) 연결
◦
NFT 관리

2-2. 이더리움을 사고 팔고 했을때의 물리적 데이터는 어디에 저장되어 있을까?

•
기존 중앙화 시스템에서는 은행에서 데이터를 보관중(각종 비용을 지불해가며)
•
탈중앙화된 이더리움 네트워크에 저장되있다고 하는데..
◦
그 데이터가 실제로 물리적으로 어떻게? 어디에? 저장이 되어 있을까?
◦
또한, 탈중앙화된 네트워크의 데이터 저장을 위한 운영비용(하드웨어 비용, 전기세, 소프트웨어 비용, 관리자 비용) 등은 누가 지불하는 것인가?
◦
➡️ 가상자산 거래소에 저장되어 있는 가상 자산의 경우는 은행예금과 마찬가지로 가상자산거래소가 소유한 (중앙화 된) 서버에 가상자산 소유정보를 저장하고 있으며, 가상자산 거래소가 운영비용을 지불함
1.
이더리움 네트워크 관련 정리
•
별도의 운영주체가 없음
•
서버 운영 비용에 대한 보상을 제공하기 위해 ‘채굴’보상을 지불하고 있음
2.
채굴?
•
모든 노드에게 동일한 문제를 내고, 그 문제를 가장 빨리 해결하는(=채굴하는) 노드에게 블록 생성권한을부여
•
블록 생성권한이란 블록 채굴에 따른 보상 수여 권한과 같은 개념

2-3. 채굴 예제코드

•
코드에서 난이도는 **해시값 앞부분이 특정 문자열(PROBLEM_WORD)**과 몇 글자나 일치해야 하는지를 뜻함
•
해시값은 무작위에 가깝게 분포함.
◦
따라서 앞 1글자를 맞출 확률은 대략 1/16 (16진수니까).
◦
앞 2글자를 맞출 확률은 1/16 × 1/16 = 1/256 임.
➡️ 즉, 요구하는 접두어 글자가 늘어날수록 성공 확률이 기하급수적으로 낮아짐 → 난이도 상승
•
예시:
◦
PROBLEM_DIFFICULTY = 1 → 해시값 앞 1글자만 "a"와 일치하면 됨.
◦
PROBLEM_DIFFICULTY = 2 → 해시값 앞 2글자가 "11"과 정확히 일치해야 함.
import random import string import hashlib # 해시 계산을 위한 hashlib 라이브러리 ## 이더리움 네트워크가 낸 문제 PROBLEM_WORD = "a" # 찾아야 하는 해시 접두어 PROBLEM_DIFFICULTY = 1 # 난이도 (앞자리 몇 개가 문제 단어와 일치해야 하는지) ## 채굴 시작 start_nonce = random.choice(string.ascii_letters) # 임의의 시작 문자열 선택 i = 0 while True: nonce = start_nonce + str(i) # nonce 값 생성 nonce_result = hashlib.sha256(nonce.encode()).hexdigest() # SHA-256 해시 계산 print(i, nonce, nonce_result) # 해시값이 난이도 조건에 맞는지 확인 if nonce_result[0: PROBLEM_DIFFICULTY] == PROBLEM_WORD * PROBLEM_DIFFICULTY: nonce = nonce_result # 조건 충족 시 정답 저장 break i += 1 # 실패 시 다음 nonce로 반복
Python
복사
import random import string import hashlib # SHA-256 해시 계산을 위한 라이브러리 ## 이더리움 네트워크가 낸 문제 PROBLEM_WORD = "1" # 해시 앞부분이 '1'이어야 함 PROBLEM_DIFFICULTY = 2 # 난이도 (앞 두 자리 검사) ## 채굴 시작 start_nonce = random.choice(string.ascii_letters) # 시작 nonce (임의 문자 선택) i = 0 while True: nonce = start_nonce + str(i) # nonce 생성 nonce_result = hashlib.sha256(nonce.encode()).hexdigest() # SHA-256 해시값 print(i, nonce, nonce_result) # 해시 앞부분이 문제 조건과 일치하는지 확인 if nonce_result[0: PROBLEM_DIFFICULTY] == PROBLEM_WORD * PROBLEM_DIFFICULTY: nonce = nonce_result # 조건 충족 시 채굴 성공 break i += 1 # 조건 불충족 → 다음 시도
Python
복사

3. 송금방식의 비교

3-1. 송금방식 개요

•
중앙화 송금: 은행, 카드사 등 중앙기관이 관리
•
탈중앙화 송금: 블록체인 네트워크의 합의로 처리

3-2. 중앙화 vs 탈중앙화 송금 방식 상세 비교

📋 목차

🏦 송금 방식 개요

🎯 핵심 차이점

구분
중앙화
탈중앙화 (PoW)
관리 주체
은행, 금융기관
전 세계 채굴자들
처리 시간
즉시~3일
10분~1시간
수수료
고정/비례
네트워크 상황에 따라 변동
운영 시간
영업시간 제한
24시간 365일
검열
가능
불가능

🏛️ 중앙화 송금 시스템

🔄 처리 과정

송금자 → 은행 A → 중앙 정산 시스템 → 은행 B → 수취인 ↓ ↓ ↓ ↓ ↓ 요청 잔고확인 기관간 정산 계좌 입금 완료
Plain Text
복사

⚡ 장점

•
즉시 반영: 같은 은행 내 거래는 실시간
•
예측 가능: 고정된 수수료와 처리 시간
•
고객 지원: 오류 시 은행 문의로 해결
•
규제 보호: 예금자 보호, 보험 적용
•
사용자 친화적: 직관적인 앱/웹 인터페이스

❌ 단점

•
영업시간 제한: 평일 9-18시, 주말/공휴일 제한
•
높은 수수료: 국제송금 시 3-8% 수수료
•
검열 가능: 정부/기관의 계좌 동결 가능
•
중앙 위험: 은행 파산 시 자금 손실 위험
•
국경 제약: 국가별 규제로 송금 제한

📊 실제 처리 시간

국내 송금: - 같은 은행: 즉시 - 다른 은행: 30분~2시간 - 주말/공휴일: 다음 영업일 국제 송금: - SWIFT: 1-5영업일 - Western Union: 즉시~수일 - 수수료: 송금액의 3-8%
Plain Text
복사

⛓️ 탈중앙화 송금 시스템 (PoW)

🔄 비트코인 송금 과정

1. 거래 생성 및 서명 사용자 → 디지털 서명으로 거래 생성 2. 멤풀 전파 거래 → 네트워크 전체에 브로드캐스트 3. 채굴자 선택 채굴자들 → 수수료 높은 거래 우선 선택 4. 블록 채굴 채굴자 → PoW로 블록 생성 (평균 10분) 5. 네트워크 합의 전체 네트워크 → 블록 유효성 검증 6. 체인 추가 유효한 블록 → 블록체인에 영구 기록
Plain Text
복사

✅ 장점

•
24시간 운영: 전 세계 어디서든 언제나 송금
•
검열 저항: 정부나 기관이 막을 수 없음
•
투명성: 모든 거래 내역 공개 검증 가능
•
국경 무시: 국가 제약 없이 전 세계 송금
•
중앙 위험 없음: 은행 파산과 무관
•
프로그래밍 가능: 스마트 계약으로 자동화

❌ 단점

•
처리 지연: 10분~1시간의 확정 시간
•
수수료 변동: 네트워크 혼잡 시 급등
•
기술적 복잡성: 일반 사용자에게 어려움
•
되돌리기 불가: 잘못 보낸 거래 복구 불가능
•
에너지 소모: PoW의 환경 문제
•
확장성 제한: 초당 7거래 (TPS) 한계

⏰ 블록체인 딜레이의 원인

🔍 왜 딜레이가 발생하는가?

1️⃣ 합의 메커니즘의 특성

PoW 과정: 1. 거래 수집 (1-5분) 2. PoW 계산 (평균 10분) ← 주요 딜레이 원인 3. 블록 전파 (1-2분) 4. 네트워크 합의 (수 분)
Python
복사

2️⃣ 블록 생성 시간

비트코인: 평균 10분 (목표 시간) - 너무 빠르면: 난이도 상승 ⬆️ - 너무 느리면: 난이도 하락 ⬇️ - 2주마다 자동 조정
Plain Text
복사

3️⃣ 확인(Confirmation) 대기

1-confirm: 1개 블록 포함 (10분) 3-confirm: 3개 블록 확인 (30분) ← 일반적 6-confirm: 6개 블록 확인 (1시간) ← 안전
Plain Text
복사

📊 딜레이 단계별 분석

🔄 상세 타임라인

[00:00] 거래 전송 [00:01] 멤풀 도달 [00:02] 네트워크 전파 완료 [00:10] 블록에 포함 (1차 확인) [00:20] 2차 확인 [00:30] 3차 확인 ← 거래소 인정 [01:00] 6차 확인 ← 완전히 안전
Plain Text
복사

🎯 각 단계별 의미

확인 수
시간
의미
사용처
0-confirm
즉시
미확정
소액 결제
1-confirm
10분
기본 확인
일반 거래
3-confirm
30분
안전 확인
거래소 입금
6-confirm
60분
완전 확정
대액 거래