簡體   English   中英

Hyperledger Fabric 中的讀取(查詢)交易流程

[英]Read (query) transaction flow in Hyperledger Fabric

我試圖了解 Hyperledger Fabric 中的“查詢”交易流程。 我理解 Fabric 中的“寫入”流程,因為它有很好的文檔記錄。 但是,當涉及讀取/查詢事務時,事情就不是那么清楚了。

這是我到目前為止所理解的:

  1. 使用 SDK 的客戶端准備用於查詢鏈碼的交易提議。
  2. 該提案通過提交對等方傳輸到背書對等方,這些對等方驗證並模擬最終的交易。 假設一切都成功,背書的同行會返回他們對提案的背書。 除其他外,每個背書都包含世界狀態的讀取集。 由於這只是一個查詢交易,一個寫集是不是每個ensorsement里面添加。 我的理解在這里正確嗎?
  3. 一旦客戶收到所需數量的背書,它就會准備發送給訂購者的交易。

我不太確定這之后的流程。 寫交易是可以理解的:訂單在執行一些檢查后,將創建一個塊並將該塊傳播到連接到相應通道的所有對等點。 在對區塊中的所有交易進行驗證后,所有對等方都會將區塊附加到賬本中,這實質上更新了賬本。

但是讀事務呢? 訂購者在收到讀取交易后會返回什么? 以后會怎樣?

任何幫助或指示將不勝感激。

提前致謝。

您可能想查看https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.js ,其中演示了如何使用 Node SDK 進行查詢。 您會注意到它使用 SDK 提供的便捷方法https://fabric-sdk-node.github.io/Channel.html#queryByChaincode__anchor來幫助方便查詢。

根據您在帖子中概述的流程,步驟 1 和 2 是正確的。
此外,用於查詢交易的鏈碼函數通常會使用https://godoc.org/github.com/hyperledger/fabric/core/chaincode/shim#Success輔助函數來實際返回查詢結果。 在我上面發布的示例中, https://github.com/hyperledger/fabric-samples/blob/release/fabcar/query.js#L51調用https://github.com/hyperledger/fabric-samples/blob/release /chaincode/fabcar/fabcar.go#L135

無需將查詢交易的響應發送給排序者,但只要滿足背書策略即可。 感謝 Dave Enyeart 提供以下內容:

查詢是一個鏈碼調用,它讀取賬本當前狀態但不寫入賬本。 鏈碼函數可以查詢賬本上的某些鍵,也可以查詢賬本上的一組鍵。 由於查詢不會更改分類帳狀態,因此客戶端應用程序通常不會提交這些只讀事務以進行排序、驗證和提交。 雖然不典型,但客戶端應用程序可以選擇提交只讀事務以進行排序、驗證和提交,例如,如果客戶端想要在賬本鏈上提供可審計的證據,證明它在某個時間點了解特定的賬本狀態. Peers 將驗證只讀交易並將其添加到賬本鏈,但不會更新賬本當前狀態。

這似乎與您在回答此問題時發布的內容相矛盾: 超級賬本中的角色(讀+寫)

您在此處描述的行為是有道理的,而上述答案中的行為似乎完全被破壞了。 然而,似乎不允許頻道上的讀者執行調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM