Fabric:使用GoLand+Fabric-SDK-Go操作Fabric网络

遇到bug, 未完待续!!!

写在最前

前序博客已经介绍了使用命令的方式在Fabric上创建通道以及部署执行链码的方法,但这个过程太繁琐,尤其是当Fabric网络中peer节点和组织Org过多时,需要频繁的更改环境变量。
Hyperledger Fabric官方提供了Fabric-sdk-go(也有针对其他语言的sdk)使开发人员能够与Fabric网络进行交互,并且可基于此构建区块链技术的应用程序。本篇博客主要介绍Fabric-sdk-go的简单使用。

基本环境

本机操作系统为MAC系统,和Fabric运行在虚拟机中。Fabric的具体运行环境为:
操作系统:Ubuntu 16.04
版本:Hyperledger Fabric: V2.5.4

1 GoLand连接虚拟机

要使用ssh方式连虚拟机之前,需要在两个系统上安装ssh服务。无论是在MAC上安装ssh,还是在Ubuntu系统上安装ssh,网络上资料都很多,这里不在赘述。

1.1 在MAC上使用ssh连接虚拟机

为了保证后续能顺利使用Goland连接虚拟机,这里先在MAC上使用ssh连接虚拟机。首先要保证本机系统上和虚拟机上的Ubuntu系统上的ssh服务都是开启状态。接着本机系统的终端上尝试连接虚拟机,具体指令如下:

ssh sherry@172.16.8.129

其中@前的部分为Ubuntu系统的用户名。@后面的ip地址可以在Ubuntu系统上通过ifconfig命令进行查询,具体如下:
在这里插入图片描述
上述命令运行成功之后,将可以在MAC的终端上操作Ubuntu系统。具体如下:
在这里插入图片描述

1.2 GoLand连接Fabric网络

1.2.1 启动Fabric网络

Fabric-sdk-go不能创建Fabric网络,所以Fabric网络的创建过程仍然在Ubuntu系统中来创建。为了简便,使用fabric-samples提供的测试网络test-network,其创建如下。

sudo ./network.sh up
docker ps -a

其结果如下:
在这里插入图片描述

1.2.2 Goland连接Fabric网络

使用Goland连接Fabric网络需要完成以下几件事情:

  • Goland连接虚拟机。
    在Goland中,打开Tools->Deployment->configuration进入Deployment界面,这里要新建一个SFTP部署。具体如下:
    connecton
    在这里插入图片描述
    其中ssh configuration的配置界面如下:
    在这里插入图片描述

  • 在Goland中配置Fabric网络文件映射目录。
    在这里插入图片描述这里的Deployment path即为Ubuntu系统上Fabric网络的相对路径地址(根路径为/home/sherry)。而local path即为Deployment path中的文件在本地系统上的映射地址。

  • 接着启动ssh连接。具体如下:
    在这里插入图片描述
    之后便可以在Goland中操作Ubuntu系统了。具体如下:
    在这里插入图片描述

  • 接着为了能在GoLand中修改链码及编写代码。先将Fabric网络中的文件映射到本地系统上。具体如下:
    在这里插入图片描述
    Tips:在文件同步时可能会出错,可以先在Ubuntu系统上更改Fabric网络文件的权限,再重新进行同步。

2 使用Fabri-SDK-GO操作网络

2.1 准备工作

  • 在Ubuntu系统上搭建finance网络。具体搭建过程可以参考博客:https://blog.csdn.net/yeshang_lady/article/details/134113296
  • 修改Goland的ssh部署。将finance网络所在的Ubuntu目录映射到GoLand的Fabric_GOPATH目录上,并将finance网络的所有文件下载到Fabric_GOPATH目录上。
  • 准备链码文件。在Fabric_GOPATH上创建usersChaincode/chaincode目录来保存链码文件asset-transfer.goasset-transfer.go文件参考博客:https://blog.csdn.net/yeshang_lady/article/details/134801201
  • 配置相关包。在Fabric_GOPATH/userChaincode/下执行如下代码(在GoLand->Terminal->local中执行):
go mod init
vim go.mod #这里要修改go.mod文件,将go语言版本修改为1.21
go get github.com/hyperledger/fabric-contract-api-go/contractapi
go get github.com/hyperledger/fabric-sdk-go
GO111MODULE=on go mod vendor
  • 为了保证Fabric-sdk-go的顺利执行,进入如下vendor/github.com/hyperledger目录,git命令下载fabric-sdk-go源文件。具体如下:
git clone https://github.com/hyperledger/fabric-sdk-go.git

在这里插入图片描述
如果不进行这一步操作,后续使用fabric-sdk-go创建客户端的时候会可能会遇到如下错误:
..\vendor\github.com\hyperledger\fabric-sdk-go\internal\github.com\hyperledger\fabric\discovery\client\api.go:47:38: undefined: discovery.ChaincodeCall

  • Fabric_GOPATH\usersChaincode下创建sdkInit目录并创建start.go文件。后续所有与Fabric-SDK-GO操作相关的代码都存放在该文件中。
  • Fabric_GOPATH\usersChaincode下闯将main.go文件作为主函数所在的文件。

2.2 实例化Fabri SDK

在实例化Fabric SDK之前,需要在Fabric_GOPATH/usersChaincode下生成config.yaml文件。finance网络对应的config.yaml文件如下(Fabric-sdk-go中给了一些样例文件可以参考):

# Copyright SecureKey Technologies Inc. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0
version: 1.0.0
client:organization: org1 #此应用程序的所有者logging:level: infocryptoconfig:path: ${GOPATH}/src/Fabric_GOPATH/organizationscredentialStore:path: "/tmp/state-store"cryptoStore:path: /tmp/mspBCCSP:security:enabled: truedefault:provider: "SW"hashAlgorithm: "SHA2"softVerify: truelevel: 256tlsCerts:systemCertPool: trueclient:key:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/users/Admin@org1.finance.com/tls/client.keycert:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/users/Admin@org1.finance.com/tls/client.crtchannels:channel1:peers:peer0.org1.finance.com:endorsingPeer: truechaincodeQuery: trueledgerQuery: trueeventSource: truepeer1.org1.finance.com:endorsingPeer: truechaincodeQuery: trueledgerQuery: trueeventSource: truepeer0.org2.finance.com:endorsingPeer: truechaincodeQuery: trueledgerQuery: trueeventSource: truepolicies:queryChannelConfig:minResponses: 1maxTargets: 1retryOpts:attempts: 5initialBackoff: 500msmaxBackoff: 5sbackoffFactor: 2.0selection:SortingStrategy: BlockHeightPriorityBalancer: RoundRobinBlockHeightLagThreshold: 5eventService:resolverStrategy: MinBlockHeightbalancer: RoundRobinblockHeightLagThreshold: 4reconnectBlockHeightLagThreshold: 8peerMonitorPeriod: 6s
organizations:org1:mspid: Org1MSPcryptoPath:  ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/users/Admin@org1.finance.com/msppeers:- peer0.org1.finance.com- peer1.org1.finance.comcertificateAuthorities:- ca.org1.finance.comorg2:mspid: Org2MSPcryptoPath:  ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org2.finance.com/users/Admin@org2.finance.com/msppeers:- peer0.org2.finance.comcertificateAuthorities:- ca.org2.finance.com
orderers:orderer.finance.com:url: orderer.finance.com:7050grpcOptions:ssl-target-name-override: orderer.finance.comkeep-alive-time: 0skeep-alive-timeout: 20skeep-alive-permit: falsefail-fast: falseallow-insecure: falsetlsCACerts:path: ${GOPATH}/src/Fabric_GOPATH/organizations/ordererOrganizations/finance.com/tlsca/tlsca.finance.com-cert.pem
peers:-defaults:grpcOptions:keep-alive-time: 0skeep-alive-timeout: 20skeep-alive-permit: falsefail-fast: falseallow-insecure: falsepeer0.org1.finance.com:url: peer0.org1.finance.com:7051grpcOptions:ssl-target-name-override: peer0.org1.finance.comtlsCACerts:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/tlsca/tlsca.org1.finance.com-cert.pempeer1.org1.finance.com:url: peer1.org1.finance.com:8051grpcOptions:ssl-target-name-override: peer1.org1.finance.comtlsCACerts:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/tlsca/tlsca.org1.finance.com-cert.pempeer0.org2.finance.com:url: peer0.org2.finance.com:9051grpcOptions:ssl-target-name-override: peer0.org2.finance.comtlsCACerts:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org2.finance.com/tlsca/tlsca.org2.finance.com-cert.pemcertificateAuthorities:ca.org1.finance.com:url: https://ca.org1.finance.com:7054grpcOptions:ssl-target-name-override: ca.org1.finance.comtlsCACerts:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/tlsca/tlsca.org1.finance.com-cert.pemclient:key:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/users/Admin@org1.finance.com/tls/client.keycert:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org1.finance.com/users/Admin@org1.finance.com/tls/client.crtregistrar:enrollId: adminenrollSecret: adminpwcaName: ca.org1.finance.comca.org2.finance.com:url: https://ca.org2.finance.com:9054grpcOptions:ssl-target-name-override: ca.org2.finance.comtlsCACerts:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org2.finance.com/tlsca/tlsca.org2.finance.com-cert.pemclient:key:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org2.finance.com/users/Admin@org2.finance.com/tls/client.keycert:path: ${GOPATH}/src/Fabric_GOPATH/organizations/peerOrganizations/org2.finance.com/users/Admin@org2.finance.com/tls/client.crtregistrar:enrollId: adminenrollSecret: adminpwcaName: ca.org2.finance.com

start.go文件中添加如下代码:

/*代码的import部分会自己生成,这里为了节省空间就不在展示了*/
package sdkInit
func SetupSDK(configFile string, initialized bool) (*fabsdk.FabricSDK, error) {if initialized {return nil, fmt.Errorf("Fabric SDK已经实例化")}sdk, err := fabsdk.New(config.FromFile(configFile))if err != nil {return nil, fmt.Errorf("实例化Fabric SDK失败: %v", err)}fmt.Println("Fabric SDK初始化成功")return sdk, nil
}

main.go中添加如下代码,具体如下:

const (configFile  = "config.yaml"initialized = false
)
func main() {sdk, err := sdkInit.SetupSDK(configFile, initialized)if err != nil {fmt.Println(err.Error())return}defer sdk.Close() //
}

运行main.go文件即可完成Fabric SDK的实例化。

参考资料

  1. https://blog.csdn.net/lakersssss24/article/details/125645713

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 22.04 LTS上安装Docker-ce

在Ubuntu 22.04 LTS上安装Docker-ce Docker是一个开源平台,用于自动化应用程序的部署、扩展和管理。它使用容器技术,使开发、测试和部署过程更加简化和可靠。本文将介绍在Ubuntu 22.04 LTS上安装Docker-ce的步骤。 步骤1:更新软件包列表 …

5~80V降5V 0.3A同步整流降压型DC-DC转换器-AH7550

AH7550是一种TEL:l86*4884*3702*高压、高效率的同步整流降压型DC-DC开关转换器,恒定120KHz开关频率,输出电流能力高达0.6A,AH7550支持5V~80V的宽输入操作电压范围,同时支持最大占空比90%输出,芯片内置环路补…

小型家用超声波清洗机适合清洗眼镜吗?小型超声波清洗机排行榜

在快节奏的现代生活中,我们的眼睛时常与各种物品接触,如眼镜、隐形眼镜等。为了保持眼睛的健康和舒适,定期清洗眼镜变得尤为重要。而随着科技的发展,小型家用超声波清洗机逐渐进入人们的视野,它能否成为我们清洗眼镜的…

学生备考护眼灯什么牌子好推荐?高性能护眼台灯推荐

作为一名电器测评师,对各类电器好物都了解得比较多,最近也会被很多的人询问护眼台灯哪个牌子好,问其原因才知很多的人有使用护眼台灯出现眼睛酸痛刺眼的现象,这是因为使用了不专业护眼台灯导致的,一般这类护眼台灯使用…

基于springboot的日记本系统源码+数据库+安装使用说明

之前写的SpringBoot日记本系统备受好评,考虑到还是有很多小伙伴不会部署,所以这一篇文章就单独来讲一下部署步骤吧。 需要资源 idea(破不破解都行) MySQL(最好5.7以上版本,最好8.0) Navicat…

C/C++ 获取系统时间time_t的使用

time_t:它通常是一个长整型(long int),用于表示从特定参考点(通常是 1970年1月1日00:00:00UTC)经过的秒数。这被广泛用作时间戳。 但是time_t获取的时间是一个长整型,可以通过ctime()函数将其转…

探索 Vue3 ( 三 ) Teleport传送组件

Teleport Vue 3.0新特性之一。 Teleport 是一种能够将我们的模板渲染至指定DOM节点,不受父级style、v-show等属性影响,但data、prop数据依旧能够共用的技术; Teleport中的内容允许我们控制在任意的 DOM 中,完全不受父级style样式…

Gartner2023数据库魔力象限发布 阿里云依旧领导者 腾讯退出 EDB/Yugabyte进入

这是一个跨越数年的系列,历史文章参考: * 数据库魔力象限2022:阿里领先、腾讯再次进入 * 2021 藏在魔力象限中的数据库江湖 * Gartner云计算魔力象限2018 概述 Gartner云数据库魔力象限(后简称“象限”或“MQ”)一…

Postman报:400 Bad Request

● 使用Postman发送Post请求报400,入参为JSON; 二、分析 1、Postman请求并没有请求到后台Api(由于语法错误,服务器无法理解请求); 2、入参出错范围:cookie、header、body、form-data、x-www-f…

fastapi 处理请求参数整理

1、路径参数 app.get("/getfilecontent/{id}/{pre}") def get_filecontent(id,pre):"""路径参数,测试接口,读取当前工作目录下的file.txt文件,返回txt中的内容:param id: The ID of the item to retrieve.:param p…

百模大战中的AI行业:新趋势与未来发展

文章目录 每日一句正能量前言技术进步应用拓展行业变革人才竞争后记 每日一句正能量 人生最重要的价值是心灵的幸福,而不是任何身外之物。 前言 随着科技的迅猛发展,人工智能(AI)已经成为引领技术革命的重要驱动力之一。在当前的…

电气 接近开关

npn:和负载(控制器或者继电器)共阳极,低电平响应 pnp:和负载共阴极,高电平响应

阻焊层,预计将以4.5%左右的复合年增长率增长

阻焊层,也称为阻焊剂,是施加在印刷电路板 (PCB) 上的保护层,用于保护铜迹线在焊接过程中免受氧化、污染和损坏。近年来,由于消费电子、汽车、航空航天和电信等各种应用对 PCB 的需求不断增加,阻焊层市场一直在显着增长…

网页版音乐元数据编辑器Music Tag Web

什么是 Music Tag Web ? 『音乐标签』 Web 版是一款可以编辑歌曲的标题,专辑,艺术家,歌词,封面等信息的音乐标签编辑器程序, 支持 FLAC,APE,WAV,AIFF,WV&…

25、新加坡南洋理工、新加坡国立大学提出FBCNet:完美融合FBCSP的CNN,EEG解码SOTA水准![抱歉老师,我太想进步了!]

前言: 阴阳差错,因工作需要,需要查阅有关如何将FBCSP融入CNN中的文献,查阅全网,发现只此一篇文章,心中大喜,心想作者哪家单位,读之,原来是自己大导(新加坡工…

Docker 学习总结(80)—— 轻松驾驭容器,玩转 LazyDocker

前言 LazyDocker 是一个用户友好的命令行工具,简化了 Docker 的管理。它能够通过单一命令执行常见的 Docker 任务,如启动、停止、重启和移除容器。LazyDocker 还能轻松查看日志、清理未使用的容器和镜像,并自定义指标。 简绍 LazyDocker 是一个用户友好的 CLI 工具,可以轻…

Java小案例-Java实现人事管理系统

前言 《人事管理系统》该项目采用技术jsp、Struts2、Mybatis、dwr、tomcat服务器、mysql数据库 开发工具eclipse/idea。 【项目使用技术】 Struts2Mybatisdwrjqueryjscss等技术 前端使用技术:JSP, dwr、jquery、js、css等 后端使用技术:Struts2Myba…

html之如何设置音频和视频

文章目录 前言一、音频标签:audio1.audio简介2.常用属性controlsautoplayloop代码演示: 二、视频标签:video1.video2.常用的视频元素controlsautoplayloop代码演示: 总结视频元素总结音频元素总结 前言 html中插入音频和视频的方…

macos 上使用 java+opencv记录

自编译 失败很多次之后终于跑起来一个 javaopencv 的demo。 过程 主要步骤如下: 编译需要 Apache Ant brew install ant需要告诉 opencv 需要 javabuild -DBUILD_opencv_javaON brew edit opencv编辑这个我错了很多次 直接编辑完了它会默认下载未修改的openc…

Java 并发编程 —— 透过源码剖析 ForkJoinPool

目录 一. 前言 二. 工作窃取的实现原理 2.1. WorkQueue(工作队列) 2.2. 工作窃取流程 三. ForkJoinPool 源码解析 3.1. ForkJoinPool 的字段 3.1.1. 常量 3.1.2. 成员变量 3.1.3. ctl(5个部分组成) 3.2. 构造函数 3.3.…