비트코인 CBlockIndex 구조

Words
41
Reading
1 min
Listen
Play
8y

비트코인의 블록헤더와 내용이 중첩되는것이 많습니다.

hash
prev pointer, pskip pointer
Height
File, DataPos,UndoPos : 파일에 저장관련 내용
ChainWork
Tx
ChainTx
Status
Version
hashMerkleRoot
Time
Bits
Nounce
SequenceId, TimeMax
MedianTimeSpan

블록을 비교,연결하는 핵심 클래스입니다. 위에서 핵심은 status입니다. status 상태로 블록의 유효성을 파악합니다.

 enum BlockStatus: uint32_t {
     BLOCK_VALID_UNKNOWN      =    0, 
     BLOCK_VALID_HEADER       =    1, 
     BLOCK_VALID_TREE         =    2, 
     BLOCK_VALID_TRANSACTIONS =    3, 
     BLOCK_VALID_CHAIN        =    4, 
     BLOCK_VALID_SCRIPTS      =    5, 
     BLOCK_VALID_MASK         =   BLOCK_VALID_HEADER | BLOCK_VALID_TREE | BLOCK_VALID_TRANSACTIONS |
                                  BLOCK_VALID_CHAIN | BLOCK_VALID_SCRIPTS,
 
     BLOCK_HAVE_DATA          =    8, 
     BLOCK_HAVE_UNDO          =   16, 
     BLOCK_HAVE_MASK          =   BLOCK_HAVE_DATA | BLOCK_HAVE_UNDO,
 
     BLOCK_FAILED_VALID       =   32, 
     BLOCK_FAILED_CHILD       =   64, 
     BLOCK_FAILED_MASK        =   BLOCK_FAILED_VALID | BLOCK_FAILED_CHILD,
 
     BLOCK_OPT_WITNESS       =   128, 
 };