블록체인 네트워크에 최초로 연결하는 방법

Yesol Lee·2022년 3월 8일
0

블록체인

목록 보기
1/1

예전 개인적인 흥미로 블록체인 시스템에 대해 공부를 한 적이 있다. 블록체인은 탈중앙화된 P2P 시스템이라는 것은 알겠는데, 그럼 최초로 블록체인 네트워크에 들어가는 노드는 도대체 어떻게 연결되는 것인지 잘 모르겠어서 최근에 따로 알아본 내용을 정리한다.

결론부터

  1. 블록체인 네트워크의 모든 노드가 전체 거래내역을 가지고 있는 것은 아니다.
  2. 최초로 블록체인 소프트웨어를 다운로드, 실행하면 전체 거래내역 가진 풀 노드들의 주소 리스트를 얻을 수 있는 DNS시드(DNS서버)가 하드코딩 되어있다.
  3. 최초 실행 시 하드코딩된 DNS시드에서 받아온 풀 노드들의 IP주소 및 포트 번호를 이용해 메시지를 주고 받아 해당 노드가 활성화되어있음을 확인하고 해당 노드로부터 블록체인 데이터를 다운로드한다.
  4. 한번 연결된 주소는 디스크의 영구 메모리에 저장하기 때문에 최초 실행 이후부터는 DNS 시드를 통하지 않아도 피어 노드에 연결할 수 있다.

블록체인 네트워크


(사진출처: 미디어 블록체인의 기술 구성 - 플랫폼리스 미디어 블록체인의 기술 (1) )

  • 작업 수행 서버와 서버에서 데이터를 가져와 처리하는 클라이언트가 따로 존재하지 않음
  • 모든 노드는 서버이자 클라이언트의 역할을 수행
  • 노드는 가지고 있는 기능으로 구분 가능

노드의 기능 4가지

1. 지갑 (Wallet)

  • 개인 키(private key)와 공개 키(public key) 관리
  • 공개 키를 통해 거래에 사용되는 주소 생성

2. 채굴 (Miner)

  • 합의 알고리즘에 따라 거래 내용을 담은 블록 생성
  • 생성된 블록 메인넷에 연결하고 암호화폐 생성

3. 풀 블록체인(Full Blockchain)

  • 최초로 생성된 제네시스 블록부터 가장 최신 블록까지 모든 거래 내역을 담은 완전한 블록체인 복사본을 가진 노드

4. 네트워크 라우팅(network routing)

  • P2P 형태로 거래 정보를 송수신하는 통신 기능

기능에 따라 분류한 노드 종류 4가지

1. 코어 (Reference Client)

  • 모든 기능을 가진 노드

2. 풀 노드(Full Node)

  • 블록체인의 전체 복제본 가지고 있음
  • 탈중앙화된 저장소(스토리지)
  • 정보활용을 위한 빅데이터 분석기능
  • 채굴 노드에 의해 채굴된 블록의 유효성 확인 + 트랜잭션 검증 + 의사결정
  • 다른 노드들이 서로를 찾을 수 있도록 돕는 라우팅 연산 수행

3. 개별 채굴자 (Solo Miner)

  • 채굴에 특화된 노드
  • 합의 알고리즘
  • 동작 환경 : ASIC 등 강력하고 특수한 하드웨어 위에서 동작
  • 목적 : 새로운 블록 가능한 한 빠르게 채굴
  • 채굴 = PoW 퍼즐 풀기 : 즉 작업증명 시스템 사용하는 블록체인에서만 가능
  • 지분증명(proof of stake) 블록체인에는 채굴 없음

4. 지갑 (Lightweight wallet), SPV(Simplified Payment Verification)

  • 단순 거래 및 유효성 검증만 가능함
  • 인증: 탈중앙화된 본인인증 기술
  • 인터체인: 이종 암호화폐 교환 기술
  • 블록체인 전체 복사본은 없지만 일부 트랜잭션 검증은 가능
  • SPV는 풀 노드에서 데이터를 얻어옴
  • 하나의 풀 노드에 여러 개의 SPV가 연결될 수 있다.

블록체인에 참여한다고 해서 모든 노드가 전체 블록체인 거래내역을 전부 가지고 있어야 하는 것은 아니라는 것을 알았다. 그럼 최초로 Peer 노드를 찾아 연결하는 방법은 무엇일까?

비트코인 peer 찾기

1. 비트코인 코어란?

  • 비트코인의 공식 지갑 클라이언트 소프트웨어
  • 개인 PC에 다운로드해서 사용

2. 비트코인 코어에 하드코딩된 DNS시드

  • 일부 노드들의 주소를 알고 있는 DNS 서버
  • 비트코인 코어 최초 실행 시 시드 중 하나에 연결되어 블록체인 다운로드받을 풀 노드들의 주소가 담긴 리스트 반환
  • DNS 시드는 비트코인 커뮤니티 구성원에 의해 유지관리됨
  • 동적 DNS 시드 서버: 네트워크 검색해 활성 노드의 IP 주소를 자동으로 가져옴
  • 정적 DNS 시드: 수동 업데이트

3. 최초의 활성 peer 노드 ip 알게 된 후

  • 코어가 네트워크에 연결되면 피어는 네트워크 상 다른 피어의 IP 주소와 포트번호를 이용해 version 메시지를 보내면 대상 피어도 답신 메시지를 보내 현재 활성화 되어 있음을 알림
  • version 메시지: 버전번호, 블록, 현재시간 등이 담긴 메시지로 각 노드들이 서로 활성화되어있는지 체크
  • 그 후 현재 노드의 addr 주소 정보 등을 교환해 피어와 연결
  • 피어 노드에 메시지를 보낸 후 90분이 경과하도록 답신이 오지 않으면 연결이 끊어진 것으로 간주
  • 풀 노드와 BestHeight(각 노드가 가진 블록체인 데이터 길이)를 비교해 긴 것을 다운로드
  • 한번 알려진 peer에 대한 정보는 디스크상의 영구 데이터베이스에 보관되어 다음 실행부터는 DNS 시드 없이도 연결이 가능함

블록체인 프로그램을 설치하면 풀 노드들의 주소를 받을 수 있는 DNS시드가 프로그램에 하드코딩되어있다는 것을 알게 되었다.

참고글

미디어 블록체인의 기술 구성 - 플랫폼리스 미디어 블록체인의 기술 (1)
[Go로 구현하는 블록체인] Part 7: 네트워크
비트코인 개발자 가이드 - 7-01 동료의 발견(Peer Discovery)

profile
문서화를 좋아하는 개발자

0개의 댓글