【hyperledger-fabric】部署Java应用远程访问智能合约

简介

首先是根据b站的视频 hyperledger-fabric【3】在 java 应用中访问合约 以及hyperledger-fabric【5】Java应用和私有数据,本文章主要讲述的是视频中我遇到的问题,以及相关知识点的总结。

遇到的问题

问题1:git clone下载下来的代码发现与视频中的代码不一致的问题,启动项目报错error create bean

遇到这个问题,我的第一反应就是up主后续的代码也用的是这个,所以代码更新了。所以查阅了相关的资料,可以在gitte中下载历史版本的代码。可以参考 https://blog.csdn.net/weixin_45477146/article/details/133344063这篇文章中的额gitte篇,里面有讲述如何下载历史版本

但是这个问题治标不治本,总体来说呢,就是spring boot启动之后会去扫描配置文件,默认的配置文件是application.properties,但是由于代码更新了,会发现没有默认的配置文件,那么就需要手动去修改启动项的配置文件,否则的话,HyperLedgerFabricProperties类的值均为null了,那么就会error create bean 。下面的图讲解一下出现问题的具体位置。

读取不到资源文件中的参数

解决办法 :点击-》editConfiguration

在activeProfile中点击输入配置文件的名字,由于这里是application-org1.properties,所以在这里的参数填写为org1即可。

问题2:使用POSTman测试的时候,录入一条数据成功,但是查询数据失败。

提前录入一条数据,再使用postman进行测试发现数据并没有录入成功,报错信息显示不存在这样的一条数据。

进入到linux服务器中,直接使用命令进行查询发现也是报错不存在这样一条数据。

此时对比视频中的代码发现问题在于evaluateTransaction方法和submitTransaction方法。如下图。

下载下来的代码和视频中的代码还是有些许不一样的地方,需要对每个方法对比视频中的进行修改,其中需要修改的是createCat,updateCat,deleteCatByKey三个方法。下面讲解一下evaluateTransaction和submitTransaction的区别。

  • evaluateTransaction:是获取到指定的结果,但是并不会提交到账本当中去,所以实际上根本没有对账本进行更改
  • submitTransaction:与上述不同,是提交到账本的,实际做出了更改的。与之同样的还有createTransaction方法。

综上所述就是使用到增删改的时候使用submitTransaction或者createTransaction。使用查询的时候使用evaluateTransaction方法。

知识点总结

私有数据

私有数据和正常部署java应用有几个不同的点,其他都是一致的。首先需要配置文件,例如:附上链接https://hyperledger-fabric.readthedocs.io/zh-cn/latest/private-data-arch.html,文档中有描述这段集合的内容,如下。

需要编写好一个类似的JSON文件,并且放到对应的Java合约代码中去 ,如下图位置。并且需要上传到服务器中指定的位置。

上传到指定位置后即可进行升级合约或者说是重新部署合约,这里需要注意两点:第一点就是在对链码进行批准和提交时 需要在命令后面添加--collections-config,附上文档参考连接https://hyperledger-fabric.readthedocs.io/zh-cn/latest/private-data-arch.html。第二点就是若是升级代码,需要对安装链码包的label进行更改,不可以和已经安装的链码包起冲突;以及sequence的序号,也不可以和之前已经安装的sequence号码起冲突;以及version的版本号。附上两段私有数据、正常情况批准链码通过的命令。

复制代码
## 这段是私有数据
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 4.0 --collections-config ../chaincode/hyperledger-fabric-contract-java-demo/collections_config.json --signature-policy "OR('Org1MSP.member','Org2MSP.member')" --package-id $NEW_CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
# 这段是正常情况
peer lifecycle chaincode approveformyorg -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --channelID mychannel --name hyperledger-fabric-contract-java-demo --version 1.0 --package-id $CC_PACKAGE_ID --sequence 1 --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

可以看到明显多出了如下这段命令

复制代码
--version 4.0 --collections-config ../chaincode/hyperledger-fabric-contract-java-demo/collections_config.json --signature-policy "OR('Org1MSP.member','Org2MSP.member')" 

解析:

  • --version 4.0: 指定链码的版本号为4.0。
  • --collections-config .../chaincode/hyperledger-fabric-contract-java-demo/collections_config.json: 指定了一个存储集合配置的 JSON 文件的路径。在Hyperledger Fabric中,集合是用于存储私有数据的方式,而集合配置定义了这些集合的规则。
  • --signature-policy "OR('Org1MSP.member','Org2MSP.member')": 指定链码的背书策略(endorsement policy)。这个特定的策略是逻辑上的 "OR",表示只需要来自Org1或Org2的成员的签名即可。在链码实例化时,这个策略规定了哪些组织的成员必须为链码背书。

具体的操作命令可以去看合约代码项目中的文档,其他的操作命令都与安装部署时的大差不差,建议看"安装链码、升级合约、私有数据链码定义"这三篇文档即可。

相关推荐
洋不写bug4 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
菠萝加点糖5 小时前
Maven 坐标系统说明
java·maven
hm宋5 小时前
Canal 升级 jar 包操作文档(以升级 FastJSON 为例)
java·canal·jar
后台模板学习5 小时前
学习的心态高频面试题
java·数据库·学习
用户3126874877205 小时前
线程池到底怎么管理线程的?从 ThreadPoolExecutor 到拒绝策略全链路拆解
java
cpolar技术支持6 小时前
Kafka Streams 窗口统计怎么验收:本地跑订单流聚合,用 cpolar 给同事看只读结果页
java·docker·kafka·cpolar·kafka streams
爱读源码的大都督6 小时前
DeepSeek面试官问:生产RAG系统回答不准确,该如何定位和优化?这样回答,能让面试官当场给你Offer!
java·后端·python
杨运交6 小时前
[069][公共模块]Spring Boot 全局异常处理与参数校验实战(下):校验异常精细化处理与 WebFlux 适配
java·spring boot·后端
Raas1006 小时前
MAI Gateway(魔芋企业级AI网关)对比分析:AI网关和OpenRouter区别?企业级能力差距一览
java·服务器·网络·人工智能·gateway·ai网关·mai gateway
APItesterCris7 小时前
告别人工盯品!借助 Open‑Claw 快速搭建电商商品全自动监控与数据分析系统(完整实操代码)
java·大数据·前端·数据库