Hyperledger fabric介绍之fabric-sdk-go入门

目录

1.fabric-sdk-go的介绍

        1)身份管理

        2)通道和链码交互

        3)交易执行和背书

        4)事件监听

        5)错误处理和调试

        6)配置和连接管理

        7)加密和安全性

        8)插件和扩展性

2.confi.yaml配置文件

1)client

2)channels

3)organizations

4)orderers

5)peers

6)certificateAuthorities

7)entityMatchers

8)tlsCerts

3.使用go mod管理项目依赖

4.准备工作

5.创建fabric-sdk-go入口实例

6.创建客户端

7.将peer节点加入通道

8.安装链码

9.实例化链码

10.升级链码

11.调用链码

12.查询链码

13.代码示例


1.fabric-sdk-go的介绍

Fabric SDK Go是用于与Hyperledger Fabric网络进行交互的Go语言软件开发工具包(SDK)。它提供了一组功能强大的API和工具,使开发人员能够构建基于Fabric的应用程序、执行交易、查询状态、管理身份等。以下是一些Fabric SDK Go的关键特性:

        1)身份管理

        Fabric SDK Go提供了身份管理功能,允许开发人员管理和使用与Fabric网络相关的身份。它支持使用X.509证书、密钥和其他身份凭证来进行身份验证,并提供了用于创建和管理身份的API。

        2)通道和链码交互

        使用Fabric SDK Go,开发人员可以创建和管理与Fabric网络中的通道和链码的交互。它提供了通道客户端(Channel Client)和链码客户端(Chaincode Client)的API,使开发人员能够执行交易、查询状态、注册链码事件等操作。

        3)交易执行和背书

         Fabric SDK Go允许开发人员构建并执行交易。它提供了一组API,用于构建交易提案、指定背书节点、执行交易,并获取交易结果。开发人员可以灵活地选择背书节点,并使用事务命名空间来隔离不同的交易。

        4)事件监听

        开发人员可以使用Fabric SDK Go监听Fabric网络中的交易事件。它提供了注册链码事件的API,使开发人员能够定义回调函数来处理特定链码的事件。这样,应用程序可以实时接收和处理与链码相关的事件通知。

        5)错误处理和调试

        Fabric SDK Go提供了丰富的错误处理和调试功能,以帮助开发人员诊断和解决问题。它提供了错误代码和详细错误信息,以及用于输出调试日志的选项。

        6)配置和连接管理

        Fabric SDK Go允许开发人员配置和管理与Fabric网络的连接。它提供了灵活的配置选项,包括节点、通道、链码的定义和连接参数。

        7)加密和安全性

        Fabric SDK Go支持使用加密算法和安全通信协议与Fabric网络进行通信。它使用TLS(Transport Layer Security)协议来确保与网络节点之间的安全通信,并提供对数据的加密和解密功能。

        8)插件和扩展性

        Fabric SDK Go具有可扩展的插件架构,允许开发人员根据需要添加自定义功能。它提供了一组扩展点和接口,以便开发人员可以实现自定义的身份验证、交易处理、事件处理等功能。

2.confi.yaml配置文件

config.yaml是Fabric SDK Go中用于配置连接到Fabric网络的配置文件。它定义了节点、通道、链码和身份等相关信息,以及连接选项和加密设置。以下是config.yaml文件的一些常见配置项:

1)client

        organization:指定客户端所属的组织。

        credentialStore:指定用于存储用户身份凭证的位置。

2)channels

        mychannel:定义一个通道,包括通道的名称、链码事件监听器、背书策略等配置。

3)organizations

        Org1:定义组织Org1的相关信息,如名称、MSP(成员服务提供者)等。

4)orderers

        oederer.example.com:定义排序服务节点的相关信息,如名称、GRPCURL等。

5)peers

        peer0.org1.example.com:定义组织Org1中的对等节点的相关信息,如名称、GRPCURL等。

6)certificateAuthorities

        ca.example.com:定义证书颁发机构(CA)的相关信息,如名称、URL等。

7)entityMatchers

        peer:定义用于匹配对等节点的实体匹配器。

8)tlsCerts

        path:指定TLS证书的路径。

3.使用go mod管理项目依赖

fabric go sdk目前本身使用go modules管理依赖

go mod init初始化好项目的go.mod文件。

编写代码,完成后运行go mod run,会自动下载依赖的项目,但版本可能与 fabric go sdk中的依赖版本不同,编译存在问题。

把go.mod中的内容复制到项目的go.mod中,然后保存,go mod会自动合并相同的依赖, 运行go mod tidy,会自动添加新的依赖或删除不需要的依赖。

4.准备工作

安装Go语言环境:确保你的计算机上已经安装了Go语言环境。你可以从Go官方网站(Go 编程语言)下载相应版本 

设置GOPATH:在你的计算机上设置GOPATH环境变量,用于存放Go项目和依赖包的路径。

1.win+R输入cmd
2.go env

5.创建fabric-sdk-go入口实例

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
)

sdk, err := fabsdk.New(configProvider) // 使用configProvider创建SDK实例
if err != nil {
    // 处理错误
}
defer sdk.Close() // 在使用完SDK后关闭

6.创建客户端

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

clientContext := sdk.ChannelContext(channelID, fabsdk.WithUser("user1")) // 使用指定用户创建客户端上下文
channelClient, err := channel.New(clientContext) // 创建通道客户端
if err != nil {
    // 处理错误
}

7.将peer节点加入通道

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

err = channelClient.JoinChannel(channel.WithRetry(retry.DefaultChannelOpts), channel.WithOrdererEndpoint(ordererEndpoint)) // 将peer节点加入通道
if err != nil {
    // 处理错误
}

8.安装链码

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

installRequest := channel.InstallProposalRequest{
    ChaincodeID: chaincodeID,
    ChaincodePath: chaincodePath,
    ChaincodeVersion: chaincodeVersion,
}
_, err = channelClient.InstallChaincode(installRequest) // 安装链码
if err != nil {
    // 处理错误
}

9.实例化链码

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

instantiateRequest := channel.InstantiateProposalRequest{
    ChaincodeID: chaincodeID,
    Fcn: "init",
    Args: [][]byte{[]byte("arg1"), []byte("arg2")},
}
_, err = channelClient.InstantiateChaincode(instantiateRequest) // 实例化链码
if err != nil {
    // 处理错误
}

10.升级链码

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

upgradeRequest := channel.UpgradeProposalRequest{
    ChaincodeID: chaincodeID,
    Fcn: "upgrade",
    Args: [][]byte{[]byte("arg1"), []byte("arg2")},
}
_, err = channelClient.UpgradeChaincode(upgradeRequest) // 升级链码
if err != nil {
    // 处理错误
}

11.调用链码

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

request := channel.Request{
    ChaincodeID: chaincodeID,
    Fcn: "myFunction",
    Args: [][]byte{[]byte("arg1"), []byte("arg2")},
}
response, err := channelClient.Execute(request) // 调用链码
if err != nil {
    // 处理错误
}

12.查询链码

import (
    "github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
)

queryRequest := channel.Request{
    ChaincodeID: chaincodeID,
    Fcn: "query",
    Args: [][]byte{[]byte("arg1")},
}
response, err := channelClient.Query(queryRequest) // 查询链码
if err != nil {
    // 处理错误
}

13.代码示例

package main

import (
	"fmt"

	"github.com/hyperledger/fabric-sdk-go/pkg/client/channel"
	"github.com/hyperledger/fabric-sdk-go/pkg/core/config"
	"github.com/hyperledger/fabric-sdk-go/pkg/fabsdk"
)

const (
	channelID     = "mychannel"
	chaincodeID   = "mychaincode"
	chaincodePath = "github.com/chaincode/path"
	chaincodeVersion = "1.0"
	ordererEndpoint = "orderer.example.com"
)

func main() {
	// 创建Fabric SDK实例
	sdk, err := fabsdk.New(config.FromFile("config.yaml"))
	if err != nil {
		fmt.Printf("Failed to create SDK: %s\n", err)
		return
	}
	defer sdk.Close()

	// 创建通道客户端
	clientContext := sdk.ChannelContext(channelID, fabsdk.WithUser("user1"))
	channelClient, err := channel.New(clientContext)
	if err != nil {
		fmt.Printf("Failed to create channel client: %s\n", err)
		return
	}

	// 将peer节点加入通道
	err = channelClient.JoinChannel(channel.WithRetry(retry.DefaultChannelOpts), channel.WithOrdererEndpoint(ordererEndpoint))
	if err != nil {
		fmt.Printf("Failed to join channel: %s\n", err)
		return
	}

	// 安装链码
	installRequest := channel.InstallProposalRequest{
		ChaincodeID:   chaincodeID,
		ChaincodePath: chaincodePath,
		ChaincodeVersion: chaincodeVersion,
	}
	_, err = channelClient.InstallChaincode(installRequest)
	if err != nil {
		fmt.Printf("Failed to install chaincode: %s\n", err)
		return
	}

	// 实例化链码
	instantiateRequest := channel.InstantiateProposalRequest{
		ChaincodeID: chaincodeID,
		Fcn:         "init",
		Args:        [][]byte{[]byte("arg1"), []byte("arg2")},
	}
	_, err = channelClient.InstantiateChaincode(instantiateRequest)
	if err != nil {
		fmt.Printf("Failed to instantiate chaincode: %s\n", err)
		return
	}

	// 调用链码
	request := channel.Request{
		ChaincodeID: chaincodeID,
		Fcn:         "myFunction",
		Args:        [][]byte{[]byte("arg1"), []byte("arg2")},
	}
	response, err := channelClient.Execute(request)
	if err != nil {
		fmt.Printf("Failed to execute chaincode: %s\n", err)
		return
	}
	fmt.Printf("Chaincode response: %s\n", string(response.Payload))

	// 查询链码
	queryRequest := channel.Request{
		ChaincodeID: chaincodeID,
		Fcn:         "query",
		Args:        [][]byte{[]byte("arg1")},
	}
	response, err = channelClient.Query(queryRequest)
	if err != nil {
		fmt.Printf("Failed to query chaincode: %s\n", err)
		return
	}
	fmt.Printf("Chaincode query response: %s\n", string(response.Payload))
}

  • 20
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Hyperledger Fabric开源区块链分布式账本-学习参考资料合集,共37份。 一、Hyperledger开发资料 0. 票据背书详细介绍 1. 设置组织结构 2. 网络环境 3. 使用Fabric SDK Go 4.0. 链码开发_数据结构 4.1. 链码开发_票据相关请求处理 4.2. 链码开发_背书相关请求处理 4.3. 链码安装及实例化 5. 链码调用 6. 在网络应用程序中进行设置 GoWeb编程 二、Hyperledger技术资料 超级账本Hyperledger白皮书(中文版) 快速带你上手Hyperledger Fabric环境搭建+开发测试 性能基准测试和优化Hyperledger Fabric 区块链平台 An Introduction to Hyperledger Architecture of the Hyperledger Blockchain Fabric Cryptography and Protocols in Hyperledger Fabric FabNet- an Automatic Hyperledger Fabric Network Wizard Hyperledger 白皮书 Hyperledger 源码分析之 Fabric - 整体结构 Hyperledger Blockchain Performance Metrics Hyperledger Fabric - A Distributed Operating System for Permissioned Blockchains Hyperledger Fabric 实验指导 HyperLedger Fabric 在携程区块链平台中的应用实战 Hyperledger Fabric Access Control System for Internet of Things Layer in Blockchain-Based Applications Hyperledger Fabric Blockchain:Secure and Efficient Solution for Electronic Health Records Hyperledger fabric- towards scalable blockchain for business Hyperledger Fabric架构概览 hyperledger-fabricdocs Documentation-release-2.0 HyperLedgerFabric智能合约速成 Integrating Blockchain for Data Sharing and Collaboration Support in Scientific Ecosystem Platform Performance Analysis of Hyperledger Fabric Platforms Performance Benchmarking & Optimizing Hyperledger Fabric Blockchain Platform Performance Modeling & Analysis of Hyperledger Fabric (Permissioned Blockchain Network)-177页 Principle Foundations of Hyperledger Fabric Supporting Private Data on Hyperledger Fabric with Secure Multiparty Computation The privacy protection mechanism of Hyperledger Fabric and its application in supply chain finance

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值