UTXO 동작 원리
트랜잭션 구조
UTXO의 동작방식을 이해하기 위해 트랜잭션 구조를 알아야한다.
먼저 트랜잭션 구조를 알아보자
- 트랜잭션 버전 : 트랜잭션 넘버
- 입력값 0 : 입력값 리스트 , Contains :
- List of Outputs (TXOuts),
- Look Time : Time boundary for spending
트랜잭션 버전 : 트랜잭션 버전은 네트워크에서 트랜잭션의 유형을 지정하는 버전 번호이다.
굳이 이렇게 나눠 놓은 이유는 -> 트랜잭션은 버전 별로 그 구조와 규칙이다르기 떄문에
Lock Time : 마지막 데이터는 잠금 시간(Lock Time)으로, 트랜잭션으로 블록체인에 바로 포함할 수 있는지, 아니면 지정된 시간이 지나면 포함할 수 있는 지정한다.
Inputs 과 outputs : 트랜잭션 버전과 잠금 시간 사이에는 입력과 출력 목록이 들어온다.
트랜잭션 버전과 잠금 시간 사이에는 입력과 출력 목록이 들어온다.
UTXO의 동작을 쉽게 생각해보자
트랜잭션의 출력은 지페를 사용하는 것과 같다. 우리가 5만원권 한장을 가지고 있는데 2만원 짜리 치킨을 사 먹기 위해 돈을
지불해야한다면 어떻게 해야할까?
지폐의 2/5를 잘라서 지불하는 것이 아니라 2만원을 제외한 3만원을 돌려받는다.
UTXO도 똑같다고 생각하면 된다.
트랜잭션 출력은 일종의 5만원권과 같다.
출력은 잠금과 값으로 구성되어 있고, 출력은 기본적으로 잠겨있다. 입력에는 잠금을 해제할 수 있는 키가 들어있다.값은 출력 내에 잠겨있는 사토시의 양이 있다.
입력은 지불할 치킨값과 비슷하다.
입력에는 포인터와 해제키가 들어있다. 포인터는 이전 트랜잭션 출력을 가르키고, 키는 포인터로 가리키고 있는 이전 출력을 해제하는 데 사용된다. 그리고 남은 3만원은 돈을 지불한 사람에게 돌려주어야 하므로 새로운 출력을 만든다.
즉 출력에는 자산이 잠겨 있고, 입력으로 출력을 해제하여 출력에 있는 값을 꺼내 새로운 출력에 자산을 담는다. 트랜잭션에는 다른 곳에 잠겨 있는 출력을 해제하는 입력과 입력의 결과로 생긴 새로운 출력이 담기게 된다.
따라서 트랜잭션은 이전 출력을 해제하고 새로운 출력을 만드는 추상적인 액션이라고 볼 수 있다.
UTXO는 잠겨 있는 비트코인 그 이상도 이하도 아니다.
UTXO는 코인을 담고 있는 상자이고, 다양한 양의 코인을 담을 수 있다. 만약 처음 비트코인을 가지게 된다면 블록체인에서는 UTXO를 하나만 가지고 있을 것이다.
트랜잭션이 일어나게 되면 누군가에게 코인을 전당해야하므로 UTXO 상자에서 코인을 모두 꺼내고, 새로운 상자에 지불해야 할 코인을 담아 전달하고, 다른 새로운 상자에는 남은 코인을 저장한다.
앨리스가 밥으로부터 자동차를 구매했따고 가정하면
자동차 가격은 6BTC이고 앨리스는 현재 10BTC를 가지고 있고 이 10BTC는 하나의 UTXO에 들어있다.
이런 경우 트랜잭션은 입력을 통해 우선 10BTC가 든 출력을 해제한 후에 두 가지 새로운 출력을 만든다.
하나는 밥에게 지불되어야 할 6BTC가 든 출력이고, 다른 하나는 앨리스에게 거슬러줄 4BTC든 출력이고, 지불이 완료되면 밥이 사용할 수 있는 6BTC를 담은 UTXO가 생성되고, 앨리스의 10BTC가 담긴 UTXO는 사용할 수 없게된다.
이렇게 생성된 새로운 출력들은 아직 다른 입력에 의해 해제되지 않았기 때문에 UTXO가 된다.
UTXO 모델은 트랜잭션 로직이 매우 단순하여 병렬적으로 여러 개의 트랜잭션을 동시에 검증할 수 있으며, 이로 인하여 확장성이 좋다는 장점을 가지게 된다. 그래서 단순하기 때문에 병렬적으로 트랜잭션을 검증할 수 있다.
이와 같은 매커니즘을 이용하여 비트코인에서 이중지불을 방지에 사용한다.
'블록체인' 카테고리의 다른 글
STO 튜토리얼 프로젝트 (0) | 2023.05.02 |
---|---|
Project_5Minute(토큰 이코노미 만들기)ERC-20토큰으로 NFT 구매하기 (0) | 2023.01.13 |
Project_MarketPlace 진행하면서 (0) | 2022.12.30 |
토큰 이코노미란 (0) | 2022.12.24 |
Web3.js 사용해보기 (1) | 2022.12.22 |