美文网首页区块链fabric文章
Hyperledger Fabric-sdk-java调试

Hyperledger Fabric-sdk-java调试

作者: Antz_H碎碎念 | 来源:发表于2018-04-17 15:49 被阅读3329次

本文主要记录自己搭建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

出现以下表示安装成功


image.png
(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

出现表示安装成功


image.png

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
image.png

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
image.png

表示安装成功

安装过程中可能会出现以下问题:

image.png
若出现图片中的错误,请安装gcc相关包,具体少哪些,可能需要是尝试,我这里就直接安装所有
# yum install gcc*
image.png
若出现图片中的错误
#   yum install libtool-ltdl-devel
(3) 编译生成peer二进制文件
编译peer二进制文件,默认同时编译依赖的镜像
#  make peer
image.png
若出现图中错误,则安装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
image.png image.png
  若出现上图错误,则在docker本地仓库中查找latest版本,没有找到,那么就指定一个
#  docker tag b7bfddf508bc  docker.io/hyperledger/fabric-tools:latest

三、fabric-sdk-java本地环境搭建及调试

1、检出fabric-sdk-java项目

image.png

1、安装idea插件protobuf support

出现以下表示安装成功


image.png

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
  • 常见问题:
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


image.png

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的使用,可以尝试补充

有什么问题,大家可以一起交流,可直接添加这个区块链微信群


image.png

2018-04-17 15:00:00

相关文章

网友评论

    本文标题:Hyperledger Fabric-sdk-java调试

    本文链接:https://www.haomeiwen.com/subject/xvdghftx.html