UTXO
비트코인에서 대중들에게 널리 퍼진 UTXO(Unspent transaction output : 아직 소비되지 않은 트랜잭션 결과물)라는 개념이 현재 다양한 블록체인 플랫폼들에서도 사용되고 있다. 다만 약간의 차이점들이 존재하는데 소유권 기반 및 계정 기반으로 각각 구분해서 이야기 해보려 한다.
소유권 기반 구분
1. 소유권이 확정되지 않은 UTXO
철수가 자신의 100원을 영희에게 80원을 주었을 때 이미 가지고 있던 100원의 기록은 영구히 저장되며, 영희에게 80원주었다는 기록과 자신에게 20원을 주었다는 (현실적으로는 남겼다가 맞지만 기술적으로는 거스름돈을 자신에게 준 것임) 기록이 새롭게 블록에 저장된다. 다시 말해서 철수의 100원이 20원으로 변한게 아니라, 100원에서 80원과 20원이 생성된것즉 UPDATE는 없고 ADD 와 DELETE 만 일어나는 방식을 불변성(immutability)을 가지고 있다고 한다. 이런 불변성 성질은 모든 UTXO에서 공통으로 가지고 있으며, 비트코인에서는 철수가 영희에게 건네준 80원에 대하여, 영희의 소비하지 않은 (보유하고 있는) UTXO라고 하며, 해당 비트코인 UTXO에서의 영희의 80원은 아직 소유권이 확정된 상태는 아니다. 영희는 그 소유권이 확정되지 않은 UTXO에 대해서만 소비를 할 수 있으며 그 80원을 다른 곳에 소비하려고 할 "때", 야 비로써 해당 소유권에 대한 증명을 해야 한다.
2. 소유권이 확정된 UTXO style
사실 상 거의 모든블록체인은 UTXO 개념이 이미 내포되어 있다고 생각한다. 예를들어 하이퍼레저 패브릭은 월드상태저장소에는 철수100->80, 영희 0 ->20 으로 업데이트 되더라도, 블록체인상에 100번 블록(철수:100, 영희 0) , 101 번 블록(철수80,영희20) 처럼 저장이 되므로 UTXO 틱하다고 말 할 수 있다. (즉 블록에 최종 저장된 형태는 블변형인데, 체인코드 상에서는 합쳐지거나 하는 행위가 자연스럽게 발생된다. Dapp에서는 UTXO모델이 불편하다고 하는 부분이다.) 여기서 철수가 영희에게 20원을 준다는 내용이 블록과 월드상태저장소에 기록되는 순간 20원은 영희의 것이라고 확정된다. 기술적으로 1번(비트코인) 은 "영희에게 20을 준다" 식으로 기록되며, 2번(패브릭)은 "영희의 계좌에 20이 더 해진다." 라는 식으로 기록된다.
월드스테이트 기반 구분
1. 월드스테이트가 없는 UTXO
비트코인에서는 계정이라는 것이 있지만, 계정에 잔액이 직접 연결되어 있지 않다. 즉 계정 100원이 계정 20원으로 업데이트 되는게 아니라, "누가 나한테 20원을 줬다" 라는 기록이 연결 될 뿐이다. 나는 그 20원 중 다른사람에게 10원을 쓰려면, 내 계좌 -10, 상대 계좌 +10 이 아니라, "상대에게 10원을 준다" , "나에게도 10원을 준다" 라는 불변형 트랜잭션만 기록에 남을 뿐이다. 즉 트랜잭션 기반이라고 볼 수 있을 것이다. (내부적으로는 좀 더 빠른 검색을 위해 연결시켜 둔 DB가 있긴 하다). 사용시에는 이미 말했듯이 "소유권이 확정되지 않은 트랜잭션(UTXO)에 대해서만" 소비할 수 있다.
2. 월드스테이트이 따로 있는 모형 (보통 UTXO 모델에 범주에 들어가진 않는다. 이것은 보통 Accounts 모형이라고 부른다.) 이더리움과 패브릭의 경우에는 블록체인이 "트랜잭션 저장소"과 "월드스테이트 저장소"라는 2가지 방식으로 운용되는데, "월드스테이트"에는 직접적으로 잔액이 연결되어 있으며 만약 20원을 받으면 내 계좌에 20이 업데이트 된다. 이것이 UTXO는 아니지만 동시에 "트랜잭션 저장소" 에는 불변형 기록이 남겨지게 되어 UTXO 틱한 행위를 하는데, 즉 체인코드(스마트컨트랙트)상에서는 합쳐지거나 하는 행위가 자연스럽게 발생되지만 블록에 최종 저장된 형태는 블변형이다라고 말 할 수 있다. 자신이 보유한 잔액을 사용시에는 "월드스테이트를 보고 누적된 잔액에 대해서는" 얼마든지 소비할 수 있다.