fabric 共識模式深度解析

1 背景

當(dāng)前大家對fabric的共識算法的觀點(diǎn),普遍都認(rèn)為是kafka,而kafka是主從模式,所以不能防止作惡。針對這個觀點(diǎn),詳細(xì)解析fabric的共識模式。

2 fabric共識

fabric共識模式采用的 Endorse+Kafka+Commit 的模式,這里我們簡稱EKC共識。此共識包含以下幾個步驟:

  1. 請求背書:
    客戶端用自己的私鑰對交易進(jìn)行簽名后,按照指定格式將交易和簽名信息進(jìn)行打包,然后將打包后的數(shù)據(jù)發(fā)給背書節(jié)點(diǎn)請求背書。

  2. 驗(yàn)證背書:
    背書節(jié)點(diǎn)收到背書請求后,驗(yàn)證交易的簽名是否正確并調(diào)用智能合約驗(yàn)證交易內(nèi)容是否合法。驗(yàn)證通過的話,背書節(jié)點(diǎn)用自己的私鑰對背書結(jié)果進(jìn)行簽名并按照指定格式打包,然后將打包后的數(shù)據(jù)發(fā)給客戶端。

  3. 提交交易:
    客戶端收到背書結(jié)果后,驗(yàn)證背書結(jié)果的簽名是否正確。驗(yàn)證通過后,對交易請求和背書結(jié)果簽名并打包。然后,把打包后的數(shù)據(jù)發(fā)送給orderer節(jié)點(diǎn)提交交易。

  4. 排序廣播:
    orderer節(jié)點(diǎn)收到交易后,驗(yàn)證數(shù)據(jù)的客戶端簽名[bJ1] 是否正確。驗(yàn)證通過后,將交易發(fā)給kafka集群對應(yīng)的topic。由于orderer中的對于每個通道都在kafka上監(jiān)聽對應(yīng)的消息,因此,kafka將消息存放到對應(yīng)topic上之后,會將消息廣播給通道上的所有orderer。因?yàn)楦鱾€orderer的消息都是由kafka按照相同順序發(fā)送的,因此,這個過程也實(shí)現(xiàn)了消息的排序。

  5. 打包出塊:
    orderer節(jié)點(diǎn)接收到從kafka推送的消息(kafka節(jié)點(diǎn)見同步消息不需要驗(yàn)證),當(dāng)滿足出塊策略[bJ2] :緩存交易個數(shù)達(dá)到區(qū)塊最大交易數(shù)或者時間達(dá)到出快時間,則將交易進(jìn)行打包、對數(shù)據(jù)簽名,然后出塊,并將區(qū)塊分發(fā)給peer節(jié)點(diǎn)。

  6. 驗(yàn)證記賬:
    peer節(jié)點(diǎn)接收到區(qū)塊后,驗(yàn)證交易是否有效即驗(yàn)證區(qū)塊的交易是否滿足背書策略以及區(qū)塊中交易的讀寫集版本是否正確[bJ3] 。驗(yàn)證通過的話,執(zhí)行此交易的內(nèi)容更改狀態(tài)數(shù)據(jù)庫。驗(yàn)證失敗的話,對此條交易不做任何處理。當(dāng)區(qū)塊中的交易全部處理完成后,將區(qū)塊記錄在本地數(shù)據(jù)庫。

3 交互流程圖

flow1.png

4 數(shù)據(jù)流程圖

flow2.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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