MODULE 2 (B) - CRYPTOCURRENCY TRANSACTIONS INTUITION
01. TRANSACTIONS AND UTXOS
블록체인에서의 트랜잭션과 UTXO에 관해서 알아보자.
UTXO는 Unspent Transaction Outputs의 약자로 미사용 트랜잭션 출력값을 말한다. 미지출 거래 출력이라고도 한다.
비트코인은 이더리움의 '계좌 잔고 모델'(Account Balance Model)과 달리 계정이나 잔고가 없고, 블록체인에 기록된 "소비되지 않은 출력값"(UTXO)을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.
각 지갑의 UTXO들은 해당 지갑 주인(소유주)에 대해 공개키 암호로 잠겨있다.
기존의 은행 시스템의 송금 방식은 송금을 원하는 사람이 송금 신청을 하면 은행에서 '잔액'을 확인하고 충분한 잔액이 있다면 상대방에게 송금한다.
이런 변동 내역은 DB에 저장되고, 잔액을 확인할 경우 이름에 매칭되어 있는 잔액을 확인해주는 것이다.
하지만 비트코인의 경우 은행 시스템 같은 방식을 사용하게 된다면, 현재 블록에는 n-1번째 블록의 정보가 있지만, 이전 블록의 정보는 Hash화 되어 있어 과거의 내역을 '검증'할 수 있지만 과거의 내역을 확인할 수 없다는 문제점이 있다. 또한 모든 주소에 대한 잔액을 갱신시키면서 블록을 생성하는 것은 비효율적인 일이다.
따라서 비트코인에서는 특정 주소에 대한 작액 조회는 Genesis Block에서부터 현재 블록까지의 검사가 필요하다.
UTXO를 이해하기 위해 임의의 트랜잭션을 가정해보자.
비트코인 사용을 시작한 후에 위와 같은 트랜잭션들을 받았다고 하자.
모든 트랜잭션으로 비트코인을 받았는데, 이런 것을 비트코인의 세계에서는 미사용 트랜잭션 출력값인 UTXO라고 부른다.
여기서 은행 시스템과 차이점이 발생한다.
은행 시스템에서는 한 번 트랜잭션을 보내면 끝이지만, 트랜잭션이 완료되면 어딘가에 기록되는 식이다.
비트코인의 경우 트랜잭션이 실행된 후 생성된 UTXO가 다른 트랜잭션을 만들 때까지 기록이 지속된다.
하나씩 살펴보자.
위에서 트랜잭션을 통해 받은 비트코인을 전부 받아 0.5 비트코인으로 자전거를 산다 가정해보자.
우리는 이를 위해 트랜잭션을 만들어야 한다.
즉, 돈만 사용하지는 않고, 트랜잭션을 선택해야 한다.
다시 말하자면, 입력값에 연결할 트랜잭션을 선택해야 한다.
이것이 비트코인에서 이해해야 할 중요한 부분중 하나인데, 모든 암호화폐에는 계좌에 돈이 있거나 하지 않는다.
우리가 가진 것은 블록체인과 모든 트랜잭션이며 모든 돈의 이동은 블록체인에서의 트랜잭션이다.
그래서 0.6 BTC를 받는 트랜잭션 하나를 선택할 것이다.
자전거 값은 0.5 BTC이기 때문에 0.1 BTC가 남을 것이다.
그런데 UTXO를 사용하는 즉, 거래를 위한 규칙은 미사용 출력값(UTXO)이 없어야 하는 것이다.
즉, 입력값에 들어간 모든 것은 미사용되면 안 되며, 입력값에 들어간 모든 것은 남는 것이 없이 전체 금액으로 출력되야 한다.
0.6 BTC가 있으니 0.5 BTC만 보낼 순 없는 것이다.
0.6 BTC를 전부 보내야 하고 다른 참가자에게는 보낼 수 있다.
그래서 0.1 BTC는 다시 나에게 보낼 수 있다.
그렇게 하면 이 트랜잭션은 사라지게 된다.
정확하게 말하면, 해당 트랜잭션은 미사용 트랜잭션 출력값인 UTXO가 아닌 것이다.
이제 자전거 가게의 UTXO와 나 자신의 UTXO로 두 개의 새로운 UTXO가 있다.
그래서 0.5 BTC를 보내는 트랜잭션은 자전거 가게의 UTXO로 들어가고 0.1 BTC를 보내는 트랜잭션은 나의 UTXO으로 들어가게 되고, 나는 자전거를 얻게 된다.
여기서 볼 수 있는 것은 UTXO의 리스트이며 0.6 BTC를 보내는 트랜잭션은 사라졌다.
하지만 내가 내 자신에게 보낸 미사용된 0.1 BTC를 보내는 트랜잭션 즉, 미사용 트랜잭션 출력값이 있는 것이다.
그래서 위와 같은 UTXO가 남았고 이것이 바로 잔고이다.
사실 잔고라는 건 없지만 일반적으로 잔고로 생각하며, 사실은 UTXO이다.
이것이 바로 트랜잭션과 UTXO의 원리이다.
장점
단점
모든 블록체인 프로토콜에서 UTXO를 기반으로 거래하지는 않는다.
즉, 프로토콜에 따라서 UTXO를 사용하기도, 사용하지 않기도 한다.
예를 들어 비트코인이나 라이트코인 등 가치를 주고받는데 사용하는 블록체인이라면 UTXO 방식은 유용하게 사용할 수 있다.
돈이 어디서 왔는지 쉽게 추척할 수 있고, 부정한 입력값을 쓰는 것은 아닌지 부정 여부도 알 수 있기 때문이다.
하지만 UTXO는 상태의 구분이 사용, 미사용
두가지 상태로 한정된다.
따라서 이더리움과 같은 스마트 컨트랙트를 표방하는 프로토콜의 경우 지금 돈을 사용하지 않았지만 조건이 맞다면 사용되어야 하는 일종의 중간 상태가 필요하다.
이 경우 UTXO 방식은 적합하지 않을 수 있기 때문에 계좌라는 방법을 통해 자금의 흐름을 파악하고 관리하는 식으로 운영되는 편이다.
http://wiki.hash.kr/index.php/UTXO
https://m.blog.naver.com/mage7th/221439829511