UTXO 이해하기
비트코인이 계좌 대신 미지출 거래 출력(UTXO)을 사용해 잔고를 추적하는 방식. 앞으로 만들 모든 거래의 기반입니다.
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 생애주기
- 탄생: UTXO는 확정된 거래의 출력으로 생성됩니다
- 존재: 모든 풀노드가 유지하는 UTXO 집합에 자리합니다
- 죽음: 새 거래의 입력으로 소비되어 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를 참조하는 방법을 배우세요.