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: false

    systemCertPool: 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/[email protected]/tls/client.key
cert:
path: /opt/gopath/src/github.com/fabric-sdk-sample/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/users/[email protected]/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 groups

Failed to query funds: Client Status Code: (6) NO_PEERS_FOUND. Description: targets were not provided 

 

当我们完成配置以后我可以进行测试,测试结果如下

GOROOT=/usr/local/go #gosetup

GOPATH=/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   TestCcQuery

210

--- PASS: TestCcQuery (0.69s)

PASS

 

Process finished with exit code 0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章