小編給大家分享一下Hyperledger composer如何實現(xiàn)查詢,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)公司是一家集做網站、成都做網站、網站頁面設計、網站優(yōu)化SEO優(yōu)化為一體的專業(yè)的建站公司,已為成都等多地近百家企業(yè)提供網站建設服務。追求良好的瀏覽體驗,以探求精品塑造與理念升華,設計最適合用戶的網站頁面。 合作只是第一步,服務才是根本,我們始終堅持講誠信,負責任的原則,為您進行細心、貼心、認真的服務,與眾多客戶在蓬勃發(fā)展的市場環(huán)境中,互促共生。
本地查詢語言可以過濾使用條件返回的結果,并且可以在事務中調用該結果以執(zhí)行操作,例如更新或移除結果集上的資產。
查詢.qry
在業(yè)務網絡定義的父目錄中的查詢文件()中定義。查詢包含WHERE子句,該子句定義選擇資產或參與者的標準。
1.1 模型文件必須更新以包含事件和新事務,打開model的(.cto
)文件tutorial-network
,在它的基礎上添加
event TradeNotification { --> Commodity commodity } transaction RemoveHighQuantityCommodities { } event RemoveNotification { --> Commodity commodity }
1.2 打開交易處理器功能文件lib/logic.js,
用下面的JavaScript替換事務邏輯
/** * Track the trade of a commodity from one trader to another * @param {org.example.mynetwork.Trade} trade - the trade to be processed * @transaction */ async function tradeCommodity(trade) { // set the new owner of the commodity trade.commodity.owner = trade.newOwner; let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); // emit a notification that a trade has occurred let tradeNotification = getFactory().newEvent('org.example.mynetwork', 'TradeNotification'); tradeNotification.commodity = trade.commodity; emit(tradeNotification); // persist the state of the commodity await assetRegistry.update(trade.commodity); } /** * Remove all high volume commodities * @param {org.example.mynetwork.RemoveHighQuantityCommodities} remove - the remove to be processed * @transaction */ async function removeHighQuantityCommodities(remove) { let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); let results = await query('selectCommoditiesWithHighQuantity'); for (let n = 0; n < results.length; n++) { let trade = results[n]; // emit a notification that a trade was removed let removeNotification = getFactory().newEvent('org.example.mynetwork','RemoveNotification'); removeNotification.commodity = trade; emit(removeNotification); await assetRegistry.remove(trade); } }
第一個功能tradeCommodity
將更改商品(擁有新的所有者參與者)上的所有者財產,以傳入交易事務并發(fā)出通知事件。然后,它將修改的商品保留回用于存儲商品實例的資產注冊表中。
第二個函數(shù)調用命名查詢'selectCommoditiesWithHighQuantity'(定義于queries.qry
),它將返回數(shù)量大于60的所有商品資產記錄; 發(fā)出一個事件; 并從AssetRegistry中移除商品。
2.1 在tutorial-network
目錄中,創(chuàng)建一個名為的新文件queries.qry
2.2 將以下代碼復制并粘貼到queries.qry
/** Sample queries for Commodity Trading business network */ query selectCommodities { description: "Select all commodities" statement: SELECT org.example.mynetwork.Commodity } query selectCommoditiesByExchange { description: "Select all commodities based on their main exchange" statement: SELECT org.example.mynetwork.Commodity WHERE (mainExchange==_$exchange) } query selectCommoditiesByOwner { description: "Select all commodities based on their owner" statement: SELECT org.example.mynetwork.Commodity WHERE (owner == _$owner) } query selectCommoditiesWithHighQuantity { description: "Select commodities based on quantity" statement: SELECT org.example.mynetwork.Commodity WHERE (quantity > 60) }
在更改業(yè)務網絡中的文件后,必須將業(yè)務網絡重新打包為業(yè)務網絡存檔(.bna
)并重新部署到Hyperledger Fabric實例。升級部署的網絡需要部署的新版本具有新的版本號
3.1 在tutorial-network
目錄中,打開package.json
文件
3.2 將版本屬性更新0.0.1
為0.0.2
3.3 使用命令行,導航到該tutorial-network
目錄,執(zhí)行以下命令
composer archive create --sourceType dir --sourceName . -a tutorial-network@0.0.2.bna
我們需要部署修改后的網絡,以成為區(qū)塊鏈上的最新版本!我們正在使用新創(chuàng)建的歸檔業(yè)務網絡歸檔文件來更新現(xiàn)有的已部署業(yè)務網絡; 這是我們在開發(fā)者教程中使用的相同的商業(yè)網絡名稱。
4.1 切換到終端,將目錄切換到包含該文件夾的文件夾tutorial-network@0.0.2.bna
4.2 運行以下命令安裝更新的業(yè)務網絡
composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.2.bna
4.3 運行以下命令將網絡升級到新版本
composer network upgrade -c PeerAdmin@hlfv1 -n tutorial-network -V 0.0.2
4.4 在繼續(xù)使用以下命令之前,檢查當前版本的業(yè)務網絡:
composer network ping -c admin@tutorial-network | grep Business
現(xiàn)在我們將整合最新更新的業(yè)務網絡和添加的查詢,并公開此業(yè)務網絡的REST API。
5.1 使用以下命令啟動REST服務器:
composer-rest-server
5.2 輸入admin@tutorial-network
卡名稱
5.3 詢問是否在生成的API中使用名稱空間時,請選擇不使用名稱空間。
5.4 當詢問是否保護生成的API時選擇否。
5.5 當詢問是否啟用事件發(fā)布時,選擇是
5.6 當被問及是否啟用TLS安全時,請選擇否。
6.1 打開Web瀏覽器并導航到http://localhost:3000/explorer。您應該看到LoopBack API Explorer,允許您檢查和測試生成的REST API。
6.2 首先,在REST Explorer中點擊'Trader',然后點擊/ Trader上的'POST'方法,然后向下滾動到Parameter部分 - 依次創(chuàng)建以下Trader實例,內容是:
{ "$class": "org.example.mynetwork.Trader", "tradeId": "TRADER1", "firstName": "Jenny", "lastName": "Jones" }
6.3 點擊“試用”來創(chuàng)建參與者。'響應代碼'(向下滾動)應該是200(SUCCESS),由于成功界面太長,所以需要三個截圖
6.4 按照上面的操作,重復執(zhí)行兩次,代碼不同,通過復制以下JSON創(chuàng)建第二個交易者
{ "$class": "org.example.mynetwork.Trader", "tradeId": "TRADER2", "firstName": "Jack", "lastName": "Sock" }
6.5 第三個交易者
{ "$class": "org.example.mynetwork.Trader", "tradeId": "TRADER3", "firstName": "Rainer", "lastName": "Valens" }
6.6 現(xiàn)在滾動到頂部,然后在REST Explorer中單擊“商品”對象
6.7 點擊POST操作并向下滾動到參數(shù)部分:以與上述相同的方式,為所有者TRADER1和TRADER2創(chuàng)建兩個商品資產記錄
{ "$class": "org.example.mynetwork.Commodity", "tradingSymbol": "EMA", "description": "Corn", "mainExchange": "EURONEXT", "quantity": 10, "owner": "resource:org.example.mynetwork.Trader#TRADER1" }
{ "$class": "org.example.mynetwork.Commodity", "tradingSymbol": "CC", "description": "Cocoa", "mainExchange": "ICE", "quantity": 80, "owner": "resource:org.example.mynetwork.Trader#TRADER2" }
現(xiàn)在我們擁有資產和參與者,我們可以嘗試一些查詢,我們可以首先嘗試的最簡單的REST查詢是我們的命名查詢selectCommodities
。展開“查詢”REST端點,您將看到我們在模型中定義的命名查詢。這些查詢現(xiàn)在作為REST查詢公開,并為其生成一個/ GET操作。請注意,查詢的描述(我們在模型定義中定義的)顯示在右側。
7.1 執(zhí)行簡單的REST查詢
然后try it out 出現(xiàn)結果正是剛剛添加的那兩個如圖,
7.2 執(zhí)行篩選的REST查詢
展開查詢端點'selectCommoditiesByExchange'并滾動到'參數(shù)'部分。
在'Exchange'參數(shù)中輸入'EURONEXT',點擊“試用”。
結果為:
7.3 使用來自命名查詢的結果執(zhí)行事務更新
最后,您會記得我們已經定義了一個簡單的查詢,用于在我們的查詢文件中篩選數(shù)量大于60的商品。在事務功能中使用時,查詢功能非常強大,因為使用查詢可以允許事務邏輯設置一組資產或參與者來執(zhí)行更新或創(chuàng)建刪除操作。
我們selectCommoditiesWithHighQuantity
在removeHighQuantityCommodities
交易中使用查詢。如果您在REST資源管理器中執(zhí)行此/ GET操作,您會看到它僅選擇數(shù)量大于60的資產。
點擊
篩選結果:
看完了這篇文章,相信你對“Hyperledger composer如何實現(xiàn)查詢”有了一定的了解,如果想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!