github.com/yacovm/fabric@v2.0.0-alpha.0.20191128145320-c5d4087dc723+incompatible/docs/source/capabilities_concept.md (about) 1 # Channel capabilities 2 3 **Audience**: Channel administrators, node administrators 4 5 *Note: this is an advanced Fabric concept that is not necessary for new 6 users or application developers to understand. However, as channels and 7 networks mature, understanding and managing capabilities becomes vital. 8 Furthermore, it is important to recognize that updating capabilties is a 9 different, though often related, process to upgrading nodes. We'll describe 10 this in detail in this topic.* 11 12 Because Fabric is a distributed system that will usually involve multiple 13 organizations, it is 14 possible (and typical) that different versions of Fabric code will exist on 15 different nodes within the network as well as on the channels in that network. 16 Fabric allows this --- it is not necessary for every peer and ordering node to 17 be at the same version level. In fact, supporting different version levels 18 is what enables rolling upgrades of Fabric nodes. 19 What **is** important is that networks and channels 20 process things in the same way, creating deterministic results for things like 21 channel configuration updates and chaincode invocations. Without deterministic 22 results, one peer on a channel might invalidate a transaction while another peer 23 may validate it. 24 25 To that end, Fabric defines levels of what are called "capabilities". These 26 capabilities, which are defined in the configuration of each channel, ensure 27 determinism by defining a level at which behaviors produce consistent results. 28 As you'll see, these capabilities have versions which are closely related to 29 node binary versions. Capabilities enable nodes running at different version 30 levels to behave in a compatible and consistent way given the channel 31 configuration at a specific block height. You will also see that capabilities 32 exist in many parts of the configuration tree, defined along the lines of 33 administration for particular tasks. 34 35 As you'll see, sometimes it is necessary to update your channel to a new 36 capability level to enable a new feature. 37 38 ## Node versions and capability versions 39 40 If you're familiar with Hyperledger Fabric, you're aware that it follows the 41 typical semantic versioning pattern: v1.1, v1.2.1, etc. These versions refer to 42 releases and their related binary versions. 43 44 Capabilities follow the same semantic versioning convention. There are v1.1 45 capabilities and v1.2 capabilities and so on. But it's important to note a few 46 distinctions. 47 48 * **There is not necessarily a new capability level with each release**. 49 The need to establish a new capability is determined on a case by case basis 50 and relies chiefly on the backwards compatibility of new features and older 51 binary versions. Adding Raft ordering services in v1.4.1, for example, did not 52 change the way either transactions or ordering service functions were handled 53 and thus did not require the establishment of any new capabilities. 54 [Private Data](./private-data/private-data.html), on the other hand, could not 55 be handled by peers before v1.2, requiring the establishment of a v1.2 56 capability level. Because not every release contains a new feature (or a bug 57 fix) that changes the way transactions are processed, certain releases will not 58 require any new capabilities (for example, v1.4) while others will only have new 59 capabilities at particular levels (such as v1.2 and v1.3). We'll discuss the 60 "levels" of capabilities and where they reside in the configuration tree later. 61 62 63 * **Nodes must be at least at the level of certain capabilities in a channel**. 64 When a peer joins a channel, it reads all of the blocks in the ledger sequentially, 65 starting with the genesis block of the channel and continuing through the 66 transaction blocks and any subsequent configuration blocks. If a node, 67 for example a peer, attempts to read a block containing an update to a 68 capability it doesn't understand (for example, a v1.2 peer trying to read 69 a block with a v1.4.2 application capability), **the peer will crash**. This 70 crashing behavior is intentional, as a v1.2 peer cannot validate or commit any 71 transactions past this point. Before joining a channel, **make sure the node is 72 at the Fabric version (binary) level of the capabilities specified in the 73 channel config relevant to the node or higher**. We'll discuss which 74 capabilities are relevant to which nodes later. However, because no user wants 75 their nodes to crash, it is strongly recommended to update all nodes to the 76 required level (preferably, to the latest release) before attempting to update 77 capabilities. This is in line with the default Fabric recommendation to 78 **always** be at the latest binary and capability levels. 79 80 If users are unable to upgrade their binaries, then capabilities must be left at 81 their lower levels. Lower level binaries and capabilities will still work 82 together as they're meant to. However, keep in mind that it is a best practice 83 to always update to new binaries even if a user chooses not to update their 84 capabilities. Because capabilities themselves also include bug-fixes, it is 85 always recommended to update capabilities once the network binaries support them. 86 87 ## Capability configuration groupings 88 89 As we discussed earlier, there is not a single capability level encompassing an 90 entire channel. Rather, there are three capabilities, each representing an area of 91 administration. 92 93 * **Orderer**: These capabilities govern tasks and processing exclusive to the 94 ordering service. Because these capabilities do not involve processes that 95 affect transactions or the peers, updating them falls solely to the ordering 96 service admins (peers do not need to understand orderer capabilities and will 97 therefore not crash no matter what the orderer capability is updated to). Note 98 that these capabilities did not change between v1.1 and v1.4.2. However, as 99 we'll see in the **channel** section, this does not mean that v1.1 ordering 100 nodes will work on all channels with capability levels below v1.4.2. 101 102 * **Application**: These capabilities govern tasks and processing exclusive to 103 the peers. Because ordering service admins have no role in deciding the nature 104 of transactions between peer organizations, changing this capability level 105 falls exclusively to peer organizations. For example, Private Data can only be 106 enabled on a channel with the v1.2 application group capability (or higher) 107 enabled. In the case of Private Data, this is the only capability that must be 108 enabled, as nothing about the way Private Data works requires a change to 109 channel administration or the way the ordering service processes transactions. 110 111 * **Channel**: This grouping encompasses tasks that are **jointly administered** 112 by the peer organizations and the ordering service. For example, this is the 113 capability that defines the level at which channel configuration updates, which 114 are initiated by peer organizations and orchestrated by the ordering service, are 115 processed. On a practical level, **this grouping defines the minimum level for 116 all of the binaries in a channel, as both ordering nodes and peers must be at 117 least at the binary level corresponding to this capability in order to process 118 the capability**. 119 120 The **orderer** and **channel** capabilities of a channel are inherited by 121 default from the ordering system channel, where modifying them are the exclusive 122 purview of ordering service admins. As a result, peer organizations should 123 inspect the genesis block of a channel prior to joining their peers to that 124 channel. Although the channel capability is administered by the orderers in the 125 orderer system channel (just as the consortium membership is), it is typical and 126 expected that the ordering admins will coordinate with the consortium admins to 127 ensure that the channel capability is only upgraded when the consortium is ready 128 for it. 129 130 Because the ordering system channel does not define an **application** 131 capability, this capability must be specified in the channel profile when 132 creating the genesis block for the channel. For more information about creating 133 the genesis block of a channel, check out [configtx](configtx.html). 134 135 **Take caution** when specifying or modifying an application capability. Because 136 the ordering service does not validate that the capability level is valid, it will 137 allow a channel to be created (or modified) to contain, for example, a v1.8 138 application capability even if no such capability exists. Any peer attempting to 139 read a configuration block with this capability would, as we have shown, crash, 140 and even if it was possible to modify the channel once again to a valid capability, 141 it would not matter, as no peer would be able to get past the block with the 142 invalid v1.8 capability. 143 144 For a full look at the current valid orderer, application, and channel capabilities 145 check out a [sample `configtx.yaml` file](http://github.com/hyperledger/fabric/blob/master/sampleconfig/configtx.yaml), 146 which lists them in the "Capabilities" section. 147 148 For more specific information about capabilities and where they reside in the channel 149 configuration, check out [defining capability requirements](capability_requirements.html). 150 151 <!--- Licensed under Creative Commons Attribution 4.0 International License 152 https://creativecommons.org/licenses/by/4.0/ -->