首页 > 其他 > 详细

区块链教程Fabric1.0源代码分析Peer

时间:2018-11-05 19:58:43      阅读:219      评论:0      收藏:0      [点我收藏+]
区块链教程Fabric1.0源代码分析Peer,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。

Fabric 1.0源代码笔记 之 Peer

1、Peer概述

在Fabric中,Peer(节点)是指在网络中负责接收交易请求、维护一致账本的各个fabric-peer实例。节点之间彼此通过gRPC通信。
按角色划分,Peer包括两种类型:

  • Endorser(背书者):负责对来自客户端的交易提案进行检查和背书。
  • Committer(提交者):负责检查交易请求,执行交易并维护区块链和账本结构。

Peer核心代码在peer目录下,其他相关代码分布在core/peer和protos/peer目录下。目录结构如下:

  • peer目录:
    ???? main.go,peer命令入口。
    ????
    node目录,peer node命令及子命令peer node start和peer node status实现。
    ???????? node.go,peer node命令入口。
    ????????
    start.go,peer node start子命令实现。
    ???????? status.go,peer node status子命令实现。
    ????
    channel目录,peer channel命令及子命令实现。
    ???? chaincode目录,peer chaincode命令及子命令实现。
    ????
    clilogging目录,peer clilogging命令及子命令实现。
    ???? version目录,peer version命令实现。
    ????
    common目录,peer相关通用代码。
    ???????? common.go,部分公共函数。
    ????????
    ordererclient.go,BroadcastClient接口及实现。
    ????* gossip目录,gossip最终一致性算法相关代码。
  • core/peer目录:
    ???? config.go,Peer配置相关工具函数。
    ????
    peer.go,Peer服务相关工具函数。
  • core/endorser目录:背书服务端。
    ????
    如下为分节说明Peer代码:

  • Fabric 1.0源代码笔记 之 Peer #peer根命令入口及加载子命令
  • Fabric 1.0源代码笔记 之 Peer #peer node start命令实现
  • Fabric 1.0源代码笔记 之 Peer #peer channel命令及子命令实现
  • Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现
  • Fabric 1.0源代码笔记 之 Peer #EndorserClient(Endorser客户端)
  • Fabric 1.0源代码笔记 之 Peer #EndorserServer(Endorser服务端)
  • Fabric 1.0源代码笔记 之 Peer #BroadcastClient(Broadcast客户端)
  • Fabric 1.0源代码笔记 之 Peer #committer(提交者)

    2、Peer配置相关工具函数

//为全局变量localAddress和peerEndpoint赋值
func CacheConfiguration() (err error) 
func cacheConfiguration() //调用CacheConfiguration()
//获取localAddress
func GetLocalAddress() (string, error)
//获取peerEndpoint
func GetPeerEndpoint() (*pb.PeerEndpoint, error) 
//获取Peer安全配置
func GetSecureConfig() (comm.SecureServerConfig, error) 
//代码在core/peer/config.go

PeerEndpoint结构体定义如下:

type PeerID struct {
????Name string
}

type PeerEndpoint struct {
????Id      *PeerID
????Address string
}
//代码在protos/peer/peer.pb.go

SecureServerConfig结构体定义如下:

type SecureServerConfig struct {
????ServerCertificate []byte //签名公钥,取自peer.tls.cert.file
????ServerKey []byte //签名私钥,取自peer.tls.key.file
????ServerRootCAs [][]byte //根CA证书,取自peer.tls.rootcert.file
????ClientRootCAs [][]byte
????UseTLS bool //是否启用TLS,取自peer.tls.enabled
????RequireClientCert bool
}
//代码在core/comm/server.go

3、Peer服务相关工具函数

func (cs *chainSupport) Ledger() ledger.PeerLedger
func (cs *chainSupport) GetMSPIDs(cid string) []string
func MockInitialize()
func MockSetMSPIDGetter(mspIDGetter func(string) []string)
func Initialize(init func(string)) //Peer初始化,并部署系统链码
func InitChain(cid string)
func getCurrConfigBlockFromLedger(ledger ledger.PeerLedger) (*common.Block, error)
func createChain(cid string, ledger ledger.PeerLedger, cb *common.Block) error
func CreateChainFromBlock(cb *common.Block) error
func MockCreateChain(cid string) error
func GetLedger(cid string) ledger.PeerLedger
func GetPolicyManager(cid string) policies.Manager
func GetCurrConfigBlock(cid string) *common.Block
func updateTrustedRoots(cm configtxapi.Manager)
func buildTrustedRootsForChain(cm configtxapi.Manager)
func GetMSPIDs(cid string) []string
func SetCurrConfigBlock(block *common.Block, cid string) error
func NewPeerClientConnection() (*grpc.ClientConn, error)
func GetLocalIP() string
func NewPeerClientConnectionWithAddress(peerAddress string) (*grpc.ClientConn, error)
func GetChannelsInfo() []*pb.ChannelInfo
//构造type channelPolicyManagerGetter struct{}
func NewChannelPolicyManagerGetter() policies.ChannelPolicyManagerGetter
func (c *channelPolicyManagerGetter) Manager(channelID string) (policies.Manager, bool)
func CreatePeerServer(listenAddress string,secureConfig comm.SecureServerConfig) (comm.GRPCServer, error)
func GetPeerServer() comm.GRPCServer
//代码在core/peer/peer.go

区块链教程Fabric1.0源代码分析Peer

原文:http://blog.51cto.com/14041296/2313018

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!