비트코인의 블록 구조는 크게 헤더, 거래로 나뉨
블록 헤더 외에 블록 크기, 거래 개수도 있으며 거래를 담은 부분을 주로 바디(Body)라고 하며 대부분의 크기를 차지함
비트코인이 어떤 버전을 쓰고 있는지.
소프트웨어 프로토콜 업그레이드 추적을 위한 버전 번호
블록체인을 체인으로 만드는 중요한 개념
N번째 블록을 채굴하려는 노드가 N-1번째 블록을 전송받았을 때, 이전 블록(N-1번째)에 대한 ㅔ헤더 해시를 계산해 헤더에 넣는다는 의미
채굴? 작업증명 과정을 수행하고 댓가로 암호화폐를 지급받는 것
작업증명? 목표값보다 낮은 해시값을 찾기위해 헤더의 값들을 조합하고 nonce를 바꿔가면 대입해보는, 해시값을 찾기위한 행위
유닉스 타임(1970년 1월 1일) 기준으로 초 단위 해당 블록 채굴 시각을 기록
머클트리가 중요한 이유?
Difficulty: 블록 채굴 난이도, 숫자는 블록 높이에 따라 자동 설정됨
Bits: 해당 난이도에 맞는 목표값, 계수와 지수로 이루어져 있음
Difficulty = MAX_TARGET / current_target
MAX_TARGET은 첫 난이도로서 비트코인 블록체인이 처음 구동될 때 설정된 난이도 갑 1을 의미하며, 4Byte로 1d00ffff라고 표기.
current_target은 목표값,즉 bits.
앞자리의 0의 숫자(Leading Zeros)가 길수록 난이도가 높아짐.
왜? 0의 숫자를 1비트 증가시킬 때마다 검색 공간이 반으로 줄어들기 때문.
이 모든 랜덤한 과정에 있어서 유일하게 변하는 값!
Number + Once 즉, 한번만 쓰이는 숫자!
비트코인은 10분에 블록 1개가 생성되도록 자동 난이도 조절이 됨
예를 들어, 블록 1개 생성당 평균 5분이 걸렸다면 난이도 Up, 15분이 걸렸다면 난이도 Down
32바이트의 숫자값거래 정보의 해시값은 해당 거래가 포함된 블록의 머클 해시 계산에 입력값으로 사용되고,
머클 해시는 블록 해시의 계산에 입력값으로 사용됨
블록해시는 다음 블록의 이전 블록 해시값으로 저장되며, 다음 블록의 블록 해시를 계산하는 데 입력값으로 사용됨
따라서, 거래 정보가 변경되면 -> 머클 해시 변경 -> 블록 해시 변경 -> 다음 블록의 블록 해시 변경으로 연쇄적으로 이어짐
블록 해시는 작업 증명의 해답(논스값)을 찾아내야 구할 수 있으므로, 거래 정보를 변경한 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 함
완료된 거래 정보를 변경하려면, 변경하려는 거래 정보가 포함된 블록부터 그 이후의 모든 블록을 순서대로 다시 채굴해야 함. 엄청난 시간이 소요되고, 이 작업이 진행되는 동안에도 다른 노드들에 의해 새로운 블록들도 계속 추가되므로 사실상 완료된 거래 정보의 변경은 현실적으로 불가능
논스값을 1씩 증가시키면서 반복적으로 계산한 블록 해시값이 특정 숫자보다 작은 값이 나오면, 그 때의 논스값으로 계산한 블록 해시가 그 블록의 해시값으로 확정!
블록 해시라는 식별자를 얻은 해당 블록은 새로운 블록으로서 블록체인에 추가되며 작업이 완료.
블록 해시가 특정 숫자보다 낮게 나올 때의 논스값을 찾는 것이 작업증명(PoW)
작업 난이도는 논스 계산의 어려운 정도이고, 작업 난이도는 블록 헤더 정보에서 난이도 비트(Bits)라는 값으로 조절됨
난이도 비트❓
블록 헤더의 난이도 비트는 논스값을 계산하는데 기준이 되는 숫자이고 블록체인 전체에 걸쳐 일률적으로 적용됨
같은 논스를 가진 여러 트랜잭션이 전송되는 경우 가장 높은 가스비를 지불한 트랜잭션이 처리됨 -> 이중 지불 문제 방지