HyperLeger织物SDK开发(四)——频道
一、通道简介
1,通道简介
包裹/客户/渠道支持访问布网络上的通道.channel客户端实例提供与指定通道上的对等节点进行交互的处理函数.channel客户端可以在指定通道上查询链码,执行链码以及注册或注销链码事件。如果应用程序需要与织物网络的多条通道进行交互,需要为每条通道创建一个单独的通道客户端实例。
官方文档:https://godoc.org/github.com/hyperledger/fabric-sdk-go/pkg/client/channel
2,通道使用流程
通道使用流程如下:
,准备通道客户端上下文
B,创建通道客户端
C,执行链码
D,查询链码
通道使用示例如下:
<代码> c,犯错:=New (mockChannelProvider (“mychannel”)) 如果犯错!=nil { fmt。Println(“未能创建客户端”) } 反应,犯错:=c。查询(请求{ChaincodeID:“testCC”, Fcn:“调用”,arg游戏:[][]字节{[]字节(查询),[]字节(“数据”)}}) 如果犯错!=nil { fmt。Printf("未能查询chaincode: % s \ n”,呃) } fmt.Println (string (response.Payload))//输出://abc 代码>
二、通道常用接口
1,类型定义
<代码>//请求包含查询和执行一个调用交易的参数 类型请求结构体{ ChaincodeID字符串 Fcn字符串 Args[][]字节 TransientMap map [string][]字节//InvocationChai包含元数据,某些选择服务实现使用元数据来选择满足调用链中所有链码的背的书//策略的背书节点//每个chaincode也可能与一组私人数据收集的名字//使用的一些选择服务(例如织物选择)排除代言人//没有读访问集合。//调用chaincode(由ChaincodeID指定)可以被添加到调用//链以及任何集合,否则可以省略。 InvocationChain [] * fab.ChaincodeCall }//响应包含执行和查询一个调用交易的响应参数 反应型结构{ 建议* fab.TransactionProposal []* fab.TransactionProposalResponse的反应 TransactionID fab.TransactionID TxValidationCode pb.TxValidationCode ChaincodeStatus int32 负载[]字节 }代码>
2,获取客户端实例
<代码>类型客户结构{ 上下文context.Channel 会员fab.ChannelMembership eventService fab.EventService greylist * greylist.Filter clientTally//nolint }代码>
通道客户端支持访问布网络上的通道。为了与特定通道的对等节点进行交互,通道客户端实例提供了一个处理程序。如果应用程序需要与多个通道进行交互,应该为每个通道创建一个单独的通道客户端实例。通道客户端只支持非管理功能。
<代码>类型ClientOption func(*客户端)错误 func (channelProvider上下文。ChannelProvider,选择…ClientOption)(*客户,错误)代码>
返回通道客户实例。通道客户端可以在特定通道上查询链码,执行链码以及注册/注销链码事件。
使用示例:
<代码> ctx:=mockChannelProvider (“mychannel”) c,犯错:=New (ctx) 如果犯错!=nil { fmt.Println (err) } 如果c !=nil { fmt。Println(“创建渠道客户”) 其他}{ fmt。Println(“渠道客户是零”) }//输出://渠道客户端创建代码>
3,执行交易
<代码> func (cc *客户端)执行(请求,请求选项…RequestOption)(响应,错误)代码>
使用请求和可选的请求选项进行准备并执行事务。
参数:
请求包含必备链码ID和函数的相关信息
选项包含可选的请求选项
返回同伴的提案回复
使用示例:
<代码> c,犯错:=New (mockChannelProvider (“mychannel”)) 如果犯错!=nil { fmt。Println(“未能创建客户端”) } _,呃=c。执行(请求{ChaincodeID:“testCC”, Fcn:“调用”,arg游戏:[][]字节{[]字节(“移动”),[]字节(“a”),[]字节(b),[]字节(" 1 ")}}) 如果犯错!=nil { fmt.Println (err.Error ()) } fmt。Println (“Chaincode事务完成”)//输出://Chaincode事务完成代码>
4,调用交易处理
<代码> func (cc *客户端)InvokeHandler(处理程序调用。请求处理程序,请求,选择…RequestOption)(响应,错误)代码>
InvokeHandler使用提供的请求和可选请求选项来调用处理程序
参数:
处理程序为要调用的处理程序
请求包含必备的链码ID和函数的相关信息
选项包含可选的请求选项