Marbles 演示

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

  • 这个应用程序的基础网络是 Hyperledger Fabric,后者是一个 Linux Foundation 项目。 您可能想查阅以下操作说明来稍微了解一下 Hyperledger Fabric。

  • 本演示旨在帮助开发人员了解链代码的基础知识以及如何使用 Fabric 网络开发应用程序。

  • 这是一个非常简单的资产转移演示。多个用户可以创建并相互转移弹珠。

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. 配置本地环境

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

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

安装 chaincode

  • 安装 marbles chaincode, 命令如下:
cd ./scripts
node install_chaincode.js
  • 初始化 chaincode
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 的根目录

  • 安装 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

参考 :

  1. https://github.com/IBM-Blockchain/marbles/blob/master/README-cn.md
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容