일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Python
- leetcode 234
- 머신러닝
- 빅데이터를 지탱하는 기술
- Hadoop
- 컴퓨터구조
- Hortonworks Sandbox
- leetcode125
- 문자열 조작
- leetcode
- 배열
- 데이터레이크와 데이터웨어하우스
- leetcode 561
- leetcode 121
- MapReduce 실습
- ctf-d
- leetcode 344
- docker로 airflow 설치하기
- 블로그 이전했어요
- webcrawler
- 스파크 완벽 가이드
- leetcode 15
- airflow docker
- leetcode 49
- wargame.kr
- leetcode 937
- leetcode 5
- leetcode 819
- 올바른 변수명 짓기
- leetcode 238
- Today
- Total
HyeM
[블록체인] 2_거래 본문
참고 책 : 엔지니어를 위한 블록체인 프로그래밍
Chapter 4 _거래
01. 거래의 생애 주기
거래 과정 : 생성 -> 서명 -> 전파 -> 블록 내 저장
전파는 P2P 노드라 인접 노드에만 전파한다.
거래 전달받은 노드는 거래가 특정 조건을 만족하는 검증한 다음,
-> 조건 만족시 거래 전달한 노드에게 성공메시지를 보내고 다른 노드에도 전파한다.
-> 만약 조건을 만족하지 못하면, 거래를 전달한 노드에게 파기 메시지를 보내고 다른 노드에는 전파하지 않는다.
예) 상황. B가 A에게 송금하는 거래가 전파되는 과정
- B는 A에게 1BTC를 송금하는 내용의 거래를 생성하고, 전자지갑 속 비밀키로 거래에 서명한다.
- 밥은 이 거래를 인접한 노드에 전파한다.
- 거래를 전달받은 노드가 거래를 검증한다.
- 거래를 전달받은 노드가 거래를 검증 한 후, 그 결과를 해당 거래를 보낸 노드에 전달한다.
- 검증에 성공하면 자신과 인접한 다른 노드에 거래를 전달한다.
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 |
---|