Hyperledger Fabric Ledger Checkpoint

原文地址 https://hyperledger-fabric.readthedocs.io/en/release-1.4/arch-deep-dive.html#post-v1-validated-ledger-and-peerledger-checkpointing-pruning

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ī)制

  1. 節(jié)點(diǎn)將自己形成checkout point的消息廣播給其他節(jié)點(diǎn),消息包括
    <CHECKPOINT, blocknohash, blockno, stateHash,peerSig>
  2. 一個(gè)節(jié)點(diǎn)針對(duì)一個(gè)<blocknohash, blockno, stateHash>CHECKPOINT消息,只有接收到足夠的peer簽名才會(huì)真正形成一個(gè)有效checkpoint (valid checkpoint)
    1. 檢查接受到的blockno > latestValidCheckpoint.blockno, 如果是則將本地的valid checkpoint更新到blockno
    2. 將接收到的所有的peer簽名作為最新檢查點(diǎn)的證據(jù)存儲(chǔ)
    3. 存儲(chǔ)stateHash
    4. (可選) 刪除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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容