计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

GO SDK Demo

更新时间:2023-03-07 GMT+08:00

本节提供了一个基于Go SDK的Demo,帮助用户开发自己的Go客户端应用程序。

准备工作

  • 准备弹性云服务器。
  • 在弹性云服务器上安装golang环境,Go版本要求:1.12及以上,1.16以下(>=1.12,<1.16)。
  • 获取Go SDK源码,获取方法:登录区块链服务管理控制台,进入“体验中心 > 应用案例”,单击“GO示例Demo-GO SDK Demo”中Go应用程序源码的“下载”按钮。

创建区块链实例

创建区块链实例,具体请参见基于CCE集群

安装及实例化链代码

本示例使用链代码文件获取方法:登录区块链服务管理控制台,进入“体验中心 > 应用案例”,单击“GO示例Demo-GO SDK Demo”中Go语言示例链代码的“下载”按钮。

参考章节:用户指南-区块链管理-链代码管理

下载SDK和证书

  1. 登录区块链服务管理控制台。
  2. 在“实例管理”页面,在实例卡片中,单击“获取客户端配置”。
  3. 在新打开的页面,勾选“SDK文件”,SDK配置参数如下:

    参数

    链代码名称

    chaincode

    说明:

    链代码名称需要和链代码安装&实例化时的一致。

    证书存放路径

    /root/gosdkdemo/config

    通道名称

    channel

    组织&Peer节点

    保持系统默认

    勾选“共识节点证书”。

    勾选“Peer节点证书”,指定节点组织选择organization,勾选“管理员证书”。

  4. 单击“下载”。下载SDK配置文件、orderer组织的管理员证书和organization组织的管理员证书。

部署应用

  1. 将Go SDK源码下载至准备的弹性云服务器“/root”路径下并解压。

    下载方法:登录区块链服务管理控制台,进入“应用案例”,单击“GO示例Demo-GO SDK Demo”中Go应用程序源码的“下载”按钮。

  2. 下载SDK和证书步骤中的zip文件解压后,把configs文件夹中的orderer文件夹、peer文件夹、sdk-config.json、sdk-config.yaml文件全部复制到/root/gosdkdemo/config/目录下。
  3. 在代码中找到“/gosdkdemo/src/main.go”文件,进行以下修改:
    1. 将configFile中的值修改为实际的SDK配置文件名称,例如:demo-channel-sdk-config.yaml。
    2. 将org的值修改为organization对应的组织哈希值。
      在通道管理页面,单击“查看节点”获取组织的哈希值(MSP标识去掉“MSP”后缀即为对应组织的哈希)。
      var (    
          configFile = "/root/gosdkdemo/config/go-sdk-demo-channel-sdk-config.yaml"    
          org = " 9103f17cb6b4f69d75982eb48bececcc51aa3125"
       )
  4. 使用go mod方式配置GOPATH路径,请根据实际安装路径进行配置。
    1. 设置环境变量GO111MODULE为on。
      export GO111MODULE=on
    2. go.mod文件如图所示,用户需要根据实际安装路径修改replace代码。
      module main  
      go 1.15
      // 指定导入的依赖包及其版本
      require ( 
              github.com/bitly/go-simplejson v0.5.0 
              github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869// indirect 
              github.com/ghodss/yaml v1.0.0 
              github.com/hyperledger/fabric-sdk-go v1.0.0 
              github.com/pkg/errors v0.9.1 
              github.com/spf13/viper v1.7.1 
      )  
      // 以项目路径为/root/gosdkdemo/src为例 
      replace github.com/hyperledger/fabric-sdk-go => /root/gosdkdemo/src/github.com/hyperledger/fabric-sdk-go
  5. 找到“gosdkdemo/src”路径下的main.go文件,执行如下命令:
    go run main.go

常用API接口

Fabric-sdk-go的主要入口是FabricSDK类,这个可以通过NewSDK()方法分别可以生成。

Fabric-sdk-go的常用操作基本都可以用这四个client实现:FabricClient,ChannelClient,ChannelMgmtClient,ResourceMgmtClient。

  • FabricSDK

    FabricSDK在pkg\fabsdk\fabsdk.go中,通过New ()方法生成object。New ()方法支持可变参数Option,以下是生成FabricSDK的例子:

    var opts []fabsdk.Option

    opts = append(opts, fabsdk.WithOrgid(org))

    opts = append(opts, fabsdk.WithUserName("Admin"))

    sdk, err = fabsdk.New(config.FromFile(configFile), opts...)

    configFile是SDK配置文件的路径。OrgId是SDK配置文件中的组织id。

    FabricSDK在def/fabapi/fabapi.go中,通过NewSDK()方法生成object。NewSDK()方法有一个Options参数,以下是生成Options参数的例子:

    deffab.Options{ConfigFile: configFile, LoggerFa
    logging.LoggerProvider(), UserName: sysadmin}

    ConfigFile是SDK配置文件的路径。LoggerFactory是可选的,不提供的话default会log到console。

  • FabricClient

    FabricClient主要有以下常用的接口。

    接口名称

    描述

    参数值

    返回值

    CreateChannel

    创建Channel的接口,用于创建channel。

    request

    CreateChannelRequest

    txn.TransactionID, error

    QueryChannelInfo

    查询Channel的接口,用于查询Channel的信息。

    name string, peers

    []Peer

    Channel, error

    InstallChaincode

    安装链码的接口,安装链码到区块链中。

    request

    InstallChaincodeRequest

    []*txn.TransactionPropos

    lResponse, string, error

    InstallChaincode

    安装链码的接口,安装链码到区块链中。

    request

    InstallChaincodeRequest

    []*txn.TransactionPropos

    lResponse, string, error

    QueryChannels

    查询channel的接口,查询区块链中已创建的通道。

    peer Peer

    *pb.ChannelQueryResponse, error

    QueryInstalledChaincodes

    查询已安装链码的接口,查询区块链中已安装的链码。

    peer Peer

    *pb.ChaincodeQueryResponse, error

  • ChannelClient

    ChannelClient主要包括链码查询和链码调用两类接口。

    接口名称

    描述

    参数值

    返回值

    Query

    链码查询接口,调用链码进行查询。

    request

    QueryRequest

    []byte, error

    QueryWithOpts

    带options的链码查询接口,与Query类似,但是可以通过QueryOpts指定notifier, peers,和timeout。

    request

    QueryRequest, opt

    QueryOpts

    []byte, error

    ExecuteTx

    链码调用接口,用于链码的调用。

    request

    ExecuteTxRequest

    TransactionID,

    error

    ExecuteTxWithOpts

    带options的链码调用接口,与ExecuteTx类似,但是可以通过ExecuteTxOpts指定notifier, peers,和timeout。

    request

    ExecuteTxRequestopt ExecuteTxOpts

    TransactionID,

    error

  • ChannelMgmtCLient

    ChannelMgmtClient 只有两个接口SaveChannel(req SaveChannelRequest) error 和SaveChannelWithOpts(req SaveChannelRequest, opts SaveChannelOpts) error 这两个接口是用于创建channel用的,这两个接口里面具体实现会调用到FabricClient里createChannel()接口。

  • ResourceMgmtClient

    ResourceMgmtClient主要就是与链码生命周期相关的接口和一个peer加入通道的接口。

    说明:

    链码的删除接口为BCS增加的接口,目前只实现了删除链码安装包的功能。

    接口名称

    描述

    参数值

    返回值

    InstallCC

    安装链码,用于安装链码。

    reqInstallCCRequest

    []InstallCCResponse, error

    InstallCCWithOpts

    带options的链码安装,与InstallCC类似,但是可以通过InstallCCOpts指定peers。

    reqInstallCCRequest,opts InstallCCOpts

    []InstallCCResponse, error

    InstantiateCC

    实例化链码接口,用于实例化链码。

    channelID string,reqInstantiateCCRequest

    error

    InstantiateCCWithOpts

    带options的链码实例化,与InstantiateCC类似,但是可以通过InstantiateCCOpts指定peers和timeout。

    channelID string,reqInstantiateCCRequest, optsInstantiateCCOpts

    error

    UpgradeCC

    升级链码,用于链码的升级。

    channelID string,reqUpgradeCCRequest

    error

    UpgradeCCWithOpts

    带options的链码升级,与UpgradeCC类似,但是可以通过UpgradeCCOpts指定peers和timeout。

    channelID string,reqUpgradeCCRequest, optsUpgradeCCOpts

    error

    DeleteCC

    删除链码,用于链码的删除,目前只有删除安装包的功能。

    channelID string,reqDeleteCCRequest

    error

    DeleteCCWithOpts

    带options的链码删除,与DeleteCC类似,但是可以通过DeleteCCWithOpts指定peers和timeout。

    channelID string,reqDeleteCCRequest,opts DeleteCCOpts

    error

    JoinChannel

    Peers加入Channel的接口,用于peers加入Channel。

    channelID string

    error

    JoinChannelWithOpts

    带options的Peers加入Channel的接口,与JoinChannel类似,但是可以通过JoinChannelOpts指定peers。

    channelID string,optsJoinChannelOpts

    error

    说明:

    带options的接口都可以指定peers,peers可通过def/fabapi/pkgfactory.go 里的NewPeer(userName string, orgName string, url string, certificate string, serverHostOverride string, config config.Config) (fab.Peer, error) 生成。这个method比原生的NewPeer多两个参数userName, orgName, 这两个参数用于peer双向tls找到对应的tls证书。

调用合约

Main.go是一个简单的客户端应用示例程序,主要是为了方便用户熟悉客户端开发的流程,主要包含以下步骤:

//1.导入相关包:Sdk包中提供了一些API,以便用户的应用程序能够访问链代码。
import (
   "fmt"  
   "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
   "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"    ……
)
//2.创建文件配置:这部分封装了应用开发必要的一些公共配置,包括sdk配置文件路径、组织名
var (
   configFile = "/root/fabric-go-demo/config/go-sdk-demo-channel-sdk-config.yaml"
   org = "9103f17cb6b4f69d75982eb48bececcc51aa3125"
   ……
)
//3.加载配置文件
loadConfig()
//4. 初始化sdk
initializeSdk()
//5. 执行链代码,将数据写入账本,key = "testuser",value= "100"
insert("insert",[][]byte{
   []byte("testuser"),
   []byte("100"),
})
//6.查询链代码,输出查询结果,key = "testuser" 
query("query",
[][]byte{
[]byte("testuser"),
})
表1 调用函数介绍

函数名

说明

getOptsToInitializeSDK

解析配置文件,创建并返回fabsdk.Option对象。

GetDefaultChaincodeId

解析配置文件,返回chaincodeID。

GetDefaultChannel

解析配置文件,返回channelID。

UserIdentityWithOrgAndName

用户身份验证,输入为组织名和用户名,返回为验证结果。

ChannelClient

创建*channel.Client对象,输入为组织名、用户名以及通道ID,返回*channel.Client对象。

insert

将数据写入账本,输入参数为链码的对应方法名称以及要插入的键值对,返回为写入的结果。

query

查询链上信息,输入参数为链码的对应方法名称以及要查询的数据,返回为查询的结果。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容