미사용 트랜잭션 출력 (Unspent Transaction Output, UTXO)
미사용 트랜잭션 출력(Unspent Transaction Output, UTXO)은 아직 사용되지 않아 이후 트랜잭션의 입력으로 쓸 수 있는 블록체인 트랜잭션의 출력입니다. 아직 쓰지 않은 비트코인은 모두 UTXO 형태로 존재합니다. 블록체인에서 특정 주소에 속한 UTXO를 모두 찾으면 그 주소의 사용 가능한 잔액을 알 수 있으며, 지갑은 완전히 동기화된 뒤 이 잔액을 표시합니다.
UTXO는 어떻게 쓰이나요?
UTXO는 나누어 쓸 수 없고, 사용할 때는 통째로 소비됩니다. 트랜잭션은 하나 이상의 UTXO를 입력으로 가져와 모두 소비하고, 새로운 출력을 만듭니다. 새 출력은 다시 UTXO가 되어 다음 트랜잭션을 기다립니다.
- 예를 들어 1 BTC짜리 UTXO 하나를 가진 사람이 0.25 BTC를 보내면, 트랜잭션은 이 1 BTC UTXO를 입력으로 모두 소비합니다.
- 출력은 보통 두 개가 만들어집니다. 받는 사람에게 가는 0.25 BTC 출력과, 보낸 사람에게 돌아오는 잔돈 출력 하나입니다.
- 잔돈 출력의 금액은 입력 합계에서 지불액과 수수료를 뺀 값입니다. 수수료를 0.0001 BTC로 정했다면 잔돈은 0.7499 BTC가 됩니다. 입력 합계와 출력 합계의 차이가 채굴자의 수수료가 됩니다.
- 트랜잭션이 확인되면 1 BTC UTXO는 사라지고, 0.25 BTC와 0.7499 BTC짜리 새 UTXO 두 개가 생깁니다. 받는 사람의 지불 출력도 잔돈 출력과 똑같이 UTXO입니다.
지폐에 비유하면, 10달러 지폐로 3달러를 낼 때 지폐를 찢을 수 없으니 지폐 전체를 내고 거스름돈을 받는 것과 비슷합니다. 다만 비트코인에서는 거스름돈이 정해진 액면의 여러 장으로 나뉘지 않고, 원하는 금액의 출력 하나로 정확히 돌아옵니다.
UTXO가 비트코인 잔액을 결정하는 방법
비트코인 지갑은 자신이 관리하는 주소에 할당된 모든 UTXO를 추적합니다. 잔액을 계산하기 위해 지갑은 모든 미사용 트랜잭션 출력의 값을 합산합니다. 블록체인에 “계정 잔액”이 따로 기록되어 있는 것이 아니라, 흩어져 있는 UTXO의 합이 곧 잔액입니다. 이는 계정마다 잔액을 직접 기록하는 이더리움의 계정 모델과 다른 점입니다.
UTXO 사용의 장점
- 향상된 보안: 각 출력은 한 번만 소비될 수 있고 노드가 개별적으로 확인할 수 있어, 이중 지출을 간단하게 검출할 수 있습니다.
- 개인 정보 보호 개선: 트랜잭션마다 새 주소로 잔돈을 받는 등 출력을 나누어 관리하면 지출 패턴을 추적하기 어렵게 만들 수 있습니다.
- 회계 단순화: 개별 출력을 추적하면 블록체인에서 트랜잭션을 감사하고 확인하기가 더 쉬워집니다.
- 병렬 검증: 서로 다른 UTXO를 사용하는 트랜잭션은 서로 독립적이어서 검증을 나누어 처리하기 쉽습니다.
UTXO 사용의 단점
- 관리의 복잡성: 많은 수의 소규모 출력을 관리하는 것은 사용자 및 지갑 모두에게 부담스러울 수 있습니다.
- 더 큰 데이터 요구 사항: 노드는 검증을 위해 모든 미사용 출력의 목록(UTXO 집합)을 유지해야 하므로, UTXO가 늘어날수록 저장 공간과 메모리 요구량이 커집니다.
- 소액 트랜잭션의 비효율성: 여러 개의 작은 UTXO를 하나의 트랜잭션으로 합치면 입력이 늘어 데이터 크기가 커지고 수수료가 높아질 수 있습니다. 수수료보다 금액이 작은 UTXO는 사실상 쓰기 어렵습니다.
UTXO에 대해 기억해야 할 주요 사항:
- UTXO는 이전 비트코인 트랜잭션에서 아직 쓰이지 않은 출력입니다.
- UTXO는 사용할 때 통째로 소비되며, 남는 금액은 새 잔돈 출력으로 돌아옵니다.
- UTXO는 비트코인을 보내고 받는 데 사용되는 기본 단위입니다.
- 비트코인 잔액은 모든 UTXO의 합계입니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.