서론
현재 Go를 빠르게 익히기 위해 평소 관심만 가져왔던 Block Chain과 연계된 클론 코딩 강의를 듣고있다. 클론 코딩이라고 단순히 코드를 따라 쓰는 프로젝트에서 멈추지 않기위해 프로젝트 중 Go의 활용법이나 Block Chain기술들을 포스팅 하려 한다. 그리고 이 프로젝트로 Go와 Block Chain을 열심히 공부하여 Go를 통해 제작한 Block Chain의 원리를 간단히 알 수 있는 페이지도 만들어 볼 예정이다.
즐겁게 니콜라스의 강의를 들으며 블록체인을 만들어 가던 중 첫번째 벽에 부딪혔다. UTXO모델을 통해 유저간 트랜젝션을 기록하는 곳이 그 첫번째 벽이다. UTXO모델을 이해하지 못한다면 이후의 강의는 단순히 코드를 따라 치는 강의로만 남을 것 같아 이렇게 UTXO모델을 따로 공부하여 포스팅하고자 한다.
UTXO
UTXO 란?
UTXO(Unspend Transaction Output)는 거래를 검증 및 처리하기 위한 기법이고 소비가 되지않는 출력값이라는 뜻이다. 이는 비트코인, 퀀텀 그리고 레이븐코인 등에서 사용되는 검증된 체인 기법이다. 계좌를 만들어 값이 저장이 되어 관리되는 형식이 아니라 흩어져 저장 돼 있는 거래 자료를 모아 합쳐 이를 보여주는 방식이다.
이는 유효성을 확인하는데 장점이 있다. 거래를 저장하는 필드에 거래를 진행한 사람의 지갑 번호가 적혀있기 때문이다.
또한 Tx Pool을 통해 검증을 하기에 거래에서의 이중 지불과 같은 문제를 효율적으로 방지할 수 있다.
하지만 사용자 간 거래 뿐 아니라 채굴로 생기는 코인베이스 거래와 같은 형태의 다양한 거래 형태가 저장이 되기 때문에 불필요한 공간을 소비한다는 단점 역시 존재한다. 이로 인해 데이터를 처리하는 속도를 감소시키는 등 성능 저하를 일으킬 수 있다.
Value의 이동
Init :
A가 보유 한 값 : 1000
B가 보유 한 값 : 200
C가 보유 한 값 : 0
situation 1. A가 B에게 1000을 보내는 경우
TxPool
A가 보유 한 값 : 1000 input => A : 1000 A가 보유 한 값 : 0
B가 보유 한 값 : 200 -> -> B가 보유 한 값 : 200, 1000
C가 보유 한 값 : 0 output => B : 1000 C가 보유 한 값 : 0
situation 2. B가 C에게 1100을 보내는 경우
TxPool
A가 보유 한 값 : 0 input => B : 1000 A가 보유 한 값 : 0
B가 보유 한 값 : 200, 1000 -> B : 200 -> B가 보유 한 값 : 100
C가 보유 한 값 : 0 output => B : 100 C가 보유 한 값 : 1100
C : 1100
쌓여있는 output에서 전송해야하는 값과 크거나 같은 value를 가질 때 까지 input값으로 사용한다. 여기서 사용된 output값은 재사용이 불가하게 된다.
TxPool에 쌓여있는 트랜젝션은 다음 채굴시기에 각각 사용자에게 적용이 된다.
이 트렌젝션의 output값이 결국 사용자가 가지는 Value값이 된다.
'Study > Blockchain' 카테고리의 다른 글
[블록체인] 디지털 서명(Digital Signature) (0) | 2021.09.10 |
---|