前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Fabric Gateway 使用示例

Fabric Gateway 使用示例

原创
作者头像
孟斯特
发布于 2023-12-13 07:10:38
发布于 2023-12-13 07:10:38
3530
举报
文章被收录于专栏:code人生code人生

Fabric Gateway RPC接口简介

Fabric Gateway RPC 定义了一系列接口,这些接口提供查询和提交交易服务。交易评估(查询)需要调用Evaluate服务;交易提交(账本更新)是调用 Endorse 的两步过程随后是提交。如果出现以下情况,则需要第三步:调用 CommitStatus客户端希望等待事务被提交。在每一步之前,提案和交易必须由客户端签名。

代码语言:text
AI代码解释
复制
service Gateway {
    //Endorse 服务将提议的交易传递给网关,以便获得足够的认可。
    //网关将确定所请求链码的背书策略并转发给适当的节点以获得背书。
    //它将返回给客户端一个预执行交易结果 Envelope,其结构定义在 common/common.proto 中。
    //在调用提交服务之前,客户必须签署此信封的内容
    rpc Endorse(EndorseRequest) returns (EndorseResponse);

    //Submit 服务将处理 Endorse 服务返回的准备好的交易
    //一旦客户签名。它将等待交易提交给排序服务,但客户端必须调用 CommitStatus 服务来等待事务待提交。
    rpc Submit(SubmitRequest) returns (SubmitResponse);

    //CommitStatus 服务将指示之前提交的预处理事务是否已提交
    //如果尚未提交,它将等待提交。
    rpc CommitStatus(SignedCommitStatusRequest) returns (CommitStatusResponse);

    //评估服务将提议的事务传递到网关以调用交易函数并将结果返回给客户端。
    //如果没有账本更新操作,网关会根据区块高度和负载选择合适的peer进行查询。
    rpc Evaluate(EvaluateRequest) returns (EvaluateResponse);

    //ChaincodeEvents 服务提供一个响应流,每个响应都包含由该服务发出的请求特定块的链码的所有事件。
    //流式响应按块号升序排序。结果仅返回包含所请求事件的块,而不包含任何请求事件的块会被跳过。
    rpc ChaincodeEvents(SignedChaincodeEventsRequest) returns (stream ChaincodeEventsResponse);
}

gateway.proto文件完整定义在这里

合约调用

fabric-gateway提供了智能合约调用接口,主要用于发起和查询上链交易,接口实现位于fabric-gateway/pkg/client/contract.go中:

代码语言:go
AI代码解释
复制
//合约代表智能合约,并允许应用程序:
//
//-使用 EvaluateTransaction() 方法评估从账本查询状态的交易。
//
//-使用 SubmitTransaction() 方法将存储状态的交易提交到分类帐。
//
//对于更复杂的事务调用,例如包含瞬态数据,可以分别使用 Evaluate() 或 Submit() 方法评估或提交事务。可以使用 SubmitAsync() 在提交到分类帐之前访问已提交事务的结果。
//
//使用 NewProposal() 可以采用更细粒度的交易流程。这允许重试流程中的各个步骤以响应错误。
//
//默认情况下,提案、事务和提交状态消息将使用连接网关时指定的签名实现进行签名。如果外部客户端持有签名凭据,则在连接网关时可以省略签名实现,并且可以通过以下方式执行离线签名:
//
//1. 将序列化的提案、事务或提交状态消息及其摘要返回给客户端
//他们生成签名。
//
//2. 使用从客户端收到的序列化消息和签名来创建签名提案、交易或
//分别使用网关的 NewSignedProposal()、NewSignedTransaction() 或 NewSignedCommit() 方法进行提交。
type Contract struct {
	client        *gatewayClient
	signingID     *signingIdentity
	channelName   string
	chaincodeName string
	contractName  string
}

//EvaluateTransaction 将评估交易函数并返回其结果。交易提案将在背书节点上进行评估,但交易不会发送到排序服务,因此不会提交到分类账。这可用于查询世界状态。
func (contract *Contract) EvaluateTransaction(name string, args ...string) ([]byte, error) 

//SubmitTransaction 会将一笔交易提交到账本,只有在提交到账本后才返回其结果。交易功能将在背书节点上进行评估,然后提交给排序服务以提交到分类账中。
//此方法可能会返回不同的错误类型,具体取决于事务调用中发生故障的点。可以使用errors.Is 或errors.As 检查错误。
func (contract *Contract) SubmitTransaction(name string, args ...string) ([]byte, error)

示例

上面介绍了 Fabric Gateway 的RPC接口,接下来以asset-transfer-basic/application-gateway-go为例,介绍下Fabric Gateway的使用过程。首先我们需要建立gRPC的链接:

代码语言:go
AI代码解释
复制
func newGRPCConnetcion() (*grpc.ClientConn, error) {
	certificate, err := loadCertificate(tlsCertPath)
	if err != nil {
		panic(err)
	}

	certPool := x509.NewCertPool()
	certPool.AddCert(certificate)
	transportCredentials := credentials.NewClientTLSFromCert(certPool, gatewayPeer)

	return grpc.Dial(peerEndpoint, grpc.WithTransportCredentials(transportCredentials))
}

func loadCertificate(filename string) (*x509.Certificate, error) {
	certificatePEM, err := os.ReadFile(filename)
	if err != nil {
		return nil, fmt.Errorf("failed to read certificate file: %w", err)
	}
	return identity.CertificateFromPEM(certificatePEM)
}

之后我们需要构建网关实例:

代码语言:go
AI代码解释
复制
gw, err := client.Connect(
	id,
	client.WithSign(sign),
	client.WithClientConnection(clientConn),
	// Default timeouts for different gRPC calls
	client.WithEvaluateTimeout(5*time.Second),
	client.WithEndorseTimeout(15*time.Second),
	client.WithSubmitTimeout(5*time.Second),
	client.WithCommitStatusTimeout(1*time.Minute),
)

Fabric使用通道来进行数据隔离,所以在创建完网关实例后,还需要根据通道名称来选择我们需要访问的网络、根据合约名称来选择需要访问的智能合约:

代码语言:go
AI代码解释
复制
network := gw.GetNetwork(channelName)
contract := network.GetContract(chaincodeName)

之后可以通过SubmitTransaction发起上链交易,EvaluateTransaction发起交易查询。

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。


原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
利用Hyperledger Fabric开发你的第一个区块链应用
在这个例子中,我们通过一个简单的示例程序来了解Fabric应用是如何运行的。在这个例子中使用的应用程序和智能合约(链码)统称为FabCar。这个例子很好地提供了一个开始用于理解Hyperledger Fabric。在这里,你将学会如何开发一个应用程序和智能合约来查询和更新账本,如何利用CA来生成一个应用程序需要的用于和区块链交互的X.509证书。
TopJohn
2022/11/11
1.8K0
利用Hyperledger Fabric开发你的第一个区块链应用
Hyperledger fabric基础介绍
1.分布式存储(Distributed Ledger):所有节点共同维护完全一致的账本数据,区块以保存前一个区块Hash值的方式顺序相连,组成了链式数据结构,保证了数据的不可篡改。
zhayujie
2020/04/29
2.6K0
Fabric架构演变之路
Hyperledger Fabric是目前主流的开源联盟链产品之一,自2016年5月12日开辟代码仓库之日起,已有快3年的时间了,产品趋于稳定,功能也越来越完善,正在适配不同业务场景下的需求。
TopJohn
2022/11/11
6460
Fabric架构演变之路
深入解析fabric的peer命令(三)chaincodeInvokeOrQuery方法
fabric-protos-go是Hyperledger Fabric项目中的一个Go语言包,用于定义和生成与Fabric网络通信相关的协议缓冲区(Protocol Buffers)消息。
酒楼
2023/06/04
1980
Hyperledger Fabric学习笔记01-系统逻辑架构
Hyperledger Fabric 1.0是一种通用的区块链技术,其设计目的是利用一些成熟的技术实现分布式账本技术(Distributed Ledger Techonlogy DLT)。
WindCoder
2020/01/22
1.4K0
Hyperledger Fabric 系统架构详解
因为毕业 Case Study 的项目主要是基于Ethereum公链,也没有面向企业的应用场景,所以之前对Hyperledger Fabric的了解大多只是停留在它的权限管理机制、通道、灵活的智能合约编写等几个特色的概念,对它的架构、各个节点的角色、运行机制等都是一知半解。最近在上 HKU 的<FITE3011 Distributed Ledger and Blockchain>课程,教授对Hyperledger Fabric的工作原理、网络搭建及链码相关的知识做了很详细的讲解,受益匪浅,通过本文来梳理一下,如有错漏,欢迎交流指正。
pseudoyu
2023/04/11
2.8K1
Hyperledger Fabric 系统架构详解
hyperledger fabric读写集简介
在Hyperledger Fabric中,读写集(Read-Write Set, R/W Set) 是智能合约(链码)执行期间生成的一个关键数据结构,包含了事务执行过程中对账本状态的读取和写入操作。理解读写集是理解Fabric事务处理流程的核心之一。以下是对读写集的详细介绍:
孟斯特
2024/08/23
1920
hyperledger fabric读写集简介
区块链开源实现hyperledger fabric架构详解
hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM、Intel、各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量。本文中我们依次讨论:区块链的共通特性、fabric核心概念、fabric的交易执行流程。本文来源于笔者欲对公司部分业务上链而进行培训的PPT,故图多文字少,不要怕太长。
陶辉
2019/06/21
3.2K1
区块链开源实现hyperledger fabric架构详解
Hyperledger Fabric基础知识
本文我们会介绍Hyperledger Fabric的基础知识,并了解如何充分利用这个多功能的区块链框架。
程序那些事
2020/07/07
2.2K0
FastFabric:提升Hyperledger Fabric性能到20000TPS
预计区块链技术将对各种行业产生重大影响。然而,阻碍它们的一个问题是它们有限的交易吞吐量,特别是与诸如分布式数据库系统之类的已建立的解决方在本文中,我们重新构建了一个现代许可的区块链系统Hyperledger Fabric,以将交易吞吐量从每秒3,000次增加到20,000次。我们专注于超出共识机制的性能瓶颈,我们提出架构更改,以减少交易排序和验证期间的计算和I / O开销,从而大大提高吞吐量。值得注意的是,我们的优化是完全即插即用的,不需要对Hyperledger Fabric进行任何界面更改。
TopJohn
2022/11/11
1.7K0
FastFabric:提升Hyperledger Fabric性能到20000TPS
Hyperledger Fabric 核心概念
区块链是一个透明的,基于不可变模式的去中心化系统,核心就是一个分布式账本,记录网络上发生的所有交易。
陶陶技术笔记
2022/05/30
8580
Hyperledger Fabric 核心概念
fabric进阶—第二次调用SDK失败EndorseException
http请求————》springboot api ————》fabric java sdk ————》mycontract智能合约createwine方法
酒楼
2023/06/09
7540
fabric进阶—第二次调用SDK失败EndorseException
数字货币可不只是区块链的全部!聪明人已经把它用到了业务中
接收程序员的 8 点技术早餐 人类的历史,即分久必合,合久必分。 2017 年,比特币因行情疯长火热一时。2018 年伊始,其使用的底层技术区块链又迎来狂欢:从国内创投人到硅谷投资者,从 BAT 到互联网企业众生,都纷纷加入这场技术的斗艳中。 在去中心化技术给这个时代带来新革命的同时,区块链也在更多的行业施展拳脚,利用去中心化计算机系统来创建安全、可验证和永久的交易记录,从而解决不透明或非可信问题。从本质上讲,它创建了一个安全的、分布式的信息和交易记录数据库。 对于交易不透明等问题,广告行业存在的欺诈流量、
企鹅号小编
2018/02/02
8310
数字货币可不只是区块链的全部!聪明人已经把它用到了业务中
fabric进阶—Fabric新特性
虽然一直以来都可以从当前状态中删除私人数据,但这一新功能可以清除对等方的私人数据历史,同时保留私人数据的哈希值作为区块链上不可变的证据。
酒楼
2023/07/05
4220
深入解析fabric的peer命令(终篇)fabric-protos-go
最后一句endorser.ProcessProposal(context.Background(),signedProposal)在fabric-protos-go包里都做了什么呢?
酒楼
2023/06/04
2840
深入解析fabric的peer命令(终篇)fabric-protos-go
使用IBM Blockchain Platform extension开发你的第一个fabric智能合约
使用IBM Blockchain Platform extension开发你的第一个fabric智能合约
程序那些事
2020/07/08
1.4K0
BitXHub 跨链插件(Fabric)源码解读
之前提到过趣链科技的 BitXHub 跨链平台是业界较为完善的跨链开源解决方案,主要通过中继链、网关和插件机制对跨链流程中的功能、安全性和灵活性等进行了优化。
pseudoyu
2023/04/11
5800
BitXHub 跨链插件(Fabric)源码解读
超级账本Fabric的架构与设计
作者 | 杨保华 超级账本Fabric项目自诞生之日起就吸引了全球众多企业的密切关注,已经先后发布了两个大的版本,0.6实验版本(2016年9月)和1.0正式版本(2017年7月)。 目前,超级账本Fabric架构上核心特性主要包括: 解耦了原子排序环节与其他复杂处理环节,消除了网络处理瓶颈,提高可扩展性; 解耦交易处理节点的逻辑角色为背书节点(Endorser)、确认节点(Committer),可以根据负载进行灵活部署; 加强了身份证书管理服务,作为单独的Fabric CA项目,提供更多功能; 支持多通道
区块链大本营
2018/05/10
1.6K0
Hyperledger Fabric Go SDK 事件分析
最近在做跨链适配器,需要在一条本地链上利用 Go SDK 来连接 fabric 网络,并监听事件,所以对 fabric 所支持的事件与 SDK 所提供的监听方法做一下汇总。
pseudoyu
2023/04/11
1K0
Hyperledger Fabric Go SDK 事件分析
Hyperledger Fabric:一种分布式操作系统-基于准入控制的区块链
Hyperledger Fabric 是一种模块化的,可扩展的开源的用于部署和操作权限的区块链系统。Fabric目前被用于超过400多种原型以及概念证明阶段的分布式账本技术的场景中,如很多生产系统,跨越了不同行业和使用场景。
TopJohn
2022/11/11
1.9K0
Hyperledger Fabric:一种分布式操作系统-基于准入控制的区块链
相关推荐
利用Hyperledger Fabric开发你的第一个区块链应用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档