BlockChain

BlockChain Bitcoin Structure

k0o9 2022. 5. 27. 19:00

BlockChain Bitcoin Structure

Bitcoin

블록체인 기술을 활용한 최초 분산원장 기술.

2009년 사토시 나가모토라는 가명을 쓰는 프로그래머가 만든 가상화폐로 통화를 발행하고 관리하는 중앙장치가 존재하지 않는 구조를 가지고 있다.

Block Structure

Blockchain의 일반 구조와 동일한 구조를 가진다.

기본적으로 블록은 다음과 같이 이루어져있다.

1.현재 블록의 Hash

2.현재 블록의 Header

3.거래 카운트(ETC)

4.블록 Body

5.기타 정보

즉 블록은 일정 기간 동안 발생한 거래들을 기록한 장부이고 블록체인은 이 블록들이 연결되어 있는 구조이다.

모든 참여자가 이러한 똑같은 장부를 가지고 있어서 위변조가 어렵다.

Bitcoin Block Structure

각 비트코인 블록의 크기는 1MB 데이터로 제한이 된다. 분리된 증인(Segwit)블록의 경우 트랜잭션 데이터는 1MB로 제한되는 반면 서명 데이터는 분리되어 3MB로 제한된다. 트랜잭션 데이터를 위한 블록 공간을 늘리면서 블록 크기를 1MB로 유지한다.

-Magic Number

:블록체인 네트워크의 식별자 값으로 0XD9B4BEF9로 고정

-Block Size

:블록헤더+블록Body의 크기

-Block Header

-Block Body

로 이루어져있다.

Bitcoin Block Header

-Version

:블록 버전:소프트웨어 버전과 동일하게 이루어져있다. 각 노드들은 동일한 버전으로 구현해야 한다.

-HashPrevBlock

:이전 블록의 해시 값으로 이전 블록헤더의 SHA256 해시, 블록 생성 시 기록.

-HashMerkleRoot

:머클루트라고 부르며 거래가 발생할 때마다 값이 업데이트되며 SHA256 해시.

-Time

:현재시간이 기록되는 타임스탬프 이며, 블록이 완성될 때까지 지속적으로 업데이트된다.

-Bits

:난이도를 의미하며 작업증명을 위한 target값의 저장하며 특정한 공식에 의해 target을 산출하며 targer보다 블록헤더의 해시값이 작아지도록 nonce를 구한다.

-Nonce

:4바이트 크기.

Bitcoin Block Body

-Transaction counter

:트랜잭션의 수. 기록된 거래의 개수를 의미하며 거래 정보가 블록에 추가될때마다 1씩 증가함.

-Coinbase transcation

:초기에 무의한값들로 구성이 되고, 작업증명이 성공하면, 새로 발행되는 비트코인을 성공한 노드의 비트코인 주소로 입금하는 거래정보로 변경됨.

-Transcation

:실제 비트코인의 거래를 기록한 여러개의 transcation들로 구성.

Bitcoin Block Hash

블록의 식별자 역할을 하는 블록 해쉬는 6가지의 블록 헤더 정보를 입력 값으로 하여서 여기에 SHA256 해쉬 함수를 2회 적용해서 계산되는 값으로 32바이트의 숫자값이다.

비트코인의 json 데이터

비트코인 블록은 json형식으로 기록된다.

직접 비트코인을 설치하여 내부 블록구조를 살펴보겠다.

비트코인 설치방법 :https://gist.github.com/rjmacarthy/b56497a81a6497bfabb1

bitcoint-cli -regtest getblockhash 블록해시값

비트코인의 각 값들은 little-endian 방식으로 메모리에 저장됨.

Bits는 비트코인 참여 노드의 수에 따라 값이 변함.

n번째 블록헤더에 대한 SHA-256 해시의 값은 N+1번째 블록헤더의 HashPrevBlock 필드값으로 입력

Bitcoin Proof of Work(작업 증명)

작업 증명은 새로운 블록을 블록체인에 추가하는 작업을 완료했다는 것을 증명하는 것이다. 새로운 블록체인을 추가하려면 그 블록의 해쉬 값을 계산하여야 하고 계산을 위해서는 nonce값을 계산을 통해 구해야 한다.

즉 nonce값을 구하는 것이 바로 작업 증명이다.

해쉬 함수의 특성상,어떤 해쉬값을 결과로 나오게 하는 입력값을 찾으려면 역산이 불가능하다. 따라서 특정 결과가 동일하게 나올때까지 무작위 대입을 하여서 찾아낼 수 밖에 없다.

그 입력값을 바꿀 수 있는 유일한 방법이 nonce이다. 6가지 헤더중에서 유일하게 값이 지정되어 있지 않아서 값을 바꾸면서 해쉬값을 찾을수 잇는것이 nonce이다.

noncce값을 1씩 증가시키면서 반복적으로 계산한 블록 해쉬값이 특정 숫자보다 작은 값이 나오면 그때 nonce값으로 계산한 블록해쉬가 그 블록의 블록해쉬로 확정 시킨다.

그리고 식별자 값을 얻은 그 블록은 새로운 블록으로 인정을 받고 블록체인에 추가되며 작업이 완료된다.

Block Bits

그럼 이제 nonce값을 계산을 할때 특정 숫자 보다 작은값이 필요하였는데 이 값이 bits이다.

작업 증명의 난이도는 이 bits의 값으로 조절이 된다.

문제 증명의 난이도는 2160개의 블록이 생성되는데 소요되는 시간이 평균시간이 21,600분보다 오래 걸리면 낮아지고 적게 걸리면 높아지는 방식으로 대략 21,600분을 주기로 전체적으로 평균 10분이 소요되는 하나의 난이도가 전체에 적용된다.