ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알쓸신블] 제5장 UTXO
    알아두면 쓸모있는 신나는 블록체인 2019. 1. 2. 11:15
    UTXO는 Unspent Transaction Outputs의 약자로서, 미사용 트랜잭션 출력값을 말한다. 비트코인은 이더리움의 ‘계좌 잔고 모델’(Account Balance Model)과 달리 계정이나 잔고가 없고, 블록체인에 기록된 “소비되지 않은 출력값”을 통해 거래의 유효성을 검사하여 코인의 존재 여부를 확인한다.

    블록체인에서의 잔액 조회

    기존 은행시스템에서 송금 방식은 매우 간단 했다. 송금 신청을 하면 은행에서 ‘잔액'을 확인하고, 잔액이 있다면 상대방의 통장으로 송금을 해준다. 이런 변동 내역은 고스란히 DB에 저장 되고, 잔액을 확인하게 될 때는 단순히 이름에 매칭 되어 있는 잔액을 확인해 줄 것이다.


    비트코인에서 위와 같은 방식을 사용하게 된다면 문제가 생길 수 있다.

    • 현재 블록에는 n-1번째 블록의 정보가 있지만, 이전 블록의 정보는 Hash화 되어 있다. 즉, 과거의 내역을 ‘검증'할 수 있지만 과거의 내역들을 확인할 수는 없다.
    • 모든 Address에 대한 잔액을 갱신 시키며 블록을 생성하기에는 비효율적이다.

    그렇기 때문에 비트코인에서 특정 Address에 대한 잔액 조회는 Genesis Block 부터 현재 Block 까지의 검사가 필요하다.

    UTXO

    UTXO는 ‘소비되지 않은 거래 출력 값’을 의미한다. 이는 블록체인 네트워크의 인정을 받은 비트코인 통화 덩어리를 뜻하고, UTXO는 소유주에 대하여 암호로 잠겨 있다. 즉, 누군가의 ‘사용되지 않은 비트코인' 이다.

    [10.41 BTC가 들어 있는 기혁이의 지갑]

    • 기혁이의 지갑에는 10.41 BTC가 존재한다.
    • 10.41 BTC가 하나의 UTXO로 존재할 수도 있지만, 현재 기혁이의 지갑에는 1 BTC / 3 BTC / 6 BTC / 0.41 BTC 총 4개의 UTXO가 존재 한다.
    기혁이의 지갑

    [기혁이는 2.87 BTC로 비행기를 구매한다.(수수료는 없다고 가정하자.)]

    • 기혁이가 가지고 있는 UTXO에서 0.41 BTC/ 1 BTC/ 3 BTC UTXO를 사용하여 2.87 BTC를 채울 수 있지만, 이렇게 되면 3개의 UTXO를 입력해야한다.
    0.009BTC를 보내기 위하여 3개의 UTXO를 사용했다.
    0.008~~BTC를 보내기 위하여 1개의 UTXO를 사용했다.
    • Transaction에 UTXO가 많아 질 수록 크기가 커지고 이것은 수수료 증가를 의미한다.
    • 그렇기 때문에 한 개의 UTXO로 송금이 가능한 3 BTC UTXO를 선택하여 송금 한다.
    • 2.87 BTC는 ‘기혁(송신자)’의 입장에서는 더 이상 UTXO가 아닌 TXO가 되었고, 수신자 입장에서는 새로운 UTXO가 생성 된 것이다.
    • 잔액 0.13BTC는 다시 새로운 UTXO가 되어 기혁이의 지갑에 들어오게 된다.
    지불 후 지갑 상태

    GetBalance(“기혁")

    UTXO가 없다면 Genesis Block 부터 Current Block 까지 Transaction에서 To & From에 ‘기혁’이라는 주소가 포함되어있다면 +,- 하며 잔액을 계산해야 한다.

    하지만 비트코인에서는 Genesis Block 부터 탐색하며 ‘기혁'의 주소에 대한 UTXO만 검사하며 더하면 잔액을 찾아낼 수 있다. (‘기혁'주소의 TXO는 누군가에게 UTXO가 되었지만, ‘기혁'의 입장에서는 이미 사용 된 것이기 때문에 검사할 필요가 없다.)

    UTXO 효과

    [이중지불 방지]

    - Transaction을 발생 시키면 해당 UTXO는 검증을 받은 후 TX Pool에 들어간다. 그렇기 때문에 이중지불이 발생되면 Miner들은 Pool에서 UTXO를 검사 후 사용기록이 있다면 해당 거래를 무효화 할 수 있다.

    [잔고의 증명]

    - 개인의 비트코인은 개인의 지갑에 담겨있는 것이 아닌, 블록체인에 담겨져 있 다. 개인의 잔고는 Output 과정에서 소유자의 Public Key로 암호화 한다. 이 것을 복호화 할 있는 것은 소유자의 Private Key이다.

    - UTXO는 개인만이 사용할 수 있는 Output의 집합체이다.

    - 지갑에 표시 되는 잔고는 이러한 UTXO의 값들의 합이고, 지갑을 열 때마다. 블록체인을 검토하여, 실시간 표기한다.

    참고 문헌


    댓글

Developer RyuK