공대생 정리노트

4강 - Proof of Work, Consensus 본문

블록체인/MIT ocw : blockchain and money

4강 - Proof of Work, Consensus

woojinger 2021. 11. 27. 02:10

강의에서 나오는 article들을 읽지 않고 있었는데, 수업이 article들을 읽은 것을 전제 하에 진행되기 때문에 읽지 않고 따라가기가 힘들어 졌다.

매일 강의 하나씩 들으려고 했는데, 늦어지더라도 article들을 읽고 강의를 들으려고 한다.

article들도 읽고 정리해서 블로그에 적을 것이다


비트코인 주소

앞서 3강에서 나왔던 것처럼 비트코인 주소는 public key에서 파생이 된다.

지갑을 제어할 수 있는 private key에서 Elliptic Curve Multiplication을 통해 Public Key를 만든다.

Elliptic Curve Multiplication에 대해서는 따로 다루지 않았다.(one way function을 만드는데 사용되는 것 같다)

이후 Public Key에서 두 개의 Hash 함수를 거쳐 Public key Hash를 만들고, 이를 다시 인코딩 해서 비트코인 주소를 만든다.

 

Decentralized Networks - Byzantine Generals Problem

기대를 많이 하고 들었었는데, 자세하게 다루지는 않았다. article을 읽어야 할 것 같다. 

-> 추후 article을 읽고 요약을 해보겠다

 

간단하게 말하자면 모르는 참가자들이 참여하는 블록체인에서 잘못되는 정보들이 있을 때 어떻게 컨센서스를 형성하냐의 문제이다.

블록체인에서는 이를 Consensus protocol, Native currency로 해결을 한다.

 

비트코인에서 사용하는 Consensus protcol은 바로 PoW라고 부르는 Proof of Work이다.

Proof of Work은 1997년에 스팸 메일을 방지하기 위해 발표가 되었었다.

해시함수를 통해 나온 아웃풋의 앞자리 0이 일정 수를 만족하는 인풋을 찾아야 메일을 보낼 수 있게 만드는 것이었다.

메일을 보내는 사람은 시간이 걸리는 일이지만 검증하는 사람은 쉽게 검증을 할 수 있다.

스팸 메일을 보내는 사람은 메일을 보낼 때마다 computing power를 소비하게 되어 부담이 될 것이다.

 

비트코인도 이와 비슷한 방식을 사용한다.

지난 블락 헤더의 Hash값 + 트랜잭션 Hash(Merkle Tree) + Timestamp + Nonce를 더한 값을 SHA256 해시함수에 넣어 0의 개수가 difficulty를 만족하는 블락을 찾아야 한다.

Nonce를 제외한 값들은 이미 알고 있는 값이니 Nonce를 찾아야 하는 것이다.

해시 함수의 특성 상 인풋이 조금만 바뀌면 아웃풋도 크게 변하는데, 이로 인해 어떤 블록의 데이터를 바꾸면 Hash 값이 크게 변하게 되고, 그 블록의 Hash 값을 바탕으로 만든 블록들의 체인도 망가지기 때문에 쉽게 검증할 수 있다.

 

Bitcoin Proof of Work Difficulty

- 블락을 만드는데 평균 10분이 걸리게 하도록 Difficulty를 맞춘다

- Difficulty는 Hash 아웃풋이 몇 개의 0의 개수를 맞추느냐로 정의된다.

- 2016개의 블락이 생성될 때마다 조정된다(약 2주마다)

제네시스 블록(첫 블록)의 leading zeros는 10개였지만 강의 시점인 2018년에는 18개의 leading zeros를 맞춰야 한다. (지금은 더 많겠지?)

 

Native Currency

블락을 생성한 노드에게 50 비트코인을 보상으로 지급했다.

보상으로 지급하는 비트코인은 반감기가 있어 210,000 블락이 생성될 때마다 보상으로 지급되는 비트코인이 반으로 준다.

강의 시점에서는 블락당 12.5 비트코인이 지급되었다.

 

Network

Full Node

모든 블록체인을 저장하고 있으며, 모든 트랜잭션을 검증 할 수 있는 노드를 말한다.

Lightweight Node

Simplified Payment Verification (SPV) 노드라고 한다. 블록체인의 헤더들만 저장하고 있는 노드이다.

Miners

Proof of Work를 수행하고 Block을 만드는 채굴자이다. 채굴자는 꼭 Full Node일 필요가 없다. Miner의 대부분 Mining Pool에 속해 있는데, Mining Pool Operator만 Full Node가 있으면 검증은 Operator가 해주면 되기 때문이다.

Mempool

아직 validate 되지 않는 트랜잭션을 모아놓은 풀이다.

 

 

Comments