4. 비트코인의 원리(2)
비트코인의 합의 알고리즘
- 트랜잭션들을 묶어서 하나의 '블록'으로 패키징을 하고, 그 블록을 단위로 합의를 하기로 결정.
- 트랜잭션과 달리 블록은 전역적인 순서(global order)를 가지고 선형적(linear)으로 진행한다
- 각 블록은 마치 체인처럼 이전 블록을 참조(reference)함으로써 순서를 명시한다
- 각 참가자들의 금융 상태는 블록에 저장되고 계속 업데이트됨
→ 그렇다면 블록은 어떻게 네트워크에 전파되는가??
가십(gossip, epidemic) 프로토콜
: 각 노드가 이웃 노드에게 데이터를 전파하는 방법
→ 한 노드가 사라져도 연결이 끊기지 않음! (안정적)
But, 누가 블록을 만들 것이냐?
- 비트코인은 자유로운 개방형 네트워크이기 때문에 누구나 블록을 생성할 수 있어야 함 (독점, 조작, 검열 등을 방지)
- but, 아무나 블록을 만들 수 있다면 블록이 네트워크 상에 난무하게 됨. 즉, 각 블록이 서로 같은 금융상태(단일한 금융 상태의 블록체인)를 가질 수 없게 됨. (아직 모두에게 전파되기도 전에 또 새로운 블록이 자꾸만 만들어지니까)
→ 누구나 블록을 생성할 수 있으면서 + '단일한 최신 상태'에 도달할 수 있는 합의 알고리즘이 필요. (누구나 만들 수 있지만, 아무나 만들 수 없게)
→ Random Timer(비유적 표현)를 도입하여, 블록 생성 속도를 네트워크 전파 속도보다 의도적으로 늦추면 해결! (타이머가 끝나고 나야 블록 생성이 가능하게)
부연설명) 각 노드들은 서로 다른 랜덤 타이머를 가지고 있고, 운 좋게 타이머가 노드들 중 가장 먼저 끝난 노드가 블록을 생성하기 시작. 각 타이머의 평균 소요 시간은 블록이 네트워크에 전파되는 평균 속도로 설정하여, 타이머가 끝날 무렵이면 네트워크에 전파가 완료된 상황.(높은 확률로) 블록이 생성되면 각 노드들은 자신이 만들던 블록을 버리고 다시 새로운 블록을 만들어야 함
⇒ 그 랜덤 타이머를 만드는 방법이 바로, POW(Proof-Of-Work)
- 블록을 만들때 각 노드들에게 확률적으로 특정한 값(leading-zero)을 찾도록 만듦. (컴퓨팅 파워를 소비) → 값을 찾는 데 성공하여 sealing된 블록만 네트워크에 전파 가능.
- 블록의 논스(nonce)를 계속 바꿔 가면서 시도를 반복.
→ 채굴기가 많을수록 확률이 올라감
But, 이렇게 해도 블록이 다 전파되기 전에 새로운 블록이 생성될 확률이 있음
⇒ 체인 선택 규칙(Chain selection rule)
: 서로 다른 블록이 서로 경쟁하는 상태(race condition)을 유지 → 그 중 가장 긴 체인(canonical chain)을 선택.
나가모토 컨센서스(POW + Chain selection rule)에서는 정직한 노드가 가진 컴퓨팅 파워가 전체 컴퓨팅 파워의 절반 이상(51%)이면 안전하다고 본다. (정직한 노드가 절반 이상일 때 공격자가 6개보다 많은 블록을 생성할 확률은 거의 제로)
cf) 블록의 크기를 늘리고 인터벌을 줄이면 비트코인의 속도가 빨라지지 않나?
→ 블록의 크기를 늘리면 네트워크에 전파 속도가 느려지고, 인터벌이 늘어나게 됨. 반대로 인터벌을 줄이면 블록의 전파 속도가 빨라져서 체인이 하나의 단일한 금융상태를 가지지 못할 수 있음. 따라서 함부로 블록의 크기를 늘리거나 인터벌을 줄일 수 없음.
📌 본 컨텐츠는 유튜브 채널 <재윤tv>님의 영상 '블록체인의 원리 - 4. 비트코인의 원리(2)'를 참고하여 제작되었습니다.
'Block Chain' 카테고리의 다른 글
<블록체인의 원리> - 3.비트코인의 원리(1) (0) | 2022.05.27 |
---|---|
<블록체인의 원리> - 2.비트코인의 탄생(리먼 사태와 양적 완화) (0) | 2022.05.27 |
<블록체인의 원리> - 1.블록체인이란? (0) | 2022.05.27 |