Fabric 1.0原始碼分析(31) Peer
# 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
相關文章
- Fabric 1.0原始碼分析(32) Peer #peer node start命令實現原始碼
- Fabric 1.0原始碼分析(33) Peer #peer channel命令及子命令實現原始碼
- Fabric 1.0原始碼分析(35)Peer #EndorserServer(Endorser服務端)原始碼Server服務端
- Fabric 1.0原始碼分析(36) Peer #EndorserClient(Endorser客戶端)原始碼client客戶端
- Fabric 1.0原始碼分析(32)Peer #peer根命令入口及載入子命令原始碼
- Fabric 1.0原始碼分析(34) Peer #peer chaincode命令及子命令實現原始碼AI
- Fabric 1.0原始碼分析(37) Peer #DeliverClient(Deliver客戶端)原始碼client客戶端
- Fabric 1.0原始碼分析(38) Peer #BroadcastClient(Broadcast客戶端)原始碼ASTclient客戶端
- Fabric 1.0原始碼分析(25) Orderer原始碼
- Fabric 1.0原始碼分析(40) Proposal(提案)原始碼
- 以太坊原始碼分析(31)eth-downloader-peer原始碼分析原始碼
- Fabric 1.0原始碼分析(3)Chaincode(鏈碼)原始碼AI
- Fabric 1.0原始碼分析(18) Ledger(賬本)原始碼
- Fabric 1.0原始碼分析(43) Tx(Transaction 交易)原始碼
- Fabric 1.0原始碼分析(47)Fabric 1.0.4 go程式碼量統計原始碼Go
- Fabric 1.0原始碼分析(42)scc(系統鏈碼)原始碼
- Fabric 1.0原始碼分析(13)events(事件服務)原始碼事件
- Fabric 1.0原始碼分析(26)Orderer #ledger(Orderer Ledger)原始碼
- Fabric 1.0原始碼分析(39) policy(背書策略)原始碼
- Fabric 1.0原始碼分析(15)gossip(流言演算法)原始碼Go演算法
- Fabric 1.0原始碼分析(23)LevelDB(KV資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(44)Tx #RWSet(讀寫集)原始碼
- Fabric 1.0原始碼分析(14) flogging(Fabric日誌系統)原始碼
- Fabric 1.0原始碼分析(10)consenter(共識外掛)原始碼
- Fabric 1.0原始碼分析(29) Orderer #multichain(多鏈支援包)原始碼AI
- Fabric 1.0原始碼分析(41)putils(protos/utils工具包)原始碼
- Fabric 1.0原始碼分析(45)gRPC(Fabric中註冊的gRPC Service)原始碼RPC
- Fabric1.4原始碼解析:Peer節點加入通道原始碼
- Fabric 1.0原始碼分析(5)Chaincode(鏈碼)體系總結原始碼AI
- Fabric 1.0原始碼分析(2) blockfile(區塊檔案儲存)原始碼BloC
- Fabric 1.0原始碼分析(19) Ledger #statedb(狀態資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(21)Ledger #historydb(歷史資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(22)Ledger #blkstorage(block檔案儲存)原始碼BloC
- Fabric 1.0原始碼分析(42)scc(系統鏈碼) #cscc(通道相關)原始碼
- Fabric 1.0原始碼分析(20) Ledger #idStore(ledgerID資料庫)原始碼資料庫
- Fabric 1.0原始碼分析(30) Orderer #BroadcastServer(Broadcast服務端)原始碼ASTServer服務端
- Fabric 1.0原始碼分析(4)Chaincode(鏈碼)#platforms(鏈碼語言平臺)原始碼AIPlatform
- Fabric 1.0原始碼分析(27) Orderer #configupdate(處理通道配置更新)原始碼