UTXO, Unspent Transaction Output

Dahun Yoo·2021년 5월 24일
0

BlockChain and QA

목록 보기
1/5
post-thumbnail

비트코인과 같은 UTXO 계열의 Crypto에 대해, 왜 UTXO라고 하는지 조금 기재해볼까합니다.


Bitcoin에 대해 소유한다는 개념?

UTXO에 대해서, 조금은 추상적이지만, 토지 와 비교한 글이 있어서 해당 포스트를 인용하고, 말미에는 기술적인 내용도 조금 기재해보고자 합니다.

https://gendal.me/2014/03/29/welcome-to-bitcoin-island/

비트코인을 포함한 블록체인에 대해 공부하시다보면 UTXO에 대해 많이들 들어보셨을 겁니다. 그러나 해당 개념에 대해, 기술적으로 먼저 접근한다면 이해하기가 어려우실 수도 있습니다.
먼저, 토지 처럼 어떠한 비트코인을 소유 한다는 개념으로 생각하시면 좋을 것 같습니다.

비트코인 전체를 어떠한 토지 로 생각하신다면, 누군가가 소유하고 있는 땅은, 누군가가 소유하고 있는, 누군가가 사용한 비트코인으로 비유할 수 있을 것 입니다. 반대로 누군가가 소유하고 있지 않은 땅은, 누군가가 가지고 있지 않은, 사용하지 않은 비트코인으로 비유할 수 있습니다. 이 소유권이 없는, 사용되지 않은 토지 를 UTXO라고 생각할 수 있을 것 입니다.


많은 분들께서, 어떠한 Crypto의 address에 대해 잔고 라고 생각하시는데 이것은 약간 틀린 개념입니다. 우리가 생각하는 address의 잔고 라는 것은, 사용되지 않은 crypto의 집합입니다.
토지의 개념으로 돌아간다면, 우리는 특정 값어치가 매겨진 토지들의 합계를 우리의 이름(address)로 표현하는 것 뿐입니다. 단, UTXO의 특성상 우리는 이 토지를 쪼개서 사용하거나 합쳐서 사용하거나를 할 수 있습니다.

예를 들어, 여러분이 20 btc를 가지고 있다고 가정해보세요. 여러분의 비트코인 wallet software는, 20 btc의 잔액을 표시합니다. 그러나 사실 이것은 여러 utxo의 합계로 구성되어있을 가능성이 있습니다. 거래소에서 한 번에 20 btc를 구매하였다고 하여도, 실제로는 3개의 UTXO로 구성되어있을 수 있습니다. 7 btc, 7 btc, 6 btc로 3개의 소비되지 않은 트랜잭션으로 구성되어, 총 20 btc이나 3개의 UTXO를 가지고 있다고 할 수 있습니다.
여러분은 3개의 토지를 가지고 있다고도 말할 수 있습니다.


여기서 11 btc를 이용하여 중고차를 구매한다고 가정해봅시다. 11btc를 소비하고, 여기서 1 btc를 network fee로 소비한다고 가정해보고, 여러분에게는 8 btc가 남는다고 생각해봅시다. 여러분은 여러분이 가지신 UTXO를 사용하기 적합하게 병합하던지, 쪼개던지를 해야합니다.


X는 저의 잔액이고, Y는 지불할 금액, F는 네트워크 수수료로 소비될 금액을 나타냅니다.


추상적인 표현 대신에..

비트코인의 거래는 입력출력으로 구성됩니다. 우리가 Explorer상에서 특정 address 상에서 볼 수 있는 잔액은, 사실 입력된 btc의 총량과, 출력된 btc의 총량으로 계산됩니다.

대표적으로 비트코인에서 파생된 비트코인캐시, 라이트코인 등이 위와 같은 UTXO 계열의 Crypto라고 할 수 있습니다.

A라는 Address에서 B 라는 Address로 C btc를 보낸다

를 수행할 때, UTXO를 마음대로 보낼 수 없습니다. 기본적으로는 A address에서 C 값을 충족하는 가장 큰 UTXO를 소비하게 됩니다. 이때 소비하고 남은 값은 A의 새로운 UTXO가 됩니다. (소비하지 않고 남은 값)
적절한 크기의 UTXO를 사용하지 않으면, 작은 값의 자잘한 UTXO가 많이 생성되게 됩니다.
이 때 큰 값의 출력tx를 생성하게 된다면, 하나의 거래에 많은 양의 UTXO가 포함되게 되는데, 이렇게 되면 하나의 출력으로 합치면서 블록에 담아야하는 정보량이 늘어나면서 네트워크 수수료가 증가하게 되는 문제가 있습니다.


(화면에 출력되는 utxo 이외에도 25개의 다른 utxo도 전부 합쳐 하나의 output을 생성하였습니다.)

또한, 적절한 UTXO를 찾지 못한다면 Tx생성에 실패할 수도 있습니다.


(하나의 UTXO를 소비해서, 0.05 btc의 거래와, 나머지 금액의 UTXO가 생성되었습니다.)


Bitcoin core wallet에서 UTXO를 소비할 때.

Bitcoin core wallet에서 UTXO를 소비할 때는 몇가지 순서가 있습니다.

  1. 하나의 UTXO가 보내고자 하는 값 (C)에 정확히 일치한다면, 해당 값을 사용합니다.
  2. C값보다 작은 모든 UTXO의 합계가, C와 일치한다면, 사용합니다.
  3. C값보다 작은 모든 UTXO의 합계가, C값을 초과하지 않는다면, C보다 큰 가장 작은 UTXO를 사용합니다. 이 때 C를 보내고 남은 값은 A로 돌아와 새로운 UTXO가 됩니다. (소비되지 않은 값)
  4. 위에 해당되지 않는다면 (적절한 UTXO가 없다면), C값보다 크거나 같을 때까지, UTXO를 무작위로 합치는 동작을 진행합니다. 이후 정확히 일치하는 항목을 찾는다면 사용합니다. 그렇지 않다면 C값보다 큰 가장 작은 UTXO를 사용하게 됩니다.

Ref.

https://gendal.me/2014/03/29/welcome-to-bitcoin-island/
https://blog.lopp.net/the-challenges-of-optimizing-unspent-output-selection/

profile
QA Engineer

0개의 댓글