区块链教程Fabric1.0源代码分析Peer Deliver客户端

本文深入解析了区块链平台Fabric1.0中DeliverClient的源代码,详细介绍了DeliverClient的接口定义、实现以及核心功能,包括获取指定区块、最新区块和最旧区块的方法。同时,文章提供了关键函数的代码示例,如seekHelper函数用于构造查询Envelope。

  区块链教程Fabric1.0源代码分析Peer DeliverClient(Deliver客户端),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。

Fabric1.0源代码笔记之Peer DeliverClient(Deliver客户端)

1、DeliverClient概述

DeliverClient代码分布如下:

  • peer/channel/deliverclient.go,deliverClientIntf接口定义及实现,以及DeliverClient工具函数。
  • protos/orderer/ab.pb.go,AtomicBroadcast_DeliverClient接口定义和实现。

2、deliverClientIntf接口定义及实现

2.1、DeliverClient工具函数

//构造deliverClient
func newDeliverClient(conn *grpc.ClientConn, client ab.AtomicBroadcast_DeliverClient, chainID string) *deliverClient
//代码在peer/channel/deliverclient.go

2.2、deliverClientIntf接口定义及实现

type deliverClientIntf interface {
    getSpecifiedBlock(num uint64) (*common.Block, error)
    getOldestBlock() (*common.Block, error)
    getNewestBlock() (*common.Block, error)
    Close() error
}

type deliverClient struct {
    conn    *grpc.ClientConn
    client  ab.AtomicBroadcast_DeliverClient
    chainID string
}

//构造查询Envelope
func seekHelper(chainID string, position *ab.SeekPosition) *common.Envelope
//r.client.Send(seekHelper(r.chainID, &ab.SeekPosition{Type: &ab.SeekPosition_Specified{Specified: &ab.SeekSpecified{Number: blockNumber}}}))
func (r *deliverClient) seekSpecified(blockNumber uint64) error
//r.client.Send(seekHelper(r.chainID, &ab.SeekPosition{Type: &ab.SeekPosition_Oldest{Oldest: &ab.SeekOldest{}}}))
func (r *deliverClient) seekOldest() error
//return r.client.Send(seekHelper(r.chainID, &ab.SeekPosition{Type: &ab.SeekPosition_Newest{Newest: &ab.SeekNewest{}}}))
func (r *deliverClient) seekNewest() error
//r.client.Recv()读取块
func (r *deliverClient) readBlock() (*common.Block, error)
//r.seekSpecified(num)和r.readBlock()
func (r *deliverClient) getSpecifiedBlock(num uint64) (*common.Block, error)
//r.seekOldest()和r.readBlock()
func (r *deliverClient) getOldestBlock() (*common.Block, error)
//r.seekNewest()和r.readBlock()
func (r *deliverClient) getNewestBlock() (*common.Block, error)
//r.conn.Close()
func (r *deliverClient) Close() error
//cf.DeliverClient.getSpecifiedBlock(0)获取创世区块
func getGenesisBlock(cf *ChannelCmdFactory) (*common.Block, error)
//代码在peer/channel/deliverclient.go

func seekHelper(chainID string, position ab.SeekPosition) common.Envelope代码如下:

func seekHelper(chainID string, position *ab.SeekPosition) *common.Envelope {
    seekInfo := &ab.SeekInfo{
        Start:    position,
        Stop:     position,
        Behavior: ab.SeekInfo_BLOCK_UNTIL_READY,
    }

    msgVersion := int32(0)
    epoch := uint64(0)
    env, err := utils.CreateSignedEnvelope(common.HeaderType_CONFIG_UPDATE, chainID, localmsp.NewSigner(), seekInfo, msgVersion, epoch)
    return env
}
//代码在peer/channel/deliverclient.go

转载于:https://blog.51cto.com/14041296/2313952

涉及内容:注意,学习此视频必须有一定基础的同学区块链相关知识、钱包相关知识、p2p相关知识、uniapp相关知识    01前言    02成果展示    03前言区块链概念和六层模型介绍    04翻译一个带币的js简单例子原理介绍    05区块链springboot工程搭建和区块相关实现    06区块链中加密算法相关介绍以及实现    07钱包相关实体类介绍    08redis数据库等配置和工具类的介绍    09区块链相关实体类介绍    10挖矿相关实体类和POW相关的介绍    11 p2p 点对点 server和client代码    12 p2p 原理的简单介绍    13 节点钱包相关启动实现    14 web控制层逻辑基础代码    15 web功能的整体介绍    16 web钱包功能-创建钱包账户的完整功能实现    17 web钱包功能-获取挖矿钱包信息和根据钱包地址获取信息    18 web钱包功能-获取当前节点所有钱包    19 全节点钱包轻钱包中心化钱包的概念    20 p2p三个节点的相关配置并启动    21 p2p 节点添加相关流程    22 p2p 节点列表相关实现    23 区块相关挖矿与挖矿奖励等讲解    24 区块链相关的查询操作    25 交易转账相关逻辑    26 三台机器节点运行 uniapp开发前准备    27 uniapp首页和我的页面实现    28 uniapp 节点钱包和节点钱包列表展示    29 uniapp添加节点,节点列表挖矿区块链查询等    30 uniapp我的钱包转账查询交易等    31 课程总结以及代码资料等相关说明
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值