去年跑了在 fabric 1.0 的版本运行了 marbles,今年再在 fabric 1.1 的环境运行一次。智能合约所做的操作没有太大的变化,不过环境配置有一些变化。
-
这个应用程序的基础网络是 Hyperledger Fabric,后者是一个 Linux Foundation 项目。 您可能想查阅以下操作说明来稍微了解一下 Hyperledger Fabric。
-
本演示旨在帮助开发人员了解链代码的基础知识以及如何使用 Fabric 网络开发应用程序。
-
这是一个
非常简单
的资产转移演示。多个用户可以创建并相互转移弹珠。
各个版本的 marbles 都存在,本版本兼容 Hyperledger Fabric v1.1x。你可以通过 git branch -a
来查看,git checkout
来切换。
应用程序通信流
comm_flow- 管理员将在他们的浏览器中与我们的 Node.js 应用程序 Marbles 进行交互。
- 此客户端 JS 代码将打开一个与后端 Node.js 应用程序的 Websocket 连接。管理员与该站点交互时,客户端 JS 将消息发送到后端。
- 读取或写入账本称为提案。这个提案由 Marbles(通过 SDK)构建,然后发送到一个区块链对等节点。
- 该对等节点将与它的 Marbles 链代码容器进行通信。链代码将运行/模拟该交易。如果没有问题,它会对该交易进行背书,并将其发回我们的 Marbles 程序。
- 然后,Marbles(通过 SDK)将背书后的提案发送到订购服务。 订购方将来自整个网络的许多提案打包到一个区块中。 然后,它将新的区块广播到网络中的对等节点。
- 最后,对等节点会验证该区块并将它写入自己的账本中。该交易现在已经生效,所有后续读取都会反映此更改。
这一篇主要写环境搭建, 在搭建区块链网络中有两个选择:
- 使用 IBM Cloud IBM Blockchain 服务创建一个网络
- 使用本地托管的 Hyperledger Fabric 网络
本文选择用 本地托管的 Hyperledger Fabric 网络
目录
- 配置本地环境
- 下载 Marbles
- 设置区块链网络
- 安装和初始化 Chaincode
- 运行 Marbles
0. 配置本地环境
- Bash - Bash scripts are needed to setup installation files
- GoLang - 1.7.0 or higher
- Docker CE - v1.13 or higher
- Docker Compose - v1.8 or higher
- Node.js - node v6.2+ or v8.1+ (v9 is not supported, v7 support is unknown)
- Xcode - Mac OSX 需要安装
我的环境
-
操作系统为:Ubuntu 16.04
-
Golang 版本
# go version
go version go1.7.5 linux/amd64
- Docker 版本
# docker -v
Docker version 18.03.1-ce, build 9ee9f40
- Docker-compose 版本
# docker-compose -v
docker-compose version 1.21.0, build 5920eb0
- Node.js 版本
# node -v
v6.10.1
- NPM 版本
# npm -v
3.10.10
1. 下载 Marbles
- 使用 release-1.1 的分支
git clone https://github.com/hyperledger/fabric-samples.git --depth 1
cd fabric-samples
- 下载各个 fabric 组件的 dockcer 镜像(时间较长)
curl -sSL https://raw.githubusercontent.com/hyperledger/fabric/release-1.1/scripts/bootstrap-1.1.0-preview.sh -o setup_script.sh
sudo bash setup_script.sh
- 配置环境变量
export PATH=$PWD/bin:$PATH
- 启动 fabric 网络
cd ./fabcar
sudo ./startFabric.sh
-
docker ps
查看正在运行的 docker containers
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5d7de60a9e1f dev-peer0.org1.example.com-fabcar-1.0-5c906e402ed29f20260ae42283216aa75549c571e2e380f3615826365d8269ba "chaincode -peer.add…" 5 minutes ago Up 5 minutes dev-peer0.org1.example.com-fabcar-1.0
315fab21d09d hyperledger/fabric-tools "/bin/bash" 5 minutes ago Up 5 minutes cli
fb0b6a24c3db hyperledger/fabric-peer "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
282b58bbab8a hyperledger/fabric-ca "sh -c 'fabric-ca-se…" 5 minutes ago Up 5 minutes 0.0.0.0:7054->7054/tcp ca.example.com
470be2a50a98 hyperledger/fabric-couchdb "tini -- /docker-ent…" 5 minutes ago Up 5 minutes 4369/tcp, 9100/tcp, 0.0.0.0:5984->5984/tcp couchdb
77902325eaab hyperledger/fabric-orderer "orderer" 5 minutes ago Up 5 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
#
安装测试的依赖环境
为 fabcar 例子安装 node.js 的依赖环境
sudo npm install
测试 fabcar 的网络
仅用于测试 fabcar 网络
- 运行
node enrollAdmin.js
输出信息为:
Store path:/home/mark/code/go/src/github.com/hyperledger/fabric-samples/fabcar/hfc-key-store
Successfully enrolled admin user "admin"
Assigned the admin user to the fabric client ::{"name":"admin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"396ca37170df33d72071f6c00641426470b6c0db357214b5f115a695603b5f16","identity":{"certificate":"-----BEGIN CERTIFICATE-----\nMIIB8TCCAZegAwIBAgIUWBOmnR58dv7huW7BXD09V6/8/O0wCgYIKoZIzj0EAwIw\nczELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMT\nE2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTgwNTA3MDIwNjAwWhcNMTkwNTA3MDIw\nNjAwWjAQMQ4wDAYDVQQDEwVhZG1pbjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA\nBMxT8+XWa2xiuqTF8H2SxjJ6lQK09Ze08lygtuWzHpkUn0g8YtGre2GsLRJKW8uB\nYPAewYJjZp4ZEv+EuiFj7B+jbDBqMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8E\nAjAAMB0GA1UdDgQWBBT8DgkbbdWWECju+2vXnPhjWpV0yzArBgNVHSMEJDAigCBC\nOaoNzXba7ri6DNpwGFHRRQTTGq0bLd3brGpXNl5JfDAKBggqhkjOPQQDAgNIADBF\nAiEA2Ov6V8+Yem1q0w6WLmyq/wTf+9R7riRE6yBtUUqWZlICIA8y+iso2IQFQdhp\nQyoO+vrKS3MAgTup43m4jm8dj8Ou\n-----END CERTIFICATE-----\n"}}}
- 运行
node registerUser.js
输出信息为:
Store path:/home/mark/code/go/src/github.com/hyperledger/fabric-samples/fabcar/hfc-key-store
Successfully loaded admin from persistence
Successfully registered user1 - secret:UnRcFtOWqboS
Successfully enrolled member user "user1"
User1 was successfully registered and enrolled and is ready to intreact with the fabric network
- 运行 node query.js
输出信息为:
Store path:/home/mark/code/go/src/github.com/hyperledger/fabric-samples/fabcar/hfc-key-store
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"}}]
安装和初始化 Chaincode
配置
cd ../../marbles
npm install
获取必要的文件: 密钥 和 admin 证书
- 验证连接文件中的路径与安装环境的路径是否匹配
- 打开连接文件
<marbles root>/config/connection_profile_local.json
- 主要包括下面三个方面:
- organizations -> x-adminCert -> path
- organizations -> x-adminKeyStore -> path
- client -> credentialStore -> path
- 每个目录中的 path 需要与你的环境相匹配
- 打开连接文件
cd ../../marbles
安装 chaincode
- 安装 marbles chaincode, 命令如下:
cd ./scripts
node install_chaincode.js
- 初始化 chaincode
node instantiate_chaincode.js
本地运行 marbles
在本地运行 marbles 之前请确认你是否已经运行了 ../fabric-samples/fabcar
中的 node enrollAdmin.js
和 node registerUser.js
如果运行了,请重启网络后跳过测试的步骤,命令如下:
$ docker rm -f $(docker ps -aq)
$ cd ../fabric-samples/fabcar
$ ./startFabric.sh
然后再回到 marbles 的根目录
- 安装 marbles 的 npm 环境依赖( warn 可以忽略)
npm install gulp -g
npm install
- 本地运行 marbles
gulp marbles_local
现在就可以使用浏览器访问 http://localhost.com:3001 查看了
如果需要将 localhost 修改为 主机 ip, 请在 marbles 根目录 app.js
中修改 host 变量。
注:阿里云配置环境时请在 docker-compser.yaml
的 environment 中添加环境变量 - GODEBUG=netdns=go
命令提示:
- 终止网络运行:
cd ../basic-network
./stop.sh
- 重启网络运行:
cd ../basic-network
./teardown.sh
- 查看 logs 日志
docker logs [OPTIONS] CONTAINER
sudo docker logs -f peer0
# control + c will exit the process
sudo docker logs -f orderer0
参考 :
网友评论