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…

Linux中一些知识积累(持续补充)

如何安装Eigen3库? 在linux中直接命令安装。Eigen/Dense 是 Eigen 库中的一个模块,提供了对密集矩阵(Dense Matrix)的支持。 sudo apt install libeigen3-devLinux 中VScode中运行C时,gdb 的Launch与Attach有什么区别…

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

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

K8S 为什么关闭 SELinux 和交换内存

在学习搭建 K8S 环境和使用 K8S 时,所有教程必然会提到的事情就是关闭节点的 SELinux 和交换内存,如同自然规律一样。 那么为什么会有这样的要求呢? 交换内存 计算机的物理内存是有限的,而进程对内存的使用是不确定的&#xff…

js let 和 var 的区别

在 JavaScript 中,let 和 var 都是用来声明变量的关键字,但它们之间存在一些重要的区别: 作用域(Scope):var 在声明变量时具有函数级作用域,这意味着在函数内部用 var 声明的变量在整个函数内部…

探索 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”)一…

SQL面试题挑战04:找出使用相同ip的用户

目录 问题:SQL解答: 问题: 现在有一张用户登陆日志表,该表包括user_id,ip,log_time三个字段,现在需要找出共同使用ip数量超过3个(含)的所有用户对。比如下面的示例数据,101和102用户共同使用的ip为4个&…

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 工具,可以轻…