@@ -48,23 +48,42 @@ message Consortium {
48
48
}
49
49
50
50
51
- // Capabilities message contains all the capabilities that a channel requires
52
- // participant entities to comply with. The entity should drop off the channel
53
- // if it can't fulfill any of the required capabilities.
54
- // Capabilities is encoded into the configuaration as Values of each type
55
- // Orderer, Channel, or Application.
56
- // The key string should represent the capability name, and it must be unique
57
- // within each type. For readability, it may be advisable to prefix the key with
58
- // its type (eg app-acl)
51
+ // Capabilities message defines the capabilities a particular binary must implement
52
+ // for that binary to be able to safely participate in the channel. The capabilities
53
+ // message is defined at the /Channel level, the /Channel/Application level, and the
54
+ // /Channel/Orderer level.
55
+ //
56
+ // The /Channel level capabilties define capabilities which both the orderer and peer
57
+ // binaries must satisfy. These capabilties might be things like a new MSP type,
58
+ // or a new policy type.
59
+ //
60
+ // The /Channel/Orderer level capabilties define capabilities which must be supported
61
+ // by the orderer, but which have no bearing on the behavior of the peer. For instance
62
+ // if the orderer changes the logic for how it constructs new channels, only all orderers
63
+ // must agree on the new logic. The peers do not need to be aware of this change as
64
+ // they only interact with the channel after it has been constructed.
65
+ //
66
+ // Finally, the /Channel/Application level capabilities define capabilities which the peer
67
+ // binary must satisfy, but which have no bearing on the orderer. For instance, if the
68
+ // peer adds a new UTXO transaction type, or changes the chaincode lifecycle requirements,
69
+ // all peers must agree on the new logic. However, orderers never inspect transactions
70
+ // this deeply, and therefore have no need to be aware of the change.
71
+ //
72
+ // The capabilities strings defined in these messages typically correspond to release
73
+ // binary versions (e.g. "V1.1"), and are used primarilly as a mechanism for a fully
74
+ // upgraded network to switch from one set of logic to a new one.
75
+ //
76
+ // Although for V1.1, the orderers must be upgraded to V1.1 prior to the rest of the
77
+ // network, going forward, because of the split between the /Channel, /Channel/Orderer
78
+ // and /Channel/Application capabilities. It should be possible for the orderer and
79
+ // application networks to upgrade themselves independently (with the exception of any
80
+ // new capabilities defined at the /Channel level).
59
81
message Capabilities {
60
82
map <string , Capability > capabilities = 1 ;
61
83
}
62
84
63
- // Capability holds a set of options. We can add more as needed in the
64
- // future. For now, whether it is required or not. If a configured capability
65
- // is not required, it must be completely compatible with previous releases.
66
- // Compatible features are not required to be encoded as capabilities; they
67
- // only provide flexibility for the admins to control the features.
68
- message Capability {
69
- bool required = 1 ;
70
- }
85
+ // Capability is an empty message for the time being. It is defined as a protobuf
86
+ // message rather than a constant, so that we may extend capabilities with other fields
87
+ // if the need arises in the future. For the time being, a capability being in the
88
+ // capabilities map requires that that capability be supported.
89
+ message Capability { }
0 commit comments