fabric-sdk-go v1.4安装下载
1.启动fabric网络
实现我们从github 上拉取 fabric
git clone "https://github.com/hyperledger/fabric.git"
# 进入对应的文件
cd /opt/gopath/src/hyperledger/fabric
#下载必备的文件
cd scripts/
#这一步会下载官方的例子以及所需要的Docker镜像,并下载相应的二进制文件以及fabric-sample
#下载是比较慢的,如果出现错误或者长时间没有速度只需要重新运行就可以了,我是在阿里云上面进行下载,所以没有翻墙,如果你要是在本地一定要翻墙
sudo ./bootstrap.sh
当我们完成一系列操作以后我们需要将下载的configtxgen,configtxlator,cryptogen添加进环境变量中因为我们在下一步时候需要他们。我们生成的configtxgen,configtxlator,cryptogen 二进制文件在 fabric目录的.build/bin 目录下,我的地址是
/opt/gopath/src/github.com/hyperledger/fabric/.build/bin
将对应的二进制文件添加进环境变量(我一般都是讲这些二进制文件,copy 到/usr/local/bin 目录下)
vim ~/.profile#文件中最后添加以下内容export PATH=$PATH:$GOPATH/src/github.com/hyperledger/fabric/./build/bin#更新一下source ~/.profile
上面我们就完成了全部的准备工作,我们可以开始启动我们的fabric 网络了。
#进入first-network文件夹,fabric-samples 文件是我们在完成./bootstrap.sh 命令后出现的cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/#执行命令./byfn.sh up //时间会比较长我们需要耐心等待
当出现
===================== Query successful on peer1.org2 on channel 'mychannel' =====================
========= All GOOD, BYFN execution completed ===========
_____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
证明我们启动完成。
./byfn.sh down 关闭fabric 网络。
2.部署fabric-sdk-go
fabric-sdk-go 本身的项目还是很复杂的,尤其代码写的是相当难以阅读,再加上fabric项目的配置项本身就很复杂,所以使得fabric-sdk-go 这个项目还是比较难以掌握的。在这里我先记录下fabric-sdk-go 最简单的启动配置。至于更加复杂的部分以后我再补上。
首先我们先从github 拉去最新的fabric-sdk-go 代码。我当前版本是fabirc-sdk-go 1.4 版本。
git clone https://github.com/hyperledger/fabric-sdk-go.git
因为在新版的fabric-sdk-go 中我们使用的是golang 1.13,我们知道golang 在1.13 版本中已经支持了mod。
#进入fabric-sdk-go 地址cd /opt/gopath/src/github.com/hyperledger/fabric-sdk-go# 执行下载fabric-sdk-go 依赖第三方库,科学上网(当时我就是无法科学上网导致浪费了很多时间)go mod download# 建立vendor 并copy相应的依赖。go mod vendor
此时fabric-sdk-go 项目相应的依赖库我们此时已经下载完毕。下一步我们需要将我们在搭建fabric生成的密钥文件拷贝到我们的fabric-sdk-go 项目中。
# fabric 网络中的密钥文件地址/opt/gopath/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/crypto-config# 在 fabric-sdk-go 需要存放的地址/opt/gopath/src/github.com/hyperledger/fabric-sdk-go/test/fixtures/fabric/v1# 我们copy fabric 下的crypto-config 目录,到fabric-sdk-go 的v1 目录下cd /opt/gopath/src/github.com/hyperledger/fabric/scripts/fabric-samples/first-network/cp -r crypto-config /opt/gopath/src/github.com/hyperledger/fabric-sdk-go/test/fixtures/fabric/v1
当我们完成密钥文件的替换后我们需要检查下,fabric 网络的端口是否是通的。当然如果我们的fabric与fabric-sdk-go是在同一台服务器上没有问题,如果不是在同一台我们可以使用telnet 127.0.0.1 7050 来检查我们的端口是否是开通的。
下面我先将我写的测试代码贴出来给大家看一下。至于为什么我需要一个新的测试代码而不用fabric-sdk-go 的测试代码,因为我只是想简单测试一下我的fabric-sdk-go 是否可以与我的fabric 网络的节点链接。fabric-sdk-go 的测试代码,是将整个的周期都测试一遍。还是很复杂的,这样如果出错我们也不是很好排查。所以我们仿照 的e2e 测试例子自己实现了一个简单的测试代码。我们也可以将测试代码放在end_2_end_test.go 文件中。
/*进行简单的chaincode invoke,query sample
*/
func TestCcQuery(t *testing.T) {
result := fabric_sdk.CcQuery()
fmt.Println(string(result))
}
并同样在fabric-sdk-go/test/integration/e2e 目录下添加一个新的文件ccprovider.go,为了不和e2e的代码有冲突。
package e2e
import (
"fmt"
"github.com/fabric-sdk-sample/fabric-sdk-go/pkg/client/channel"
"github.com/fabric-sdk-sample/fabric-sdk-go/pkg/common/errors/retry"
"github.com/fabric-sdk-sample/fabric-sdk-go/pkg/common/providers/core"
"github.com/fabric-sdk-sample/fabric-sdk-go/pkg/core/config"
"github.com/fabric-sdk-sample/fabric-sdk-go/pkg/fabsdk"
)
var (
channelID = "mychannel"
orgName = "org1"
ccID = "mycc"
defaultQueryArgs = [][]byte{[]byte("b")}
)
func getConfig()core.ConfigProvider{
configPath := "../fixtures/config/config_e2e.yaml"
return config.FromFile(configPath)
}
func CcQuery()[]byte{
configOpt := getConfig()
sdk, err := fabsdk.New(configOpt)
if err != nil {
fmt.Printf("Failed to create new SDK: %s \n", err)
}
defer sdk.Close()
//prepare channel client context using client context
clientChannelContext := sdk.ChannelContext(channelID, fabsdk.WithUser("Admin"), fabsdk.WithOrg(orgName))
// Channel client is used to query and execute transactions (Org1 is default org)
client, err := channel.New(clientChannelContext)
if err != nil {
fmt.Printf("Failed to create new channel client: %s \n", err)
}
return queryCC(client,[]string{"grpcs://××.××.××.××:7051"}...) //必须要加我们targetEndpoints 信息,我这里添加的是pee0.org1 的ip 地址
}
func queryCC( client *channel.Client, targetEndpoints ...string) []byte {
response, err := client.Query(channel.Request{ChaincodeID: ccID, Fcn: "query", Args: defaultQueryArgs},
channel.WithRetry(retry.DefaultChannelOpts),
channel.WithTargetEndpoints(targetEndpoints...),
)
if err != nil {
fmt.Printf("Failed to query funds: %s \n", err)
}
return response.Payload
}
当我们阅读代码的时候我们可以看到在getConfig()方法中我们引用了../fixtures/config/config_e2e.yaml 的配置文件。下面我们学习如何修改config_e2e.yaml配置文件。在这里我们只需要修改相应的密钥路径配置文件,除了下面我摘出来的部分需要特别注意,其他的部分我们正常填写就ok了。
tlsCerts:# [Optional]. Use system certificate pool when connecting to peers, orderers (for negotiating TLS) Default: falsesystemCertPool: true
# [Optional]. Client key and cert for TLS handshake with peers and orderers
client:
key:
path: /opt/gopath/src/github.com/fabric-sdk-sample/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.key
cert:
path: /opt/gopath/src/github.com/fabric-sdk-sample/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/users/User1@org1.example.com/tls/client.crt
#
# [Optional]. But most apps would have this section so that channel objects can be constructed
# based on the content below. If an app is creating channels, then it likely will not need this
# section.
#
在代码部分我们看到需要我们手动填写targetEndporting,否则将会报错误如下:
[fabsdk/client] 2020/02/10 06:06:35 UTC - pgresolver.(*randomLBP).Choose -> WARN No available peer groupsFailed to query funds: Client Status Code: (6) NO_PEERS_FOUND. Description: targets were not provided
当我们完成配置以后我可以进行测试,测试结果如下
GOROOT=/usr/local/go #gosetupGOPATH=/opt/gopath #gosetup/usr/local/go/bin/go test -c -o /tmp/___TestCcQuery_in_github_com_fabric_sdk_sample_fabric_sdk_test_linux github.com/fabric-sdk-sample/fabric-sdk-test #gosetup/usr/local/go/bin/go tool test2json -t /tmp/___TestCcQuery_in_github_com_fabric_sdk_sample_fabric_sdk_test_linux -test.v -test.run ^TestCcQuery$ #gosetup=== RUN TestCcQuery210--- PASS: TestCcQuery (0.69s)PASS
Process finished with exit code 0
fabric-sdk-go v1.4安装下载相关推荐
- 安装下载的python软件包——以Community Water Model (CWatM v1.04)为例
安装下载的python包 1 问题描述 2 解决方案 2.1 常用软件包 2.2 自己下载的软件包 2.3 说明 3 执行过程 3.1 执行python setup.py install 3.2 执行 ...
- 正式环境docker部署hyperf_HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线
HyperLedger/Fabric SDK Docker Image 该项目在github上的地址是:https://github.com/aberic/fabric-sdk-container ( ...
- Hyperledger Fabric SDK Go构建第一个应用
写在前面: 本文内容翻译自:https://chainhero.io/2018/03/tutorial-build-blockchain-app-2/ ,文档中的命令操作均在实际环境进行验证,现将成果 ...
- fabric sdk php,基于 Fabric-SDK-Go 的Web项目实战之使用Fabric-SDK-Go满足依赖
作者:ChainDesk韩小东 ChainDesk官网:http://www.chaindesk.cn/?20190118jinritoutiaomeiti 目标 1.根据项目要求满足所需依赖 2.使 ...
- Fabric 链码Chaincode 的安装、初始化、调用、升级
Fabric 链码Chaincode 的安装.初始化.调用.升级 Fabric chaincode 上一篇文章,我们启动了一个Fabric网络,这篇文章来看看在Fabric网络进行应用的开发. 上一篇 ...
- vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法
Visual Studio Code(简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段.代码对比 Diff.GIT ...
- K8S V1.23 安装--Kubeadm+contained+公网 IP 多节点部署
简介 基于两台公网的服务器节点,两个服务器不再局域网内,只能通过公网 IP 相互访问,搭建 K8S 集群,并且按照 Dashboard,通过网页查看 K8S 相关的东西 环境及机器说明 两台机器,其中 ...
- Windows SDK for Windows 7安装流程
Windows SDK for Windows 7安装流程 由于sharpdevelop在编译过程中需要SDK的支持,所以就在自己的电脑安装了SDK,在安装SDK过程中遇到了点麻烦,所以记录一下. W ...
- EFR32 zigbee SDK协议栈EmberZnet 使用和下载
最近需要评估一下Silicon Labs zigbee的方案,去官网下载zigbee SDK,发现芯科的做法和其他几家公司不太一样,不直接提供SDK包的下载,取而代之的是必须先拿到开发板,然后用序列号 ...
最新文章
- 关于端口聚合或端口聚合称呼的误区
- Javascript玩转继承(一)
- python代码需要背吗-Python 的库、方法这么多,写程序的时候能记住吗?
- 汇编语言--call 指令
- iOS使用 xcconfig配置文件的若干坑
- hdu5399(找规律。。。)
- CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
- C++ Primer(第五版)第七章 类 部分答案
- 【OpenCV 例程200篇】32. 图像的扭变(错切)
- 转换PDF技巧1之PDF虚拟打印机操作详解
- c 易语言dll 循环,易语言的Dll命令及程序集知识点
- CDH6.3.2安装文档
- Android中实现简单的仿京东详情页面
- Azure IoT Edge入门(2)部署一台Edge Device
- matplotlib subplot函数介绍
- Halium 9 尝鲜 -- 在小米平板4上的移植 (四)
- 学习难度最高的五大编程语言,Java排第3,Python竟然都不能上榜
- 配置Eclipse和夜深模拟器连接方法之一
- Java数据同步方案
- 学习PLC LAD 梯形逻辑宝藏网站
热门文章
- php 关于判断true和false
- 360浏览器怎么截图?
- 阿里云发布移动数据中心“闪电立方”:为PB级海量数据迁移而生
- 为什么需要八进制和十六进制? 十六进制的意义何在?
- 树莓派小车实现目标追踪(coco数据集,gluoncv,树莓派和PC信息交互)
- CentOS 查找和干掉僵尸进程
- 发生ActionScript错误的解决方法
- 爬虫的两大重要文件:robots.txt和sitemap.xml
- PopStar(消灭星星)游戏源代码下载、分析及跨平台移植—第一篇(界面)
- Qt—页面加载和数据同步