Tech Lab2 min read

블록체인 코스 #7: 비트코인 UTXO 원리·구조·예제로 이해

비트코인의 잔고는 계정이 아닌 UTXO의 합계입니다. 실생활 비유와 JSON 예제로 UTXO 생성·소비, 수수료, 스크립트 검증 흐름을 한 번에 파악하세요.

#UTXO#비트코인#트랜잭션#이중지불#방지#비트코인#스크립트#P2PKH

이 글을 통해 UTXO의 개념과 동작을 빠르게 이해하고, 잔돈 처리·수수료·검증 흐름을 실무 관점에서 정리할 수 있습니다.

UTXO 생성과 소비

계좌가 아닌 ‘사용되지 않은 출력’의 합

  • 비트코인의 잔고는 사용자의 UTXO 합계로 계산됩니다.
  • 송금 시 필요한 만큼의 UTXO를 소비하고, 잔액은 새로운 UTXO로 생성됩니다.
  • 이미 소비된 UTXO는 다시 사용할 수 없어 이중지불을 방지합니다.
  • 더 배경이 필요하다면 내부 글 “타임스탬프 역사” 를 참고하세요: 타임스탬프 역사 보기.

실생활 비유로 보는 UTXO

여러분에게 10,000원이 있습니다. 3,000원을 🧔🏻‍♂️Bob에게 보냅니다. 일반 계좌라면 10,000 - 3,000 = 7,000이 남습니다. UTXO 관점에서는 다음처럼 기록됩니다.

  1. 기존 10,000원 UTXO는 입력(Input) 으로 소비(사용됨)됩니다.
  2. Bob에게 3,000원 출력(Output) UTXO가 새로 생성됩니다.
  3. 수수료 0.001원을 제외한 잔돈 UTXO(6,999.999원) 가 여러분에게 생성됩니다.
  4. 차액 0.001원은 ⛏️ 채굴자 수수료로 간주됩니다.

“만원권을 내고, 3천원은 Bob에게, 6,999.999원권은 내 지갑으로 거슬러 받는다.”

UTXO의 동작 흐름

  1. 생성: 트랜잭션의 출력이 새 UTXO를 만듭니다(특정 주소로 잠금).
  2. 소비: 이후 트랜잭션의 입력이 기존 UTXO를 참조해 소비합니다.
  3. 검증: 이미 소비된 UTXO는 재사용 불가하여 이중지불을 방지합니다.
  4. 결과: 항상 “이전 UTXO 소비 → 새 UTXO 생성”의 상태 전이가 일어납니다.

UTXO의 구조(필드)

  • 금액(Value): 사토시 단위의 양
  • 소유자(ScriptPubKey): 비트코인 스크립트로 잠금 조건 표현(예: P2PKH)
  • 트랜잭션 ID(TxID): 생성 트랜잭션의 해시
  • 출력 인덱스(OutputIndex): 해당 트랜잭션의 몇 번째 출력인지

예시 1: Bob의 UTXO

{
  "Value": 300000000,
  "ScriptPubKey": "OP_DUP OP_HASH160 <Bob_PKH> OP_EQUALVERIFY OP_CHECKSIG",
  "TxID": "abcd1234ef567890...",
  "OutputIndex": 0
}

예시 2: 여러분의 잔돈 UTXO

{
  "Value": 699999900,
  "ScriptPubKey": "OP_DUP OP_HASH160 <Your_PKH> OP_EQUALVERIFY OP_CHECKSIG",
  "TxID": "abcd1234ef567890...",
  "OutputIndex": 1
}

입력 UTXO가 두 개의 출력 UTXO로 분기되는 구조도

잔고·세트·저장소 관점

  • 잔고 계산: 여러분의 모든 미사용 UTXO의 합입니다.
  • UTXO 세트: 네트워크 노드가 유지하는 “사용되지 않은 출력 목록”으로, 트랜잭션 유효성 검증의 기준이 됩니다.
  • 저장소 부담: 트랜잭션이 늘수록 UTXO 세트도 커져, 노드의 저장·처리 비용이 상승합니다.

스크립트(OP 코드) 핵심

아래 OP 코드는 UTXO 소비 시 소유권 검증조건 확인을 위해 사용됩니다.

연산자 코드설명
OP_CHECKSIG공개키·서명으로 트랜잭션 서명 유효성을 검증합니다. 일치하면 참입니다.
OP_EQUAL두 입력이 같으면 1, 다르면 0을 반환합니다.
OP_DUP스택 최상단 값을 복제합니다. 해시·검증에 재사용합니다.
OP_HASH160입력을 SHA-256 후 RIPEMD-160으로 해싱합니다.
OP_VERIFY최상단 값이 참이 아니면 스크립트를 실패로 처리합니다.
OP_EQUALVERIFYOP_EQUAL 후 결과가 참인지 즉시 검증합니다.
OP_CHECKMULTISIG다중 서명 조건을 확인해 모두 유효하면 참을 반환합니다.

요약 포인트

  • 소유권 검증: OP_CHECKSIG, OP_HASH160으로 주소·서명 확인.
  • 정확성 보장: OP_EQUAL, OP_VERIFY로 출력 조건을 단언.
  • 보안 강화: OP_DUP, OP_CHECKMULTISIG로 변조·다중서명 요구 충족.

장점과 단점 한눈에

장점

  • 보안성: 소모·잠금 모델로 이중지불 방지.
  • 병렬성: 독립 UTXO로 병렬 처리가 용이.

단점

  • 잔돈 증가: 매 트랜잭션마다 잔돈 UTXO가 늘어 복잡도 상승.
  • 저장소 부담: 네트워크 전반의 UTXO 세트가 커지며 비용 증가.

참고 링크

다음으로 읽어볼 글