본문 바로가기

IT/블록체인

비트코인 블록체인 구조

블록체인이란

-블록체인은 데이터 분산 처리 기술입니다. 즉, 네트워크에 참여하는 모든 사용자가 모든 거래 내역 등의 데이터를 분산, 저장하는 기술을 지칭하는 말입니다. 

블록들을 체인형태로 묶은 형태이기 때문에 블록체인이라는 이름이 붙었죠. 블록체인에서 '블록'은 개인과 개인의 거래(P2P)의 데이터가 기록되는 장부가 됩니다.

이런 블록들은 형성된 후 시간의 흐름에 따라 순차적으로 연결된 '사슬(체인)'의구조를 가지게 됩니다. 모든 사용자가 거래내역을 보유하고 있어 거래 내역을 확인할 때는 모든

사용자가 보유한 장부를 대조하고 확인해야 합니다. 이 때문에 블록체인은 '공공 거래장부' 또는 '분산 거래장부'로도 불리기도 합니다.


1. 블록은 대략 매 10분마다 완성되어 비트코인 네트워크 전역으로 퍼진다.


2. 하나의 블록은 Header와 Body로 구성되는데 Body에는 거래내역이 Hash트리 구조로 작성되어 저장되어있다.


  <Header>

   (1) version (블록버전 / 크기 : 4Byte) - 소프트웨어/프로토콜 버전(현재 비트코인 프로그램의 버전)

                                                            - 비트코인에서 사용하는 블록체인 버전을 말한다. 2017년 기준 버전은 2     

    (2) previousblockhash (이전블록해쉬 / 크기 : 32Byte = 256Bits) 

        - 블록 체인에서 바로 앞에 위치하는 블록의 블록 해쉬 (N-1번째 블록의 Hash)

    (3) merklehash 또는 Mukle Root(Body의 Hash트리의 Root에 대한 Hash / 크기 : 32Byte = 256Bits) 

        - 개별 거래 정보의 거래 해쉬를 2진 트리 형태로 구성할 때, 트리 루트에 위치하는 해쉬값

 - 블록에 포함되어있는 모든 거래내역의 약본

    (4) time(타임스탬프 / 크기 : 4Bytes) 

        - 블록이 생성된 시간(유닉스시간. 2038년에 만료됨. 그 전에 블록버전이 3이 된다는걸 예상할수 있음)

    (5) bits(난이도 목표 / 크기 : 4Bytes) 

        - 난이도 조절용 수치(난이도 목표)

    (6) Nonce(카운터 / 크기 : 4Bytes) 

        - 최초 0에서 시작하여 조건을 만족하는 해쉬값을 찾아낼때까지의 1씩 증가하는 계산 회수

 - 변조를 주는곳. 보통 0x00000000부터시작해서 0xFFFFFFFF까지 감

   <Body>

    개별 거래 정보(From : 홍길동, To : 유관순, Amount : 2,000,000 BTC/등등등...)

    개별거래의 해쉬값(a7bfd281e.../등등등...) - 각각의 거래정보의 내용을 가지고 1:1 해쉬값 생성

    머클트리의 해쉬값(947c3dafe...) - 개별거래의 해쉬값을 붙여서 또다른 해쉬값 생성

  <Block Hash>

    블록해쉬는 6가지의 블록헤더 정보를 입력값으로 하고, 여기에 SHA-256(혹은 SHA-2라고 불림) 해쉬함수를 

   2회 적용해서 계산된 값(256Bits, 32바이트, 64자리 길이) 

    - ex)483F0ED813DE699CAC39D2EEF86161E60C2513523AE08716578FEC7197CF0719

3. 블록은 최대 1MB의 크기까지 확장될 수 있으며, 헤더 80바이트, 기타 17바이트 등을 제외하고 총 1,048,479바이트가량이 이체내역 저장을 위해 사용될 수 있다.

(*비트코인의 블록크기는 보안적인 이유로 최초 1MB로 제한되어 있었지만, 비트코인에서 처리하고자 하는 이체 건수가 늘어남에 따라, 블록의 크기를 1MB이상으로 늘리자는 다수의 요청이 있었다)


4. 비트코인이 채택한 작업증명(POW: Proof of Work)방식은 ‘Hashcash’ 방식이다. Hashcash 방식의 요소는 네 가지, ‘목표’, ‘작업방식’, ‘난이도 조정방법’, ‘난이조 조정시점’이다. 

‘목표’는 2016개의 블록을 생성하는데에 2주(2016블록*10분=2주)가 소요돼야 한다는 것이며, ‘작업방식’은 해싱을 통한 목푯값 찾기, 그리고 ‘난이도 조정방법’은 목표치를 초과/미달하는 부분만큼 ‘목푯값(target value)’의 난이도가 변경되는 것이다. 이 난이도 조정은 매 2016번째 블록마다 이루어진다.

만일 2016개의 블록을 생성하는데 2주가 아닌 1주일이 걸렸다면, 목표에 도달키 위한 필요작업의 50%만 이루어진 것이므로, 목표에 도달치 못한 것이다. 따라서 난이도를 2배로 증가시켜서, 기존 1주일의 두 배인 2주가 걸리게 조정하고 목표를 충족시킨다.