区块链100讲:Hyperledger Fabric实践-基于ubuntu系统部署网络

Posted by

区块链100讲:Hyperledger Fabric实践-基于ubuntu系统部署网络

本文作者:HiBlock区块链技术布道群-AmyWu

原文发布于简书

原文链接:https://www.jianshu.com/p/bec173e6cf73

加微信baobaotalk_com,加入技术布道群

区块链100讲:Hyperledger Fabric实践-基于ubuntu系统部署网络

Hyperledger Composer 网络要素

Business Network Definition

在我们动手执行代码之前,先来了解一下Business Network Definition的概念。因为这个概念贯穿在这个网络系统中。BND为区块链定义了 数据模型, 交易逻辑 和 访问控制规则 。我们可以部署bna包到Fabric网络,为了生成bna,我们需要提前生成:

  • a set of model files

  • a set of JavaScript files

  • an Access Control file

所有的这些文件,都可以理解是对我们的网络的描述文件。网络根据我们的描述,来执行。

区块链100讲:Hyperledger Fabric实践-基于ubuntu系统部署网络

BusinessNetworkFiles

那我们就动手搭建,并且部署一个网络。下面的代码执行于ubuntu系统。

1

Setp 1
创建一个business network应用

(1)从命令行,创建一个新的dir,并且cd到该dir

amy@amy-wu:~/pg/sandbox/bnd$ yo hyperledger-composer:businessnetwork

Welcome to the business network generator

? Business network name: tutorial-network

? Description: Here is a hello world example

? Author name: Amy Wu

? Author email: AmyWu@123abc.com

? License: Apache-2.0

? Namespace: org.example.biznet

? 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.biznet.cto

create permissions.acl

create .eslintrc.yml

create features/sample.feature

create features/support/index.js

create test/logic.js

create lib/logic.js

amy@amy-wu:~/pg/sandbox/bnd$

(2)查看刚刚的指令为了创建的文件

amy@amy-wu:~/pg/sandbox/bnd$ tree

.

└── tutorial-network

├── features

│ ├── sample.feature

│ └── support

│ └── index.js

├── lib

│ └── logic.js

├── models

│ └── org.example.biznet.cto

├── package.json

├── permissions.acl

├── README.md

└── test

└── logic.js

6 directories, 8 files

amy@amy-wu:~/pg/sandbox/bnd$

2

Setp 2
查看 org.example.biznet.cto 和 permission.acl

org.example.biznet.cto 定义了网络里面的参与方,资产等信息

permission.acl 定义了访问权限

3

Setp 3 打包生成bna包

(1)cd到 /tutorial-network 目录下

需要提前安装composer环境

升级Fabric Composer版本

  • 错误提示

Cannot use v0.16.6 version of composer with fabric 1.1, v0.19 or higher is required

  • 确认版本

composer -vv0.19.10

  • 卸载现有版本

npm uninstall -g composer-clinpm uninstall -g composer-rest-servernpm uninstall -g generator-hyperledger-composer

  • 重新安装最新版本版本

npm install -g composer-clinpm install -g composer-rest-servernpm install -g generator-hyperledger-composer

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$ composer archive create -t dir -n .

Creating Business Network Archive

Looking for package.json of Business Network Definition

Input directory: /home/amy/pg/sandbox/bnd/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

(2)查看生成的bna文件

amy@amy-wu:~/pg/sandbox/bnd$ tree.

└── tutorial-network

├── features

│ ├── sample.feature

│ └── support

│ └── index.js

├── lib

│ └── logic.js

├── models

│ └── org.example.biznet.cto

├── package.json

├── permissions.acl

├── README.md

├── test

│ └── logic.js

└── tutorial-network@0.0.1.bna新生成的文件

6 directories, 9 files

4

Setp 4 部署business network

在做部署之前,先要启动一个Fabric网络。

(1)下载fabric-dev-servers.zip

mkdir fabric-dev-servers && cd fabric-dev-servers

curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.zip

unzip fabric-dev-servers.zip

(2)第一次启动Fabric网络的时候

cd fabric-dev-servers

./downloadFabric.sh./startFabric.sh./createPeerAdminCard.sh

(3)结束的时候

./stopFabric.sh ./teardownFabric.sh

(4)初始化网路

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$ 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

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$

(5)查看docker containers

docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

27b30f42cc5e hyperledger/fabric-peer:x86_64-1.1.0

“peer node start” 5 minutes ago Up 5 minutes

0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com

2f62650005f4 hyperledger/fabric-orderer:x86_64-1.1.0

“orderer” 5 minutes ago Up 5 minutes

0.0.0.0:7050->7050/tcp orderer.example.com96ec8b462e0e

hyperledger/fabric-couchdb:x86_64-0.4.6 “tini — /docker-ent…” 5 minutes ago Up 5 minutes 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb

ecd55c74cb76 hyperledger/fabric-ca:x86_64-1.1.0

“sh -c ‘fabric-ca-se…” 5 minutes ago Up 5 minutes

0.0.0.0:7054->7054/tcp

ca.org1.example.com

(6)启动网络

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$ 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

(7)导入网络管理员身份

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$ composer card import –file networkadmin.card

Successfully imported business network card

Card file: networkadmin.card

Card name: admin@tutorial-network

Command succeeded

(8)测试

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$ 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.10

participant: org.hyperledger.composer.system.NetworkAdmin#admin

identity: org.hyperledger.composer.system.Identity#d9e43201ca1bcc328e0e81ceaf96caf4f113019f41d26d292699151a50d0a3ac

Command succeeded

5

Setp 5 生成REST server

amy@amy-wu:~$ 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

查看API:http://localhost:3000/explorer

6

Setp 6 生成应用

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network$ 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: Amy WU

? Author email: 123@gmail.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

Binary found at /home/amy/pg/sandbox/bnd/tutorial-network/angular-app/node_modules/node-sass/vendor/linux-x64-59/binding.node

Testing binary

Binary is fine

npm notice created a lockfile as package-lock.json. You should commit this file.

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.4 (node_modules/fsevents):

npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.4: wanted {“os”:”darwin”,”arch”:”any”} (current: {“os”:”linux”,”arch”:”x64″})

added 1162 packages in 145.973s

Application generated

(1)启动应用

amy@amy-wu:~/pg/sandbox/bnd/tutorial-network/angular-app$ npm start

> angular-app@0.0.1 start/home/amy/pg/sandbox/bnd/tutorial-network/angular-app

> ng serve –proxy-config proxy.conf.js –host 0.0.0.0

** NG Live Development Server is running on http://0.0.0.0:4200 **

10% building modules 4/4 modules 0 active[HPM] Proxy created: [ ‘/auth’, ‘/api’ ] -> http://localhost:3000

[HPM] Proxy created: / -> http://localhost:3000

Hash: a0d3dc89fcbecd8aa802

Time: 12249ms

chunk {0} polyfills.bundle.js, polyfills.bundle.js.map (polyfills) 270 kB {5} [initial] [rendered]

chunk {1} main.bundle.js, main.bundle.js.map (main) 101 kB {4} [initial] [rendered]

chunk {2} styles.bundle.js, styles.bundle.js.map (styles) 184 kB {5} [initial] [rendered]

chunk {3} scripts.bundle.js, scripts.bundle.js.map (scripts) 439 kB {5} [initial] [rendered]

chunk {4} vendor.bundle.js, vendor.bundle.js.map (vendor) 4.12 MB [initial] [rendered]

chunk {5} inline.bundle.js, inline.bundle.js.map (inline) 0 bytes [entry] [rendered]

webpack: Compiled successfully.

(2)查看应用

http://0.0.0.0:4200

— 线下活动推荐 —

区块链100讲:Hyperledger Fabric实践-基于ubuntu系统部署网络

始发于微信公众号: 区块链社区HiBlock