1. 每日区块链首页
  2. 独家专栏

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

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

区块链教程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

原创文章,作者:兄弟连区块链学院,如若转载,请注明出处:http://www.dayqkl.com/54239.html

发表评论

登录后才能评论
QR code