파이썬으로 배우는 블록체인 구조와 이론 — 1장 비트코인 네트워크의 개요(2)

Siwoo
Quantum Ant
Published in
5 min readJul 17, 2019

6.비트코인 네트워크의 구성원

비트코인은 P2P 네트워크이므로 사전에 정해진 합의규칙만 따른다면 누구나 자유롭게 참여할 수 있다. 비트코인 네트워크의 구성원은 풀(full) 블록체인 노드, Lightweight 노드, 채굴자(miner) 노드로 구성된다.

추가로 서드파티(3rd-party) API 클라이언트의 형태도 있을 수 있다. 서드파티 API 클라이언트는 안전성 문제 때문에 비트코인 네트워크의 기본 구성원이라고 할 수는 없다.

구성원들은 어떤 소프트웨어를 운용하느냐에 따라 풀 노드가 될 수도 있고, 채굴자 노드가 될 수도 있다.

풀 노드가 관리하는 블록체인에는 모든 거래 내역이 저장된다. 블록체인은 거래 내역들의 집합체이므로 공공 거래 원장 혹은 공공 거래 장부라고 한다,

7. 각 노드의 기능

풀 블록체인 노드(풀 노드)

풀(Full) 노드는 블록체인 데이터 전체를 관리하는 노드다. 채굴자 노드는 최근 트랜잭션(Tx)이 담긴 새로운 블록을 생성하고 네트워크로 전파한다. 풀 노드가 이 블록을 받으면 합의 규칙에 따라 유효성을 검증하고 기존 블록체인에 연결한다.

Lightweight(SPV 노드)

Lightweight 노드는 Simplified Payment Verification(SPV) 노드라고도 하며, 블록체인 전체가 아닌 블록의 헤더 정보만 가지고 있다(헤더체인), 새로운 블록이 생성되면 풀 노드로부터 블록 헤더를 받아 자신의 헤더체인에 연결한다.

SPV 노드는 자신이 가지고 있는 블록 헤더 정보와 풀 노드로부터 받게 될 머클 블록(Merkle block)을 이용해 자신의 트랜잭션이 특정 블록에 포함됐는지 여부를 판단한다.

SPV노드는 풀 노드에 비해 안전하지는 못하다. 풀 노드에 의존해야 하므로 자신의 주소가 노출될 수 있어 공격의 대상이 될 수도 있다.

채굴자 노드

채굴자 노드는 블록체인 네트워크를 유지하는 데 필수적인 구성원이다. 채굴자는 각 노드가 보내는 트랜잭션들의 유효성을 검증하고 이들을 모아서 새로운 블록을 생성한 후 풀 노드를 전송한다. 풀 노드는 이 블록의 유효성을 재차 검증하고, 검증을 통과하면 이를 기존 블록체인에 추가한다.

8. 참여자 노드 현황 관찰

https://bitnodes.earn.com/에서 비트코인 네트워크에 상시 접속된 노드의 수를 알수 있다. 상시 접속된 노드들은 대부분 풀 노드이다.

2019년 7월 현재 상시 접속된 노드의 수는 9794개이다.

최근 10일동안 활성화된 풀 노드 수의 변화
최근 10일 동안 활동 중인 노드 수의 변화

파이썬 실습을 통해서 최근 10일 동안의 활중 중인 노드 수의 변화를 확인해 보았다. 이 노드들이 비트코인 네트워크의 기반이 되는 참여자들이다.

9. 블록체인의 구조

블록은 바디(body)헤더(header)로 구성된다. 블록 바디에는 트랜잭션들이 저장돼 있고, 블록 헤더에는 바디 정보가 요약돼 있다. 그리고 헤더는 이전 헤더를 포인터로 가리키고 있다. 따라서 블록들은 서로 체인으로 연결돼 있다. 이런 구조를 블록체인이라 한다.

버전(version) : 비트코인의 소프트웨어 버전 정보를 나타낸다.

이전 블록 헤더의 해시(Previous block header hash) : 이전 블록 헤더의 해시 값을 표시한다.

머클 루트(Merkle Root) : 머클 루트는 머클 트리의 루트 노드 값이다. 머클 트리는 블록에 있는 모든 트랜잭션의 해시 값은 이진트리로 요약한 것이다. 머클 트리는 트랜잭션 데이터를 보호할 목적으로 사용된다.

타임스탬프(Timestamp) : 타임스탬프는 이 블록이 생성된 날짜와 시간이다.

비츠(Bits)와 논스(Nonce) : 이 정보는 채굴의 난이도와 일종의 해답에 관련된 것이다. 즉 비츠는 채굴의 성공 여부를 판단하는 정보이고 논스는 해답에 해당한다.

블록 헤더의 해시(Hash) : 80바이트의 헤더를 요약해서 32바이트의 해시 값으로 만든 것이다.

트랜잭션 카운트(Transaction Count) : 블록 바디에 기록된 트랜잭션의 개수다.

코인베이스 트랜잭션(Coinbase Transaction) : 채굴자가 이 블록을 생성한 대가로 받는 보상을 자기 지갑으로 송금하는 트랜잭션이다.

트랜잭션(Transaction) : 트랜잭션은 비트코인을 주고받는 거래다.

10. 블록체인 데이터 확인

그림 1 (왼쪽), 그림 2 (오른쪽)

그림 1는 블록체인 웹 사이트(https://blockchain.info/blocks)에서 실제 블록체인 데이터를 확인한 것이다.

그림 2는 583380번 블록의 헤더를 조회한 것이다. 이 블록에는 1443개의 트랜잭션이 포함돼 있고, 총 거래 수수료는 0.89969515 BTC다. 채굴자는 총 14,319.49554176 BTC를 보상받았다는 것 등 정보를 알 수 있다.

--

--