本文主要记录自己搭建Hyperledger fabric-sdk-java步骤,为原创内容,如有文中有书写或其他问题,请留言指导修正,互相交流,共同进步,本人QQ:417213902。
一、fabric服务器环境搭建
1、安装docker环境
参考docker官网安装
(1)删除已安装的版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
(2)安装docker必备的安装包
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
(3)配置docker的官方yum源
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
(4)安装docker-ce
也可以通过yum list docker-ce --showduplicates | sort -r 查看最新docker-ce版本
$ sudo yum install docker-ce-17.12.0.ce
(5)配置开机启动docker服务
$ sudo systemctl start docker
(6) 测试docker服务
$ sudo docker run hello-world
出现以下表示安装成功

(7) 安装docker-compose
通过外网下载好docker-compse,上传到服务上
# cp /tmp/soft/docker-compose-Linux-x86_64 /usr/local/bin/docker-compose
# chmod 744 /usr/local/bin/docker-compose
# docker-compose version
出现表示安装成功

2、安装GO环境
因为涉及到翻墙的问题,我们就直接从外网下载好,上传上来
# tar -zxvf go1.10.linux-amd64.tar.gz
# cp -R go /usr/local/go
# vi /etc/profile
在文末增加以下环境变量
PATH=$PATH:/usr/local/go/bin
GOPATH=/opt/gopath
# source /etc/profile
# go version

3、安装git环境
# yum install git
二、fabric服务器搭建
1、fabric源码下载
检出源码主要是为了生成
- 编译生成docker相关的镜像
- 编译生成fabric提供的辅助工具
cryptogen:生成组织结构和身份文件
configtxgen:生成配置区块和配置交易
configxlator :解读配置信息
这个是go的标准目录,当然也可以按照自己的来
# mkdir -p /opt/gopath/src/github.com/hyperledger/
# cd /opt/gopath/src/github.com/hyperledger/
# git clone https://github.com/hyperledger/fabric.git
我们来看1.1版本,如果需求可选择其他版本
# git checkout -b v1.1.0
2、fabric镜像获取
- 从Dockerhub获取镜像
# cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/
执行以下脚本可以自动下载官方镜像
# sh download-dockerimages.sh
- 从源码生成镜像
本文主讲这种方式,可能稍微复杂点。
(1) Go Tools安装
mkdir –p $GOPATH/src/golang.org/x
cd $GOPATH/src/golang.org/x
git clone https://github.com/golang/tools.git
(2) 编译生成orderer二进制文件
编译orderer二进制文件,所有的可编译的内容都在当前目录的Makefile文件中
# make orderer
如果成功了,可以在这里找到编译好的二进制文件
# cd /$GOPATH/src/github.com/hyperledger/fabric/build/bin

表示安装成功
安装过程中可能会出现以下问题:

若出现图片中的错误,请安装gcc相关包,具体少哪些,可能需要是尝试,我这里就直接安装所有
# yum install gcc*

若出现图片中的错误
# yum install libtool-ltdl-devel
(3) 编译生成peer二进制文件
编译peer二进制文件,默认同时编译依赖的镜像
# make peer

若出现图中错误,则安装protoc-gen-go工具
安装protoc-gen-go工具前需要protoc工具
# wget https://github.com/google/protobuf/releases/download/v3.5.1/protoc-3.5.1-linux-x86_32.zip
# unzip protoc-3.5.1-linux-x86_32.zip -d protoc-3.5.1-linux-x86_32
# cd protoc-3.5.1-linux-x86_32
# cp bin/protoc /usr/local/bin
开始安装protoc-gen-go工具
# cd $GOPATH/src/github.com
# go get github.com/golang/protobuf/protoc-gen-go
# cd $GOPATH/src/github.com/golang/protobuf/protoc-gen-go
# make
成功后,在bin目录下会出现二进制文件protoc-gen-go
# cd cd $GOPATH/bin
将protoc-gen-go拷贝到指定目录
# cp $GOPATH/bin/protoc-gen-go $GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin
(4) 编译生成Fabric工具
# make configtxgen
# make cryptogen
# make configtxlator
安装后的文件在这个目录下
# cd $GOPATH/src/github.com/hyperledger/fabric/build/bin
(5) Docker镜像的生成
# make orderer-docker
# make peer-docker
# make tools-docker
# docker images
(6) Fabric-ca 镜像的生成
因为官方将ca模块单独成立了一个项目,所以也需要同样的步骤生成ca镜像
# git clone https://github.com/hyperledger/fabric-ca.git
# git checkout -b v1.1.0
# cd $GOPATH/src/github.com/hyperledger/fabric-ca
编译生成docker-ca,这里make可以指定所要编译的工具,这里是生成所有
# make
# docker images
到此基本上需要的镜像应该已经生成或下载完成
二、Fabric环境启动
(1) Fabric服务器环境启动
检出fabric-sdk-java源码
# cd /opt/gopath/src/github.com/hyperledger/
# git clone https://github.com/hyperledger/fabric-sdk-java.git
# cd /opt/gopath/src/github.com/hyperledger/fabric-sdk-java/src/test/fixture/sdkintegration
# sh fabric.sh up


若出现上图错误,则在docker本地仓库中查找latest版本,没有找到,那么就指定一个
# docker tag b7bfddf508bc docker.io/hyperledger/fabric-tools:latest
三、fabric-sdk-java本地环境搭建及调试
1、检出fabric-sdk-java项目

1、安装idea插件protobuf support
出现以下表示安装成功

2、编译项目
这里会出现很多报错,然后去执行protobuf:compile,可能需要多编译几次,才会生成java对应的pb java文件。
3、执行Demo中的End2endIT
-
官方 Demo说明:
主要完成了对fabric-ca的认证、创建channel、加入channel、安装链码、调用链码、查询链码等操作。 -
位置在fabric-sdk-java\src\test\java\org\hyperledger\fabric\sdkintegration\End2endIT.java下
-
修改对应的服务器地址
image.png
-
执行方法,出现下图已成功
image.png
- 常见问题:

出现上图中问题,则请重新启动服务器的环境,因为本地调用时,会每次都去登记ca用户身份信息
四、利用工具自行生成证书
# cd /opt/gopath/src/github.com/hyperledger/fabric-sdk-java/src/test/fixture/sdkintegration/e2e-2Orgs
生成组织关系和身份证书
# cryptogen generate --config=./crypto-config.yaml --output ./crypto-config
生成Ordering服务的初始区块文件
# configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./orderer.block
生成新建应用通道的配置交易
# export CHANNEL_NAME=foo
# configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./foo.tx -channelID $CHANNEL_NAME
# export CHANNEL_NAME=bar
# configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./bar.tx -channelID $CHANNEL_NAME
备份源码版本的证书
# mv v1.1 v1.1bak
# mkdir v1.1
# mv bar.tx foo.tx orderer.block crypto-config ./v1.1/
# cd /opt/gopath/src/github.com/hyperledger/fabric-sdk-java/src/test/fixture/sdkintegration
# cp docker-compose.yaml docker-compose.yaml.bak
根据新生成的ca证书,修改docker-compose.yaml 中分别引用的org1和org2的ca证书;
最后将新生成的v1.1中的证书覆盖到本地的证书,保证本地证书和服务器证书一致即可。
再次运行End2endIT

2018-04-18 补充
五、调试网络博主的Fabric-sdk-java整合版本
首先源代码在这里
- 检出后需要写一个test测试类
//测试类
public class FabricManagerTest {
@Test
public void test1() throws IOException, NoSuchAlgorithmException, InvocationTargetException, NoSuchMethodException, InstantiationException, InvalidKeySpecException, CryptoException, InvalidArgumentException, IllegalAccessException, NoSuchProviderException, TransactionException, ClassNotFoundException, InterruptedException, ExecutionException, TimeoutException, ProposalException {
ChaincodeManager manager = FabricManager.obtain().getManager();
String fcn = "move" ;
String[] arguments = new String[]{"a","b","200"};
manager.invoke(fcn, arguments);
fcn = "query" ;
arguments = new String[]{"b"};
manager.query(fcn, arguments);
}
}
- 其次是修改对应的配置
找到FabricManager.java文件,修改如下
...大约在28行,这里通道名称foo与官方demo保持一致
private final static String channelName = "foo" ;
...
大约在69行,指定调用的链码与官方demo保持一致
config.setChaincode(getChaincode(channelName, "example_cc_go", "github.com/example_cc", "1"));
...
大约在75行左右,getOrderers方法中,修改你的orderer节点服务器地址
orderer.addOrderer("orderer0.example.com", "grpc://x.x.x.xx:7050");
...
大约在89行左右,getPeers方法中,修改你的peer节点服务器地址
peers.addPeer("peer0.org1.example.com", "peer0.org1.example.com", "grpc://x.x.x.xx:7051", "grpc://x.x.x.xx:7053", "http://x.x.x.xx
-
接着需要把我们在Fabric-sdk-java中生成的身份证书crypto-config目录,复制到本地环境,保证项目启动后能够读取到,我是放在这里的,见下图
image.png
- 最后,我们启动这个test方法,对了,博主这个代码是没有安装链码这一步的,所以你需要通过client自行安装,但是如果你已经完成了上面的步骤,那么直接执行test就好了,因为上面的官方demo也会去安装我们指定的这个链码。
注意:当fabric服务器环境重启后,需要重新安装链码
至此Fabric-sdk-java的官方版本调试已经成功,具体的调用流程还是需要自行查看源码,可以采用debug。
学习fabric心得:
- 对于新手直接来看我这个过程,如果你尝试成功了,建议你还是再去看看官方提供的fabric-samples,将这里的几个demo都跑通下,然后最好去看下里面的脚本逻辑,梳理下。
- 请先梳理通调用逻辑,你可以直接看fabric-samples下的first-network下的byfn.sh脚本,一步一步,写的很明白
- 如果逻辑清楚了,再来看fabric-sdk-java的源码,这时你可以结合知名博主的文章,查试搭建自己的调用逻辑,个人觉得这个楼主的博主还是比较好,但是没有加入ca的使用,可以尝试补充
有什么问题,大家可以一起交流,可直接添加这个区块链微信群

2018-04-17 15:00:00
网友评论