willorfang的学习 2019-06-21
最近有个项目需要用到超级账本的概念,随后在网上查阅相关的信息。最后相中了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
能够看到下图一长串创世区块的信息,那就对了
在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
是否正确设置
至此,我们需要的环境和代码都搭建完成。
执行deploy脚本注册并部署chaincode$ node deploy
如果执行过程中出现extension_binary/grpc_node.node
的文件不错在错误,说明npm install没有成功,请重复上上步的npm install
执行成功后返回一坨如下
chaincode部署成功啦,并且我们初始化了一个模拟场景:
a 拥有 100 软妹币
b 拥有 200 软妹币
软妹币的转移操作
执行$ 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软妹币了!说明我们的转移成功啦
到这里我们便完成了一个超级账本的模拟环境,并测试成功。