Hyperledger Fabric问题汇总(持续更新)

这篇具有很好参考价值的文章主要介绍了Hyperledger Fabric问题汇总(持续更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Hyperledger Fabric 2.4.1 2.3.3 问题汇总

Ubuntu 20.04
Hyperledger Fabric 2.3.3
SDK对应的Go 1.17.5
链码对应的Go 1.18
Fabric-sdk-go 1.0.0
Docker 20.10.12
Docker-Compose 2.11.2

1. 链码提交后,调用合约函数出错,channelID为空:

调用命令:
peer chaincode invoke -o localhost:7050 – ordererTLSHostnameOverride orderer.example.com --tls --cafile ${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem --channelID cychannel --name marriage --peerAddresses localhost:7051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt --peerAddresses localhost:9051 --tlsRootCertFiles ${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -c ‘{“function”:“Register”,“Args”:[“1001”,“jack”]}’

出现如下错误:
Error: The required parameter ‘channelID’ is empty. Rerun the command with -C flag

原因:
所调用命令的缩进有问题(命令从本地拷贝到虚拟机易出错), --后不能有空格

解决后:
2023-01-03 21:54:08.247 CST 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200

2. 链码提交后,调用合约函数出错,状态码500,链码未安装:

调用命令:
peer chaincode query -C cychannel -n marriage -c ‘{“Args”:[“searchMarriageInfoByClientId”,“1001”]}’

出现如下错误:
Error: endorsement failure during query. response: status:500 message:“make sure the chaincode marriage has been successfully defined on channel cychannel and try again: chaincode definition for ‘marriage’ exists, but chaincode is not installed”

原因:
在确保链码提交成功的情况下出现该错误,原因是函数名小写开头,只在本包内调用有效,外部无法调用。将函数名改为大写开头即可。

解决后:
{“id”:“1001”,“marriage_id”:“”,“person_name”:“jack”,“is_married”:false}

补充:另一种情况也出现了这个问题

情景:
本地主机通过Go-SDK调用远程云服务器的链码(防火墙已开放 TCP 7051 和 9051 端口)。

原因:
我在链码函数中添加了权限判断(只有拥有org1证书的客户端才能访问):
Hyperledger Fabric问题汇总(持续更新)
结果,我在sdk中初始化合约对象时,用的是org2的证书。于是,删除生成的wallet文件(这一步很关键),将代码中的org2全部修改成org1,成功。

3. 本地SDK调用远程主机的链码,报错,connection is in TRANSIENT_FAILURE:

出现如下错误:
event service creation failed: could not get chConfig cache reference: QueryBlockConfig failed: QueryBlockConfig failed: queryChaincode failed: Transaction processing for endorser [192.168.6.149:7051]: Endorser Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection on target [192.168.6.149:7051]: connection is in TRANSIENT_FAILURE

原因:
我本地的SDK项目结构如下:
Hyperledger Fabric问题汇总(持续更新)
我使用的配置文件是fabric-samples下test-network下的,需要提前准备三件事情:
① 修改本地的organizations中的connection-org1.yaml的url为远程主机的IP:
Hyperledger Fabric问题汇总(持续更新)
Hyperledger Fabric问题汇总(持续更新)

② 在本地hosts文件中添加远程主机的域名解析。
Hyperledger Fabric问题汇总(持续更新)

③ 每次链码部署成功后,都需要从test-network中更新本地项目的organizations(一个organizations只能用于一个SDK项目)。
Hyperledger Fabric问题汇总(持续更新)

确保上述工作无误后,运行main.go调用远程链码报错…
原因是fabric-sdk-go与fabric2.4.x版本不兼容,更换为fabric2.3.3后成功解决问题。
(如果想使用2.4.x的版本,需要借助新的sdk:fabric-gateway,其Github地址为https://github.com/hyperledger/fabric-gateway)
Hyperledger Fabric问题汇总(持续更新)

4. 本地SDK调用远程主机的链码,报错,configure MSP failed: sanitizeCert failed the supplied identity is not valid: x509: certificate signed by unknown authority:

原因:
Go的版本问题,我本地的Go版本是1.19.2,更换为1.17.5后,问题解决。

解决后:
SDK终于启动成功,并能正常调用远程链码。
Hyperledger Fabric问题汇总(持续更新)

5. 在创建通道时./network.sh up createChannel命令报错,报错信息为osnadmin: error: unknown long flag ‘–channel -id’, try --help

解决方法:
需要修改fabric-samples/test-network/scripts下的createChannel.sh文件,将createChannel函数中的–channel -id修改为–channelID
Hyperledger Fabric问题汇总(持续更新)

6. 通过SDK调用远程主机的链码时,报错:UTC - lazyref.(*Reference).refreshValue -> WARN Error - initializer returned error: load MSPs from config failed: configure MSP failed: sanitizeCert failed the supplied identity is not valid: x509: certificate signed by unknown authority. Will retry again later

解决方法:
还是Go版本的问题,我将Go 1.19.2更换为Go 1.17.5之后,问题解决。

7. SDK如何设置wallet的生成路径?

解决方法:
wallet, err := gateway.NewFileSystemWallet(“org1/wallet”)

8. 调用链码失败

报错信息:
Error: endorsement failure during invoke. response: status:500 message:“error in simulation: failed to execute transaction 306ed1ca53720d68d6e392198014ca2e91fbfa79a9f6e6be7a7e40f497bf4b1e: could not launch chaincode rent_1.0:e678092929f2e636a5bcb1ddbfd52dd04c45b1fc5128a2a4cf883cb5c7991ee9: chaincode registration failed: container exited with 2”

原因:
链码本身的问题。链码函数都有一个指针类型的receiver,对应的实例是继承了contractapi.Contract的合约。而我不小心,将实例写成了某个自定义的结构体,导致出错。

解决方法:
定义的合约:
Hyperledger Fabric问题汇总(持续更新)
错误:
Hyperledger Fabric问题汇总(持续更新)
正确:
Hyperledger Fabric问题汇总(持续更新)

9. 链码中,contractapi版本的问题

Hyperledger Fabric问题汇总(持续更新)

go mod tidy默认导入最新版本,截至目前(2023.03.17)contractapi的最新版本是1.2.1,要求go的版本是1.19以上(一个月前,contractapi最新版本是1.2.0,支持go 1.18,并不会出现这个问题),而我本地的go是1.18版本,因此安装链码会出现错误。

而我将go版本更换为1.19之后,安装链码时会有意外的错误…因此,我只能修改contractapi的版本使其支持低版本的go。由于我链码所在的虚拟机的go版本是1.18,因此我将contractapi的版本更改为1.2.0(1.2.0要求go版本是1.17以上),这样就兼容了。

module xxx

go 1.18

require github.com/hyperledger/fabric-contract-api-go v1.2.0

require (
	github.com/go-openapi/jsonpointer v0.19.5 // indirect
	github.com/go-openapi/jsonreference v0.20.0 // indirect
	github.com/go-openapi/spec v0.20.6 // indirect
	github.com/go-openapi/swag v0.21.1 // indirect
	github.com/gobuffalo/envy v1.10.1 // indirect
	github.com/gobuffalo/packd v1.0.1 // indirect
	github.com/gobuffalo/packr v1.30.1 // indirect
	github.com/golang/protobuf v1.5.2 // indirect
	github.com/hyperledger/fabric-chaincode-go v0.0.0-20220720122508-9207360bbddd // indirect
	github.com/hyperledger/fabric-protos-go v0.0.0-20220613214546-bf864f01d75e // indirect
	github.com/joho/godotenv v1.4.0 // indirect
	github.com/josharian/intern v1.0.0 // indirect
	github.com/mailru/easyjson v0.7.7 // indirect
	github.com/rogpeppe/go-internal v1.8.1 // indirect
	github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
	github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
	github.com/xeipuuv/gojsonschema v1.2.0 // indirect
	golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect
	golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
	golang.org/x/text v0.3.7 // indirect
	google.golang.org/genproto v0.0.0-20220719170305-83ca9fad585f // indirect
	google.golang.org/grpc v1.48.0 // indirect
	google.golang.org/protobuf v1.28.0 // indirect
	gopkg.in/yaml.v2 v2.4.0 // indirect
)

10. 本地SDK访问服务器中的链码失败

报错信息:
“Failed to submit: Multiple errors occurred: - Transaction processing for endorser [localhost:7051]: Endorser Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection on target [localhost:7051]: connection is in TRANSIENT_FAILURE - Transaction processing for endorser [localhost:9051]: Endorser Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection on target [localhost:9051]: connection is in TRANSIENT_FAILURE”

解决方法:
SDK中设置DISCOVERY_AS_LOCALHOST为false,否则会向本地发送请求,链码放在服务器中,显然不可能访问到。
Hyperledger Fabric问题汇总(持续更新)

11. 本地SDK访问服务器中的链码失败

报错信息:
panic: Failed to submit: CreateAndSendTransaction failed: SendTransaction failed: calling orderer ‘orderer.example.com:7050’ failed: Orderer Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection on target [orderer.example.com:7050]: waiting for connection failed: context deadline exceeded [recovered]
panic: Failed to submit: CreateAndSendTransaction failed: SendTransaction failed: calling orderer ‘orderer.example.com:7050’ failed: Orderer Client Status Code: (2) CONNECTION_FAILED. Description: dialing connection on target [orderer.example.com:7050]: waiting for connection failed: context deadline exceeded

分析:
看报错信息,好像是访问orderer节点失败,原来是服务器没有开放7050端口。

解决方法:
开放服务器端口
Hyperledger Fabric问题汇总(持续更新)

另一种情况也出现了类似的问题:
我在本地host文件中添加了多个服务器的域名解析,也就是同一个组织域名对应了多个ip。需要保证host文件中的ip是你要访问的链码所在服务器的ip。

12. 重新打开一个终端后,如何调用链码的函数?

方法:

PWD=‘/myFabric/fabric-samples/test-network’

export PATH=${PWD}/…/bin:$PATH

export FABRIC_CFG_PATH=${PWD}/…/config/

export CORE_PEER_TLS_ENABLED=true

export CORE_PEER_LOCALMSPID=“Org1MSP”

export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

export CORE_PEER_ADDRESS=localhost:7051

设置以上环境变量后,命令行调用链码函数即可。

13. 通过SDK查询得到的字符切片如何转换为对象?

方法:
对于表示单个对象的json串,反序列化到map[string]interface{};
对于表示对象数组的json串,反序列化到[]map[string]interface{};

//根据用户ID获取该用户的缴税记录
taxes, err := utils.TaxContract.EvaluateTransaction("GetAllTaxesByUserId", userId)
if err != nil {
	return err
}
var res []map[string]interface{}
json.Unmarshal(taxes, &res)
fmt.Println(res)

Hyperledger Fabric问题汇总(持续更新)文章来源地址https://www.toymoban.com/news/detail-414222.html

到了这里,关于Hyperledger Fabric问题汇总(持续更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker安装MinIO遇到的问题汇总——持续更新中

    本文章记录作者使用Docker安装MinIO过程中遇到的所有问题, 将持续更新 ,如果你在使用Docker安装MinIO过程中遇到了一些问题,但是本文没有记载,你可以直接在本文评论区贴图、或打字描述,这样大家都能看到,可以给你一些建议,从而不断完善,让后来者少走更多的弯路,

    2024年02月04日
    浏览(44)
  • 解决GitHub下载速度太慢问题的方法汇总(持续更新,建议收藏)

    Github上下载仓库或者克隆仓库,速度基本稳定在 20k 以下,当克隆一些大的仓库时,以这乌龟速度,很容易出现克隆超时的错误,等了几十分钟的下载一夜回到解放前,那种感觉我猜各位或多或少都经历过。本博客汇总了几种亲测可用的方案,很大地提升下载速度,一个大的

    2024年02月07日
    浏览(53)
  • K8s 生产环境问题汇总及解决方案(持续更新 ing)

    目录 一、前端页面显示 503 Service Temporarily Unavailable 问题背景 解决方案 原理 二、Dockfile 构建镜像失败:When using COPY with more than one source file, the destination must be a directory and end with a /  问题背景 解决方案 原理 三、前端页面显示 502 Bad Gateway 问题背景  解决方案 原理 时间:2

    2024年02月02日
    浏览(40)
  • 服务器VNC软件与服务器中Sentaurus TCAD软件相关问题汇总(持续更新中)

    VNC是Virtual Network Computing的缩写,它是一种远程桌面控制协议和软件系统。它允许用户通过互联网或局域网远程访问和控制其他计算机。VNC协议通过在服务器端捕获屏幕图像并将其传输到客户端,然后客户端将图像渲染在用户的本地计算机上,从而实现远程桌面控制。 VNC可以

    2024年02月15日
    浏览(46)
  • 北邮22级信通院数电:Verilog-FPGA(3)实验“跑通第一个例程”modelsim仿真及遇到的问题汇总(持续更新中)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 注意:本篇文章所有绝对路径的展示都来自上一篇博客 北邮22级信通院数

    2024年02月07日
    浏览(52)
  • 北邮22级信通院数电:Verilog-FPGA(1)实验一“跑通第一个例程” 过程中遇到的常见问题与解决方案汇总(持续更新中)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 问题一:Verilog代码没有跑通  报错信息: 错因分析: 问题二:已连

    2024年02月07日
    浏览(64)
  • JAVA 基础算法汇总(持续更新)

    目录 前言 一、查找算法 1.顺序查找(线性查找) 2.二分查找 二、排序算法 1.冒泡排序 2.直接选择排序 3.插入排序 4.直接插入排序 · · · 三、链表的基础操作 1.链表的创建 2.移除链表元素 3.设计链表 4.ListNode temp = head 与  ListNode dumpyNode = new ListNode(0) 的区别 四、树的基础操作

    2024年02月04日
    浏览(43)
  • 线性DP题目汇总(持续更新)

    此篇章主要整理一些关于线性dp的题目,很多题目其实都可以被挂上线性dp的标志,比如最熟悉的最长上升子序列啊,最长公共子序列啊等等,并且线性dp在自己写力扣周赛的题目的时候,真的会时不时出几道,然后刚好利用这些题目加上dp分析的方法,把题目好好写一写。 ①

    2023年04月08日
    浏览(37)
  • 安全行业招聘信息汇总——持续更新!

    (1)安全攻防工程师 职位描述 1、负责上线安全测试(黑盒、白盒)、例行安全检查、渗透测试、APP安全测试等工作; 2、制订研发流程中的安全规范,监督和保障安全规范的实施; 3、负责SDLC流程落地,深入业务技术及架构,左移解决安全风险; 4、对标国际信息安全最佳

    2024年02月05日
    浏览(47)
  • 2022前端面试题汇总(持续更新中~)

    目录 1. 防抖和节流 2. js闭包 vue中的data为什么是一个函数?(面试常问) 3. ES6面试题 3.1 var let const 区别 3.2 解构  3.3 如何利用es6快速的去重? 3.4 Promise 面试题 以下代码的执行结果是? 4. Vue相关 4.1 MVC和MVVM的区别 4.2 v-model 原理 4.3  vue中的data为什么是一个函数?(面

    2023年04月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包