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

in #coinkorea7 years ago (edited)

안녕하세요, 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 - 여러개의 주소를 사용하는 지갑
https://steemit.com/kr/@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!!! 부탁드립니다 ^^ ↓↓↓

Sort:  

좋은글 감사합니다.

Bitcoin has become and will be "digital" gold :)

nope. digital diamond!!!!!

감사의 맘을 담아 풀봇하고 갑니다~~!

우왓! 어마어마한 감사드립니다ㅜㅜ
엄청난 보팅의 경험은 늘 새롭네요^^

Nice summary post

thanks alot

좋은 정보 감사합니다!
utxo 는 개념이 좀 어렵군요. 두번 읽으니 좀 감이 오네요.

두 번이나 읽게 만들다니 부족한 글입니다ㅜㅜ
사실 코인판 중급이론이라 생각합니다^^
모르셔도 되요ㅎ

저번에 문의 했는데요 코모도 출금이 안되서 슈퍼넷에도 물어보고 해도 답이 나오질 않네요.. utxo가 Alternative send method 버튼을 끄면 Don't Send Transaction. Just give me signed transaction bytes. 버튼이 있고 Total UTXO available 업데이트 하라고 하는데 이거와 채굴하는거와 관련이 있나요 저는 채굴도 하고 트레이딩해서 지갑에 넣은것도 있는데 도무지 출금이 안되네요.. 채굴자는 다른작업을 해야 출금이 되는건지 모르겠습니다? Basilisk mode는 개인키를 내보내기 안해도 다른 컴퓨터에서도 된다고 들었는데... 다른컴퓨터에가서 해도 마찬가지입니다. 이러다 영영 지갑에서 돈을 못꺼낼까봐.. 식은땀이나네요..

너무 걱정마세요ㅎ

  1. 아가마에서 priv key를 export하세요
  2. komodo GUI 지갑 앱을 설치하세요.
  3. GUI 앱에서 1의 key를 import하세요. 그리고 앱을 새로 시작하세요.
  4. GUI 앱에서 블럭체인이 모두 싱크되고 잔액이 제대로 보일때까지 중간에 끄지 마시고 기다리세요. 로딩화면포함 2,3일 걸릴 수 있습니다.
  5. 그럼 GUI 앱에서 소액 송금 시도해보세요.

방법을 알려주셔서 감사합니다. 시도해 보겠습니다.
근데 혹시 켜놓고 2,3일 동안 컴이 혹시 꺼지거나 하면 코인이 다 날라가나요?
아님 다시 해도 되는건가요? goldenman님 감사합니다.
이거 때문에 스트레스가 너무 심했는데 그나마 해답을 찾은거 같아 다행입니다.

시드와 priv key만 잘보봔하시면 코인이 날라가는 경우는 없습니다. 걱정마세요. 다시하면됩니다만

아가마에서 private key를 export할려니까.. 그냥 문자로만 나오는데요.. 이걸 파일로 만들어야하는데 어떻게 저장을 해야할까요?

파일로 만들 필요없습니다.
gui앱에서 import single 어쩌고로 바로 text 값으로 임포트 가능해요.

좋은글 감사드리며~~ 오타 알려드려요~~
"즉 하나의 address가 가지는 코인의 갯수는 각각의 uxto에 기록된 갯수들의 총합과 같다는 얘기가 됩니다."
uxto가 아니고 UTXO~~~

우왓! 오타발견! 감사합니다!
하지만 아쉽게도 수정을 할 수 없군요 ㅠㅠ
블록체인의 힘이란 ㄷㄷㄷ
앞으로 오탈자 좀 더 확인해야겠어요!!!

완전 정리 잘되어 있네요! 보팅하고 갑니당!!ㅎㅎ

이런 지식들은 어디서 알게되시는지....
대단하십니다. 궁금한거 많이 풀렸어요!

오래전 포스팅인데도 댓글까지 주시고 감사드려요.
저도 몰라서 시행착오 겪으면서 찾아본거 기록한 것 뿐이에요 ㅎㅎㅎ
도움 되어서 저도 기분 좋습니다^^

Coin Marketplace

STEEM 0.19
TRX 0.13
JST 0.030
BTC 62028.87
ETH 3416.72
USDT 1.00
SBD 2.48