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安装下载相关推荐

  1. 安装下载的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 执行 ...

  2. 正式环境docker部署hyperf_HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线

    HyperLedger/Fabric SDK Docker Image 该项目在github上的地址是:https://github.com/aberic/fabric-sdk-container ( ...

  3. Hyperledger Fabric SDK Go构建第一个应用

    写在前面: 本文内容翻译自:https://chainhero.io/2018/03/tutorial-build-blockchain-app-2/ ,文档中的命令操作均在实际环境进行验证,现将成果 ...

  4. fabric sdk php,基于 Fabric-SDK-Go 的Web项目实战之使用Fabric-SDK-Go满足依赖

    作者:ChainDesk韩小东 ChainDesk官网:http://www.chaindesk.cn/?20190118jinritoutiaomeiti 目标 1.根据项目要求满足所需依赖 2.使 ...

  5. Fabric 链码Chaincode 的安装、初始化、调用、升级

    Fabric 链码Chaincode 的安装.初始化.调用.升级 Fabric chaincode 上一篇文章,我们启动了一个Fabric网络,这篇文章来看看在Fabric网络进行应用的开发. 上一篇 ...

  6. vscode中文支持xp_VSCode (Visual Studio Code) V1.43.0下载并设置成中文语言的方法

    Visual Studio Code(简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持语法高亮.智能代码补全.自定义热键.括号匹配.代码片段.代码对比 Diff.GIT ...

  7. K8S V1.23 安装--Kubeadm+contained+公网 IP 多节点部署

    简介 基于两台公网的服务器节点,两个服务器不再局域网内,只能通过公网 IP 相互访问,搭建 K8S 集群,并且按照 Dashboard,通过网页查看 K8S 相关的东西 环境及机器说明 两台机器,其中 ...

  8. Windows SDK for Windows 7安装流程

    Windows SDK for Windows 7安装流程 由于sharpdevelop在编译过程中需要SDK的支持,所以就在自己的电脑安装了SDK,在安装SDK过程中遇到了点麻烦,所以记录一下. W ...

  9. EFR32 zigbee SDK协议栈EmberZnet 使用和下载

    最近需要评估一下Silicon Labs zigbee的方案,去官网下载zigbee SDK,发现芯科的做法和其他几家公司不太一样,不直接提供SDK包的下载,取而代之的是必须先拿到开发板,然后用序列号 ...

最新文章

  1. 关于端口聚合或端口聚合称呼的误区
  2. Javascript玩转继承(一)
  3. python代码需要背吗-Python 的库、方法这么多,写程序的时候能记住吗?
  4. 汇编语言--call 指令
  5. iOS使用 xcconfig配置文件的若干坑
  6. hdu5399(找规律。。。)
  7. CodeForces - 888G Xor-MST(贪心+字典树+最小生成树)
  8. C++ Primer(第五版)第七章 类 部分答案
  9. 【OpenCV 例程200篇】32. 图像的扭变(错切)
  10. 转换PDF技巧1之PDF虚拟打印机操作详解
  11. c 易语言dll 循环,易语言的Dll命令及程序集知识点
  12. CDH6.3.2安装文档
  13. Android中实现简单的仿京东详情页面
  14. Azure IoT Edge入门(2)部署一台Edge Device
  15. matplotlib subplot函数介绍
  16. Halium 9 尝鲜 -- 在小米平板4上的移植 (四)
  17. 学习难度最高的五大编程语言,Java排第3,Python竟然都不能上榜
  18. 配置Eclipse和夜深模拟器连接方法之一
  19. Java数据同步方案
  20. 学习PLC LAD 梯形逻辑宝藏网站

热门文章

  1. php 关于判断true和false
  2. 360浏览器怎么截图?
  3. 阿里云发布移动数据中心“闪电立方”:为PB级海量数据迁移而生
  4. 为什么需要八进制和十六进制? 十六进制的意义何在?
  5. 树莓派小车实现目标追踪(coco数据集,gluoncv,树莓派和PC信息交互)
  6. CentOS 查找和干掉僵尸进程
  7. 发生ActionScript错误的解决方法
  8. 爬虫的两大重要文件:robots.txt和sitemap.xml
  9. PopStar(消灭星星)游戏源代码下载、分析及跨平台移植—第一篇(界面)
  10. Qt—页面加载和数据同步