HyeM

[블록체인] 2_거래 본문

Study/BlockChain

[블록체인] 2_거래

Hailey_HyeM207 2020. 8. 19. 20:10

참고 책 : 엔지니어를 위한 블록체인 프로그래밍

 

Chapter 4 _거래

01. 거래의 생애 주기

거래 과정 : 생성 -> 서명 -> 전파 -> 블록 내 저장

   전파는 P2P 노드라 인접 노드에만 전파한다.

   거래 전달받은 노드는 거래가 특정 조건을 만족하는 검증한 다음,

      -> 조건 만족시 거래 전달한 노드에게 성공메시지를 보내고 다른 노드에도 전파한다.

      -> 만약 조건을 만족하지 못하면, 거래를 전달한 노드에게 파기 메시지를 보내고 다른 노드에는 전파하지 않는다.

 

 

예) 상황. B가 A에게 송금하는 거래가 전파되는 과정 

  1. B는 A에게 1BTC를 송금하는 내용의 거래를 생성하고, 전자지갑 속 비밀키로 거래에 서명한다.
  2. 밥은 이 거래를 인접한 노드에 전파한다.
  3. 거래를 전달받은 노드가 거래를 검증한다.
  4. 거래를 전달받은 노드가 거래를 검증 한 후, 그 결과를 해당 거래를 보낸 노드에 전달한다.
  5. 검증에 성공하면 자신과 인접한 다른 노드에 거래를 전달한다. 

02. 송금 과정

거래를 자세히 알아보기 전에, 비트코인에서 '소유권이 이동하는' 송금과정에 대해 알아보자.

 - 여러개의 출력을 입력으로 삼는 경우가 있음.

 

ex.

캐롤 ------1.0BTC(거래A)-----> 앨리스   -------0.3BTC(거래B)------> 밥

 

- 거래 A의  구조

거래 A
입력
FROM : 캐롤이 전에 비트코인을 송금받았던 거래의 출력
이브 : 1.0005BTC
 출력
출력 #0: 앨리스 1.0BTC(미사용) 
  수수료 : 0.0005BTC

송금에 필요한 수수료는 채굴자에게로 간다.

'(미사용)' 이라는 표시는 소유권이 앨리스에게 있다는 것을 나타내고, 실제로 이런 플래그가 있진 않다.

 

 

-거래 B의 구조

거래 B
입력 
FROM : 거래 A : #0
앨리스 1.0BTC
출력
출력 #0 : 밥 0.3BTC
출력 #1 : 앨리스 0.6995BTC
수수료 : 0.0005BTC

입력에 거래A : 캐롤이 앨리스에서 1.BTC송금한 거래

출력:

  밥에게 0.3BTC를 보내는 것과 수수료0.0005BTC를 합계(0.3005BTC)를 ,

  입력의 1.0BTC에서 뺀 0.6995BTC가 앨리스의 대한 거스름돈으로 포함된다. 

 

 

 

 

03. 거래의 구조

거래는 소유권 이동을 나타내는 데이터 구조를 갖는다.

 

-표: 거래의 구조

필드 필드 크기(바이트) 설명
Version No 4 따르고 있는 거래 버전 명기
Input Counter 1~9 입력수
입력 리스트  가변적 하나 이상의 거래 입력

Output Counter 1~9 출력 수
출력 리스트 가변적 하나 이상의 거래 출력
Locktime 4 유닉스 타임스탬프 값 혹은 블록 높이

 

출력에 수수료가 명시적으로 포함되지 않는다. 수수료는 채굴자에게 간다.

  수수료 = 입력 총액 - 출력 총액

 

Locktime :  거래가  '어떤 시점'까지 잠기도록(사용금지)하는 필드이다.

               Locktime은 부호 없는 정수값

  •   0 : 일반적으로 0이고, 0이면 거래가 잠기지 않고 바로 네트워크에 전파되어 블록에 저장된다.
  • 500000000 미만의 값 : 블록 높이 값을 잠그는 의미, 해당 블록높이에 이를때 까지 전파되지 않음
  • 500000000 이상의 값 : 타임스탬프 (unixtime)값으로 잠그는 의미, 이 시각이 되기 전까지는 전파되지 않음

즉, Locktime을 설정하면, 설정한 시점에 해당 거래가 비트코인 네트워크에 전파된다.

하지만 이는 반드시 보장되지 않아, CLTV가 도입되었다.

   Locktime : 거래 수준에서 유효성이 시작되는 시점제어

   CLTV : 거래의 출력 단위로 유효성 시작 시점 제어

 

 

4.4 UTXO와 잔액

UTXO : 거래의 미사용 출력을 말한다.

잔액 : 분산 장부에 저장되지 않고, 전자지갑에서 이 UTXO를 합쳐서 만들어진 잔액을 확인할 수 있다.

 

 

4.5 Locking Script와 Unlocking Script

내가 가진 비트 코인 = 내 비밀키로만 해제 가능한 자물쇠

자물쇠가 걸려있는 대상이 UTXO이다.

 

- 표 : 거래 출력의 구조

필드 필드 크기(바이트) 설명
Amount 8 satoshi 단위로 나타낸 비트코인의 액수
Locking Script Size 1~9 Locking Script 길이
Locking Script 가변적 출력의 잠금을 해제하는 조건을 기술한 스크립트

 

Locking Script : UTXO의 '자물쇠'에 해당하는 부분으로. 스크립트로 구성되어 있어서 해제조건을 만족하면

   스크립트가 UTXO를 참조하는 거래에 들어가게 된다.

 

- 표 : 거래 입력의 구조

필드 필드 크기(바이트) 설명
Transation Hash 32 참조할 UTXO를 포함하는 거래 해시
Output Index 4 참조할 UTXO의 거래 내 인덱스
Unlocking Script Size 1~9 Unlocking Script의 길이

Unlocking Script 가변적 UTXO의 Locking Script에 기술된 조건을 만족하는 스크립트
Sequence Number 4 Lockingtime의 값이 0보다 크거나, 치환 가능한 거래가 아닌 경우에는 일반적으로 0xFFFFFFF

 

Unlocking Script : 출력의 Locking Script를 푸는 스크립트로, Unlocking Script에 넣어둔(비밀키를 이용해 만든)서명 데이터로 열린다. 

=> 비트코인 네트워크의 경우 Unlocking Script가 해당 UTXO의 Locking Script에 명시된 해제 조건을 만족하는 지 검증하고 성공해야 유효한 거래로 간주 된다.

  - 거래의 종류에 따라 Locking Script와 Unlocking Script가 달라진다. 일반적 송금엔 Pay-to-Public-Key-Hash(P2PKH) 거래 타 입이 사용된다.

  - 스크립트는 간단한 스택 기반의 언어인 OPCODE 언어로 작성되고, 이를 통해 다양한 조건을 나타낼 수 있다.

    https://en.bitcoin.it/wiki/Script에서 자세한 내용 확인 가능.

 

 

 

 

 

'Study > BlockChain' 카테고리의 다른 글

[블록체인]  (0) 2020.08.18
Comments