作者:半暖半夏半流年 | 来源:互联网 | 2023-08-17 15:01
一. pkgclientchannelchannel包:通过包channel可以访问Fabric网络上的频道。频道客户端实例提供处理程序以与指定频道上的peer交互。频道客户端可以
一. pkg/client/channel channel包:通过包channel可以访问Fabric网络上的频道。 频道客户端实例提供处理程序以与指定频道上的peer交互。 频道客户端可以查询链码,执行链码以及注册/取消注册特定频道上的链码事件。 需要与多个频道交互的应用程序应为每个频道创建一个单独的频道客户端实例。
- 基本流程
- 准备频道客户端上下文
- 创建频道客户端
- 执行链码
- 查询链码
- 类型client
type Client struct { // contains filtered or unexported fields }:客户端可以访问Fabric网络上的通道。通道客户端实例提供处理程序以与指定通道上的对等方交互。 需要与多个通道交互的应用程序应为每个通道创建一个单独的通道客户端实例。 通道客户端仅支持非管理功能。
func New(channelProvider context.ChannelProvider, opts ...ClientOption) (*Client, error): New返回Client实例。 通道客户端可以查询链码,执行链码以及注册/取消注册特定通道上的链码事件。
- 例
View Code输出:channel client created
func (cc *Client) Execute(request Request, options ...RequestOption) (Response, error): 执行使用请求和可选请求选项准备并执行事务
- 参数:
请求包含有关强制链代码ID和功能的信息
options包含可选的请求选项
返回:
来自peer的提案回复
- 例
View Code输出:Chaincode transaction completed
func (cc *Client) InvokeHandler(handler invoke.Handler, request Request, options ...RequestOption) (Response, error): InvokeHandler使用提供的请求和可选请求选项来调用处理程序
- 参数:
要调用的处理程序
请求包含有关强制链代码ID和功能的信息
options包含可选的请求选项
返回:
来自peer的提案回复
- 例:
View Code输出:custom
func (cc *Client) Query(request Request, options ...RequestOption) (Response, error): 使用请求和可选请求选项查询链代码
- 参数:
请求包含有关强制链代码ID和功能的信息
options包含可选的请求选项
返回:
来自peer的提案回复
- 例:
View Code输出:chaincode query success
func (cc *Client) RegisterChaincodeEvent(chainCodeID string, eventFilter string) (fab.Registration, <-chan *fab.CCEvent, error): RegisterChaincodeEvent注册链代码事件。 不再需要注册时,必须调用取消注册。
- 参数:
chaincodeID是要为其接收事件的链代码ID
eventFilter是要为其接收事件的chaincode事件过滤器(正则表达式)
返回:
注册和用于接收事件的频道。 调用取消注册时,通道将关闭。
- 例:
View Code输出:chaincode event registered successfully
func (cc *Client) UnregisterChaincodeEvent(registration fab.Registration): UnregisterChaincodeEvent删除给定的链码事件注册并关闭事件通道。
- 参数:registration是从RegisterChaincodeEvent方法返回的注册句柄
- 类型ClientOption
type ClientOption func(*Client) error: ClientOption描述了New构造函数的功能参数
- 类型Request
type Request struct {
ChaincodeID string
Fcn string
Args [][]byte
TransientMap map[string][]byte
// InvocationChain包含一些选择服务实现使用的元数据
//选择符合所有连锁码背书政策的背书人
//在调用链中(例如,对于cc到cc的调用)。
//每个链码也可能与一组私有数据收集名相关联
//一些选择服务(如e.g.fabric选择)使用这些服务来排除背书人
//没有对集合的读访问权。
//被调用的链码(由链码id指定)可以选择添加到调用中
//链连同任何集合,否则它可能被省略。
InvocationChain []*fab.ChaincodeCall
}: Request包含查询和执行调用事务的参数
- 类型RequestOption
type RequestOption func(ctx context.Client, opts *requestOptions) error: 每个Opts参数的RequestOption func
func WithBeforeRetry(beforeRetry retry.BeforeRetryHandler) RequestOption: WithBeforeRetry指定在重试尝试之前调用的函数
func WithChaincodeFilter(ccFilter invoke.CCFilter) RequestOption: WithChaincodeFilter添加了一个链代码过滤器,用于计算额外的背书人
func WithParentContext(parentContext reqContext.Context) RequestOption: WithParentContext封装了grpc父上下文
func WithRetry(retryOpt retry.Opts) RequestOption: WithRetry选项用于配置重试
func WithTargetEndpoints(keys ...string) RequestOption: WithTargetEndpoints允许覆盖请求的目标peer。 目标由名称或URL指定,SDK将创建基础peer对象。
func WithTargetFilter(filter fab.TargetFilter) RequestOption: WithTargetFilter指定每请求目标peer过滤器
func WithTargets(targets ...fab.Peer) RequestOption: WithTargets允许覆盖请求的目标peer
func WithTimeout(timeoutType fab.TimeoutType, timeout time.Duration) RequestOption: WithTimeout封装了超时类型的键值对,即Options的超时持续时间
- 类型Response
type Response struct {
Proposal *fab.TransactionProposal
Responses []*fab.TransactionProposalResponse
TransactionID fab.TransactionID
TxValidationCode pb.TxValidationCode
ChaincodeStatus int32
Payload []byte
}: 响应包含查询的响应参数并执行调用事务
- 目录
- invoke: 包调用提供了执行链代码调用的处理程序。