1-9bytes - Transaction Counter - 현재 블록 내 Transaction 개수(보통 2000~3000개정도)
Variable - Transaction - 블록내 Transaction 리스트
Block Header 구조
6가지 필드
사이즈 - field - 설명
4bytes - Version - 버전정보
소프트포크(소프트 버전의 업데이트)할 때, 95%이상이 업데이트가 이뤄져야 이후에 생성되는 블록들도 업데이트된 버전이 적용됨.
32bytes - Previous Block Hash - 이전 Block의 Header Hash
이전 블록의 Block Header의 모든 값을 해시한 값.
32bytes - Merkle Root - Transaction들의 Hash Root
블록안의 transaction이 위조된 것인지 아닌지 확인할 때 사용
4bytes - Timestamp - 블록 생성 시간 (UNIX Epoch)
현재 시간보다 2시간이내임을 확인할 때 사용. UNIX Epoch는 1970년 1월 1일 00시 00분 00초를 0으로 두고 매 1초마다 증가.
4bytes - Difficulty Target - PoW의 어려움 정도
bit 값, 블록체인에 블록이 생성되는 시간에 영향.
4bytes - Nonce - PoW의 결과(채굴 정답)
Genesis Block
Genesis Block이 다르면 완전히 다른 네트워크가 되어버림.
Genesis Block은 최초 검증 데이터로 Genesis Block이 다르게 되면 그 뒤에 연결되는 모든 Blockchian 데이터 검증이 불가능 하다.
Block 생성
Block 연결 방법
transaction이 모여있는 Merkle tree → 해싱한 Merkel Root → Merkle Root와 여러 정보를 포함한 Block Header → 해싱한 Block Hash → 다음 Block의 Previous Block Hash (체인의 형태)
Nonce 값을 이용해 정상적으로 블록이 생성될 정도의 시간을 만들어줌.
Block Size
현재 기준 Bitcoin 전체 Blockchain Size는 약 400GB
1개의 Block의 최대 크기는 1MB (1MB 초과는 Witness Data)
최근에는 소프트포크로 서명된 데이터는 Witness Data로 1MB제한에 포함시키지 않아 1MB가 넘은 블록도 발생.
Bitcoin에서 Block 크기를 제한과 채굴
Bitcoin에서 Block 크기의 제한을 둔 이유
→ Transaction을 처리하기 위한 Database Lock의 성능 때무
→ 이로 인해 1Block 내에 약 2000개의 Tx만 들어가게 됨(3-7tps)
→ 채굴자들은 이런 Block 크기의 제한으로 인해 거래 수수료를 최대한을 많이 얻는 방법을 구현
→ 수수료가 비싸거나 거래 데이터 용량이 작은 거래만 선택
→ Bitcoin 사용자가 늘어나며, 수수료 가격 증가 (Bitcoin 가격 증가로 인해 더 폭등)
→ 2017년 Hard Fork(Segwit)