블록체인/비트코인(BTC)

트랜잭션과 UTXO

khao 2018. 5. 6. 05:59

트랜잭션(tx)이란 무엇인가?

트랜잭션은 다른 말로 '거래'라고도 한다는데 사용자가 얼마 주고 받았는지를 기록하기 때문에 거래라는 말로 쓰인 것 같다.

트랜잭션은 채굴자가 블록을 발견하게 되면 넣게 되며 블록 당 트랜잭션의 개수가 아닌 용량으로 정해진다. 그러므로 거래 정보가 큰 트랜잭션이 유난히 특정 시기에 많았다면 다른 블록들보다 트랜잭션의 개수가 적은 블록이 생성될 수 있다. 이 용량은 현재 1MB가 기준이다.

트랜잭션은 unconfirmed와 confirmed라는 두 가지 상태를 가질 수 있다.

unconfirmed는 거래가 되었지만 블록에 올라가진 못한 상태를 의미한다. 성사될 수 있는 거래라는 것은 알아냈지만 블록에 작성하여 확정되진 않은 상태와도 같다.

confirmed는 블록에 올라간 트랜잭션을 의미한다. 블록에 올라갔기 때문에 해당 트랜잭션이 담긴 블록을 가진 피어들이 모두 죽어버려서 없는 거래인 셈이 되지 않는 한 바뀔 수 없다.

하나 이상의 Input과 하나 이상의 Output을 생성하는 것이 트랜잭션인데 이는 상당히 중요한 개념이다.

트랜잭션은 크게 common tx, distributing tx, aggregating tx가 있다.


common tx는 1 : 1 관계이다. 'A가 10BTC를 갖고 있다'라는 내용이 input으로 들어오면 'A는 B에게 10BTC를 준다'가 output으로 온다.

참고로 input 금액이 너무 클 경우 잔액을 A에게 다시 반환해야 할 필요도 있는데 이 경우 'A에게 nBTC를 돌려준다'라는 output이 추가된다. 단, 이 경우는 자신에게 금액이 반환되는 것이므로 output이 두 개라고 보진 않기 때문에 common tx에 해당된다.

(단순하게 설명하느라 무시했지만 실제로는 수수료{fee} 때문에 input > output이 지켜져야 한다. 나머지 예제들도 수수료는 무시한다)


distributing tx는 1 : 多 관계이다. 'A가 10BTC를 갖고 있다'가 input으로 오면 'A는 B에게 5BTC를 준다'와 'A는 C에게 5BTC를 준다'가 output으로 올 수 있다. 일반적인 예제로는 급여 지급이 이 경우에 해당된다.


aggregating tx는 多 : 1 관계이다. 'A가 2BTC를 갖고 있다'와 'A가 1BTC를 갖고 있다'가 input, 'A가 B에게 3BTC를 준다'가 output으로 올 수 있다. 사실 input을 'A가 3BTC를 갖고 있다'로 주면 되는데 왜 두 개여야 하는지 의문을 가질 수 있는데 이것을 설명하기 위해서는 input으로 오는 것이 다른 트랜잭션의 정보를 기반으로 한다는 점을 이해해야 한다. aggregating tx를 이해하면 UTXO도 자연스레 이해하게 된다.



UTXO(Unspent Transaction Output)

트랜잭션이 가지는 output값을 의미하며 이는 돌려말하면 쓰지 않은 잔액 또는 선물 받은 사용하지 않은 금액이 될 수 있다.

단, 이를 단순히 선불 카드의 금액처럼 이해해서는 안되는데, 비트코인은 내가 가진 잔액을 기억할 방도가 없다. 그렇기 때문에 여태까지 나와 연관된 트랜잭션들을 기준으로 남은 금액을 알아낸다. 중요한 점은 내 잔액의 총합은 트랜잭션들을 합산해서 표시한다고 해도 실제로 트랜잭션들이 합쳐지는(하나로 뭉쳐지는) 것은 아니라는 점이다. 즉, 예전에 누군가 나에게 2.5BTC를 주었고 어제 1BTC를 주었다면 합은 3.5BTC지만 사용 단위는 2.5BTC와 1BTC 두 개가 된다. (마치 문화상품권 5000원권을 어떤 사이트에서 사용하고자 할 때, 금액을 분할하여 사용할 수 없는 것과 같다)



그렇다면 트랜잭션은?

트랜잭션들의 동작을 요약해보자.

하나 이상의 Input과 하나 이상의 Output을 생성하는 것이 트랜잭션이다. 

A -> B에게 10BTC를 주는 예제로 간단한 트랜잭션을 설명했는데 이 트랜잭션의 결과는 B가 10BTC를 갖는다는 뜻이다.

위 문장을 해석하면, Input으로 만들어낸 Output은 새로운 Input이 될 수 있음을 의미한다.

(A to B로 10BTC를, B to C로 5BTC를 보내는 경우 두번째 트랜잭션의 Input은 이전 트랜잭션의 Output이다)

트랜잭션 중에서 사용하지 않은 금액 정보를 가진 트랜잭션들을 UTXO라고 부른다.

UTXO는 문화상품권과도 같아서 해당 UTXO가 가진 output의 값을 단위로 돈을 지불하게 된다.

(7BTC를 결제해야 하는데 내 UTXO가 2.5BTC, 1BTC, 3.7BTC, 10BTC가 있다면, 10BTC 또는 2.5+1+3.7BTC를 지불해야 한다. 단, 잔액은 새로운 트랜잭션이 되어 돌려받게 된다. 10BTC를 냈다면 3BTC짜리 문화상품권이 생길 것이고 2.5+1+3.7BTC를 냈다면 0.2BTC짜리 문화상품권이 생길 것이다)