11 / 736UTXO

UTXO

아직 사용하지 않은 트랜잭션 출력

Bitcoin에서 아직 쓰지 않은 개별 금액입니다. 잔액이 여러 금액으로 이루어지는 이유와 결제·수수료에 미치는 영향을 살펴봅니다.

UTXO는 이전 트랜잭션에서 만들어져 아직 사용하지 않은 금액입니다. Unspent Transaction Output의 약자입니다. 지갑에는 잔액 하나가 표시되더라도 그 안에는 여러 개별 UTXO가 있습니다. 주머니 속 현금이 여러 장의 지폐로 이루어진 것과 비슷합니다. 결제할 때 지갑은 어느 것을 사용할지 고릅니다. 하나의 주소도 여러 번 결제를 받아 서로 다른 UTXO를 여러 개 가질 수 있습니다.

UTXO 통합 계산기나중에 UTXO를 함께 쓰는 경우와 오늘 통합한 뒤 나중에 입력 하나를 쓰는 경우의 모델 수수료를 비교합니다.

70 000 sat과 50 000 sat의 UTXO 두 개, 총 120 000 sat이 있다고 가정해 봅시다. sat은 비트코인의 최소 단위입니다. 90 000 sat을 결제하고 수수료로 1 000 sat을 내려면 지갑은 둘 다 사용할 수 있습니다. 수신자에게 90 000 sat의 새 출력, 자신에게 잔돈으로 29 000 sat의 새 출력이 생깁니다. 원래 UTXO 두 개는 전부 소모되며 안에 일부가 남지 않습니다. 지폐로 결제하고 잔돈을 받는 것과 비슷하지만 금액이 정해진 액면가에 한정되지는 않습니다. 새 출력 두 개를 같은 주소로 보내더라도 합쳐지지 않고 별개의 UTXO로 남습니다. [2]

지갑은 추적하는 출력을 합산하지만 전부 바로 사용할 수 있는 것은 아닙니다. Watch-only Wallet은 결제를 관찰할 뿐, 직접 서명할 개인 키를 가지고 있지 않습니다. 다른 출력은 특정 시점까지 잠겨 있을 수도 있습니다. 블록의 첫 트랜잭션인 Coinbase Transaction에서 받은 보상은 정해진 성숙 조건을 먼저 충족해야 합니다. 아주 작은 금액은 기술적으로 쓸 수 있어도 수수료가 높을 때 사용 비용이 금액 자체보다 클 수 있습니다. 사용 가능 여부, 사용할 권한, 경제적 의미는 서로 다른 문제입니다. [1]

UTXO를 하나 사용할 때마다 트랜잭션에 입력이 추가되고 보통 데이터도 늘어납니다. 같은 수수료율과 비슷한 입력 유형이라면 작은 금액 여러 개를 쓰는 것이 큰 금액 하나를 쓰는 것보다 비쌉니다. Coin Control은 특정 UTXO를 직접 고르게 해줍니다. 이를 더 적은 수의 큰 금액으로 모으는 통합은 미래 트랜잭션을 줄일 수 있지만 지금 수수료를 내야 합니다. 프라이버시에도 영향을 줍니다. 입력을 합치면 관찰자가 같은 사람이 관리한다고 추정할 수 있습니다. 절대적인 증거는 아니지만, 이력을 따로 유지하고 싶은 자금을 자동으로 합치지 않을 이유는 됩니다. [2] [4]

주소만으로는 충분하지 않습니다. 각 출력은 트랜잭션 식별자 txid와 그 안의 출력 번호라는 한 쌍으로 식별됩니다. 이 참조를 outpoint라고 합니다. 출력 기록에는 satoshi 단위의 금액과 사용 조건을 적은 scriptPubKey가 있습니다. 확인된 출력에 대해서는 노드가 생성 블록 높이와 Coinbase Transaction에서 왔는지도 보관하여 성숙도와 시간 제한을 검사합니다. 주소나 outpoint를 안다는 것은 기록을 가리킬 수 있다는 뜻이지, 돈을 쓸 수 있다는 뜻은 아닙니다. 사용하려면 조건을 충족해야 합니다. [1] [2]

확인된 UTXO 집합은 특정 블록에서 끝나는 이력에 대응합니다. 노드는 미확인 트랜잭션의 대기실인 mempool까지 고려할 수 있습니다. 그 안에서는 알려진 출력 일부가 이미 사용되고 새 출력도 만들어지고 있습니다. 네트워크가 다른 유효한 이력 분기를 채택하는 재구성도 상태를 바꿀 수 있습니다. Bitcoin Core의 gettxout 명령으로 기술적 확인을 할 수 있으며, include_mempool 옵션은 대기 거래의 반영 여부를 정합니다. null 응답은 해당 관점에서 출력을 UTXO로 사용할 수 없다는 뜻일 뿐, 원래 없었는지 이미 사용됐는지는 구별하지 않습니다. 따라서 결과를 비교할 때는 노드 상태와 조회 방식 모두 중요합니다. [3]

예시 · UTXO

하나의 출력을 전액 지출하기

600 000 sat를 결제하기 위해 지갑이 1 000 000 sat UTXO를 선택한다고 가정합니다. 수수료가 1 500 sat라면 트랜잭션은 600 000 sat 결제 출력과 398 500 sat 거스름돈 출력을 만들고 원래 UTXO는 전액 소비됩니다.

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 트랜잭션, Full Node, Private Key, 지갑, Mempool. 다음 항목에서도 이 글을 참조합니다 Full Node, 트랜잭션, Private Key, 지갑.

01UTXO는 지갑 잔액과 같은 것인가요?

아닙니다. UTXO는 하나의 구체적인 출력이며 지갑은 추적하는 출력의 상태에 따라 잔액을 계산합니다. 표시된 총액을 모두 즉시 쓸 수 있는 것은 아닙니다. 네트워크는 변하는 하나의 계정 잔액이 아니라 출력과 지출 조건을 추적합니다.

02소액 UTXO가 많으면 왜 수수료가 늘어나나요?

선택한 각 입력은 데이터를 추가합니다. 입력 유형과 나머지 출력이 비슷하다면 여러 작은 UTXO를 쓰는 것이 하나의 큰 UTXO를 쓰는 것보다 더 많은 가상 바이트를 차지합니다. 따라서 sat/vB 단위의 요율이 같으면 보통 총수수료가 더 높습니다.

DOC · 001Bitcoin Core v29.0: transaction checks1차 출처 DOC · 002Bitcoin Developer Reference: Transactions1차 출처 DOC · 003Bitcoin Core v29.0: gettxout1차 출처 DOC · 004Bitcoin whitepaper: privacy1차 출처
개정일: 1차 출처 우선 · 투자 조언이 아닙니다