블록의 구조

고급7분 소요2021-12-14

블록의 정의

블록(block)은 거래내역, 데이터 등을 저장하는 단위로 하나의 블록 안에는 여러 개의 거래 내역이나 데이터 등이 저장될 수 있습니다. 비트코인의 경우 블록 한 개당 1MB의 저장 공간을 갖도록 설계되어 있고, 일반적인 거래 한 건의 용량이 250byte이기 때문에 한 블록 안에는 대략 4,000개 정도의 거래가 저장될 수 있습니다.



그렇다면 블록의 구조는 어떻게 되어 있을까요?

블록은 블록을 식별할 수 있는 정보가 입력되어 있는 해시(hash), 블록의 다양한 정보가 들어있는 헤더(header)와 거래내역, 데이터 등이 담겨있는 바디(body)로 구성되어 있습니다. 



해시는 무엇인가요?

해시는 쉽게 생각하면 블록의 이름으로 블록을 식별하는 역할을 하며, 블록의 헤더에 있는 6가지 정보를 합친 후 SHA256 알고리즘으로 변환한 값입니다. SHA256은 해시 알고리즘의 한 종류로서 어떤 길이의 값을 입력하더라도 256비트, 64자리의 고정된 길이의 문자열을 반환합니다. 하지만 입력값 중 하나만 달라져도 출력값이 완전히 변동되기 때문에 출력된 값을 토대로 입력값을 유추, 역산하는 것은 사실상 불가능해 블록체인에서 이루어지는 대부분의 암호화 작업에 사용되고 있습니다.



그렇다면, 블록의 헤더에는 어떤 정보들이 담겨 있나요?

블록의 헤더에는 다음과 같은 총 6가지 정보들이 담겨있습니다.


1) 소프트웨어 및 프로토콜 버전이 담겨있는 버전(version)

버전에는 소프트웨어 혹은 프로토콜의 버전 정보가 담겨 있어 업그레이드 및 변경 사항을 추적하는데 사용됩니다.


2) 블록체인에서 바로 앞에 위치하는 블록의 해시(previous hash)

SHA256으로 암호화된 64자 코드로 이전 블록의 식별 데이터입니다. 


3) 개별 거래 정보의 거래 해시를 2진 트리로 구성할 때 머클트리 뿌리에 위치한 머클 루트(merkle root)

머클트리는 바디 내에 있는 거래 내역들의 해시값을 모아놓은 정보입니다. 가장 가까운 거래내역과 짝을 지어 하나의 해시를 만들고 마지막 하나의 해시가 나올 때까지 이 과정을 반복합니다. 이를 통해 나온 마지막 하나의 해시는 모든 거래를 합친 값으로 머클 루트라고 불립니다.


바디 내의 개별 거래 내역을 해시화하고, 트리로 정렬한 것이기 때문에 블록 내 하나의 데이터가 변경될 경우 머클트리 내 해시값이 모두 변경되는 파급 효과가 나타납니다. 이에 따라 잘못된 해시값이 나타날 경우 바로 알 수 있기 때문에 바디 내 거래 내역의 무결성을 쉽게 검증할 수 있습니다.


4) 블록이 생성된 시간인 시간정보(time)

현재 블록의 생성 시간을 나타냅니다.


5) 계산의 난이도를 나타내는 비츠(bits)

Nonce 값 계산의 어려운 정도, 난이도를 측정한 값입니다. 


6) 일정 난이도의 계산 작업을 통해 나온 결과값이며 작업 증명을 의미하는 논스(nonce)

논스는 블록체인에 새로운 블록을 추가하는 작업인 채굴하는 과정에서 필요한 숫자입니다. 새로운 블록을 추가(채굴)하려면 새로운 블록의 해시값을 계산해야 하는데 이때 사용되는 값이 논스입니다. 즉, 논스는 기존 블록체인에 새로운 블록체인을 연결하는 접착제 역할을 하는 것입니다. 


위에서 살펴본 것에 의하면 블록체인에 사용되는 해시함수 특성상 역산으로는 사실상 추론이 어렵습니다. 따라서 특정 값이 나올 때까지 무작위로 값을 넣어야 하며 그 입력값을 바꿀 수 있는 숫자, 즉 계산과정을 통해 맞춘 값이 논스입니다. 이 논스값을 변경해가면서 특정 숫자보다 작은 값이 나오면 그 논스로 계산한 값이 블록해시로 확정되며 새로운 블록이 형성되는 과정을 거칩니다.


바디에는 어떤 정보가 담겨 있나요?

실제 유의미한 데이터가 저장되어 있는 블록의 바디(body)에는 디지털자산의 거래 내역들이 해시화 되어 모여있습니다. 거래 내역은 합의 알고리즘에 따라 적합성을 판단하고 블록 바디 내에 저장되기 때문에 검증된 거래 정보의 모음이라고 볼 수 있습니다.


거래 내역은 A가 B에게 1BTC를 송금한다 등과 같은 내역을 의미합니다. 보다 정확히 설명하자면, 비트코인 네트워크에서는 거래가 이루어지는 지갑의 BTC 잔고기록에 해당하는 UTXO(Unspent Transaction Outputs)가 기록됩니다.


최근에는 지적재산권이나 저작권 등을 담은 디지털자산이 등장하고 있습니다. 이 디지털자산의 블록 거래내역에는 A가 B에게 지적재산권 일부, 혹은 전체의 소유권을 이전한다 등의 내용이 담겨있습니다.