이번 포스팅의 선수지식으로는 해쉬함수와 비트코인의 utxo, transaction에 관한 지식이 있어야합니다. 만약 잘 모르신다면 아래 링크를 참고하세요.
비트코인의 UTXO란? up-to-date-items.tistory.com/91
비트코인은 각 블록들이 연결되어있는 형태입니다. 그럼 각 블록은 어떻게 이루어져 있을까요?
Mastering Bitcoin에 보면 다음과 같이 나와있습니다.
- Block Size (블락의 크기를 나타내는 것으로 4bytes로 나타냅니다.)
- Block Header (아래에서 조금 더 자세히 알아보겠습니다.)
- Transaction Counter (transactions들이 얼마나 있는지 나타내는 것으로 1~9bytes로 나타내어집니다.)
- Transactions (여러 transaction들입니다.)
Block Header를 제외한 나머지는 직관적입니다. 그럼 이제 Block Header에 대해 자세히 알아보겠습니다.
Block Header는 비트코인의 채굴과도 관련이 있기 때문에 상당히 중요합니다. 총 80 bytes이며 아래와 같은 구조로 이루어져 있습니다.
- Version (4 bytes)
- Previous Block Hash (32 bytes)
- Merkle Root (32 bytes)
- Timestamp (4 bytes)
- Difficulty Target (4 bytes)
- Nonce (4 bytes)
여기서 Version은 현재 Bitcoin software/protocol의 버젼을 나타내는 것이므로 우리가 그렇게 신경쓸 것은 아닙니다.
Timestamp역시 블록이 언제 생성되었는지에 대한 정보가 전부입니다.
Difficulty Target과 Nonce는 비트코인의 채굴원리 글에서 다룹니다.
비트코인의 채굴원리: up-to-date-items.tistory.com/103
Merkle Tree는 아래 링크를 참고하세요.
비트코인의 머클트리: up-to-date-items.tistory.com/96
그럼 이제 Previous Block Hash에 관한 설명과 왜 비트코인이 보안적인 강점이 있는지 알아보겠습니다.
Previous Block Hash는 이전 블록의 해쉬를 나타내는 것입니다.
예를 들어 현재 블록번호가 5번이라면 5번 블록의 block header는 4번블록을 해쉬함수에 넣은 결과값을 가지고 있는 것입니다.
즉, 각 블록은 이전 블록의 정보를 가지고 있고 각 블록들이 모두 연결되어있기 때문에 특정블록을 조작하려면 그 블록부터 첫번째 블록까지 모두 조작해야합니다. 그런데 블록6개만 넘어가도 어마어마한 계산량이 필요하므로 현재 기술로써는 불가능에 가깝기때문에 여기서 비트코인의 강점이 발생하는 것입니다.
착각할만한 사실중 하나는 각 블록은 Previous Block Hash는 가지고 있지만 자신의 Block Hash는 가지고 있지 않다는 점입니다.
Mastering Bitcoin에는 이렇게 나와있습니다.
The block's hash is computed by each node as the block is received from the network.
즉, ...
각 블록해쉬들은 빠른 인덱싱을 위해 별개의 데이터베이스 테이블에 저장되어있습니다.
'Bitcoin' 카테고리의 다른 글
비트코인에서의 Base58 인코딩 (0) | 2021.03.18 |
---|---|
비트코인의 머클트리(Merkle Tree) (0) | 2021.03.17 |
비트코인의 Bloom Filters (0) | 2021.03.16 |
비트코인의 SPV Nodes (0) | 2021.03.16 |
비트코인의 네트워크(새로운 노드가 추가되는 원리) (0) | 2021.03.15 |