/fabric-net-server

HyperLedger/Fabric Net Server

Primary LanguageJavaApache License 2.0Apache-2.0

注意: 这是一个依赖于已经部署好的HyperLedger Fabric项目,关于前者搭建部署的方案可以通过参考从零开始或购买开发实战等途径学习。目前这些都还不在当前项目的支持范围内,未来也许会计划开发一套基于Fabric深度定制的一键部署及管理平台(非K8S)。

Fabric Net Server fabric-sdk image

version apache 2 codebeat badge Join the chat at https://gitter.im/fabric-net-server/Lobby

本项目目前提供一套Fabric网络后台服务,包括对已经在Fabric网络中创建好的org、peer、channel、chaincode等进行网络新增,并基于已经新增成功的内容提供REST API服务,目前仅支持智能合约的执行、查询以及溯源功能,未来计划支持后台动态加入通道、安装合约、实例化合约等基于fabric-sdk-java已有接口的实现。

本项目开发环境和框架大致有:IntelliJ IDEA、Maven、JDK8+、spring-boot、thrift、thymeleaf以及Docker等。具体实践可使用项目中提供的Docker镜像部署,也可以自定义源码二次开发。

由于个人人力实在有限,后面的工程和工作量会逐步变大变多,在保证个人工作顺利的情况下,会将大部分精力都投入到本项目中。

项目预览

后台首页界面预览
首页视图

api执行介绍界面预览

首页视图

api执行结果及使用方案界面预览
首页视图

版本说明

1、如有源码学习需要的,可以参阅v0.1或含MySQL数据库的v0.2版本。
2、从v1.0-RC开始提供后台视图服务,之前的beta版仅提供接口方案。
3、如有二次开发需求,建议以v0.1为蓝本。
4、下一版计划实现安装、实例化智能合约及加入通道等功能。

使用

1、确定Linux内核在3.10及以上。
2、在待部署SDK服务器上安装Dockerdocker compose环境。
3、执行docker pull aberic/fabric-service:1.0-RC1docker pull aberic/fabric-edge:1.0-RC1下载两个镜像。
4、编辑docker-fabric-net-server.yaml
5、执行docker-compose -f docker-fabric-net-server.yaml up启动SDK镜像服务,如果不需要观察日志,则在命令最后追加-d即可。
6、服务启动完成后,通过http://localhost:port 访问即可。

docker-fabric-net-server.yaml说明

version: '2'

services:

  service:
    container_name: service
    image: aberic/fabric-service
    command: bash /home/init-service.sh
    ports:
      - 8081:8081

  edge:
    container_name: edge
    image: aberic/fabric-edge
    environment:
      # service地址配置
      - SERVICE_IP=10.163.90.220
      - SERVICE_PORT=8081
    command: bash /home/init-edge.sh
    ports:
      - 8080:8080
    depends_on:
      - service

1、上述配置仅为demo,主要关注自己的端口映射,edge的端口号决定了项目访问的最终地址。
2、edge中SERVICE_IP和SERVICE_PORT两个变量的值取决于service的部署情况,理论上可以在一台物理机中部署即可。
3、yaml启动需要指定镜像版本号,或tag镜像版本号为latest。

架构(请无视小图标)

FabricNet
如上图,需要对Fabric网络有一个简单的理解一致,并对以下几个点说明一下:
1、一个Fabric网络即是一个league(联盟链),一个league包含一个或多个org(组织)且含有不少于一个orderer(排序服务),一个org包含一个或多个peer(节点服务),一个peer可以加入一个或多个channel(通道),一个channel可以安装一个或多个chaincode(智能合约)。
2、根据1所述,仅有league对象集合查询不需要指定id。org集合查询需要指定联盟id,orderer及peer集合查询需要指定orgId,channel集合查询需要指定peerId,chaincode集合查询需要指定channelId。
3、可以根据某一个chaincode逆向查出该chaincode的整个league网络,因此执行state和trace接口时只需要传入chaincodeId即可。
4、执行state接口中的strArray是调用Fabric网络中部署的chaincode所传入的参数,在用go编写chaincode的时候,chaincode所接收的参数为一个字符串数组,其中字符串数组的第一个参数是chaincode的方法名。chaincode接口中的args所传入的参数就是智能合约所接收的数组参数。如chaincode_example02中执行invoke时传入的参数为["invoke", "a", "b", "10"],那么在本项目中执行state接口时传入的参数即为[invoke,a,b,10],与Fabric网络中安装的chaincode所需参数保持一致,实现与业务解耦,仅用于维护Fabric项目和做业务与chaincode的桥梁,不参与实际业务当中。
5、执行trace接口可使用项目中在chaincode管理中提供的测试工具进行测试,上一步中的操作也可以通过该方法测试,测试结果会将正确的请求方式显示出来,以便对外提供服务。
6、Fabric网络新增操作必须遵循第2点所述,即必须从league开始新增,直到最后新增chaincode。
7、新增org中需要上传用zip压缩的crypto-config目录,crypto-config二进制生成的证书文件目录。目录下的内容可参考crypto-config.dir,配置方案可参考crypto-config

对象新建字段部分释义

league、org、orderer、peer、channel及chaincode中后台创建所需的字段有如下表中释义:

Params Description Map
ORG_NAME 节点所属组织名称 参见crypto-config文件中 -> PeerOrgs-Name
ORG_TLS 节点是否开启TLS 根据自身创建网络情况选择true或false
ORG_USERNAME 节点所属组织用户名称 参见crypto-config目录下的两个用户,默认配置中选择的Admin
ORG_CRYPTO_CONFIG_DIR 映射到容器中的crypto-config目录 crypto-config目录
ORG_MSP_ID 节点所属组织ID 参见configtx文件中 -> Organizations-&Org1-Name
ORG_DOMAIN_NAME 节点所属组织域名名称 参见crypto-config文件中 -> PeerOrgs-Domain
ORG_ORDERER_DOMAIN_NAME 节点所属排序服务域名名称 参见crypto-config文件中 -> OrdererOrgs-Domain
ORDERER_NAME 排序服务名称 参见configtx文件中 -> Orderer-Addresses
ORDERER_LOCATION 排序服务访问路径 根据自身设置实际情况修改,一般为grpc://host:port的格式
PEER_NAME 节点服务域名名称 参见crypto-config目录下的节点域名列表
PEER_EVENT_HUB_NAME 节点服务事件域名名称 同上
PEER_LOCATION 节点服务路径 根据自身设置实际情况修改,一般为grpc://host:port的格式
PEER_EVENT_HUB_LOCATION 节点服务事件路径 根据自身设置实际情况修改,一般为grpc://host:port的格式
PEER_IS_EVENT_LISTENER 节点所属组织名称 根据自身需求选择是否监听回调服务
CHANNEL_NAME 自行创建的通道名称 如:peer channel create -o orderer.example.com:7050 -c mychannel -t 50 -f ./channel-artifacts/mychannel.tx 命令所创建的mychannel
CHAINCODE_NAME 智能合约名称 如:peer chaincode install -n testcc -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0 命令所创建的testcc
CHAINCODE_PATH 智能合约路径 如:peer chaincode install -n testcc -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0 命令中的github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02
CHAINCODE_VERSION 智能合约版本 如:peer chaincode install -n testcc -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0 命令中的1.0
CHAINCODE_PROPOSAL_WAIT_TIME 单个提案请求超时时间以毫秒为单位 默认90000
CHAINCODE_INVOKE_WAIT_TIME 事务等待时间以秒为单位 默认120

API参考

Method REST API Description
POST /state/invoke 执行智能合约
POST /state/query 查询智能合约
POST /trace/hash 根据交易hash查询区块
POST /trace/number 根据交易区块高度查询区块
POST /trace/txid 根据交易ID查询区块
GET /trace/info/{id} 根据当前智能合约id查询当前链信息

API文档中未提供安装、实例化及升级操作,但在后续更新中,会支持安装、实例化及升级的功能。如果有SaaS/BaaS服务的紧急需求,可以自行参考v0.1中的方案来解决。

讨论


社群

  • 扫微信订阅号加入:

HLFStudy

入门书籍

《HyperLedger Fabric开发实战——快速掌握区块链技术》

HyperLedger Fabric开发实战