[TOC]
交易相關(guān)數(shù)據(jù)結(jié)構(gòu)
Block
區(qū)塊,orderer 生成的區(qū)塊(賬本存儲(chǔ)的區(qū)塊結(jié)構(gòu))
Block
|\_Header # BlockHeader
| |\_Number # uint64
| |\_PreviousHash # []byte
| \_DataHash # []byte
|\_Data # *BlockData
| \_Data # [][]byte -> []Envelope ↓
| |_Envelope # Data 里面的 [][]byte 就是 Envelop 數(shù)組
\_Metadata #BlockMetadata
Envelop
交易信封朽们,交易提案及背書(shū)結(jié)果,客戶(hù)端發(fā)送給 orderer 出塊的數(shù)據(jù)結(jié)構(gòu)
- Envelop
Envelop
|\Payload # []byte -> Payload ↓
| |_Payload # Payload
| |\_Header # *common.Header <= Proposal.Header
| \_Data # []byte -> peer.Transaction ↓
| |_Transaction # peer.Transaction
| \_Actions # []*TransactionAction
\Signature # []byte 對(duì) 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
交易提案意荤,客戶(hù)端發(fā)送給 peer 進(jìn)行背書(shū)的數(shù)據(jù)結(jié)構(gòu)
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 #
配置存儲(chǔ)相關(guān)結(jié)構(gòu)
存儲(chǔ)在配置塊中的配置數(shù)據(jù)結(jié)構(gòu) (層次關(guān)系: Block --> Envelop --> ConfigEnvelop)
orderer 的 genesisblock 就是這樣的一個(gè)配置塊烟馅。
Block
Block
|\_Header # BlockHeader
| |\_Number # uint64
| |\_PreviousHash # []byte
| \_DataHash # []byte
|\_Data # *BlockData
| \_Data # [1][]byte -> []Envelope ↓
| |_Envelope # Data 里面是長(zhǎng)度為1的配置數(shù)據(jù)的Envelop數(shù)組
\_Metadata #BlockMetadata
Envelop
- Envelop
Envelop
|\Payload # []byte -> Payload ↓
| |_Payload # Payload
| |\_Header # *common.Header <= Proposal.Header
| \_Data # []byte -> common.ConfigEnvelope ↓
| |_ConfigEnvelope # common.ConfigEnvelope
\Signature # []byte 對(duì) 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
配置更新相關(guān)結(jié)構(gòu)
用于提交配置更新交易的數(shù)據(jù)結(jié)構(gòu)(客戶(hù)端提交給 orderer 進(jìn)行通道配置更新,比如創(chuàng)建channel康辑,更新channel等)
Envelop
- Envelop
Envelop
|\Payload # []byte -> Payload ↓
| |_Payload # Payload
| |\_Header # *common.Header <= Proposal.Header
| \_Data # []byte -> common.ConfigUpdateEnvelope ↓
| |_ConfigUpdateEnvelope # common.ConfigUpdateEnvelope
\Signature # []byte 對(duì) payloadbytes 的簽名
- ConfigUpdateEnvelope
ConfigUpdateEnvelope
|\_ConfigUpdate # []byte -> common.ConfigUpdate ↓
| |_ConfigUpdate # common.ConfigUpdate
\_Signatures # []*ConfigSignature
- ConfigUpdate
ConfigUpdate # 通過(guò)對(duì)新舊 Config 計(jì)算差異得到
|\_ChannelId # string
|\_ReadSet # *ConfigGroup
|\_WriteSet # *ConfigGroup
\_IsolatedData # map[string][]byte
部分通用配置結(jié)構(gòu)
- Config
Config
|\_Sequence # uint64
\_ChannelGroup # *ConfigGroup
- ConfigGroup
ConfigGroup
|\_Version # uint64
|\_Groups # map[string]*ConfigGroup
|\_Values # map[string]*ConfigValue
|\_Policies # map[string]*ConfigPolicy
\_ModPolicy
附錄
符號(hào)說(shuō)明
-
\_
: 表示子屬性 -
->
: 表示[]byte
序列化之前的結(jié)構(gòu) -
<=
: 表示數(shù)據(jù)內(nèi)容填充來(lái)源 -
↓
: 表示其具體結(jié)構(gòu)在下一級(jí)展開(kāi)描述 -
|_
: 表示此項(xiàng)是上一級(jí)的原數(shù)據(jù)結(jié)構(gòu)