Search
Duplicate

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) 한계

블록체인 딜레이의 원인

왜 딜레이가 발생하는가?

합의 메커니즘의 특성

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

블록 생성 시간

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

확인(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분
완전 확정
대액 거래