블록, 트랜잭션 그리고 블록체인의 흐름

김규원·2025년 8월 13일
0
post-thumbnail

블록(Block)이란?

  • 블록(Block)이란, 여러 개의 트랜잭션을 담은 묶음으로
  • 블록 헤더(Block Header)트랜잭션 리스트(Transaction List)로 구성되어 있음.
    • 블록 헤더
      • 약 80바이트로, 체연 연결, 검증의 핵심 메타 데이터가 포함되어 있음
    • 트랜잭션 리스트
      • = 트랜잭션들의 묶음
      • 머클(merkle)트리로 요약 가능
      • 트랜잭션의 묶음들을 나무 형태로 요약을 했다 하여 머클 트리(merkle tree)라고 불리기도 함.

그렇다면, 블록 헤더(Block Header)필드에는 뭐가 있을까?

version: 프로토콜/규칙 버전 힌트
prev_block_hash: 직전 블록 헤더의 해시
merkle_root: 블록 내 모든 트랜잭션을 요약한 루트 해시
timestamp: 블록 생성 시각
nBits: 난이도 타깃(해시가 해당 값 이하가 되어야 함.)
nonce: PoW(Proof of Work, 작업 증명)을 만족시키기 위해 바꿔가며 시도하는 숫자

여기서, 포인트는
헤더 전체를 해시했을 때(Bitcoin의 경우 double SHA-256), 결과가 nBits가 정한 타깃 이하가 되어야 유효한 블록

그래서, 트랜잭션(Transaction)이 뭔데

  • 트랜잭션이란, 블록체인의 상태를 바꾸는 명령.
  • 비트코인은 UTXO(Unspent Transaction Output) 모델을 사용

트랜잭션의 구성(간단화)

Input
이전 트랜잭션의 "미사용 출력(UXTO)을 참조 + 소유 증명을 위한 서명

Output
누구에게 얼마를 보낼지와 잠금 스크립트(scriptPubKey)

직관적으로, UTXO를 표현하자면

내 잔액 = 내가 소유한 UTXO들의 합
즉, 계좌 잔액처럼 더하기/빠기가 아닌, 동전(UTXO)를 선택해 쓰고 거스름돈을 새 UTXO로 받는 느낌.

작동 예시
1. Alice가 0.4BTC UTXO 하나를 보유
2. Bob에게 0.30BTC 보내고, 수수료 0.01BTC 지불
3. 출력(Output)은 2개:
3-1. Bob에게 0.30BTC
3-2. Alice 본인에게 거스름(0.4 - 0.3 - 0.01 = 0.09BTC)을 새 체인지 주소 받음

중간 요약

  • 트랜잭션은 블록체인의 상태를 바꾸는 명령,
  • 이런 트랜잭션의 묶음(Transaction List) + 메타 데이터(Block Header) 를 블록(Block)이라고 함.

머클 트리(Merkle Tree)

  • 블록에 포함된 거래 내역을 나무 형태로 요약한 것
  • 즉, 많은 트랜잭션을 하나의 머클 루트로 요약해, 블록 헤더에 넣는 것이 목적
  • 요약하는 방법(간단한 예시)

    트랜잭션 4개: A, B, C, D
    각각의 해시: hA, hB, hC, hD
    쌍으로 묶어 다시 해시: hAB = H(hA || hB), hCD = H(hC || hD)
    루트: hROOT = H(hAB || hCD)

포함 증명(Merkle proof)

  • 여기서 트랜잭션 A가 블록에 포함됐음을 증명하려면, 검증자는 hA와 함께 형제 노드 해시들(hB, hC, hD)를 받아 루트를 재계산
  • 재계산한 값이 헤더의 merkle_root와 같으면 증명 성공

홀수 개 처리

  • 리프가 홀수면 마지막 해시를 한 번 더 복제해 짝수로 맞춰야함(구현 규칙)

합의 알고리즘(Consensus Algorithm)

  • 블록체인은 탈중앙화를 추구하기에,
  • 트랜잭션 정보를 기록한 분산장부가 각 노드에 존재.
  • 해당 장부는 합의 알고리즘에 의해 동일하게 유지.
  • 이를 동일하게 유지하기 위해 사용하는 합의 알고리즘은, 작업 증명(PoW, Proof Of Work)을 통해 이루어짐.

PoW(Proof Of Work, 작업 증명)이란?

  • 블록을 생성하기 위해 해시값을 찾는 작업을 진행하고, 증명(채굴)하는 것
  • PoW의 난이도는 목표 블록 생성 간격(e.g., 비트 코인 = 10분)에 의해 조정.
    • PoW는 타깃 이하의 해시를 찾고 증명하는 과정이므로, 난이도 조절을 하려면 요구되는 0bit의 개수를 늘리거나 줄이면 된다.

그러면, 동시에 채굴(증명)이 되는 경우에는 어떡할까?

  • 동시에 두 블록이 제안되면, 잠깐 포크(분기)가 발생
  • 이 경우 노드들은 가장 많은 누적 작업을 한 가장 긴 체인을 채택
https://www.coinbase.com/learn/crypto-basics/what-is-a-fork

전체적인 네트워크 흐름(P2P, Mempool, 전파)

  1. Alice가 트랜잭션을 만들고 서명 → 로컬 노드에 전달
  2. 노드는 기본 검증 후 mempool(대기열)에 보관, 이 트랜잭션을 피어들에게 전파
  3. 채굴 노드가 mempool에서 수수료/정책에 따라 트랜잭션을 골라 새 블록을 조립(코인베이스 트랜잭션 포함)
  4. 유효한 PoW를 찾으면 블록을 네트워크에 전파
  5. 다른 노드들이 헤더·머클루트·트랜잭션을 검증하고, 체인에 연결

블록체인의 작동 흐름 총망라

상황

Alice가 Bob에게 0.3000 BTC를 보낸다.
Alice 보유 UTXO: 0.5000 BTC 하나. 목표 수수료: 0.0001 BTC.

단계

1. 트랜잭션 생성

  • Input: (이전 트랜잭션의 0.5000 BTC 출력) 1개
  • Outputs:
    Bob에게 0.3000 BTC (Bob의 주소를 잠금 스크립트로)
    Alice 거스름: 0.1999 BTC (새 체인지 주소)
    합 확인: 0.5000 = 0.3000 + 0.1999 + 0.0001(수수료) ✅
    Alice가 개인키로 서명 → 공개키로 검증 가능

2. 브로드캐스트 & mempool

  • 인근 노드가 기본 검증(서명, 입력 UTXO 존재, 수수료, 크기 정책 등) 후 mempool에 저장
  • 네트워크로 전파

3. 채굴자가 블록 생성

  • 여러 트랜잭션 + 코인베이스 트랜잭션(블록 보상 + 수수료 수익)
  • 트랜잭션들로 머클 루트 계산
  • 블록 헤더에 prev_block_hash, merkle_root, timestamp, nBits, nonce 세팅
  • doubleSHA256(header)가 타깃 이하가 될 때까지 nonce/코인베이스/시간 등을 바꿔가며 반복

4. 블록 전파 & 체인 확정

  • 유효 블록이 전파되면 노드들이 검증 후 체인에 추가
  • Bob의 지갑은 “1컨펌”으로 표시 → 추가 블록이 쌓일수록 안전도 상승
profile
행복한 하루 보내세요

0개의 댓글