国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Hyperledger Fabric(編寫你的第一個應用程序)

Hydrogen / 3500人閱讀

摘要:一個更新提案,認可,然后返回到應用程序,然后將其發送給每個對等點的分類帳我們對分類賬的第一次更新將是創建一輛新車,我們有一個多帶帶的程序我們將用它來進行更新。

編寫第一個應用程序
如果你還不熟悉Fabric網絡的基本架構,則可能需要在繼續之前訪問“介紹”和“構建你的第一個網絡”文檔。

在本節中,我們將介紹一些示例程序,以了解Fabric應用程序的工作原理,這些應用程序(以及他們使用的智能合約) - 統稱為fabcar - 提供了Fabric功能的廣泛演示。值得注意的是,我們將展示與證書頒發機構進行交互并生成注冊證書的過程,之后我們將利用這些身份來查詢和更新分類帳。

我們將經歷三個主要步驟:

1.設置開發環境。我們的應用程序需要一個網絡進行交互,因此我們將下載一個僅限于我們所需的注冊/登記,查詢和更新的組件:

2.學習我們的應用程序將使用的示例智能合約的參數。我們的智能合約包含各種功能,使我們能夠以不同的方式與分類帳進行交互,我們將進入并檢查該智能合約,以了解我們的應用程序將使用的功能。

3.開發應用程序以便能夠在分類帳上查詢和更新資產。我們將進入應用程序代碼本身(我們的應用程序已用Javascript編寫)并手動操作變量以運行不同類型的查詢和更新。

完成本教程后,你應該基本了解應用程序如何與智能合約一起編程,以與Fabric網絡上的分類帳(即對等方)進行交互。

設置開發環境

如果你已經完成了構建你的第一個網絡,你應該已經設置了你的開發環境,并且已經下載了fabric-samples以及隨附的工件。要運行本教程,你現在需要做的就是拆除現有的任何網絡,你可以通過發出以下命令來執行此操作:

./byfn.sh down

如果你沒有開發環境以及網絡和應用程序的附帶工件,訪問“前提條件”頁面,確保你的計算機上已安裝必要的依賴項。

接下來,如果你還沒有這樣做的話,訪問”安裝示例、二進制文件和Docker鏡像“頁面并按照提供的說明進行操作。克隆fabric-samples存儲庫后返回本教程,并下載最新的穩定Fabric鏡像和可用實用程序。

此時所有的都應該已安裝,導航到fabric-samples存儲庫中的fabcar子目錄,并查看內部的內容:

cd fabric-samples/fabcar  && ls

你應該看到以下內容:

enrollAdmin.js     invoke.js       package.json    query.js        registerUser.js startFabric.sh

在開始之前,我們還需要做一些家務,運行以下命令以終止任何陳舊或活動容器:

docker rm -f $(docker ps -aq)

清除所有緩存的網絡:

# Press "y" when prompted by the command

docker network prune

最后,如果你已經完成本教程,你還需要刪除fabcar智能合約的基礎鏈碼鏡像,如果你是第一次瀏覽此內容的用戶,那么你的系統上將不會顯示此鏈碼鏡像:

docker rmi dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba
安裝客戶端并啟動網絡
以下說明要求你位于fabric-samples repo的本地克隆中的fabcar子目錄中,在本教程的其余部分中,保留在此子目錄的根目錄下。

運行以下命令以安裝應用程序的Fabric依賴項,我們關注fabric-ca-client,它允許我們的應用程序與CA服務器通信并檢索身份資料,還有fabric-client,它允許我們加載身份資料并與對等點和排序服務交流。

npm install

使用startFabric.sh shell腳本啟動網絡,此命令將啟動我們的各種Fabric實體,并為Golang編寫的鏈碼啟動智能合約容器:

./startFabric.sh

你還可以選擇針對Node.js中編寫的鏈碼運行本教程,如果你想追求這條路線,請發出以下命令:

./startFabric.sh node
請注意,Node.js鏈碼場景大約需要90秒才能完成;也許更長。腳本沒有掛起,而是增加的時間是在構建鏈碼鏡像時安裝fabric-shim的結果。

好了,現在你有一個示例網絡和一些代碼,讓我們來看看不同的部分如何組合在一起。

應用程序如何與網絡交互

要更深入地了解我們fabcar網絡中的組件(以及它們如何部署)以及應用程序如何在更精細的級別上與這些組件進行交互,請參閱了解Fabcar網絡。

開發人員更有興趣了解應用程序的作用 - 以及查看代碼本身以查看應用程序的構建方式 - 應該繼續下去,目前,最重要的是要知道應用程序使用軟件開發工具包(SDK)來訪問允許查詢和更新分類帳的API。

登記管理員用戶
以下兩節涉及與證書頒發機構的通信,你可能會發現當運行即將到來的程序時流式傳輸CA日志很有用。

要流式傳輸CA日志,請拆分終端或打開新shell并發出以下命令:

docker logs -f ca.example.com

現在回到帶著fabcar內容的終端……

當我們啟動我們的網絡,管理員用戶 - admin - 已在我們的證書頒發機構注冊,現在我們需要向CA服務器發送登記調用,并為該用戶檢索登記證書(eCert)。我們不會在這里深入研究登記詳情,但只需說SDK和擴展我們的應用程序需要此證書才能為管理員形成用戶對象,然后我們將使用此管理員對象隨后注冊并登記新用戶,發送管理員登記調用到CA服務器:

node enrollAdmin.js

該程序將調用證書簽名請求(CSR)并最終將eCert和密鑰材料輸出到新創建的文件夾 - hfc-key-store - 該項目的根目錄下,當我們的應用需要為各種用戶創建或加載身份對象時會查看此位置。

注冊并登記user1

使用我們新生成的管理員eCert,我們現在將再次與CA服務器通信以注冊和登記新用戶。此用戶 - user1 - 將是我們在查詢和更新分類帳時使用的身份。這里需要注意的是,管理員身份是為我們的新用戶發出注冊和登記調用(即該用戶扮演注冊員的角色),發送為user1注冊并登記的調用:

node registerUser.js

與管理員登記類似,該程序調用CSR并將密鑰和eCert輸出到hfc-key-store子目錄中,所以現在我們有兩個獨立用戶的身份資料 - adminuser1,是時候與分類賬互動了......

查詢分類帳

查詢是你從分類帳中讀取數據的方式,該數據存儲為一系列鍵值對,并且你可以查詢單個鍵,多個鍵的值,或者 - 如果分類帳是以JSON等豐富的數據存儲格式編寫的 - 對其執行復雜搜索(例如,查找包含特定關鍵字的所有資產)。

這是查詢如何工作的表示:

首先,讓我們運行query.js程序,返回分類帳中所有汽車的清單,我們將使用我們的第二個身份 - user1 - 作為此應用程序的簽名實體,我們程序中的以下行將user1指定為簽名者:

fabric_client.getUserContext("user1", true);

回想一下,user1登記資料已經放入我們的hfc-key-store子目錄中,所以我們只需要告訴我們的應用程序獲取該身份,隨著用戶對象的定義,我們現在可以從分類賬中繼續讀取。一個查詢所有汽車的功能,queryAllCars,已預先加載到應用程序中,因此我們可以簡單地按原樣運行程序:

node query.js

它應該返回這樣的東西:

Successfully loaded user1 from persistence
Query has completed, checking results
Response is  [{"Key":"CAR0", "Record":{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}},
{"Key":"CAR1",   "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},
{"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},
{"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},
{"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},
{"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},
{"Key":"CAR6", "Record":{"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},
{"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},
{"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},
{"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]

這些是10輛車,Adriana擁有的黑色特斯拉Model S,Brad擁有的紅色福特Mustang,Pari擁有的紫羅蘭菲亞特Punto,等等。分類帳是基于鍵值的,在我們的實現中,鍵是CAR0CAR9,這將在一瞬間變得特別重要。

讓我們仔細看看這個程序,使用編輯器(例如atom或visual studio)并打開query.js

應用程序的初始部分定義了某些變量,例如通道名稱,證書存儲位置和網絡端點,在我們的示例應用中,這些變量已被植入,但在真正的應用程序中,這些變量必須由app dev指定。

var channel = fabric_client.newChannel("mychannel");
var peer = fabric_client.newPeer("grpc://localhost:7051");
channel.addPeer(peer);

var member_user = null;
var store_path = path.join(__dirname, "hfc-key-store");
console.log("Store path:"+store_path);
var tx_id = null;

這是我們構造查詢的塊:

// queryCar chaincode function - requires 1 argument, ex: args: ["CAR4"],
// queryAllCars chaincode function - requires no arguments , ex: args: [""],
const request = {
  //targets : --- letting this default to the peers assigned to the channel
  chaincodeId: "fabcar",
  fcn: "queryAllCars",
  args: [""]
};

當應用程序運行時,它調用了對等點的fabcar鏈碼,在其中運行queryAllCars函數,并且沒有傳遞任何參數。

要了解我們智能合約中的可用功能,導航到fabric-samples根目錄下的chaincode/fabcar/go子目錄,并在編輯器中打開fabcar.go

這些相同的功能在fabcar鏈碼的Node.js版本中定義。

你將看到我們可以調用以下函數:initLedgerqueryCarqueryAllCarscreateCarchangeCarOwner

讓我們仔細看看queryAllCars函數,看看它如何與分類帳交互。

func (s *SmartContract) queryAllCars(APIstub shim.ChaincodeStubInterface) sc.Response {

      startKey := "CAR0"
      endKey := "CAR999"

      resultsIterator, err := APIstub.GetStateByRange(startKey, endKey)

這定義了queryAllCars的范圍,CAR0CAR999之間的每輛車 - 總共1,000輛車,假設每個鍵都已正確標記 - 將由查詢返回。

下面是一個應用程序如何在鏈碼中調用不同函數的表示,每個函數都必須在鏈碼shim接口中針對可用的API進行編碼,這反過來又允許智能合約容器與對等點分類帳正確連接。

我們可以看到我們的queryAllCars函數,以及一個名為createCar的函數,它將允許我們更新分類帳并最終在一瞬間將新區塊附加到鏈中。

但首先,返回query.js程序并編輯構造函數請求以查詢CAR4,我們通過將query.js中的函數從queryAllCars更改為queryCar并將CAR4作為特定鍵傳遞來完成此操作。

query.js程序現在看起來應該是這樣的:

const request = {
  //targets : --- letting this default to the peers assigned to the channel
  chaincodeId: "fabcar",
  fcn: "queryCar",
  args: ["CAR4"]
};

保存程序并導航回fabcar目錄,現在再次運行程序:

node query.js

你應該看到以下內容:

{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}

如果你回過頭來看看我們之前查詢過每輛車的結果,你可以看到CAR4是Adriana的黑色特斯拉型號S,這是在這里返回的結果。

使用queryCar函數,我們可以查詢任何鍵(例如CAR0)并獲取與該車相對應的任何品牌,型號,顏色和所有者。

很好,此時你應該熟悉智能合約中的基本查詢功能以及查詢程序中的少數參數,是時候更新分類帳.....

更新分類帳

現在我們已經完成了一些分類帳查詢并添加了一些代碼,我們準備更新分類帳,我們可以做很多潛在的更新,但讓我們從創建汽車開始吧。

下面我們可以看到這個過程如何運作。一個更新提案,認可,然后返回到應用程序,然后將其發送給每個對等點的分類帳:

我們對分類賬的第一次更新將是創建一輛新車,我們有一個多帶帶的Javascript程序 - invoke.js - 我們將用它來進行更新。就像查詢一樣,使用編輯器打開程序并導航到我們構造調用的代碼塊:

// createCar chaincode function - requires 5 args, ex: args: ["CAR12", "Honda", "Accord", "Black", "Tom"],
// changeCarOwner chaincode function - requires 2 args , ex: args: ["CAR10", "Barry"],
// must send the proposal to endorsing peers
var request = {
  //targets: let default to the peer assigned to the client
  chaincodeId: "fabcar",
  fcn: "",
  args: [""],
  chainId: "mychannel",
  txId: tx_id
};

你將看到我們可以調用兩個函數之一 - createCarchangeCarOwner,首先,讓我們創建一個紅色雪佛蘭Volt并將其交給名為Nick的所有者,我們的分類帳上有CAR9,所以我們在這里使用CAR10作為識別鍵,編輯此代碼塊如下所示:

var request = {
  //targets: let default to the peer assigned to the client
  chaincodeId: "fabcar",
  fcn: "createCar",
  args: ["CAR10", "Chevy", "Volt", "Red", "Nick"],
  chainId: "mychannel",
  txId: tx_id
};

保存并運行程序:

node invoke.js

終端中會有一些關于ProposalResponse和promises的輸出,但是,我們所關注的是這條消息:

The transaction has been committed on peer localhost:7053

查看該交易是否已寫入,返回query.js并將參數從CAR4更改為CAR10

換句話說,改變這一點:

const request = {
  //targets : --- letting this default to the peers assigned to the channel
  chaincodeId: "fabcar",
  fcn: "queryCar",
  args: ["CAR4"]
};

為這樣:

const request = {
  //targets : --- letting this default to the peers assigned to the channel
  chaincodeId: "fabcar",
  fcn: "queryCar",
  args: ["CAR10"]
};

再次保存,然后查詢:

node query.js

應該返回這些:

Response is  {"colour":"Red","make":"Chevy","model":"Volt","owner":"Nick"}

恭喜,你創造了一輛車!

所以現在我們已經做到了,讓我們說Nick感到很慷慨,他想把他的雪佛蘭伏特送給名叫Dave的人。

要做到這一點,請返回invoke.js并將函數從createCar更改為changeCarOwner并輸入如下參數:

var request = {
  //targets: let default to the peer assigned to the client
  chaincodeId: "fabcar",
  fcn: "changeCarOwner",
  args: ["CAR10", "Dave"],
  chainId: "mychannel",
  txId: tx_id
};

第一個參數 - CAR10 - 反映了將改變擁有者的汽車,第二個參數 - Dave - 定義了汽車的新擁有者。

再次保存并執行程序:

node invoke.js

現在讓我們再次查詢分類帳并確保Dave現在與CAR10鍵相關聯:

node query.js

它應該返回這個結果:

Response is  {"colour":"Red","make":"Chevy","model":"Volt","owner":"Dave"}

CAR10的所有權已從Nick改為Dave。

在現實世界的應用程序中,鏈碼可能具有一些訪問控制邏輯,例如,只有某些授權用戶可以創建新車,并且只有車主可以將車轉移給其他人。
總結

現在我們已經完成了一些查詢和一些更新,你應該非常清楚應用程序如何與網絡交互,已經看到了智能合約,API和SDK在查詢和更新中扮演的角色的基礎知識,你應該了解如何使用不同類型的應用程序來執行其他業務任務和操作。

在隨后的文檔中,我們將學習如何實際編寫智能合約,以及如何利用其中一些更低級別的應用程序功能(特別是與身份和成員資格服務相關)。

其他資源

Hyperledger Fabric Node SDK repo是深入文檔和示例代碼的絕佳資源,你還可以在Hyperledger Rocket Chat上咨詢Fabric社區和組件專家。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24238.html

相關文章

  • Hyperledger Fabric(目錄)

    摘要:企業區塊鏈平臺企業級許可的分布式分類賬平臺,為廣泛的行業用例提供模塊化和多功能性。這些節點通過應用已經由共識協議驗證的交易來維護分類帳的副本,該交易被分組為包括將每個塊綁定到前一個塊的散列的塊中。 企業區塊鏈平臺 企業級許可的分布式分類賬平臺,為廣泛的行業用例提供模塊化和多功能性。 介紹 一般而言,區塊鏈是一個不可變的交易分類賬,維護在一個分布式對等節點網絡中。這些節點通過應用已經由共...

    trigkit4 評論0 收藏0
  • Hyperledger Fabric(關鍵概念介紹)

    摘要:還提供創建通道的功能,允許一組參與者創建單獨的交易分類賬。共識交易必須按照發生的順序寫入分類賬,即使它們可能位于網絡中不同的參與者組之間。 介紹 Hyperledger Fabric是分布式分類賬解決方案的平臺,采用模塊化架構,提供高度機密性,彈性,靈活性和可擴展性,它旨在支持不同組件的可插拔實現,并適應整個經濟生態系統中存在的錯綜復雜的事物和復雜性。 我們建議首次使用的用戶首先閱讀下...

    joy968 評論0 收藏0
  • SegmentFault 技術周刊 Vol.41 - 深入學習區塊鏈

    摘要:和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。超級賬本區塊鏈的商業應用超級賬本超級賬本是基金會下的眾多項目中的一個。證書頒發機構負責簽發撤 showImg(https://segmentfault.com/img/bV2ge9?w=900&h=385); 從比特幣開始 一個故事告訴你比特幣的原理及運作機制 這篇文章的定位會比較科普,盡量用類比的方法將比特幣的基本原理講出來...

    qianfeng 評論0 收藏0
  • Hyperledger Fabric(構建的第一個網絡)

    摘要:構建你的第一個網絡方案提供了一個包含兩個組織的示例網絡,每個組織維護兩個對等節點,以及一個獨立排序服務。它還將啟動一個容器來運行腳本執行,該執行將對等點連接到一個通道,部署和實例化鏈碼并驅動針對部署的鏈碼執行交易。 構建你的第一個網絡 這些說明已經過驗證,可以與最新的穩定Docker鏡像和提供的tar文件中預編譯的安裝實用程序一起工作,如果使用當前主分支中的鏡像或工具運行這些命令,則可...

    XUI 評論0 收藏0
  • Hyperledger Fabric on SAP Cloud Platform

    摘要:在她的幫助下,原型發布順利完成。節點收到一個交易后,會根據判斷標準對該交易進行有效性校驗,無效的交易會被廢棄。負責權限管理,成員身份相關證書管理和維護交易相關證書管理等等。 今天的文章來自Wen Aviva, 坐Jerry面對面的程序媛。 Jerry在之前的公眾號文章《在SAP UI中使用純JavaScript顯示產品主數據的3D模型視圖》已經介紹過Aviva了,SAP成都C4C開發團...

    codergarden 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<