UTXO 이해하기

비트코인이 계좌 대신 미지출 거래 출력(UTXO)을 사용해 잔고를 추적하는 방식. 앞으로 만들 모든 거래의 기반입니다.

0단계 ·

진행률 0/0

무엇을 배우는가

  • UTXO 모델이 계좌 모델과 어떻게 다른지
  • UTXO가 무엇을 포함하고 어떻게 식별되는지
  • 주어진 주소에 대해 쓸 수 있는 UTXO를 찾는 방법

계좌 모델 vs. 코인 모델

대부분의 금융 시스템은 계좌 모델을 사용합니다. 은행은 행을 저장합니다: Alice: $5,000. Alice가 Bob에게 $200를 지불하면, 은행은 Alice에서 빼고 Bob에게 더합니다. 단순하지만 신뢰받는 중앙 원장이 필요합니다.

비트코인은 코인 모델을 사용합니다. 어디에도 "잔고" 필드가 없습니다. 대신 네트워크는 개별 코인 - 미지출 거래 출력(Unspent Transaction Outputs, UTXO) - 을 추적합니다. 당신의 지갑 잔고는 당신의 개인키가 쓸 수 있는 모든 UTXO의 합계입니다.

계좌 모델UTXO 모델
중앙 원장이 잔고 추적잔고 없음 - 코인만
계좌당 항목 1개주소당 UTXO 여러 개
빼기와 더하기소비와 생성
순차 처리 필요병렬 검증 가능

UTXO의 해부

모든 UTXO는 두 가지 데이터로 고유하게 식별됩니다:

  • 거래 ID (txid): 이 출력을 생성한 거래의 32바이트 해시
  • 출력 인덱스 (vout): 해당 거래의 몇 번째 출력인지 (0, 1, 2...)

함께 txid:vout은 특정 코인의 일련번호와 같습니다. UTXO 자체에는 다음이 포함됩니다:

txid:    a1b2c3d4e5f6...  (32 bytes)
vout:    0                 (output index)
value:   50000             (satoshis = 0.0005 BTC)
script:  OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

script 필드(ScriptPubKey 또는 잠금 스크립트라고 부름)는 이 UTXO를 쓰기 위해 필요한 조건을 정의합니다. 표준 P2PKH 출력의 경우, 지출자가 해당 개인키의 소유권을 증명해야 합니다.

UTXO 생애주기

  1. 탄생: UTXO는 확정된 거래의 출력으로 생성됩니다
  2. 존재: 모든 풀노드가 유지하는 UTXO 집합에 자리합니다
  3. 죽음: 새 거래의 입력으로 소비되어 UTXO 집합에서 영구 제거됩니다

UTXO는 한 번만, 전체가 쓰일 수 있습니다. 1 BTC UTXO가 있고 0.3 BTC를 보내고 싶다면, 전체 1 BTC를 소비하고 두 개의 새 출력을 만들어야 합니다: 수취인에게 0.3 BTC, 그리고 자신에게 거스름돈으로 ~0.6999 BTC.

내 UTXO 찾기

Bitcoin Core의 CLI를 사용하면 쓸 수 있는 UTXO를 나열할 수 있습니다:

bitcoin-cli listunspent

# Returns:
[
  {
    "txid": "a1b2c3d4...",
    "vout": 0,
    "address": "bc1q...",
    "amount": 0.00050000,
    "confirmations": 144,
    "spendable": true
  }
]

우리 거래를 위해서는 보내려는 금액에 거래 수수료를 더한 총액을 커버하는 하나 이상의 UTXO를 골라야 합니다.

왜 이것이 거래 구축에 중요한가

모든 거래 입력은 기존 UTXO에 대한 포인터입니다. 다음 단계에서 거래를 구성할 때, 우리가 먼저 필요한 것은 쓰고 싶은 UTXO의 목록 - 그것들의 txid, vout, 그리고 value - 입니다. UTXO를 이해하지 못하면 나머지 과정은 불가능합니다.

핵심 요점: 비트코인 거래는 계좌 간에 돈을 옮기지 않습니다. 오래된 코인을 파괴하고 새 코인을 주조합니다.

다음 단계

거래 입력 구축으로 계속해서 거래의 입력으로 UTXO를 참조하는 방법을 배우세요.