본문 바로가기

IT/블록체인 Blockchain

비트코인 네트워크와 블록체인의 구조

반응형

비트코인이 블록체인 기술에서 아직도 중요한 부분을 차지하고 있음에도, 인터넷에서 찾아볼 수 있는 글이 대부분 비트코인의 상위 개념만을 설명하는 것이어서 제가 아는 부분도  정리해 볼 겸 비트코인 관련 포스팅을 다시금 시작하고자 합니다.


비트코인 네트워크 인포그램 (Antony Lewis)


앤터니 루이스의 홈페이지에 나와 있는 한장짜리 비트코인 네트워크 인포그램입니다.

원본은 여기 (https://bitsonblocks.net/2016/03/14/bitcoins-network-in-one-infographic) 에서 보실 수 있습니다.


이 한장짜리 인포그램에서 언급하고 있는 개념들을 살펴보면,

  • 분산원장의 개념과 종류 :  비트코인과 다른 블록체인 기반 플랫폼의 차이점
  • 마이닝의 개념과 마이닝 풀 / 개인 마이너
  • 비트코인 거래소와 결제
  • 노드 / 비트코인 지갑

 비트코인 네트워크의 거의 모든 요소들을 보여주고 있습니다.

그리고 그림의 가운데 부분에서 비트코인 소프트웨어가 수행하는 핵심 요소를 정리했는데요,

  • 정보를 저장하기 위해 분산 데이터베이스를 사용 ( 기존의 중앙 집중형 데이터베이스와 반대되는 개념이죠)
  • 하나의 블록은 이전 블록을 참조 (refer) 함 ("블록체인"이 이러한 비트코인의 데이터 구조에서 나온 말입니다)
  • 누구나 익명으로 네트워크에 참여 가능하고
  • 트랜젝션을 전송할 수 있으며 (사용자)
  • 블록을 생성, 추가할 수 있고 (마이너)
  • 생성된 블록을 검증하고 전파할 수 있습니다. (노드)

위 각각의 항목에 대해서 이해한다면 비트코인을 모두 이해했다고 해도 될 것 같습니다.


비트코인 의 블록체인 데이터 구조


이번에도 앤터니 루이스의 홈페이지에 좋은 그림이 있어서 옮겨와 봅니다.

(원본 위치 : https://bitsonblocks.net/2015/09/14/inside-bitcoins-blockchain/)



블록체인은 이름 그대로, 블록들이 체인처럼 서로 연결되어 만들어집니다. 위 인포그램의 가운데 상단 그림이 그것을 잘 표현하고 있죠.


아래는 비트코인 위키에 나와 있는 블록 내의 항목입니다. 위 인포그램과는 다르게 매직넘버, 블록 사이즈를 따로 표시했지만 사실상 같은 내용을 다르게 표현한 것 입니다.


Field
Description Size
Magic no value always 0xD9B4BEF9 4 bytes
Blocksize number of bytes following up to end of block 4 bytes
Blockheader consists of 6 items 80 bytes
Transaction counter positive integer VI = VarInt 1 - 9 bytes
Transactions the (non empty) list of transactions <Transaction counter>-many transactions

블록 헤더 Header


헤더는 아래 6개의 항목을 포함 하고 있습니다. (인포그램에서는 매직넘버, 블록 사이즈, 버전을 포함해서 테크니컬 데이터로 표시 했습니다)


Field

Purpose Updated when... Size (Bytes)
Version Block version number You upgrade the software and it specifies a new version 4
hashPrevBlock 256-bit hash of the previous block header A new block comes in 32
hashMerkleRoot 256-bit hash based on all of the transactions in the block A transaction is accepted 32
Time Current timestamp as seconds since 1970-01-01T00:00 UTC Every few seconds 4
Bits Current target in compact format The difficulty is adjusted 4
Nonce 32-bit number (starts at 0) A hash is tried (increments) 4


  • hashPrevBlock : 이전 블록헤더 (매직넘버, 블록사이즈를 포함)의 해쉬 (SHA256) 값 입니다.
    해쉬 알고리즘은 어찌 보면 비트코인 마이닝의 핵심이기 때문에 별도의 포스팅으로 더 자세히 작성할 생각이지만 사실 웹에 많은 자료가 이미 있으므로 한번 찾아 보시기 바랍니다.
    어쨌든, 바로 이 항목때문에 블록간의 연결 (즉 블록체인) 이 생성되며 그 연결을 깨기 어렵게 하는 역할을 한다고 볼 수 있습니다.
  • hashMkrkleRoot : 해당 블록 (이전 블록이 아닌) 에 포함된 전체 트랜잭션의 해쉬값. (역시 SHA256)
  • Bits (난이도 타겟) : 마이닝 작업에서 난이도를 조절하기 위해 사용되는 비트 수 입니다.
  • Nonce : 마이닝 과정에서 찾아내는 임의의 수. 이 숫자를 바꿔가면서 난이도 타겟을 충족하는 해쉬값이 계산되도록 하는 것이 마이닝 작업입니다. (PoW)

트랜잭션 Transaction

블록의 실제 내용이 되는 부분이 바로 트랜잭션입니다.

트랜잭션이란 거래를 말하는데, 비트코인이 거래를 통해서 하나의 주소에서 다른 주소로 이전된 내용을 가지고 있습니다.

트랜잭션은 인풋(입력) 과 아웃풋(출력)으로 구성되어 있습니다. (마이닝으로 코인이 생성된 경우에는 아웃풋만 존재 합니다)


blockexploere.com 에서 하나의 트랜잭션을 캡쳐해 봤습니다.



예시로 든 것은 1:1의 단순한 트랜잭션입니다. 1LEt.. 로 시작되는 비트코인 주소에서 0.2914.. 비트코인 (현재 시세로 약 10만원 정도)을 1Fku.. 주소로 이전하였습니다. (약간의 비트코인이 거래 수수료로 지불된 것도 표시 되고 있습니다)


위 화면에서는 인풋이 주소인 것 처럼 보이지만 실제 블록 데이터구조에서 인풋은 주소가 아니라 해당 주소가 비트코인을 수령한 트랜잭션 (의 해시) 와 scriptSig 입니다. (주소 옆의 꺽쇠에 마우스를 올려 보면 이전 트랜잭션을 볼 수 있습니다)

아웃풋은 비트코인을 수령하는 주소와 넘겨지는 비트코인의 양 그리고  scriptPubKey로 구성됩니다.


scriptSig와 ScriptPubKey는 정당한 전송자 (즉 1LEt... 주소의 소유자) 로부터 비트코인이 전송됨을 증명하기 위한 부분입니다.  전송자가 본인의 비트코인 지갑 소프트웨어 (혹은 웹 서비스)를 통해, 개인키로 트랜잭션의 해시값을 암호화 하여 트랜잭션에 첨부하게 되고 이를 다른 노드에서 공개키로 복호화 해서 해시값을 비교, 정당한 트랜잭션인지 검증할 수 있게 됩니다.

반응형