[블록체인] 노드와 블록

HwangJerry·2023년 4월 30일
0
post-thumbnail

노드


비트코인 네트워크의 참여하는 컴퓨터 하나하나는 노드(Node) 또는 피어(Peer)로 칭해집니다. 비트코인이 등장했던 초기에는 bitcoind (bitcoin demo)를 통해서만 네트워크에 참여가 가능했지만 현재는 누구나 쉽게 참여가 가능합니다.

사토시 나카모토가 발표한 비트코인 백서에서는 노드가 Full NodeLightweight(SPV) Node로 구분됩니다. 이는 Miner, Wallet User(Client) 등 네트워크 참여 목적에 따라 역할을 구분한 것입니다.

풀 노드

블록체인 데이터 전체를 관리하는 노드를 의미합니다. 즉, 2009년 비트코인의 제네시스 블록부터 지금까지의 모든 트랜잭션을 보관하는 노드입니다.

2023년 4월 30일 기준, 비트코인의 전체 블록체인 크기는 약 477GB입니다.

풀 노드는 클라이언트로서 지갑 정보와 함께, 모든 블록체인 정보와 네트워크 라우팅을 수행할 수 있습니다.

마이너 노드로부터 새 블록을 전달받으면 유효성 검증, 블록체인 연결 후 풀 노드간 동기화 및 다른 노드에 신규 블록 헤더 정보 전파(라우팅)를 수행합니다.

만약 개별 트랜잭션을 수신하면 유효성 검증 및 저장 후 다른 노드에 전파합니다.

SPV 노드

SPV(Simplified Payment Verification) 노드는 lightweight node라고도 하며, 블록의 헤더 정보만 가지는 노드이다. 주로 비트코인 지갑 어플리케이션으로 사용된다.

  • 자신과 관련된 트랜잭션의 유효성만 검증
  • 자신의 트랜잭션이 정상적으로 승인(채굴)되어 블록체인에 포함되었는지 확인
  • 자신의 트랜잭션이 어느 특정 블록에 속해 있고, 이후 몇 개의 블록이 쌓였는지 확인 가능

헤더 정보만 저장하므로 저장 공간을 절약할 수 있지만, 자신의 트랜잭션을 검증할 때 풀 노드의 도움이 필요하다. 이처럼 풀 노드에 의존적이기에 비교적 안정성이 떨어진다.

마이너 노드

블록체인 네트워크의 필수 구성원인 채굴자 노드입니다. 트랜잭션의 유효성을 검증하고 유효한 트랜잭션을 모아 블록을 생성(채굴)합니다. 생성한 블록은 풀 노드로 전송 후 블록체인에 포함될 때 비로소 유효한 거래로 인정됩니다.

채굴하는 과정은 넌스(Nonce)값 맞추기이며, PoW 알고리즘을 이용하여 수학 퍼즐을 풀고 블록 헤더에 그 답을 제시합니다. 풀 노드가 이 답을 검증하는 것을 유효성 검증이라고 하며, 풀 노드의 검증을 통해 생성된 블록은 블록체인에 추가됩니다.

채굴에 성공한 마이너 노드는 트랜잭션 수수료 등의 보상(현재 6.25BTC/block)이 주어지게 되므로, 마이너 노드끼리는 경쟁에서 이기기 위해 GPU, ASIC 등의 장비를 이용합니다. 이를 통해 블록체인의 신뢰성이 높아지게 됩니다.

블록


블록체인의 header와 body로 이루어진 블록이 연결된 구조로 이루어져 있습니다. 아래 사진은 블록 517,707의 정보입니다.

블록의 header에는 메타데이터와 이전 블록의 해시값 포인터가 담기며, body에는 트랜잭션들이 저장됩니다.

트랜잭션 종류

  • 페이먼트 트랜잭션 (일반 송금)
  • 코인베이스 트랜잭션 (채굴 보상 거래)

블록 헤더

Version :

비트코인 소프트웨어의 버전 정보를 나타내며, 사토시 나카모토가 채굴한 제네시스 블록의 버전은 1입니다. 현재는 BIP-9(Bitcoin Improvement Proposal-9)표준에 의해 개발자들이 소프트포크를 진행할 때 채굴자들이 해당

Previous Block Header Hash :

previous block header hash라는 영역에 이전 블록의 헤더 해시 값을 가리키는 포인터가 저장됩니다. 이를 통해 블록들이 연결 리스트처럼 서로 연쇄되어 '블록 체인'이라는 구조를 구현합니다.

만약 블록 안에 있는 트랜잭션의 값이 조금이라도 변하면, 해시 값도 변하기 때문에 포인터가 블록을 찾을 수 없게 되어 연결이 끊어지게 됩니다. 이처럼 한번 연결된 블록들은 그 내용이 바뀔 수 없는 구조이기 때문에 거래 데이터의 안정성이 보장됩니다.

80bytes의 헤더를 32bytes의 해시로 만드는 과정에서 double-SHA-256 알고리즘이 사용됩니다. 블록 스스로의 헤더 해시는 자신의 블록에 저장되지 않고, 다음 블록이 생성되면 이 해시 값의 포인터가 생성된 블록의 헤더에 들어갑니다.

Merkle Root :

머클 트리의 루트 노드 값을 의미합니다. 머클 트리는 블록 내 모든 트랜잭션의 해시값을 이진 트리로 요약하는 데이터 구조를 의미하며, 무결성을 검증하는 데 사용됩니다.

블록 내 임의의 트랜잭션이 변조되면, 머클 루트의 값 역시 변경되므로 블록 헤더 해시 값이 변경되게 됩니다. 이는 위와 같이 해당 블록을 찾을 수 없게 되는 결과를 가져오므로, 트랜잭션의 무결성을 보장하는 구조임을 알 수 있습니다.

머클 루트를 통해 SPV노드가 자신의 트랜잭션이 블록 내에 포함되어 승인되었는지를 그와 관련된 머클 브랜치들을 수집하여 다시 해시해보는 과정을 통해 머클 루트 값을 대조 및 확인할 수 있습니다.

Timestamp :

블록이 생성된 날짜와 시각으로, UTC를 기준으로 합니다.

Difficulty Target & Nonce :

Difficulty Target or Bits는 채굴의 성공 여부를 판단하는 값입니다. 헤더의 해시 값이 타겟의 제시값보다 작으면 블록 생성(채굴)에 성공한 것입니다.

마이너는 채굴을 위해 수많은 넌스 값을 대입하여 계산한 헤더의 해시 값과 타겟 값을 비교하는 행위를 반복하여 넌스 값을 알아내는 작업을 합니다. 이러한 작업은 성공하기까지 평균 10분 정도가 걸릴 수 있도록 난이도가 계속 조절됩니다.

블록이 10분에 하나씩 생성되게 유지하는 것은 다음 효과를 가져오며, 비트코인 네트워크를 유지하는 데에 중요한 포인트입니다.

  • 안정적인 인플레이션율 유지:
    공급 속도를 예측가능하게 유지하여 인플레이션을 통제

  • 보안 강화:
    블록 생성 간 충분한 컨펌이 이루어지게 함

  • 네트워크 확장성 유지:
    노드들이 블록체인을 쫓아갈 수 있도록 체인 높이 증가율 유지

  • 마이닝 경쟁 공정성 유지:
    마이너의 수의 증감에 따라 난이도 조절

블록 바디

Transaction Count

블록 바디에 포함된 트랜잭션의 개수를 의미합니다. 트랜잭션이 많을 수록 보상이 증가하지만, 처리 시간도 증가하기 때문에 마이너 간 채굴 경쟁에서 불리해집니다.

Coinbase Transaction

채굴자가 블록 생성시 그 보상을 자신에게로 송금하는 트랜잭션을 의미합니다. 제네시스 블록때에는 50BTC였으며, 4년마다 반감기를 갖습니다.

Transaction

비트코인 네트워크에서 발생한 코인 거래를 의미합니다. 비트코인 시스템에서는 하나의 트랜잭션이 완전히 승인되었음을 판단하기 위해선 6개의 컨펌 숫자가 필요합니다. 즉, 하나의 트랜잭션이 완전히 승인되려면 약 1시간 정도가 소요됩니다.

profile
알고리즘 풀이 아카이브

0개의 댓글