[암호화폐] utxo를 좀 더 쉽게 이해해보자

안녕하세요, goldenman입니다.

오늘은 오랜만에 암호화폐 얘기를 또 써볼까 합니다.

주제 키워드는 바로

UTXO


유.티.엑스.오.... UFO도 아니고 뭐 어쩌라고 싶나요?
일단은 unspent transaction output의 약어입니다.

더더더 뭐 어쩌라고 싶죠?

우선,
정의(justice 아니 definition)는

Unspent Transaction Output, UTXO
https://bitcoin.org/en/glossary/unspent-transaction-output

이곳에 간단하게 정의되어 있구요.

기술적인 내용은 우선 아래 땡글에 잘 정리되어 있습니다.

비트코인의 UTXO에 대한 자료입니다.
https://www.ddengle.com/bitcoindeveloper/989228

(위 링크로 들어가보니 연결된 doc이 현재는 존재하지 않네요 ㅜㅜ)

제가 굳이 기존의 자료를 두고 포스팅하는 이유는,
저 글을 봐도 (@_@) 표정이 요래 되는 분들이 많아서 최대한 쉽게 설명해보기 위함입니다.

일전에 HD 지갑에 대한 포스팅을 한 적 있는데요.

[가상화폐] HD wallet - 여러개의 주소를 사용하는 지갑
@goldenman/hd-wallet

저 글에서는 하나의 지갑(Wallet) 안에 여러개의 Address를 가질 수 있다고 설명드렸습니다.
이와 어느정도는 유사한데요 (당연히 똑같지는 않고요).
하나의 Address는 여러개의 utxo가 논리적으로 연결되어 있습니다.
즉 하나의 address가 가지는 코인의 갯수는 각각의 uxto에 기록된 갯수들의 총합과 같다는 얘기가 됩니다.

이것은 마치,
여러분들의 지갑에 수납공간이 여러개로 분류되어 있는 것과 유사합니다.

다른 비유를 들어보자면,
각각의 utxo는 특정 address를 소유주로 하는 기명 어음, 또는 수표라고도 할 수 있겠네요.

천원짜리 두장이 한 칸에 들어있고, 다른 칸에 오천원짜리 3장이 들어 있다면?
그 지갑에는 총 17,000원이 들어 있는 것이겠지요?

그림으로 예를 들어보면서 설명해 볼까요?

A 주소를 blockchain.info에서 검색해본다면,
총 13.4 BTC를 가지고 있는 것으로 표시가 될겁니다.

하지만 실제로는 각각의 5.2 / 1.7 / 0.5 / 6 짜리 방, 또는 어음(수표)가 A 주소의 소유아래 있는 상태인 것입니다.


* utxo의 생성



아니 그럼, 도대체 utxo는 언제 생성되는 것일까요?

여러분들의 지갑(address)으로 송금을 받으면 생성되고 연결됩니다.

즉, 위 상태에서 누군가 0.3 BTC를 송금해주었다면,

이렇게 새로운 칸이 늘어나고 거기에 0.3 BTC가 들어있게 됩니다.
좀 더 정확히 말하자면 0.3 BTC 짜리 칸이 먼저 생기고 (또는 0.3 BTC짜리 수표가 발행되고)
그것의 주인이 A 지갑임을 공식적으로 기재하게 되는 것입니다.

그리고 총 합은 13.7 BTC가 있게 됩니다.


* utxo의 소멸



다음 질문은, 그럼 utxo는 언제까지 존재하게 되나요?가 되겠죠.

utxo가 Unspent... 라고 위에 써 있었죠?
바로 소비되지 않은의 뜻인데요. Spent, 즉 소비해 버리면 더이상 utxo는 존재하지 않게 됩니다.

예를 들어볼까요?
위 그림 상황에서,
B에게 3.6 BTC를, C에게 2.5 BTC를 동시에 보내준다고 가정해 볼까요?

일단 합쳐서 3.6 + 2.5 만큼이 빠져나가야 되는데 딱 떨어지는 utxo가 없으니 기존 칸의 것을 나눕니다.

  • 일단 출금에 필요한 금액을 채우기 위해 "소비해야할" utxo들이 선택되고,
  • B에게 줄 3.6 짜리 utxo 하나 만들어서 B에게 보내주고,
  • C에게 줄 2.5 짜리 utxo 하나 만들어서 C에게 보내주고,
  • 남은 금액인 0.8 짜리 utxo 하나 만들어서 다시 A 자신에게 연결해주는,

transaction을 생성해서 블럭체인으로 내보내게 됩니다.
그리고 이 transaction이 채굴자들에 의해 confirm 받게 되면 송금은 완료되는 것입니다.

이때, 기존의 5.2 / 1.7 짜리 수표는 spent, 즉 긁어버린 문화상품권처럼 소비되어버린 유효하지 않은 존재가 됩니다.

네, utxo의 소멸은 곧 새로운 utxo의 생성으로 연결됩니다.



다만 소멸되는 갯수와 생성되는 갯수는 목적지에 따라 같을수도, 다를 수도 있겠습니다만,
금액의 총합은 늘 일정하게 유지 됩니다.

※ 단, 채굴로 인한 보상의 경우에는 無에서 새로운 utxo가 생성되어 채굴자의 주소에 주어집니다.
※ 단, 소각으로 인한 소멸의 경우에는 목적지 없이 utxo가 spent 되어 사라지게 됩니다.

구글에 utxo로 검색하면 나오는 대표적인 이미지들 중에 하나입니다.
이제 어렴풋하게라도 이게 무슨 그림인지 이해가 되시나요?


UTXO를 바탕으로 이해할 수 있는 유의할 점들



대부분의 일반적인 이용자들이라면,
사실 utxo 개념을 모르더라도 충분히 이용하기에 불편함은 없을지도 모릅니다.
하지만 가끔 이해되지 않는 상황들이나 갸우뚱(?)하게 되는 장면을 목격하게 될지도 모르겠지요.
몇몇 그런 예들에 대해 설명해 볼까요?

  • 송금 수수료의 비밀
    채굴하시는 분들은 소량의 금액을 자주 본인의 주소로 받게 됩니다.
    그럼 채굴보상의 횟수만큼의 utxo를 보유하게 되는데요.
    나중에 한 번에 다른 지갑으로 쌓인 금액을 보내려고 하면 수백, 수천개의 utxo를 한 번에 정리해야 됩니다.
    그런 경우, transaction이 담아야 할 정보량이 많아지고,
    결국 바이트당(길이에 비례해서) 수수료를 받는 비트코인의 경우에는
    평소에 보내는 때보다 2~3배의 수수료가 발생할 수도 있겠지요.

  • 그리고 코모도(KMD) 코인의 경우,
    이자지급이 10 KMD 이상의 utxo를 기준으로 지급되기 때문에,
    0.5 씩 100개의 utxo로 총합 50 KMD가 있더라도 이자를 지급 못 받을 수 있겠습니다.
    이런 경우라면, 자기 자신에게 50 KMD를 송금(transaction)을 발생시키면,
    100개의 utxo는 spent되고, 새로운 50 KMD까리 utxo가 발행되어 연결됩니다.
    이는 마치, 소분된 음식들을 한 통에 합쳐주는 효과와 같습니다.
    그럼 비로소 이 때부터 50 KMD에 대한 이자가 쌓이기 시작하겠지요.


혹시 오류나 잘못 서술된 부분이 있다면 지적부탁드려요 ^^
(저는 저를 제일 못 믿어서 ㅜㅜ)

제 글이 도움이 되었다면?!
↓↓↓ 아래 !!!VOTE UP!!! 부탁드립니다 ^^ ↓↓↓

H2
H3
H4
3 columns
2 columns
1 column
20 Comments