Browse Tag: 비트코인

비트코인 네트워크(비트코인 P2P 프로토콜)

블록체인에 대해서 공부하면서 항상 블록체인 네트워크가 어떻게 구성되는지 궁금했다.

해답은 안드레아스 안토노폴러스의 Mastering Bitcoin(비트코인, 블록체인과 금융의 혁신) 이라는 책에서 찾을 수 있었다.(블록체인 책중 가장 구체적이고 잘 정리된 책)

기본적으로 비트코인 네트워크를 구성하는 클라이언트는 세가지로 나뉜다.

  • Full Client : 비트코인 거래정보(Full BlockChain)을 가진 클라이언트
  • LightWeight Client: 사용자의 지갑과 라우트 노드만 가진 클라이언트(거래정보는 가지지 않음)
  • Web Client : 웹 클라이언트를 통해 접속하며 제3자의 서버에 지갑을 저장

하지만, 실제 비트코인 네트워크를 구성하는 노드는 ‘라우팅’, ‘블록체인 DB’ , ‘채굴’ , ‘지갑’ 같은 기능에 따라 다양하게 나눠지는데 크게

  • Reference Client : 사토시 클라이언트라고도 불리는 클라이언트로 모든 서비스(지갑,채굴, BlockChain DB , 라우터 )를 가진 노드
  • Full Block Chain Node : Full Client의 노드로 전체 거래내역을 가진 Full Node (지갑은 없음)
  • Mining Node : 채굴 기능을 가진 노드
  • Lightweight Wallet :  거래내역을 저장하지 않고 지갑 서비스와 라우팅 서비스를 가진 노드

로 나눠볼수 있다.(이외에도 기능에 따라 다양한 노드가 존재)

이렇게 기능에 따라 구성된 노드들은 비트코인 네트워크에 참여하며 서로 연결되어 있는데 비트코인 네트워크에 연결되기 위해서는 최소 하나 이상의 이웃 노드와 연결되어야 한다. 이때 이웃 노드와 연결하기 위해서는 TCP 통신을 하는데 8333 port(일반적으로 비트코인 포트로 알려짐)를 사용해서 서로 연결된다. 최초 연결시에는 오랜기간 안정적으로 동작되고 있는 seed node 를 기본으로 연결하거나 IP를 사용해서 연결될 노드를 선택할 수 있다.

그리고, 최초 클라이언트 내에는 기본적으로 최초블록만 가지고 있는데 연결된 이후에는 Full Client 일 경우 이웃 노드와 블록의 Height를 비교해서 최신 블록을 받아오는 일련의 프로세스를 따르게 된다.

“거래 풀(Transaction Pool) / UTXO( Unspent Transaction Output ) 데이터베이스”

이렇게 비트코인 네트워크에서는 각 노드들이 연결되어 거래가 성사될 경우(Wallet A -> Wallet B 로 이동) 해당 거래 내역은 거래 풀로 들어가게 된다. 이 거래 풀에 들어간 거래는 미승인 거래로 아직 블록체인에 포함되지 않은 거래들이다. 마이닝 노드는 거래 풀에서 미승인 거래들을 모아 블록을 생성하게 되고 보통 생성된 블록 이후 6개의 블록이 생성되면(6개 블록이 생성된 이후에는 변조가 불가능한 것으로 판단) 거래 취소가 불가능한 상태가 된다.

블록체인 Intro

이글은 블록체인 구조와 이론을 읽으며 블록체인에 대해 공부한 내용을 요약한 것입니다.

Intro

  • 블록체인
    블록체인의 기술에 대해 공부하려면 4가지 기술에 대한 복합적인 이해가 있어야한다.
    1) ‘블록체인’ 그 자체에 대한 아키텍쳐
    2) 블록체인이 공유 되는 P2P 네트워크
    3) 어떤 블록을 accept 할지를 결정하는 합의 알고리즘
    4) Nonce 값을 찾아서 블록해쉬를 생성하는 해쉬

블록체인이 시작된 역사를 보면 블록체인은 비트코인의 분산원장을 구현하기 위해 사용된 기술이다. 그래서 위 4개의 기술들은 블록체인의 구현보다는 가상화폐의 구현 기술에 가까워 보인다. 그래서 혹자는 가상화폐 구현을 위한 4가지 기술이라고 이야기 할 수도 있다. 그러나 책을 읽으면서 느끼는점은 가상화폐(비지니스)에서 블록체인(기술)을 분리하는 방향으로 기술이 발전해 가고 있다는 것이다. 가상화폐는 블록체인을 이용한 비지니스라는 것을 인지하면서 4가지 기술에 대한 이해를 바탕으로 블록체인에 대해 이해해보려고 한다.

먼저 블록체인에 대해 알아보자. 네이밍만 따라서 이해한다면 블록을 체인으로 연결해놓은 그림을 그릴 수 있다.

하지만, 어떤 블록을 생성해서 어떻게 연결한다는 말인가?

답을 찾아보자면, 블록의 생성을 위해서는 합의 알고리즘이 그리고 블록을 연결하기 위해서는 전자서명과 해쉬를 이용해야 한다는 것이다.

잠깐 가상화폐 중 비트코인에 사용된 합의 알고리즘을 이용해 블록을 연결하는 과정을 살펴보자.

 

블록의 생성

비트코인은 Proof of Work(계산량에 따른 증명 , PoW)이라는 합의 알고리즘을 사용한다.

PoW를 극단적으로 설명하면 10분에 당첨자가 한명씩 나오는 로또가 있다고 가정하자. 이 로또는 특이하게 이미 당첨번호가 선정되어 있다. 그리고 로또 게임에 참여하는 사람은 모든 경우의 수를 고려해서 6자리 숫자를 만들어 나가며 당첨번호를 찾아간다. 그 과정에서 경우의 수를 빠르게 계산한 사람이 당첨번호를 찾으면 당첨금을 받아가고 그 사실이 전세계에 공표된다.

위의 로또 게임에서는 두가지 가정이 있다. 1)당첨자는 10분에 한명씩만 나온다. 2)당첨 번호를 가장 빠르게 찾는 사람은 당첨금을 가지고 갈 권리가 있다.

무슨 로또냐고 반문하겠지만, PoW는 CPU 파워를 이용해 10분(예시)에 한번씩 답을 찾을 수 있는 확률을 가진 해쉬 값을 찾는 사람이 블록을 생성하고 보상으로 비트코인을 가지고 가는 알고리즘이다. 이 알고리즘은 P2P 네트워크에서 비잔틴장군의 문제를 해결하는 대표적인 알고리즘으로 알려져 있다.(Intro에서 다 설명할수 없다 천천히…)

P2P 네트워크에서는 중앙집권식의 서버에서 작업에 대한 신뢰를 보장하지 않기 때문에 PoW에서는 CPU파워가 가장 높은 사람을 믿겠다 라고 이야기하는 것이다. 그리고 그 사람이 블록을 생성할 권리를 가지게 되는 것이다.

이렇게 블록은 생성 되었고 이전 블록과는 어떻게 연결하는지 알아보자

 

블록의 연결

생성된 블록에는 크게 앞블록의 정보 및 현재 블록의 정보(고정된 정보) 와 Nonce 라 불리는 해쉬 계산에 필요한 정답으로 구성되어 있다. 고정된 정보를 바탕으로 모든 경우의 Nonce 값을 계산해서 블록해쉬 값을 찾아야 한다.(SHA256 해쉬 함수를 적용해서 계산되는 값)

Nonce 값을 찾은 유저는 해당 블록을 블록체인 네트워크에 전파하고 각 노드는 새롭게 생성된 블록을 검증해서 로컬 블록체인에 추가한다. 결국 블록해쉬는 이전 블록의 블록해쉬값을 가지고 있고 이는 링크드 리스트처럼 블록을 연결하는 역활을 한다.

블록의 생성시 서로 다른 노드간 충돌에 대해서는 어떻게 관리할까? 간단히, 생성 후 많은 블록이 연결된 노드가 더 신뢰할 만하다고 판단한다.(충돌 트렌트 차트 – https://blockchain.info/charts/n-orphaned-blocks)

 

일단 마무리

글쓴이처럼 블록체인에 대해 이제 공부해보려는 사람이 많을 것이다. 하지만 정보도 많이 없고 정의도 제각각이고 개념은 어렵고.. 산넘어 산일수도 있다.(혹은 천재여서 다 이해할지도) 이 글에 담은 내용이 맞는지도 확신할 수 없다. 하지만 여러 reference를 바탕으로 스터디 한 내용을 공유한다. 그리고 잘못된 내용이 있다면 자유롭게 토론할 수 있었으면 좋겠다.

일단, 블록을 어떻게 생성하고 연결하는지에 대해 알아봤다. 다음에는 각 기술 요소에 대해 더 자세하게 스터디하는 글을 준비하겠다.

 

*출처 : 블록체인 구조와 이론, 예제로 배우는 핀테크 핵심 기술@위키북스,

https://homoefficio.github.io/2017/11/19/블록체인-한-번에-이해하기/