목차(클릭하세요)
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. 국내 가상자산거래소(업비트, 빗썸 등)에서 의 거래내역도 확인가능할까?
•
국내 가상 자산거래소에서 이더리움을 샀다면, 이는 가상자산 거래소의 큰 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 탈중앙화 송금 방식 상세 비교
 목차
1.
5.
6.
 송금 방식 개요
 핵심 차이점
구분  | 중앙화  | 탈중앙화 (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분  | 완전 확정  | 대액 거래  | 



