Marbles 演示

2018-05-08  本文已影响247人  简闻

去年跑了在 fabric 1.0 的版本运行了 marbles,今年再在 fabric 1.1 的环境运行一次。智能合约所做的操作没有太大的变化,不过环境配置有一些变化。

marble-peek

各个版本的 marbles 都存在,本版本兼容 Hyperledger Fabric v1.1x。你可以通过 git branch -a 来查看,git checkout 来切换。

应用程序通信流

comm_flow
  1. 管理员将在他们的浏览器中与我们的 Node.js 应用程序 Marbles 进行交互。
  2. 此客户端 JS 代码将打开一个与后端 Node.js 应用程序的 Websocket 连接。管理员与该站点交互时,客户端 JS 将消息发送到后端。
  3. 读取或写入账本称为提案。这个提案由 Marbles(通过 SDK)构建,然后发送到一个区块链对等节点。
  4. 该对等节点将与它的 Marbles 链代码容器进行通信。链代码将运行/模拟该交易。如果没有问题,它会对该交易进行背书,并将其发回我们的 Marbles 程序。
  5. 然后,Marbles(通过 SDK)将背书后的提案发送到订购服务。 订购方将来自整个网络的许多提案打包到一个区块中。 然后,它将新的区块广播到网络中的对等节点。
  6. 最后,对等节点会验证该区块并将它写入自己的账本中。该交易现在已经生效,所有后续读取都会反映此更改。

这一篇主要写环境搭建, 在搭建区块链网络中有两个选择:

  1. 使用 IBM Cloud IBM Blockchain 服务创建一个网络
  2. 使用本地托管的 Hyperledger Fabric 网络

本文选择用 本地托管的 Hyperledger Fabric 网络

目录

  1. 配置本地环境
  2. 下载 Marbles
  3. 设置区块链网络
  4. 安装和初始化 Chaincode
  5. 运行 Marbles

0. 配置本地环境


我的环境

# go version
go version go1.7.5 linux/amd64
# docker -v
Docker version 18.03.1-ce, build 9ee9f40
# docker-compose -v
docker-compose version 1.21.0, build 5920eb0
# node -v
v6.10.1
# npm -v
3.10.10

1. 下载 Marbles

git clone https://github.com/hyperledger/fabric-samples.git --depth 1
cd fabric-samples
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
cd ./fabcar
sudo ./startFabric.sh
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 网络

输出信息为:

 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"}}}

输出信息为:

 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

输出信息为:

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 证书

  1. 验证连接文件中的路径与安装环境的路径是否匹配
    • 打开连接文件 <marbles root>/config/connection_profile_local.json
    • 主要包括下面三个方面:
      • organizations -> x-adminCert -> path
      • organizations -> x-adminKeyStore -> path
      • client -> credentialStore -> path
    • 每个目录中的 path 需要与你的环境相匹配
  2. cd ../../marbles

安装 chaincode

cd ./scripts
node install_chaincode.js
node instantiate_chaincode.js

本地运行 marbles

在本地运行 marbles 之前请确认你是否已经运行了 ../fabric-samples/fabcar 中的 node enrollAdmin.jsnode registerUser.js
如果运行了,请重启网络后跳过测试的步骤,命令如下:

$ docker rm -f $(docker ps -aq)
$ cd ../fabric-samples/fabcar
$ ./startFabric.sh

然后再回到 marbles 的根目录

 npm install gulp -g
 npm install
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
sudo docker logs -f peer0
# control + c will exit the process
sudo docker logs -f orderer0

参考 :

  1. https://github.com/IBM-Blockchain/marbles/blob/master/README-cn.md
上一篇下一篇

猜你喜欢

热点阅读