프로그래밍/블록체인

[해석서]Bitcoin: A Peer-to-Peer Electronic Cash System - 9. 금액의 결합과 분할

산을좋아한라쯔 2018. 4. 7. 21:16
반응형

비트코인에서의 거래는 일반적인 거래에서 표현하는 방법과 좀 다릅니다.

이번 절에서는 그러한 내용을 다룹니다. 아래는 논문 본문입니다.

9. 금액의 결합과 분할

코인들을 개별로 처리할 수도 있겠으나 그런 경우, 송금되는 모든 단위별로 거래를 분리해야 하기에 현실적이지 않다. 금액에 대해 쪼개고 합치는 것이 가능하게 하도록, 거래는 복수의 입금과 출금으로 구성된다. 일반적으로 입금은, 이전 거래로부터 받은 큰 금액의 단일 입금이거나, 소액으로 이루어진 여러 입금 값들로 구성되고, 출금은 최대 2개의 출금 값으로 구성된다. 출금 값 중 하나는 상대방에게 주는 지불이고, 만약 입력값대비 잔액이 발생한다면, 송금자 자신에게 되돌리는 출금이 발생한다.

 

한 거래가 여러 거래들과 연관되고, 그 거래들은 더 많은 거래들과 연관되는, 마치 부채꼴 모양의 의존관계가 생기게 되지만, 이는 문제가 되지 않는다. 거래 이력에 대한 완전히 독립된 사본을 추출할 필요가 전혀 없다.

 

비트코인에서 거래는 일반적으로 생각하는 거래개념과 약간 다릅니다. 일반적으로 현실에서 일어나는 거래는 "내 계좌에 있는" 금액을 누군가에게 송금하는 것인데 반해, 비트코인에서는 "누군가가 나에게 송금했던 금액들"을 모아서 누군가에게 주는 것입니다.

즉, 내 계좌가 존재해서 거기에 '잔액'이 존재하고, 그 잔액 중 일부를 송금하는 형태가 아닙니다. 내가 현재 가지고 있는 금액은, 모든 거래에서 '나'에게 보내졌던 금액들중 아직 쓰여지지 않은(다른 이에게 송금되지 않은) 것들의 합이고, 이러한 거래들이 단지 블록체인상에 '거래기록'으로 남아있을 뿐입니다. 따라서, 내가 누군가에게 송금하려고 하면, 나에게 송금된 내역들중 남아 있는 것들을 모아모아서 송금해야하는것입니다.

 

해서, 위 논문 내용에서 표현했듯이, 비트코인에서의 거래는 '여러 개의 입력'과 '하나 혹은 두개의 출력'으로 구성됩니다. 잘 이해 안될 수 있는데, 아래 그림을 보면, 어떤 내용인지 알 수 있을 것입니다.

 

 

 

 

 

위 그림에서 거래A는 '11'자신이 자기 자신('11')에게 15코인을, 타인인 '2'에게는 5코인을 보내는 거래이고, 거래B는 누군가가 '2'에게 3코인을 주는 거래입니다.

거래C는 '2'가 거래A와 거래B에서 자신에게 보내진 총8코인을 가지고 '3'에게 3코인을 송금하고 자신에게 4코인을 남기는 거래입니다. 그렇게 하면 입력 8코인중 7코인이 할당되고 1코인이 남게됩니다. 이렇게 (in - out)해서 남게되는 금액은, 이 거래를 블록에 삽입해서 블록을 만들어내는 이에게 수수료로 돌아가게 됩니다.

 

이처럼 비트코인에서는 거래에 있어서 하나 이상의 입력값과(1~n개), 하나 혹은 두개의 출력(out)으로 거래가 구성되게되는 것입니다. 출력이 하나의 경우는 어떤 다른이에게 송금을 하는 것이고, 출력이 2개의 경우는 하나는 다른 사람이고 나머지 출력은 자기 자신이 됩니다. 그리고 입력값이 항상 출력값보다 크거나 같아야하고 (입력합 >= 출력합), 입력합이 출력합보다 클 경우는, 그 차이분이 블록생성자의 수수료로 할당됩니다.

  •      입력 개수 : 1개 이상
  •      출력 개수 : 1개 or 2개
  •      입력 >= 출력
  •      수수료 = 입력합 - 출력합 

 

- 여기까지 -

 

[전체 목차]

1. 서론  
2. 거래(1/2)  
2. 거래 (2/2)
3. 타임스탬프 서버 
4. 작업 증명 
5. 네트워크 
6. 인센티브 
7. 디스크공간 회수 
8. 지불 입증 간소화 
9. 금액의 결합과 분할 
반응형