首页 > 编程语言 >HyperLedger/Fabric 快速上手优化版 fabric-sdk-java

HyperLedger/Fabric 快速上手优化版 fabric-sdk-java

时间:2022-12-03 23:34:19浏览次数:60  
标签:java Fabric BAD sh fabric 区块 sdk


文章目录

  • ​​1. 前言​​
  • ​​2. 前置条件​​
  • ​​3. 区块链网络修改​​
  • ​​4. SDK 操作步骤​​
  • ​​5. transaction.proto​​
  • ​​6. 相关网址​​

1. 前言

   由于 fabric-sdk-java 存在普遍的上手难问题, 官方 Java 版 sdk 单元测试 demo 比较难理解, 对于想要通过使用 java-sdk 入门 fabric 的朋友来说, 这个是一个比较大的阻碍。 鉴于此, 本博文重新整理了下 Java 版 sdk 的使用, 在官方源码的基础上进行重新封装一层, 目的就是消除这道入门障碍, 让大家都可以使用 java-sdk 来拥抱 fabric。


fabric-sdk-server项目地址

 

2. 前置条件

  • JDK 1.8, ​​下载地址​
  • 安装 redis 服务, ​​下载地址​
  • 已成功搭建 fabric 区块链网络, 区块链网络搭建可参考《 ​​hyperledger fabric 1.1区块链网络环境部署及cli实操​​》

 

3. 区块链网络修改

############################################################
# 关闭每次重启fabric网络时重新生成通道及加密配置文件信息(建议)
############################################################
# 首次启动 network_setup.sh 脚本后, 修改以下代码, 重启 Fabric 服务
vim network_setup.sh

# 删除 network_setup.sh 脚本中的以下代码
# function networkUp -> source generateArtifacts.sh $CH_NAME # 删除 else 整个片段的代码
# function networkDown -> rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config


############################################################
# 注释掉tls配置(必须)
############################################################
cd fabric/examples/e2e_cli

vim base/peer-base.yaml
CORE_PEER_TLS_ENABLED=true
# 改为
CORE_PEER_TLS_ENABLED=false


vim base/docker-compose-base.yaml
ORDERER_GENERAL_TLS_ENABLED=true
# 改为
ORDERER_GENERAL_TLS_ENABLED=false

vim docker-compose-cli.yaml
CORE_PEER_TLS_ENABLED=true
# 改为
CORE_PEER_TLS_ENABLED=false


############################################################
# 注释掉 script.sh 脚本中原有通过 cli 命令行操作区块链网络的相关代码
############################################################
cd fabric/examples/e2e_cli

vim scripts/script.sh
# 注释块起始位置(包含以下部分)
## Create channel
echo "Creating channel..."
createChannel
# 注释块截至位置(包含以下部分)
#Query on chaincode on Peer3/Org2, check if the result is 90
echo "Querying chaincode on org2/peer3..."
chaincodeQuery 3 90


############################################################
# 启动区块链网络, 先关闭再启动, 或 直接 restart
############################################################
bash network_setup.sh down
bash network_setup.sh up

 

4. SDK 操作步骤

  1. ​拉取 github 仓库指定版本代码到本地​
  1. 配置 ​​com.hyperledger.fabric.sdk.common.Constants​​ 类中 redis 服务的信息
  2. 配置 ​​com.hyperledger.fabric.sdk.common.Config​​ 类中 区块链网络的节点信息
  3. 替换掉 answer-fabric-sdk\src\test\resources 下的配置文件, 注意是 XXX/​​test​​/resources
  • chaincodes/*    ​​智能合约, 如果你测的是官方转账功能, 可不用替换​
  • channel-artifacts/*    ​​通道配置信息及创世纪块等, 可直接删掉, 将工具生成的目录拷贝过来​
  • config.properties    ​​官方sdk配置文件, 可不必替换​
  • crypto-config/*    ​​证书签名密钥等文件, 可直接删掉, 将工具生成的目录拷贝过来​
  • policy/*    ​​背书策略文件, 可不用替换​

说明: 考虑到方便大家上手, channel-artifacts 和 crypto-config 目录的文件采用完成替换模式, 即: 删除掉该项目这两个文件夹下的文件, 然后直接将你生成好的这两个目录原封不动的拷贝过来即可。 项目下的智能合约代码为官方转账功能代码, 即:chaincode_example02.go

最便捷的方式: 第4步只需替换 channel-artifacts 和 crypto-config 两个目录的文件即可。

  1. 使用以下测试用例即可通过sdk来操作区块链网络
  • APITest.java    ​​模拟 全流程 操作区块链网络​
  • BlockChainTest.java    ​​查询区块 | 账本信息​
  • InvokeTest.java    ​​模拟转账操作​
  • QueryTest.java    ​​查询智能合约​
  • UpgradeTest.java    ​​升级智能合约​
  • JoinPeerTest.java    ​​加入新节点​

建议按如下顺序执行测试用例: APITest -> JoinPeerTest -> QueryTest -> InvokeTest -> QueryTest -> UpgradeTest -> QueryTest

 

5. transaction.proto

enum TxValidationCode {
VALID = 0;
NIL_ENVELOPE = 1;
BAD_PAYLOAD = 2;
BAD_COMMON_HEADER = 3;
BAD_CREATOR_SIGNATURE = 4;
INVALID_ENDORSER_TRANSACTION = 5;
INVALID_CONFIG_TRANSACTION = 6;
UNSUPPORTED_TX_PAYLOAD = 7;
BAD_PROPOSAL_TXID = 8;
DUPLICATE_TXID = 9;
ENDORSEMENT_POLICY_FAILURE = 10;
MVCC_READ_CONFLICT = 11;
PHANTOM_READ_CONFLICT = 12;
UNKNOWN_TX_TYPE = 13;
TARGET_CHAIN_NOT_FOUND = 14;
MARSHAL_TX_ERROR = 15;
NIL_TXACTION = 16;
EXPIRED_CHAINCODE = 17;
CHAINCODE_VERSION_CONFLICT = 18;
BAD_HEADER_EXTENSION = 19;
BAD_CHANNEL_HEADER = 20;
BAD_RESPONSE_PAYLOAD = 21;
BAD_RWSET = 22;
ILLEGAL_WRITESET = 23;
NOT_VALIDATED = 254;
INVALID_OTHER_REASON = 255;
}

 

6. 相关网址


标签:java,Fabric,BAD,sh,fabric,区块,sdk
From: https://blog.51cto.com/u_15891990/5908801

相关文章

  • hyperledger fabric 1.1区块链网络环境部署及cli实操
    文章目录​​1.安装Docker​​​​2.安装Docker-compose​​​​3.安装Git并拉取Fabric代码​​​​4.安装GO语言​​​​5.修改一个阻塞执行的bug​​​​6.......
  • Java lang
    目录lang1.System标准输入、标准输出和错误输出流访问外部定义的属性和环境变量2.Enum3.ThrowableErrorExceptionReturn与finally的执行顺序4.类型、值和变量5.String字......
  • Java实现MySQL binlog日志监听
    使用案例引入maven依赖<dependency><groupId>com.github.shyiko</groupId><artifactId>mysql-binlog-connector-java</artifactId><version>0.21.0</version></......
  • Java8中Collectors求和功能的自定义扩展
    业务中需要将一组数据分类后收集总和,原本可以使用Collectors.summingInt(),但是我们的数据源是BigDecimal类型的,而Java8原生只提供了summingInt、summingLong、summingDouble......
  • java二维数组
    本文介绍java中二维数组的存放位置int[][]arr=newint[2][3];jvm存放二维数组的图示:下面介绍列数不明确的情况: 代码如下:publicclassTwo{publicsta......
  • [Javascript Performance] Optimisation and deoptimization
    Theoptimizingcompileroptimizesforwhatit’sseen.Ifitseessomethingnew,that’sproblematic. Seletingpropertieshassomestrangeimplicationsonpe......
  • [Javascript Performance] How to benchmark code performance
    Code:benchmark.jsconst{performance}=require('perf_hooks');//SETUP......
  • Jenkins+GitLab实现构建JAVA代码
    目录一、前置环境配置二、创建一个maven任务需要提前部署完成Jenkins+GitLab+maven可以参考我的其他文章进行部署一、前置环境配置1、安装MavenIntegration插件Jenki......
  • java中== 和equals的区别
    本文主要介绍==和equals的区别1.==比较的是地址,引用类型(除了String类)的时候,只要不是同一个对象,就不是同一个地址,String类型的时候,如果new出来两个对象,那么也是不同地......
  • Java火焰图简单学习
    前言立的flags倒了太多次自己还是太菜了..课题太大,自己简单总结一下.要是自己总结错了.就不收费,错就错了!-_-!第一步准备环境一定要设置对java的HOME以及PAT......