블록(Block)이란?

- 블록(Block)이란, 여러 개의 트랜잭션을 담은 묶음으로
- 블록 헤더(Block Header) 와 트랜잭션 리스트(Transaction List)로 구성되어 있음.
- 블록 헤더
- 약 80바이트로, 체연 연결, 검증의 핵심 메타 데이터가 포함되어 있음
- 트랜잭션 리스트
- = 트랜잭션들의 묶음
- 머클(merkle)트리로 요약 가능
- 트랜잭션의 묶음들을 나무 형태로 요약을 했다 하여 머클 트리(merkle tree)라고 불리기도 함.
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의 개수를 늘리거나 줄이면 된다.
그러면, 동시에 채굴(증명)이 되는 경우에는 어떡할까?
- 동시에 두 블록이 제안되면, 잠깐 포크(분기)가 발생
- 이 경우 노드들은 가장 많은 누적 작업을 한 가장 긴 체인을 채택

전체적인 네트워크 흐름(P2P, Mempool, 전파)
- Alice가 트랜잭션을 만들고 서명 → 로컬 노드에 전달
- 노드는 기본 검증 후 mempool(대기열)에 보관, 이 트랜잭션을 피어들에게 전파
- 채굴 노드가 mempool에서 수수료/정책에 따라 트랜잭션을 골라 새 블록을 조립(코인베이스 트랜잭션 포함)
- 유효한 PoW를 찾으면 블록을 네트워크에 전파
- 다른 노드들이 헤더·머클루트·트랜잭션을 검증하고, 체인에 연결
블록체인의 작동 흐름 총망라
상황
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컨펌”으로 표시 → 추가 블록이 쌓일수록 안전도 상승