Fabric 1.0原始碼分析(31) Peer

尹成發表於2018-05-20
# 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根命令入口及載入子命令](peer_main.md)
* [Fabric 1.0原始碼筆記 之 Peer #peer node start命令實現](peer_node_start.md)
* [Fabric 1.0原始碼筆記 之 Peer #peer channel命令及子命令實現](peer_channel.md)
* [Fabric 1.0原始碼筆記 之 Peer #peer chaincode命令及子命令實現](peer_chaincode.md)
* [Fabric 1.0原始碼筆記 之 Peer #EndorserClient(Endorser客戶端)](EndorserClient.md)
* [Fabric 1.0原始碼筆記 之 Peer #EndorserServer(Endorser服務端)](EndorserServer.md)
* [Fabric 1.0原始碼筆記 之 Peer #BroadcastClient(Broadcast客戶端)](BroadcastClient.md)
* [Fabric 1.0原始碼筆記 之 Peer #committer(提交者)](committer.md)


## 2、Peer配置相關工具函式

```go
//為全域性變數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結構體定義如下:

```go
type PeerID struct {
    Name string
}

type PeerEndpoint struct {
    Id *PeerID
    Address string
}
//程式碼在protos/peer/peer.pb.go
```

SecureServerConfig結構體定義如下:

```go
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服務相關工具函式

```go
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.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN




網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN

相關文章