본문 바로가기
프로그래밍 관련/프로그래밍 관련 잡지식

비트코인에 대하여(2) utxo

by 존버매니아.임베디드 개발자 2021. 4. 21.
반응형

앞의 내용 복습
비트코인 세상에 존재하는 모든 데이터는 출금 기록이다.

a에게 10원을 보낸다.
b에게 7원을 보낸다.
a에게 5원을 보낸다.

따위의 기록들이다.

근데 누군가에게 돈을 보내려면 일단 내가 가진 돈이 있어야 그걸 누군가에게 보낼 것이다.

내가 가진 돈이란 무엇인가?
앞에서 봤던 기록을 다시보자

a에게 10원을 보낸다.
b에게 7원을 보낸다.
a에게 5원을 보낸다

만약 이 기록이 비트코인 세상에 존재하는 기록의 전부이고, 내가 a라면?
내가 가진 돈은 총 15원이다.

이때 위와 같은 출금기록 하나하나를 트랜잭션 이라고 한다.

한편 트랜잭션에는 utxo냐. 아니냐 라는 프로퍼티가 존재하는데, utxo란 unspent 트랜잭션 즉. 아직 지불이 안된 트랜잭션이라는 소리인데..
그니까 누군가의 잔액 조회할 때 계산에 포함되는 트랜잭션이라 할 수 있다.

예시를 들어본다.


비트코인 세상에서 계좌a의 잔액을 확인하는 방법은?

1.모든 블록의 트랜잭션을 조사한다.
2.트랜잭션에는 xx에게 xx를 보낸다.
라는 내용이 적혀있다.
3.그러므로 트랜잭션 중에 수신자가 a로 돼있는 트랜잭션을 찾아서 금액을 모두 더한다.

위와 같은 방법을 사용하면, 계좌a로 보낸돈 기록을 전부 search 해서 합치니까 잔액을 조회 할 수 있을 것이다.


근데 사실 이건 빼먹은게 있다. a가 받은 기록만 있고 a에서 밖으로 나간 금액이 없다.

예를 들어
b가 a에게 10원 보낸다
a가 c에게 5원 보낸다.

이 경우 a의 잔액은 5원이다.
그래서 잔액 계산 할 때는 수신자가 a로 되어있는 모든 트랜잭션을 찾는게 아니라 수신자가 a로 되어있는 utxo 트랜잭션만 찾아서 더해야한다.

utxo를 어떻게 구하는가? utxo는 각 계좌마다 존재한다고 보면된다.

특정 계좌 a로 입금되는 모든 트랜잭션은 계좌a의 utxo다.

c가 a에게 10원 보냄.
b가 a에게 6원 보냄.

위 상황에서, 계좌 a의 utxo는 위 두개의 트랜잭션 전부이다. utxo약자는 unspent다.
계좌 a에는 돈을 받기만하고 지출을 안했으니 둘다 utxo다.

근데 a가 abc에게 3원을 보낼일이 생겼다.
그러면 어떡하나?

a가 가진 utxo는
c가 a에게 10원 보냄.
b가 a에게 6원 보냄.

이다. 3원을 보낼려면.
첫번째 utxo(c가 a에게 10원 보냄)로 부터 출금 트랜잭션을 하나 만든다.

a가 abc에게 3원 보냄.
a가 a 에게 7원 보냄.

기존의 utxo(c가 a에게 10원 보냄) 은, 이제 더 이상 utxo가 아니다. 왜냐면 이 트랜잭션으로부터 두개의 트랜잭션이 새로 생겼으니까.. 이제 unspent가 아니라 spent다.
그래서 더 이상 utxo가 아니다.
대신 a 입장에서는 a가 a에게 7원 보냄이라는 utxo가 새로 생겼다.
그래서 기존에 존재하던 b가 a에게 3원 보냄이라는 것과 함께 다시 utxo가 2개가 되었다.

이렇게해서 이제
네트워크상에 생성된 트랜잭션은

c가 a에게 10원 보냄.(이제 utxo 아님)
b가 a에게 6원 보냄.(a의 utxo)
a가 abc에게 3원 보냄.(abc의 utxo)
a가 a 에게 7원 보냄.(a의 utxo)

4개가 됐다.

a의 잔액을 구할때는. a의 utxo 금액합계만 보면된다.
10원이다,

그리고 abc가 없던 돈 3원을 받아서
abc의 utxo는 3원이된다.




비트코인 세상에서 계좌의 잔액이란 무엇인가?
각 계좌의 utxo에 적힌 출금금액의 합계
또는,
이런 utxo들의 집합 그 자체

반응형