2

       最近有个项目需要用到超级账本的概念,随后在网上查阅相关的信息。最后相中了Fabric作为实验玩耍的目标。要玩就要玩最新的啦,所以舍弃了v0.6的版本,但是截至这篇文章摸出来,v1.0还处于alpha阶段。以下环境的搭建步骤很大一部分来自于hyperledger-fabric.readthedocs.io,英语好的同学也可以直接看那边的教程。
(需要吐槽一下关于文章标签,因为我的声望不够所以不能编辑创建Hyperledger这个标签)

起跑

你要准备的

你最好

  1. 理解超级账本的基本概念(油管上的介绍视频

  2. 知道GO的基本目录结构,和环境变量的设置

  3. 了解docker和docker-compose,以及一些基本操作

  4. 有翻墙条件

搭建

获取镜像

创建一个你需要放置源码的目录
$ 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  "300"

现在b有300软妹币了!说明我们的转移成功啦

到这里我们便完成了一个超级账本的模拟环境,并测试成功。

[我是牛排,转载请注明出处 https://segmentfault.com/a/11...


cookedsteak
462 声望20 粉丝

To be a full stack creator