您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Hyperledger Composer架構的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
首先我們先看一下官方網站放出的一張示意圖:
Composer-Diagram.png
很明顯可以看出,Hyperledger對這個項目的定位是Fabric的上層,由Composer創建出Model File(.cto文件), Script File(.js文件), ACL(.acl文件), Query File(.qry文件)等等,進行打包成一個商業網絡文件(.bna文件),發布到Fabric網絡中。
它的作用很明顯,就是加快Fabric項目的開發和部署的一個官方工具。在使用前需要先對商業模型進行快速建模。比如一個買賣房屋的商業模型如下:
Assets(資產): 房屋清單
Participants(參與者): 購買人和屋主
Transactions(交易過程): 完成買賣房屋,結算清單
參與者可以訪問交易數據,但是受限于他們的角色。房屋中介可以創建一個應用程序,為買賣雙方提供一個簡單的用戶接口,看到交易的過程。商業網絡也可以集成已有的庫存系統,完成房屋資產的轉移。另外其他相關的角色都可以注冊加入到這個網絡成為參與者,比如土地局可能會參與到交易中,完成土地所有權轉移。
Composer是一個編程模型,包含一種建模語言,以及一組API,用于快速建網和應用程序,允許參與者發起交易,轉移資產(Assets)。
Composer提供了兩套組件,一個基于瀏覽器的UI Playgroud,用于演示和展示本地Fabric網絡。此外還提供一套開發工具集,為開發者提供便利的開發框架。
Blockchain State Storage
這里就是區塊鏈的概念了,交易歷史和資產都會直接保存在區塊鏈上,用區塊鏈做存儲。
Connection Profiles
就是一組JSON配置文件,Composer通過這組被稱為Connection Profiles配置文件,定義了應該連接到哪個系統上。Connection Profile通常需要由系統創建者提供,定義了各種網絡連接參數。
Assets
這里的資產(Assets)可以指代任何有型的和無形的資產,可以上鏈的一切可交易的商品,都可以作為資產。
Assets必須有唯一標識符,此外,還可以添加一些額外的信息,用于關聯其他資產或者參與者等等。
Participants
參與者(Participants)是商業網絡的成員,可以擁有資產或發起交易。參與者也是模型化的,跟資產一樣,必須有唯一的標識符,此外也可以包含其他可選屬性。一個參與者可以有一個或多個身份。
Identities
對應Fabric的PKI認證的概念,通過密鑰確認用戶身份的。
Business Network cards
Business Network cards就是一個Identitie,一個connection profile,以及元數據的組合,元數據包含一個可選的連接到商業網絡名稱。Business Network cards簡化了連接商業網絡的過程。
Transactions
交易,可以抽象為資產轉移的過程。
Queries
查詢返回的是區塊鏈當中的數據。只需要定義好商業網絡,以及相關的變量,就可以輕松的利用Composer API從區塊鏈網絡中提取所需數據。
Events
事件是在商業網絡中定義的,就跟定義資產或參與者同樣的方式。定義事件之后,就可以通過交易處理函數觸發。應用程序可以通過composer-client API訂閱這些事件。
Access Control
商業網絡可以包含一組訪問控制規則。訪問控制規則允許細粒度控制什么角色在什么條件下有什么樣的權限控制什么資產。
Historian registry
historian是專門用于成功交易記錄的,包含了發起交易的參與者和身份信息。historian將交易保存為HistorianRecord資產,定義在 Composer系統的namespace中。
到這里我們總結了Composer的一些基礎概念,這些概念將用于Composer的開發過程中。接下來進一步介紹Composer的大致工作流,用Composer開發的時候是一個怎樣的流程。
照例先放出一張官網的示意圖:
ComposerArchitecture.png
可以發現相比直接使用Fabric,已經減少了大量的工作。可以通過generator-hyperledger-composer生成Angular的應用,然后通過Hyperledger Composer的SDK部署并運行在Fabric網絡環境中。
整個Composer由以下組件構成:
執行環境
JavaScript SDK
命令行接口
REST Server
LoopBack連接器
Playground Web UI
Yeoman代碼生成器
VSCode和Atom編輯器插件
Hyperledger Composer設計支持多種可插拔的運行環境,目前已經實現了三種運行環境:
Hyperledger Fabric v1.1. State存儲在分布式賬本
Web. 直接在Web內部執行,用于Playground演示。State存儲在瀏覽器的local storage中
內嵌環境。直接在Node.js進程內部執行,主要用于商業邏輯的單元測試。State以KV形式存儲在內存中。
Connection Profiles用于指明Composer如何連接到一個執行環境的。每一種執行環境都有不同的配置選項。
JavaScript SDK
這是一組Node.js API,給開發者提供創建應用操控和部署Business Network。這些API分成兩個npm模塊:
compser-client: 提交交易請求到business network,以及對資產和參與者執行的CURD操作
composer-admin: 用于管理business network,安裝、啟動、升級等
命令行接口
composer命令行工具提供部署和管理business network的功能
REST Server
Hyperledger Composer REST Server會自動為business network創建一個Open API(利用Swagger) REST接口。REST Server(基于LoopBack技術)將Composer模型轉換為Open API的定義,并且實現CURD支持。
LoopBack連接器
Hyperledger Composer LoopBack連接器可以被REST Server使用,也可以通過支持LoopBack的集成工具單獨使用。當然也可以通過LoopBack工具創建一個更復雜的自定義REST API。
Playground Web User Interface
這玩意用于定義和測試business network的。可以讓商業分析人在Web上快速導入樣本和商業邏輯模型。
Yeoman代碼生成器
創建以下工程的腳手架:
Angular web application
Node.js application
business network的腳手架
VSCode和Atom編輯器插件
盡管沒有直接的IDE支持,但是這個插件可以替代一些IDE功能。
基本概念介紹完畢之后,讓我們動手創建和部署一個應用試試看。
第一步: 創建一個business network結構
Hyperledger Composer的一個關鍵構成就是business network definition (BND),BND為區塊鏈定義了數據模型,交易邏輯和訪問控制規則。
最簡單的方式是直接通過Yeoman創建一個腳手架business network工程:
$ yo hyperledger-composer:businessnetwork Welcome to the business network generator ? Business network name: tutorial-network ? Description: Here is a hello world example ? Author name: Feng Yu ? Author email: abcfy2@163.com ? License: Apache-2.0 ? Namespace: org.example.mynetwork ? Do you want to generate an empty template network? No: generate a populated sample network create package.json create README.md create models/org.example.mynetwork.cto create permissions.acl create .eslintrc.yml create features/sample.feature create features/support/index.js create test/logic.js create lib/logic.js
在一系列交互式詢問之后,我們就創建了一個business network應用程序。
第二步: 定義一個business network
一個business network是由資產、參與者、交易、訪問控制規則,以及可選的時間和查詢組成的。在之前創建的腳手架工程中,已經有一個model(.cto)文件了,包含了定義了在business network中存在的所有資產、參與者、交易。這個工程同樣也包含了一個訪問控制規則(permissions.acl),一個包含了交易過程的函數腳本(logic.js),package.json包含了business network的元數據。
模型化資產、參與者以及交易
模型文件(.cto)是由Hyperledger Composer Modelling Language編寫的,我們直接編輯org.example.mynetwork.cto文件:
/** * My commodity trading network */ namespace org.example.mynetwork asset Commodity identified by tradingSymbol { o String tradingSymbol o String description o String mainExchange o Double quantity --> Trader owner } participant Trader identified by tradeId { o String tradeId o String firstName o String lastName } transaction Trade { --> Commodity commodity --> Trader newOwner }
添加JavaScript交易邏輯代碼。model中用transaction聲明的Trade,指明了一個交易和參與者之間的關系。后面需要定義具體的邏輯實現。編輯logic.js文件:
/** * 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) { trade.commodity.owner = trade.newOwner; let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); await assetRegistry.update(trade.commodity); } 添加訪問控制permission.acl: /** * Access control rules for tutorial-network */ rule Default { description: "Allow all participants access to all resources" participant: "ANY" operation: ALL resource: "org.example.mynetwork.*" action: ALLOW } rule SystemACL { description: "System ACL to permit all access" participant: "ANY" operation: ALL resource: "org.hyperledger.composer.system.**" action: ALLOW }
第三步: 打包business network
在tutorial-network/目錄下執行以下命令:
$ composer archive create -t dir -n . Creating Business Network Archive Looking for package.json of Business Network Definition Input directory: /home/vagrant/tutorial-network Found: Description: Here is a hello world example Name: tutorial-network Identifier: tutorial-network@0.0.1 Written Business Network Definition Archive file to Output file: tutorial-network@0.0.1.bna Command succeeded
整個工程被打包成了.bna文件。
第四步: 部署business network
需要按照安裝Composer的文檔,將docker環境啟動(./startFabric.sh),然后部署:
$ composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna ? Installing business network. This may take a minute... Successfully installed business network tutorial-network, version 0.0.1 Command succeeded
之后就可以運行了:
composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card Starting business network tutorial-network at version 0.0.1 Processing these Network Admins: userName: admin ? Starting business network definition. This may take a minute... Successfully created business network card: Filename: networkadmin.card Command succeeded 然后導入網絡管理員身份作為可用的business network card: $ composer card import --file networkadmin.card Successfully imported business network card Card file: networkadmin.card Card name: admin@tutorial-network Command succeeded
檢查已部署的網絡可以用以下命令:
$ composer network ping --card admin@tutorial-network The connection to the network was successfully tested: tutorial-network Business network version: 0.0.1 Composer runtime version: 0.19.7 participant:org.hyperledger.composer.system.NetworkAdmin#admin identity:org.hyperledger.composer.system.Identity#67624c0918f6ae837d7d3b90e7df8dc305b0cb4e412cc8d4265fbf4f72823600 Command succeeded
第五步: 生成一個REST server
$ composer-rest-server ? Enter the name of the business network card to use: admin@tutorial-network ? Specify if you want namespaces in the generated REST API: never use namespaces ? Specify if you want to use an API key to secure the REST API: No ? Specify if you want to enable authentication for the REST API using Passport: Yes ? Specify if you want to enable multiple user and identity management using wallets: No ? Specify if you want to enable event publication over WebSockets: Yes ? Specify if you want to enable TLS security for the REST API: No To restart the REST server using the same options, issue the following command: composer-rest-server -c admin@tutorial-network -n never -a true -w true Discovering types from business network definition ... Discovered types from business network definition Generating schemas for all types in business network definition ... Generated schemas for all types in business network definition Adding schemas for all types to Loopback ... Added schemas for all types to Loopback Web server listening at: http://localhost:3000 Browse your REST API at http://localhost:3000/explorer
第六步: 生成應用程序
$ yo hyperledger-composer:angular Welcome to the Hyperledger Composer Angular project generator ? Do you want to connect to a running Business Network? Yes ? Project name: angular-app? Description: Hyperledger Composer Angular project ? Author name: Feng Yu ? Author email: abcfy2@163.com ? License: Apache-2.0 ? Name of the Business Network card: admin@tutorial-network ? Do you want to generate a new REST API or connect to an existing REST API? Connect to an existing REST API ? REST server address: http://localhost ? REST server port: 3000 ? Should namespaces be used in the generated REST API? Namespaces are not used Created application! Completed generation process create app.js create Dockerfile create e2e/app.e2e-spec.ts create e2e/app.po.ts create e2e/tsconfig.e2e.json create e2e/tsconfig.json create karma.conf.js create manifest.yml create package.json create protractor.conf.js create proxy.conf.js create README.md create src/app/app-routing.module.ts create src/app/app.component.css create src/app/app.component.html create src/app/app.component.spec.ts create src/app/app.component.ts create src/app/app.module.ts create src/app/asset/images/delete_noun_cc.svg create src/app/asset/images/edit_noun_cc.svg create src/app/asset/images/failed_noun_cc.svg create src/app/asset/images/success_noun_cc.svg create src/app/data.service.ts create src/app/home/home.component.css create src/app/home/home.component.html create src/app/home/home.component.ts create src/environments/environment.prod.ts create src/environments/environment.ts create src/favicon.ico create src/index.html create src/main.ts create src/polyfills.ts create src/styles.css create src/test.ts create src/tsconfig.app.json create src/tsconfig.json create src/tsconfig.spec.json create tsconfig.json create tslint.json create .angular-cli.json create .editorconfig create .gitignore create .dockerignore create .cfignore create .npmignore create src/app/Commodity/Commodity.component.ts create src/app/Commodity/Commodity.service.ts create src/app/Commodity/Commodity.component.spec.ts create src/app/Commodity/Commodity.component.html create src/app/Commodity/Commodity.component.css create src/app/Trader/Trader.component.ts create src/app/Trader/Trader.service.ts create src/app/Trader/Trader.component.spec.ts create src/app/Trader/Trader.component.html create src/app/Trader/Trader.component.css create src/app/Trade/Trade.component.ts create src/app/Trade/Trade.service.ts create src/app/Trade/Trade.component.spec.ts create src/app/Trade/Trade.component.html create src/app/Trade/Trade.component.css I'm all done. Running npm install for you to install the required dependencies. If this fails, try running the command yourself.
最后在angular工程下運行
npm start
最后用http://localhost:4200即可訪問應用。
感謝各位的閱讀!關于“Hyperledger Composer架構的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。