栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

Hyperledger Fabric SDK Go构建第一个应用

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hyperledger Fabric SDK  Go构建第一个应用

写在前面:
文档中的命令操作均在实际环境进行验证,现将成果分享给大家。

目录

一.概述

二.安装环境

三.安装Fabric SDK Go

四.启动区块链网络

五.使用Fabric SDK Go

一. 概述

首先,为新入门的开发小白普及一下何为SDK

软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。软件开发工具包括广义上指辅助开发某一类软件的相关文档、范例和工具的集合。软件开发工具包是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发 Windows 平台下的应用程序所使用的 SDK。它可以简单的为某个程序设计语言提供应用程序接口 API 的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK 还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。为了鼓励开发者使用其系统或者语言,许多 SDK 是免费提供的。

Farbric的Peer节点和Orderer节点都提供了基于GRPC协议(Google开发的远程过程调用RPC)的接口,通过这些接口可以和Peer节点与Orderer节点进行命令/数据交互,为了简化开发,官方提供了多语言版本的SDK,官网原文

Hyperledger Fabric SDKsHyperledger Fabric intends to offer a number of SDKs for a wide variety of programming languages. The first two delivered are the Node.js and Java SDKs. We hope to provide Python, REST and Go SDKs in a subsequent release.Hyperledger Fabric Node SDK documentation.Hyperledger Fabric Java SDK documentation.

实际上目前主流支持的已经有Go版本了,列出主流的三个:

  • Fabric Nodejs SDK

  • Fabric Java SDK

  • Fabric Go SDK

考虑到Golang是Fabric原生的开发语言,Fabric,Fabric-ca,Chaincode都是采用Golang开发的,所以本文还是围绕Golang版本的Fabric SDK进行阐述SDK的安装部署与测试。

二.安装环境

在Ubuntu 16.04上发布,但Hyperledger Fabric架构与Mac OS X,Windows和其他Linux发行版兼容。Hyperledger Fabric使用Docker轻松部署区块链网络。 另外,一些组件(同级)也部署docker容器来分离数据(通道)。 所以请确保所使用的平台支持这种虚拟化。

  1. 查看Docker版本

需要Docker版本17.03.0-ce或更高版本。

$docker -v

返回结果

Docker version 17.12.1-ce, build 7390fc6
  1. 查看Docker-Compose版本

    $docker-compose  version

返回结果

docker-compose version 1.17.1, build unknowndocker-py version: 2.5.1CPython version: 2.7.15rc1OpenSSL version: OpenSSL 1.1.0g  2 Nov 2017
  1. 查看Golang版本

需要版本1.9.x或更高版本

$go version

返回结果

go version go1.10.3 linux/amd64

查看GOPATH,GOROOT,GOBIN环境变量

$ go env |egrep 'GOROOT|GOPATH|GOBIN'

返回结果

GOBIN="/home/bruce/go/bin"GOPATH="/home/bruce/go"GOROOT="/usr/local/go"

三.安装Fabric SDK Go

  1. 安装依赖包

    $ sudo apt update
    $ sudo apt install libltdl-dev

  2. 安装SDK

(1) 下载软件包

$ go get -u github.com/hyperledger/fabric-sdk-go

(2) 安装依赖包

$ cd $GOPATH/src/github.com/hyperledger/fabric-sdk-go $ chmod +x test/scripts    chReq := chmgmtclient.SaveChannelRequest{ChannelID: f.ChannelID, ChannelConfig: f.ChannelConfig, SigningIdentity: orgAdminUser}    //创建应用通道    err = chmClient.SaveChannel(chReq)    if err != nil {        return fmt.Errorf("创建应用通道失败:%v", err)    }    time.Sleep(time.Second * 5)    //创建一个管理资源的客户端对象    f.Admin, err = f.SDK.NewClient(fabsdk.WithUser(f.OrgAdmin)).ResourceMgmt()    if err != nil {        return fmt.Errorf("创建资源管理对象失败:%v", err)    }    //将peer 节点加入到应用通道中    err = f.Admin.JoinChannel(f.ChannelID)    if err != nil {        return fmt.Errorf("peer加入节点失败:%v", err)    }    f.Initialized = true    fmt.Println("SDK实例化成功")    return nil}

该测试代码可以从blockchain/setup.go获取

在这个阶段

  • 初始化一个客户端,它将与 peer,CA 和 orderer进行通信。

  • 创建了一个新通道, 并将Peer节点加入到此通道中

  1. 编写测试代码

为了确保客户端能够初始化所有组件,将在启动网络的情况下进行简单的测试。 为了做到这一点,我们需要构建主程序代码进行功能调用

$ vim main.gopackage mainimport (    "FabricDev/ticket/blockchain"    "os"    "fmt")func main() {    fsetup := blockchain.FabricSetup{        ConfigFile:    "config.yaml",        ChannelID:     "mychannel",        ChannelConfig: os.Getenv("GOPATH") + "src/github.com/ticket/fixtures/artifacts/channel.tx",        OrgAdmin:      "Admin",        OrgName:       "Org1",    }    err := fsetup.Initialize()    if err != nil {        fmt.Errorf("Fabric SDK初始化失败:%v", err)        fmt.Println(err.Error())    }}

代码模板:main.go

  1. 打包依赖关系

在开始编译之前,最后一件事是使用一个vendor目录来包含我们所有的依赖关系。 在我们的GOPATH中,我们有Fabric SDK Go和其他项目。 当尝试编译应用程序时,Golang会在GOPATH中搜索依赖项,但首先会检查项目中是否存在vendor文件夹。 如果依赖性得到满足,那么Golang就不会去看GOPATH或GOROOT。 这在使用几个不同版本的依赖关系时非常有用(可能会发生一些冲突,比如在例子中有多个BCCSP定义,通过使用像dep这样的工具来处理这些依赖关系在vendor目录中。

$ vim Gopkg.toml

配置文件内容

[[constraint]]  name = "github.com/hyperledger/fabric"  revision = "014d6befcf67f3787bb3d67ff34e1a98dc6aec5f"[[constraint]]  name = "github.com/hyperledger/fabric-sdk-go"  revision = "614551a752802488988921a730b172dada7def1d"

这是dep一个限制,以便在 vendor 中指定希望SDK转到特定版本。

保存该文件,然后执行此命令将vendor目录与项目的依赖关系同步:

$ dep ensure$ls vendor -l //查看vendor目录内容drwxrwxr-x 13 bruce bruce 4096 Jul 20 14:06 github.comdrwxrwxr-x  3 bruce bruce 4096 Jul 20 14:06 golang.orgdrwxrwxr-x  4 bruce bruce 4096 Jul 20 14:06 google.golang.orgdrwxrwxr-x  3 bruce bruce 4096 Jul 20 14:06 gopkg.in

5.构建代码

$go build //构建代码生成ticket可执行文件$ls ticket -l-rwxrwxr-x 1 bruce bruce 19784971 Jul 20 14:06 ticket

6.执行命令

$ ./ticket [fabric_sdk_go] 2018/07/21 09:19:23 UTC - config.initConfig -> INFO config fabric_sdk_go logging level is set to: INFOSDK实例化成功

7.清理环境

Fabric SDK生成一些文件,如证书,二进制文件和临时文件。 关闭网络不会完全清理环境,当需要重新启动时,这些文件将被重复使用以避免构建过程。 对于开发,可以快速测试,但对于真正的测试,需要清理所有内容并从头开始。

如何清理环境

  • 关闭你的网络: cd $GOPATH/src/github.com/kongyixueyuan.com/bill/fixtures && docker-compose down

  • 删除证书存储(在配置文件中,client.credentialStore中定义): rm -rf /tmp/bill-*

  • 删除一些不是由docker-compose命令生成的docker容器和docker镜像:
    docker rm -f -v docker ps -a --no-trunc | grep "bill" | cut -d ' ' -f 1 2>/dev/null

    docker rmi docker images --no-trunc | grep "bill" | cut -d ' ' -f 1 2>/dev/null

如何更有效率?

可以在一个步骤中自动完成所有这些任务。 构建和启动过程也可以自动化。 为此,将创建一个Makefile。 首先,确保  make 工具:

make --version

如果没有安装make (Ubuntu):

sudo apt install make

然后使用以下内容在项目的根目录下创建一个名为Makefile的文件:

$ cd $GOPATH/src/github.com/kongyixueyuan.com/bill$ vim Makefile.PHONY: all dev clean build env-up env-down runall: clean build env-up rundev: build run##### BUILDbuild:    @echo "Build ..."    @dep ensure    @go build    @echo "Build done"##### ENVenv-up:    @echo "Start environment ..."    @cd fixtures && docker-compose up --force-recreate -d    @echo "Sleep 15 seconds in order to let the environment setup correctly"    @sleep 15    @echo "Environment up"env-down:    @echo "Stop environment ..."    @cd fixtures && docker-compose down    @echo "Environment down"##### RUNrun:    @echo "Start app ..."    @./ticket##### CLEANclean: env-down    @echo "Clean up ..."    @rm -rf /tmp/bill-* bill    @docker rm -f -v `docker ps -a --no-trunc | grep "ticket" | cut -d ' ' -f 1` 2>/dev/null || true    @docker rmi `docker images --no-trunc | grep "ticket" | cut -d ' ' -f 1` 2>/dev/null || true    @echo "Clean up done"

现在完成任务:

  1. 整个环境将被清理干净

  2. go程序将被编译

  3. 启动区块链网络

  4. 启动程序

要使用它,请进入项目的根目录并使用make命令:

  • 任务all : make或make all

  • 任务clean :清理一切并释放网络( make clean )

  • 任务build :只需构建应用程序( make build )

  • 任务env-up :只需建立网络( make env-up )

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/245929.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号