UTXO

FeelSoo·2022년 8월 1일
0

UTXO ( Unspent Transaction Outputs ) 란 직역하면 미사용 트랜잭션

출력값으로 비트코인 계좌 역할을 한다.


( 엄밀하게 말하면 비트코인은 특정 개인의 지갑에 저장되지 않고 블록체인인

UTXO에 저장된다.

이더리움의 계좌 잔고 모델과 달리 계정이나 잔고가 없다. )



이번에는 UTXO의 트랜잭션 구조에 대해 알아보려 한다.

위와 같이 UTXO는 4가지의 구성요소를 가지고 있다.

  • 트랜잭션 버전(Transaction Version)

  • 입력값(Inputs)

  • 출력값(Outputs)

  • 잠금 시간(Lock Time)


1. 트랜잭션 버젼 :

트랜잭션 버젼은 네트워크에서 트랜잭션 유형을 지정하는 버젼 넘버다.

트랜잭션은 버젼 별로 구조와 규칙이 조금씩 다르다.

따라서 노드는 트랜잭션을 읽을 때 버젼 번호에 따라 값 해독 방식을 변경한다.


2. 입력 :

포인터(Pointer)와 해제키(Unlocking Key)가 담겨있다. 지불해야 할 값을

의미한다.

포인터는 이전 트랜잭션 출력을 가리키며

키는 포인터가 가리키는 출력을 해제하는데 사용된다.



3. 출력 :

비트코인 자산이 잠금 상태로 담겨있다.



4. 잠금 시간 :

트랜잭션 진행 이후에 블록체인에 언제 연결시킬지 설정할 수 있다.

정리하면 출력에는 자산이 잠겨있고, 입력으로 출력을 해체하여 출력에 있는 값

을 꺼내, 2가지의 새로운 출력을 만든다.

(1) 판매자에게 돌아갈 구매자의 구매 비용

(2) 구매자에게 돌아갈 구매자의 잔금 


다음의 예시에서 더 구체적으로 이해해보자.

앨리스가 밥으로부터 자동차를 구매했다고 가정해보자.

자동차의 가격은 6BTC이다.

앨리스는 현재 10BTC를 가지고 있으며, 이 10BTC는 하나의 UTXO에 들어있다.

이 때 트랜잭션은 입력을 통해 10BTC의 출력을 해제한 후

두가지 새로운 출력을 생성한다.

하나는 밥에게 지불될 6BTC 출력

다른 하나는 앨리스에게 거슬러줄 4BTC 출력이다.

이 새로운 출력들은 아직 다른 입력에 의해 해제되지 않았기에 UTXO가 된다.



UTXO 모델은 확장성이 좋다는 장점이 있다. 트랜잭션 로직이 매우 단순하기에 병렬적으로 트랜잭션을 검증할 수 있다.



다음으론 UTXO의 입력과 출력의 구조에 대해 더 알아보자.

입력 구조

  • Prev. Tx ID, TxIndex: 해제하고자 하는 이전의 출력을 가리키는 포인터

  • ScriptSig: 이전의 출력을 해제하는 키

출력 구조

  • ScriptPubkey: 잠금 설정 키.

    ScriptPubkey의 소유자(해당 공개키의 소유자)만이 ScriptSig를 만들 수 있다.

  • Amount: 잠긴 비트코인의 양(단위:사토시)

입력 구조에 있는 Prev. TxID와 TxIndex는 해제하고자 하는 이전 출력을

가리킨다. ScriptSig는 이전의 출력을 해제하는 키이다.

노드는 피어로부터 트랜잭션을 받으면 먼저 해당 트랜잭션 안에 들어있는 입력과

출력 목록에서 각 입력과 출력에 해당하는 ScriptSig와 ScriptPubkeys를

추출한다.

그리고 기존 블록들을 찾아보며 입력과 연결된 이전 출력을 찾고,

각 입력과 출력에 들어있는 ScriptSig와 ScriptPubkey를 연결시킨다.

ScriptSig와 ScriptPubkey는 각각 연속적인 정보를 담고 있다.

노드가 ScriptSig와 ScriptPubkey를 연결하고 연결된 전체를 파싱하면

온전한 스크립트 코드가 나타나게 된다.

노드는 이 코드를 단계별로 실행한다.

profile
세상은 넓고 배울건 많다

0개의 댓글