트랜잭션=비트코인 시스템에서 돈을 전송하는 단위
트랜잭션의 집합=하나의 블록
=> 블록=비트코인에서 합의의 단위
*블록 안에 들어오는 트랜잭션들은 모순되면 안됨
새로 생성되는 블록
=그 이전 블록 데이터의 요약본; 블록의 해시값 포함시킴
트랜잭션들을 처리하고 난 후에 state
=각 account들의 금융 상태
state를 기반으로 다음 블록에서 트랜잭션 생성
...
...
블록이 진행될수록 금융 상태가 블록 단위로 분절되어 업데이트 됨!
=> 최신 블록의 state = 현재 이 비트코인에 담긴 최신 금융 상태
=> 우리는 최신(current) 블록의 상태를 알아야 함
Q. 블록이 어떻게 네트워크 전파가 되는가?
-> 가십 프로토콜 사용
1. p2p 네트워크에서 각 노드가 이웃 노드에게 데이터를 전파하는 방법
2. 대역폭의 낭비를 줄이면서 데이터를 빠르고 안정적으로 전파 가능
노드들이 메세지 전파를 각자 이웃들에게 수행
절반까지 메세지를 받게 되는 시간은 매우 느리나, 우선 절반이 메세지를 받게 되면
나머지 절반이 메세지를 받는 시간이 매우 짧아짐!
=> 모두가 같은 금융 상태 보유하고 있게 됨
Q. 누가 블록을 만들 것인가?
-누구나 만들 수 있어야 함
(-) 단일한 금융 상태를 갖는 블록체인을 유지할 수 없음
= 경쟁 상태(race conditiobn)
=> 전체 네트워크의 90%의 노드에게 블록이 전파되기 전에 새로운 블록이 만들어지지 않도록 해야 함
=> 랜덤 타이머 설정!
: 랜덤 타이머가 아니면 모든 노드들이 한꺼번에 블록을 만들 것임
=> 누구나 만들 수는 있지만 아무나 만들 수는 없게 해야 함!
Q.랜덤 타이머 만드는 방법?
Proof-of-Work(작업 증명)
: 어떤 특정한 값을 만족할 때까지 논스(nonce) 값 조정
1. 블록을 만들 때 일정량의 컴퓨팅 파워를 소비하도록 만들어
그 컴퓨팅 파워를 이용해 확률적으로 어떤 값을 찾도록 만듬
2. 그 값을 찾은 노드가 블록을 만들 수 있음
; 값을 찾은 노드가 블록에 실링할 수 있음
3. 작업 증명은 그 블록에 봉인으로 작용
4. 실링 된 블록만이 유효한 블록으로서 네트워크에 전파될 수 있음
논스 값을 계속 바꾸면서 시행 반복
=> 올바른 논스 값 찾는 과정은 매우 확률적
=> 시행이 많을수록 블록을 찾을 확률 커짐!
=> 채굴기가 많을수록 블록을 만들 수 있는 확률이 높아지는 것
비트코인의 Proof-of-Work
-nonce를 포함한 블록헤더를 특정한 난이도로 계산되는 값보다 작은 값을 찾을 때까지 sha256 hash 함수에 대입
-찾은 hash 값 = 해당 블록의 block hash 값
-블록헤더가 이전 블록의 block hash값을 포함하기에 블록들은 순서를 가지며, 리스트 형태로 체인을 구성
-nonce값을 찾는 과정 = 채굴(mining)
=> 비트코인에서 누구나 블록을 만들 수 있지만 아무나 만들 수는 없는 것
블록이 네트워크에 다 전파되기 전에 우연히 새로운 블록이 나올 수 있음
=> 체인 선택 규칙
- longest chain rule: 가장 긴 체인을 선택하는 규칙
- reorganixation(reorg): longest chain rule에 의해 canonical chain이 바뀌는 현상
-비트코인에서는 이 리올그(reorg)가 자주 발생하지 않아야 안정적인 서비스 가능
'PBL Ⅲ > BlockChain' 카테고리의 다른 글
Hotel Reservation Smart Contract with SOLIDITY (0) | 2022.06.09 |
---|---|
[블록체인의 원리] 5. 비트코인 스크립트 (0) | 2022.06.04 |
Create a Simple Ethereum SmartContract (2) (0) | 2022.06.01 |
[블록체인의 원리] 3. 비트코인의 원리 (1) (0) | 2022.05.24 |
[블록체인의 원리] 2. 비트코인의 탄생 (리먼 사태와 양적 완화) (0) | 2022.05.24 |