1 VLedger
1.1 vBlock的形成過(guò)程

Illustration of vBlock
- VLedger, 只包含有效交易的賬本
- VLedger中的區(qū)塊我們稱為vBlock
- orderer 節(jié)點(diǎn)只負(fù)責(zé)將打包好的塊傳給peer節(jié)點(diǎn)
- peer節(jié)點(diǎn)收到區(qū)塊以后對(duì)readset的交易記錄進(jìn)行背書(shū)策略驗(yàn)證
- 如果驗(yàn)證通過(guò),一筆交易會(huì)被寫(xiě)進(jìn)writeset;否則被標(biāo)記為無(wú)效交易
- 最后區(qū)塊內(nèi)所有的無(wú)效交易會(huì)被過(guò)濾,只含有有效交易的vBlock被記錄到VLedger中
1.2 vBlock的內(nèi)容
- 前一個(gè)vBlock的hash值
- vBlock序號(hào)
- 有效交易的有序列表(An ordered list of all valid transactions committed by the peers since the last vBlock was computed)
- vBlock原塊的hash值(包含無(wú)效交易的PeerLedger中的塊)
以上所有信息集中后計(jì)算hash作為vBlock的hash值存入VLedger
2 PeerLedger Checkpoint
包含無(wú)效交易的PeerLedger其實(shí)是沒(méi)有必要永久存儲(chǔ)的,但是peer節(jié)點(diǎn)不能在形成vBlock后就直接刪除對(duì)應(yīng)的PeerLedger中的賬本內(nèi)容。否則當(dāng)一個(gè)新的節(jié)點(diǎn)加入網(wǎng)絡(luò)時(shí),網(wǎng)絡(luò)中原有節(jié)點(diǎn)無(wú)法傳輸PeerLedger中的區(qū)塊給新節(jié)點(diǎn),讓新節(jié)點(diǎn)驗(yàn)證vBlock的有效性
因此Hyperledger Fabric建立了checkout point機(jī)制。checkpoint點(diǎn)之前的賬本可以用vBlock代替相應(yīng)PeerLedger中的discarded blocks(checkpoint之前的 discarded block可以被刪除,以節(jié)省存儲(chǔ)空間)
checkpoint形成機(jī)制
- 節(jié)點(diǎn)將自己形成checkout point的消息廣播給其他節(jié)點(diǎn),消息包括
<CHECKPOINT, blocknohash, blockno, stateHash,peerSig> - 一個(gè)節(jié)點(diǎn)針對(duì)一個(gè)<blocknohash, blockno, stateHash>CHECKPOINT消息,只有接收到足夠的peer簽名才會(huì)真正形成一個(gè)有效checkpoint (valid checkpoint)
- 檢查接受到的blockno > latestValidCheckpoint.blockno, 如果是則將本地的valid checkpoint更新到blockno
- 將接收到的所有的peer簽名作為最新檢查點(diǎn)的證據(jù)存儲(chǔ)
- 存儲(chǔ)stateHash
- (可選) 刪除checkpoint之前的PeerLedger中的塊(包含無(wú)效信息的塊)
checkpoint 有效策略
- LCVP 本地有效策略,一個(gè)節(jié)點(diǎn)可以規(guī)定自己的checkpoint 通過(guò)策略。例如,Alice節(jié)點(diǎn)接收到的CHECKPOINT 消息中,只要有Bob簽名,Alice就會(huì)通過(guò);或者同時(shí)有Charlie和Dave的簽名,這條Checkpoint消息就合法
- GCVP 全局有效策略,它是在全局系統(tǒng)粒度上規(guī)定的,而不是節(jié)點(diǎn)的粒度上。比如,GCVP 也許是這樣的:
- 每個(gè)節(jié)點(diǎn)信任一個(gè)檢查點(diǎn),如果該檢查點(diǎn)被 7 個(gè)不同的節(jié)點(diǎn)確認(rèn)。
- 在每個(gè) consenter 同時(shí)是 peer 的部署中,其中,可能最多有 f 個(gè) consenter 是拜占庭錯(cuò)誤的,那么每個(gè)節(jié)點(diǎn)可能會(huì)信任一個(gè)被 f+1 個(gè)不同 consenter 確認(rèn)的 CHECKPOINT 消息。
最新Issue(To do)
https://jira.hyperledger.org/browse/FAB-106
- checkpointed state之前的賬本會(huì)被存檔(archived)
- writeset被消費(fèi)后的(已經(jīng)archived)交易數(shù)據(jù)可以被刪除(保留塊結(jié)構(gòu)數(shù)據(jù),刪除塊內(nèi)交易詳細(xì)數(shù)據(jù))
- 新的peer加入channel時(shí)只從checkpoint state開(kāi)始加入,而不是genesis block中的state