區(qū)塊
????????區(qū)塊(block)由區(qū)塊頭(block header)和交易列表(transaction list,tx list)組成,block之間通過(guò)block header的hash連接成了一個(gè)鏈表結(jié)構(gòu)。但這個(gè)鏈表不同于普通鏈表。
1. block header
比特幣的block header:
int32_t nVersion;
uint256 hashPrevBlock;
uint256 hashMerkleRoot;
uint32_t nTime;
uint32_t nBits;
uint32_t nNonce;
以太坊的block header:
ParentHash common.Hash `json:"parentHash" gencodec:"required"`
UncleHash common.Hash `json:"sha3Uncles" gencodec:"required"`
Coinbase common.Address `json:"miner" gencodec:"required"`
Root common.Hash `json:"stateRoot" gencodec:"required"`
TxHash common.Hash `json:"transactionsRoot" gencodec:"required"`
ReceiptHash common.Hash `json:"receiptsRoot" gencodec:"required"`
Bloom Bloom `json:"logsBloom" gencodec:"required"`
Difficulty *big.Int `json:"difficulty" gencodec:"required"`
Number *big.Int `json:"number" gencodec:"required"`
GasLimit uint64 `json:"gasLimit" gencodec:"required"`
GasUsed uint64 `json:"gasUsed" gencodec:"required"`
Time uint64 `json:"timestamp" gencodec:"required"`
Extra []byte `json:"extraData" gencodec:"required"`
MixDigest common.Hash `json:"mixHash"`
Nonce BlockNonce `json:"nonce"`
// BaseFee was added by EIP-1559 and is ignored in legacy headers.
BaseFee *big.Int `json:"baseFeePerGas" rlp:"optional"`
-
hashPrevBlock
/ParentHash
,上一個(gè)block header的hash -
hashMerkleRoot
/TxHash
,交易list的hash
TxHash和ParentHash相結(jié)合,賦予了區(qū)塊鏈不可篡改的特性。
2. block body
- block body就是交易list,block header通過(guò)TxHash指向唯一的交易list
- 從tx hash list得到TxHash的hash算法叫做默克爾樹(Merkle tree),相比其他的hash算法有特殊的性質(zhì)(可以簡(jiǎn)潔地證明tx存在其中)
鏈
????????block header通過(guò)ParentHash指向唯一的上個(gè)block header,并最終形成一條鏈。
? ? ? ? 例如:一個(gè)結(jié)構(gòu)體B里面如果包括了一個(gè)指針pa,那這個(gè)結(jié)構(gòu)體就可以指向另一個(gè)結(jié)構(gòu)體A。一個(gè)結(jié)構(gòu)體C里面如果包括了一個(gè)指針pb,那這個(gè)結(jié)構(gòu)體就可以指向另一個(gè)結(jié)構(gòu)體B。以此類推,通過(guò)指針,結(jié)構(gòu)體就可以連起來(lái)。
????????
????????而區(qū)塊鏈?zhǔn)怯?strong>哈希指針(hash pointers)代替了普通指針。哈希指針是一個(gè)可以指向數(shù)據(jù)存儲(chǔ)位置及位置的數(shù)據(jù)的哈希值的指針。??
????????哈希指針:不僅要存放地址,還要存放這個(gè)結(jié)構(gòu)體的哈希值,一般用H表示一個(gè)哈希指針。
???????這樣做的好處是:我們不光可以找到這個(gè)結(jié)構(gòu)體的位置,同時(shí)還能夠檢測(cè)出這個(gè)結(jié)構(gòu)體的內(nèi)容有沒有被篡改,因?yàn)槲覀儽4媪怂墓V怠?/p>
????????最前面的區(qū)塊是系統(tǒng)中產(chǎn)生的第一個(gè)區(qū)塊,叫做創(chuàng)世紀(jì)塊(genesis block),順便說(shuō)一句,比特幣的創(chuàng)世區(qū)塊里,中本聰寫了一句話“The Times 03/Jan/2009 Chancellor on brink of second bailout forbanks.”
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-648283.html
????????最后一個(gè)區(qū)塊是最近產(chǎn)生的區(qū)塊,每個(gè)區(qū)塊都包含指向前一個(gè)區(qū)塊的哈希指針,最后一個(gè)區(qū)塊也有一個(gè)指向它的哈希指針H()保存在系統(tǒng)里。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-648283.html
到了這里,關(guān)于區(qū)塊鏈的數(shù)據(jù)結(jié)構(gòu)(一)——區(qū)塊、鏈的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!