[TOC]
交易相關數據結構
Block
區塊,orderer 生成的區塊(賬本存儲的區塊結構)
Block
|\_Header # BlockHeader
| |\_Number # uint64
| |\_PreviousHash # []byte
| \_DataHash # []byte
|\_Data # *BlockData
| \_Data # [][]byte -> []Envelope ↓
| |_Envelope # Data 里面的 [][]byte 就是 Envelop 數組
\_Metadata #BlockMetadata
Envelop
交易信封,交易提案及背書結果,客戶端發送給 orderer 出塊的數據結構
- Envelop
Envelop
|\Payload # []byte -> Payload ↓
| |_Payload # Payload
| |\_Header # *common.Header <= Proposal.Header
| \_Data # []byte -> peer.Transaction ↓
| |_Transaction # peer.Transaction
| \_Actions # []*TransactionAction
\Signature # []byte 對 payloadbytes 的簽名
- TransactionAction
TransactionAction
|\_Header # []byte -> common.SignatureHeader <= Proposal.Header.SignatureHeader
\_Payload # []byte -> peer.ChaincodeActionPayload ↓
|_ChaincodeActionPayload # peer.ChaincodeActionPayload
|\_ChaincodeProposalPayload # []byte -> peer.ChaincodeProposalPayload <= Proposal.Payload
\_Action # *ChaincodeEndorsedAction
|\_ProposalResponsePayload # []byte -> ProposalResponse.Payload
\_Endorsements # []*Endorsement
|_Endorsement # peer.Endorsement <= ProposalResponse.Endorsement
|\_Endorser # []byte
\_Signature # []byte
Proposal
交易提案,客戶端發送給 peer 進行背書的數據結構
Proposal
|\_Header # []byte -> common.Header ↓
| |_Header # common.Header
| |\_ChannelHeader # []byte -> common.ChannelHeader
| \_SignatureHeader # []byte -> common.SignatureHeader
|\_Payload # []byte -> peer.ChaincodeProposalPayload ↓
| |_ChaincodeProposalPayload # peer.ChaincodeProposalPayload
| |\_Input # []byte -> peer.ChaincodeInvocationSpec
| \_TransientMap # map[string][]byte
\_Extension #
配置存儲相關結構
存儲在配置塊中的配置數據結構 (層次關系: Block --> Envelop --> ConfigEnvelop)
orderer 的 genesisblock 就是這樣的一個配置塊。
Block
Block
|\_Header # BlockHeader
| |\_Number # uint64
| |\_PreviousHash # []byte
| \_DataHash # []byte
|\_Data # *BlockData
| \_Data # [1][]byte -> []Envelope ↓
| |_Envelope # Data 里面是長度為1的配置數據的Envelop數組
\_Metadata #BlockMetadata
Envelop
- Envelop
Envelop
|\Payload # []byte -> Payload ↓
| |_Payload # Payload
| |\_Header # *common.Header <= Proposal.Header
| \_Data # []byte -> common.ConfigEnvelope ↓
| |_ConfigEnvelope # common.ConfigEnvelope
\Signature # []byte 對 payloadbytes 的簽名
- ConfigEnvelope
ConfigEnvelope
|\_Config # *Config
| |\_Sequence # uint64
| \_ChannelGroup # *ConfigGroup
| |\_Version # uint64
| |\_Groups # map[string]*ConfigGroup
| |\_Values # map[string]*ConfigValue
| |\_Policies # map[string]*ConfigPolicy
| \_ModPolicy
\_LastUpdate # *Envelope
配置更新相關結構
用于提交配置更新交易的數據結構(客戶端提交給 orderer 進行通道配置更新,比如創建channel,更新channel等)
Envelop
- Envelop
Envelop
|\Payload # []byte -> Payload ↓
| |_Payload # Payload
| |\_Header # *common.Header <= Proposal.Header
| \_Data # []byte -> common.ConfigUpdateEnvelope ↓
| |_ConfigUpdateEnvelope # common.ConfigUpdateEnvelope
\Signature # []byte 對 payloadbytes 的簽名
- ConfigUpdateEnvelope
ConfigUpdateEnvelope
|\_ConfigUpdate # []byte -> common.ConfigUpdate ↓
| |_ConfigUpdate # common.ConfigUpdate
\_Signatures # []*ConfigSignature
- ConfigUpdate
ConfigUpdate # 通過對新舊 Config 計算差異得到
|\_ChannelId # string
|\_ReadSet # *ConfigGroup
|\_WriteSet # *ConfigGroup
\_IsolatedData # map[string][]byte
部分通用配置結構
- Config
Config
|\_Sequence # uint64
\_ChannelGroup # *ConfigGroup
- ConfigGroup
ConfigGroup
|\_Version # uint64
|\_Groups # map[string]*ConfigGroup
|\_Values # map[string]*ConfigValue
|\_Policies # map[string]*ConfigPolicy
\_ModPolicy
附錄
符號說明
-
\_
: 表示子屬性 -
->
: 表示[]byte
序列化之前的結構 -
<=
: 表示數據內容填充來源 -
↓
: 表示其具體結構在下一級展開描述 -
|_
: 表示此項是上一級的原數據結構