Hyperledger Fabric V1.0 跳坑玩耍
最近有个项目需要用到超级账本的概念,随后在网上查阅相关的信息。最后相中了 Fabric作为实验玩耍的目标。要玩就要玩最新的啦,所以舍弃了v0.6的版本,但是截至这篇文章摸出来,v1.0还处于alpha阶段。以下环境的搭建步骤很大一部分来自于 hyperledger-fabric.readthedocs.io,英语好的同学也可以直接看那边的教程。
(需要吐槽一下关于文章标签,因为我的声望不够所以不能编辑创建Hyperledger这个标签)
起跑
你要准备的
-
GO 最新版本的go
-
Docker 1.13版本或以上
-
Docker Compose 1.8版本或以上
-
Node.js & npm 最新的总没错,但是要注意两个版本的对应
-
Xcode 用大苹果的用户需要安装
-
Git 最新版本
-
Hyperledger Fabric 的概念了解
-
Mac或者Linux的操作环境
你最好
-
知道 GO的基本目录结构,和环境变量的设置
-
了解docker和docker-compose,以及一些基本操作
-
有翻墙条件
搭建
获取镜像
创建一个你需要放置源码的目录
$ mkdir -p <yourplayground>/hackfest
cd <yourplayground>/hackfest
下载必要的脚本,包含了Docker compose脚本、通道脚本、一些身份认证(原谅我不知道怎么翻译crypto material for identity attestation)等...
$ curl -L https://raw.githubusercontent.com/hyperledger/fabric/master/examples/sfhackfest/sfhackfest.tar.gz -o sfhackfest.tar.gz 2> /dev/null; tar -xvf sfhackfest.tar.gz
解压完毕后可能会报一条tar的小错误,没有关系
查看你的目录结构,正常的应该如下:
使用docker-compose,拉取fabric-peer, fabric-orderer, fabric-ca和cli
docker-compose的定义文件就是docker-compose-gettingstarted.yml
$ docker-compose -f docker-compose-gettingstarted.yml build
完成build操作后就可以启动容器了:
$ docker-compose -f docker-compose-gettingstarted.yml up -d
在这个执行过程中会使用 channel_test.sh
脚本,创建、加入通道,点击 这里看下 channel_test.sh
到底做了什么事情。
验证环境
利用 $ docker ps
查看容器是否已经成功启动
正常的应该有6个容器正在运行,包含3个peer节点,一个orderer,一个CA和一个cli
我们进入cli容器中查看一下各个节点加入通道的情况
$ docker exec -it cli bash
命令行变成了
$ /opt/gopath/src/github.com/hyperledger/fabric/peer #
输入查看命令
$ more result.txt
得到结果
SUCCESSFUL CHANNEL CREATION
SUCCESSFUL JOIN CHANNEL on PEER0
SUCCESSFUL JOIN CHANNEL on PEER1
SUCCESSFUL JOIN CHANNEL on PEER2
再看下 channel_test.sh
脚本所创建的创世区块
$ more myc1.block
能够看到一长串创世区块的信息,那就对了
获取SDK
在Fabric v1.0中,调用接口的方法有两种:CLI和SDK,因为Fabric中使用的全是grpc的通讯方式,所以利用SDK能更方便锻造我们自己的客户端,并与后端的区块链network进行通讯。
官方采用的方法是直接cUrl fabric-sdk-node项目中的examples,然后执行npm install安装依赖。
$ curl -OOOOOO https://raw.githubusercontent.com/hyperledger/fabric-sdk-node/v1.0-alpha/examples/balance-transfer/{config.json,deploy.js,helper.js,invoke.js,query.js,package.json}
下载完毕后执行
$ npm install
过程中可能会有报错,原因是文件夹的读写权限,解决方法--提权
设置GOPATH到我们的hackfest下
$ GOPATH=$PWD
或 $ GOPATH='<path>/<to>/<your>/<hackfest>'
可以用 $ go env
查看 GOPATH
是否正确设置
至此,我们需要的环境和代码都搭建完成。
用SDK耍耍
注册并部署
执行deploy脚本注册并部署chaincode
$ node deploy
如果执行过程中出现 extension_binary/grpc_node.node
的文件不错在错误,说明npm install没有成功,请重复上上步的 npm install
执行成功后返回一坨如下
chaincode部署成功啦,并且我们初始化了一个模拟场景:
a 拥有 100 软妹币
b 拥有 200 软妹币
测试chaincode
软妹币的转移操作
执行 $ node invoke.js
将 a 的100软妹币转移给 b
查询结果
查询转移后的结果
执行 $ node query
得到结果会包含三条:
[2017-03-18 15:47:06.676] [INFO] QUERY - ############### Query results after the move on PEER0, User "b" now has "200"
说明我们的转移成功啦
到这里我们便完成了一个超级账本的模拟环境,并测试成功。
未完待续,下一版:+编写自己的chaincode