비트코인 네트워크에서 노드란?
: 라우팅, 블록체인 데이터베이스, 채굴, 지갑 서비스 등 기능의 집합체를 의미한다.
모든 기능을 다 수행 할 필요는 없고, 일부만 수행하는 노드들도 있다.
:모든 노드는 라우팅,
: 모든 노드가 동등한 위치에 있다. 하지만 각 각 역할이 다르다.
:풀 노드는 완전하고 가장 최신의 블록체인 복사본을 가지고 있다. 풀 노드는 외부 참조 없이도 독자적이고 신뢰할 수 있는 방법을 통해 어떠한 거래도 검증할 수 있다.
:SPV(Simplified Payment Verification) 노드는 라이트 노드 혹은 웨이트 노드라고도 불리운다. 블록체인의 부분집합만으로만 유지되는 노드이다. 이 노드는 단순지불검증(SPV) 방법을 이용해서 거래를 검증한다.
:채굴 노드는 채굴을 진행하는 노드이다. 작업증명(POW) 알고리즘을 푸는 전용 하드웨어를 실행해서 새로운 블록을 생성하기 위해 경쟁한다. 채굴 노드는 풀 노드인 경우도 있고 라이트웨이트 노드로 활동하며 풀 서버에 의존한느 경우도 있다.
:노드의 종류는 보통 해당 노드가 행하는 행동이나 맡은 역할에 따라서 나뉘어진다.
하지만, 역할에 따라 지위가 결정되지는 않고, 노드가 자의적으로 역할을 바꿀 수 있다.
:정보 전달 및 네트워크 동기화에 있어 지연시간(latency)을 최소화하기 위하여 고안된 방법
:비트코인 코어 개발자 중 한명인 Matt Corallo라는 개발자에 의해 소개되고 개발 되었음
:2015년에는 안정적으로 운영되는 특정 노드들을 선별하여 AWS에 호스팅 시켜 lataency 감소에 영향을 줌
곧이어, 2016년에 FIBRE(Fast Internet Bitcoin Relay Engine)를 개발하여 이전 버전을 대체함
:FIBRE는 UPD 기반 릴레이 네트워크이며, compact block optimization으로 데이터 공유량을 줄이고 이를 기반으로 network latency 역시 낮춤
:Bitcoin Relay netwokr는 bitcoin p2p network의 대체재가 아닌 보완재에 가까움
검색방법
핸드셰이킹은 정보기술과 전기통신 및 관련분야에서 채널에 대한 정상적인 통신이 시작되기 전에 2개의 실체 간에 확립된 통신 채널의 변수를 동적으로 설정하는 자동화된 협상 과정이다.
채널의 물리적인 확립이 잇따르며, 정상적인 정보 전송 이전에 이루어진다.
이웃 노드가 연결 요청을 승인할 경우 그에 대한 답으로 verack로 응답한다.
verack(version + acknowledgement)
이웃 노드는 클라이언트 목록에 기록된 종자노드를 이용하여 신속하게 네트워크 내 다른 노드를 검색한다.
종자노드
:종자노드는 오랫동안 안정적으로 작동하는 노드들의 리스트이다.
:dnseed로 조정한다(1이면 사용)
:시드 노드르 사용해서(-seednode) 이웃과 연결되었으면 자신의 ip address를 이웃에게 전송한다.
:이웃은 그 메세지를 그들의 이웃에게 메세지를 전송한다. 새롭게 연결된 노드는 getter를 통해서 이웃들의 ip주소 목록을받는다.
:일련의 과정을 거친후 다른 노드도 나를 검색 할 수 있게 된다.
spv 노드의 특징
:spv 노드는 블록 헤더만을 다운로드 받는 노드
:거래에 대한 정보가 없다는 것은 UTXO 기반 거래의 결과를 직접 검증(verify)하지 못한다는것 -> 풀노드의 도움을 받아야 한다.
:Full node의 경우에는 직접 본인이 보유한 데이터를 기반으로 검증할 수 있음
:SPV노드는 이와 다르게 경로를 기반으로 거래를 검증한다.
이를 위해 Full node에게 정보를 요청하고 받은 path로 검증