Hyperledger Fabric 2.0 gRPC接口

本文基於 Fabric v2.0.1 ,與 v1.x 版不同,v2 版將 protos 定義放到一個獨立倉庫 fabric-protos 進行管理,並且使用 protoc 工具生成的具體語言代碼也使用獨立的倉庫存放,如 golangfabric-protos-go

一、 Orderer

1. AtomicBroadcast

服務定義於 orderer/ab.proto

service AtomicBroadcast {
    // broadcast receives a reply of Acknowledgement for each common.Envelope in order, indicating success or type of failure
    rpc Broadcast(stream common.Envelope) returns (stream BroadcastResponse);

    // deliver first requires an Envelope of type DELIVER_SEEK_INFO with Payload data as a mashaled SeekInfo message, then a stream of block replies is received.
    rpc Deliver(stream common.Envelope) returns (stream DeliverResponse);
}

1.1 Broadcast

Broadcast 接口用於接收待排序的消息,包括普通事務 tx 消息和 channel 配置消息。
客戶端將事務消息提交到 endorsing peers 預執行 chaincode 並背書讀寫集結果,由客戶端將返回結果提交到 Orderer 進行排序。

1.2 Deliver

Deliver 接口用於向 peers 分發已經過排序 block 數據,peer 節點通過 join channelOrderer 獲取已排序的 block

2. Cluster

服務定義於 orderer/cluster.proto

// Cluster defines communication between cluster members.
service Cluster {
    // Step passes an implementation-specific message to another cluster member.
    rpc Step(stream StepRequest) returns (stream StepResponse);
}

Fabric v1.1 之後支持 EtcdRaft 共識算法,與使用 Kafka 共識算法各orderer獨立連接中心化的 kafka 集羣不同,使用 EtcdRaft 共識算法各 orderer 組成一個集羣, Step 用於集羣節點間消息交換。

二、Peer

1. Endorser

服務定義於 peer/peer.proto

service Endorser {
    rpc ProcessProposal(SignedProposal) returns (ProposalResponse);
}

ProcessProposal 接口用於客戶端將已簽名的事務消息提交到 endorsing peers 進行預執行並背書讀寫集。所謂預執行是指使用當前本地賬本狀態執行 chaincode 生成讀寫集,但執行結果不寫入賬本。

2. Deliver

服務定義於 peer/events.proto

service Deliver {
    // Deliver first requires an Envelope of type ab.DELIVER_SEEK_INFO with
    // Payload data as a marshaled orderer.SeekInfo message,
    // then a stream of block replies is received
    rpc Deliver (stream common.Envelope) returns (stream DeliverResponse) {
    }
    // DeliverFiltered first requires an Envelope of type ab.DELIVER_SEEK_INFO with
    // Payload data as a marshaled orderer.SeekInfo message,
    // then a stream of **filtered** block replies is received
    rpc DeliverFiltered (stream common.Envelope) returns (stream DeliverResponse) {
    }
    // DeliverWithPrivateData first requires an Envelope of type ab.DELIVER_SEEK_INFO with
    // Payload data as a marshaled orderer.SeekInfo message,
    // then a stream of block and private data replies is received
    rpc DeliverWithPrivateData (stream common.Envelope) returns (stream DeliverResponse) {
    }
}

2.1 Deliver & DeliverFiltered

Deliver 接口用於向客戶端分發已寫入本地賬本的 block 數據。客戶端將 endorsing peers 返回的結果提交給 orderer 後,等待 peer 通知事務處理完畢。

2.2 DeliverWithPrivateData

DeliverWithPrivateData v2.0 版本新增,分發帶私密數據的 block 數據

三、Chaincode

1. ChaincodeSupport

服務定義於 peer/chaincode_shim.proto

// Interface that provides support to chaincode execution. ChaincodeContext
// provides the context necessary for the server to respond appropriately.
service ChaincodeSupport {
    rpc Register(stream ChaincodeMessage) returns (stream ChaincodeMessage);
}

Register 用於 Chaincode 啓動時向 peer 註冊當前 Chaincode

2. Chaincode

服務定義於 peer/chaincode_shim.proto

// Chaincode as a server - peer establishes a connection to the chaincode as a client
// Currently only supports a stream connection.
service Chaincode {
    rpc Connect(stream ChaincodeMessage) returns (stream ChaincodeMessage);
}

v2 新增服務,Chaincode 啓動並作爲服務端,由 peer 通過 Connect 接口連接 Chaincode

四、Gossip

服務定義於 gossip/message.proto

// Gossip
service Gossip {

    // GossipStream is the gRPC stream used for sending and receiving messages
    rpc GossipStream (stream Envelope) returns (stream Envelope);

    // Ping is used to probe a remote peer's aliveness
    rpc Ping (Empty) returns (Empty);
}

爲減輕 Orderer 壓力,組織內只有少量 peer 連接 orderer 獲取最新 block,組織內各 peer 通過 Gossip 互聯,通過 Gossip 交換 block 數據及私密數據。

五、Discovery

服務定義於 discovery/protocol.proto

// Discovery defines a service that serves information about the fabric network
// like which peers, orderers, chaincodes, etc.
service Discovery {
    // Discover receives a signed request, and returns a response.
    rpc Discover (SignedRequest) returns (Response);
}

Discovery 服務用於方便客戶端獲取整個 Fabric 網絡的情況,只需要知道一個初始節點便可查詢到 channel 內的 peersconfigmembershipchaincode 等。

參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章