2017-09-16 51 views
2

我想了解Hyperledger結構中的「查詢」事務流。我瞭解織物中的「書寫」流程,因爲它有詳細的記錄。然而,當涉及讀取/查詢事務時,事情並不那麼清楚。讀取(查詢)Hyperledger結構中的事務流

這是我迄今瞭解:

  1. 使用SDK的客戶端準備一個交易提議查詢chaincode。
  2. 該建議通過一個委託對等體傳遞給Endorsing對等體,這些對等體驗證並在它們最後模擬事務。假設一切都成功了,贊同的同行將返回他們對該提案的認可。除其他外,每個背書包含世界各州的讀取組。由於這僅僅是一個查詢事務,所以每個註冊內部都不會添加寫入集。我的理解在這裏正確嗎?
  3. 一旦客戶收到所需的認可金額,它就會準備一份發送給訂貨人的交易。

我不太確定這之後的流量。寫入事務是可以理解的:在執行一些檢查之後,該命令將創建一個塊並將該塊傳播給連接到相應通道的所有對等體。在對塊中的所有交易進行驗證後,所有同行將在分類帳中追加該塊,這實質上會更新分類賬。

但是讀取事務呢?訂閱者在收到讀取交易後會返回什麼內容?以後會有什麼流程?

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

在此先感謝。

回答

2

您可能想看看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

儘管只要符合認可政策,您就不需要將查詢事務的響應發送給訂貨人。感謝戴夫Enyeart爲以下內容:

A query is a chaincode invocation which reads the ledger current state but does 
not write to the ledger. The chaincode function may query certain keys on the ledger, 
or may query for a set of keys on the ledger. Since queries do not change ledger state, 
the client application will typically not submit these read-only transactions for ordering, 
validation, and committal. Although not typical, the client application can choose to 
submit the read-only transaction for ordering, validation, and commit, for example if the 
client wants auditable proof on the ledger chain that it had knowledge of specific ledger 
state at a certain point in time. Peers will validate and add the read-only transaction 
to the ledger chain, but there will be no updates to ledger current state. 
+0

感謝加里的指針。我已經研究過Node SDK API,並且想到了類似於您所提到的內容,因爲它在其他區塊鏈平臺中產生了類似的概念。然而,令我困惑的是官方文檔,在術語表頁面中提到了這一點:「事務是調用或實例化操作,調用是從賬本中讀取/寫入數據的請求」由於事務只能被訂貨者,那麼,當一個訂單可以通過讀取數據請求來接收一個事務?如果從不,詞彙表可能需要更正。謝謝 – Ripul

+0

感謝加里從戴夫的更新。這現在是有道理的。我已經看到文檔已經更新。希望這會爲大家澄清。 – Ripul

+0

我在這裏也有一個疑問,通過nodejs sdk(channel.queryByChaincode)或通過docker cli(作爲fabcar exmaple或第一個n/w示例的一部分可用)查詢事務(只讀,不寫入鏈式代碼函數)始終在鏈上生成一個新的塊。如果它只是一個閱讀,爲什麼它會創建一個新的塊? –