github.com/yacovm/fabric@v2.0.0-alpha.0.20191128145320-c5d4087dc723+incompatible/docs/source/config_update.md (about) 1 # Updating a Channel Configuration 2 3 ## What is a Channel Configuration? 4 5 Channel configurations contain all of the information relevant to the 6 administration of a channel. Most importantly, the channel configuration 7 specifies which organizations are members of channel, but it also includes other 8 channel-wide configuration information such as channel access policies and block 9 batch sizes. 10 11 This configuration is stored on the ledger in a **block**, and is therefore 12 known as a configuration (config) block. Configuration blocks contain a single 13 configuration. The first of these blocks is known as the “genesis block” and 14 contains the initial configuration required to bootstrap a channel. Each time 15 the configuration of a channel changes it is done through a new configuration 16 block, with the latest configuration block representing the current channel 17 configuration. Orderers and peers keep the current channel configuration in 18 memory to facilitate all channel operations such as cutting a new block and 19 validating block transactions. 20 21 Because configurations are stored in blocks, updating a config happens through a 22 process called a “configuration transaction” (even though the process is a 23 little different from a normal transaction). Updating a config is a process of 24 pulling the config, translating into a format that humans can read, modifying it 25 and then submitting it for approval. 26 27 For a more in-depth look at the process for pulling a config and translating it 28 into JSON, check out [Adding an Org to a Channel](./channel_update_tutorial.html). 29 In this doc, we'll be focusing on the different ways you can edit a config and 30 the process for getting it signed. 31 32 ## Editing a Config 33 34 Channels are highly configurable, but not infinitely so. Different configuration 35 elements have different modification policies (which specify the group of 36 identities required to sign the config update). 37 38 To see the scope of what's possible to change it's important to look at a config 39 in JSON format. The [Adding an Org to a Channel](./channel_update_tutorial.html) 40 tutorial generates one, so if you've gone through that doc you can simply refer to it. 41 For those who have not, we'll provide one here (for ease of readability, it might be 42 helpful to put this config into a viewer that supports JSON folding, like atom or 43 Visual Studio). 44 45 <details> 46 <summary> 47 **Click here to see the config** 48 </summary> 49 ``` 50 { 51 "channel_group": { 52 "groups": { 53 "Application": { 54 "groups": { 55 "Org1MSP": { 56 "mod_policy": "Admins", 57 "policies": { 58 "Admins": { 59 "mod_policy": "Admins", 60 "policy": { 61 "type": 1, 62 "value": { 63 "identities": [ 64 { 65 "principal": { 66 "msp_identifier": "Org1MSP", 67 "role": "ADMIN" 68 }, 69 "principal_classification": "ROLE" 70 } 71 ], 72 "rule": { 73 "n_out_of": { 74 "n": 1, 75 "rules": [ 76 { 77 "signed_by": 0 78 } 79 ] 80 } 81 }, 82 "version": 0 83 } 84 }, 85 "version": "0" 86 }, 87 "Readers": { 88 "mod_policy": "Admins", 89 "policy": { 90 "type": 1, 91 "value": { 92 "identities": [ 93 { 94 "principal": { 95 "msp_identifier": "Org1MSP", 96 "role": "MEMBER" 97 }, 98 "principal_classification": "ROLE" 99 } 100 ], 101 "rule": { 102 "n_out_of": { 103 "n": 1, 104 "rules": [ 105 { 106 "signed_by": 0 107 } 108 ] 109 } 110 }, 111 "version": 0 112 } 113 }, 114 "version": "0" 115 }, 116 "Writers": { 117 "mod_policy": "Admins", 118 "policy": { 119 "type": 1, 120 "value": { 121 "identities": [ 122 { 123 "principal": { 124 "msp_identifier": "Org1MSP", 125 "role": "MEMBER" 126 }, 127 "principal_classification": "ROLE" 128 } 129 ], 130 "rule": { 131 "n_out_of": { 132 "n": 1, 133 "rules": [ 134 { 135 "signed_by": 0 136 } 137 ] 138 } 139 }, 140 "version": 0 141 } 142 }, 143 "version": "0" 144 } 145 }, 146 "values": { 147 "AnchorPeers": { 148 "mod_policy": "Admins", 149 "value": { 150 "anchor_peers": [ 151 { 152 "host": "peer0.org1.example.com", 153 "port": 7051 154 } 155 ] 156 }, 157 "version": "0" 158 }, 159 "MSP": { 160 "mod_policy": "Admins", 161 "value": { 162 "config": { 163 "admins": [ 164 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHRENDQWIrZ0F3SUJBZ0lRSWlyVmg3NVcwWmh0UjEzdmltdmliakFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhOekV4TWpreE9USTBNRFphRncweU56RXhNamN4T1RJME1EWmEKTUZzeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVI4d0hRWURWUVFEREJaQlpHMXBia0J2Y21jeExtVjRZVzF3YkdVdVkyOXRNRmt3CkV3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNkdVeDlpczZ0aG1ZRE9tMmVHSlA5eW1yaXJYWE1Cd0oKQmVWb1Vpak5haUdsWE03N2NsSE5aZjArMGFjK2djRU5lMzQweGExZVFnb2Q0YjVFcmQrNmtxTk5NRXN3RGdZRApWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnWWdoR2xCMjBGWmZCCllQemdYT280czdkU1k1V3NKSkRZbGszTDJvOXZzQ013Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYmlEWDVTMlIKRTBNWGRobDZFbmpVNm1lTEJ0eXNMR2ZpZXZWTlNmWW1UQVVDSUdVbnROangrVXZEYkZPRHZFcFRVTm5MUHp0Qwp5ZlBnOEhMdWpMaXVpaWFaCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" 165 ], 166 "crypto_config": { 167 "identity_identifier_hash_function": "SHA256", 168 "signature_hash_family": "SHA2" 169 }, 170 "name": "Org1MSP", 171 "root_certs": [ 172 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQU03ZVdTaVM4V3VVM2haMU9tR255eXd3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGN4TVRJNU1Ua3lOREEyV2hjTk1qY3hNVEkzTVRreU5EQTIKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkJiTTVZS3B6UmlEbDdLWWFpSDVsVnBIeEl1TDEyaUcyWGhkMHRpbEg3MEljMGFpRUh1dG9rTkZsUXAzTWI0Zgpvb0M2bFVXWnRnRDJwMzZFNThMYkdqK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdJSVJwUWR0QldYd1dEODRGenEKT0xPM1VtT1ZyQ1NRMkpaTnk5cVBiN0FqTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUdlS2VZL1BsdGlWQTRPSgpRTWdwcDRvaGRMcGxKUFpzNERYS0NuOE9BZG9YQWlCK2g5TFdsR3ZsSDdtNkVpMXVRcDFld2ZESmxsZi9MZXczClgxaDNRY0VMZ3c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" 173 ], 174 "tls_root_certs": [ 175 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQUtsNEFQWmV6dWt0Nk8wYjRyYjY5Y0F3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRjeE1USTVNVGt5TkRBMldoY05NamN4TVRJM01Ua3kKTkRBMldqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSnNpQXVjYlcrM0lqQ2VaaXZPakRiUmFyVlRjTW9TRS9mSnQyU0thR1d5bWQ0am5xM25MWC9vVApCVmpZb21wUG1QbGZ4R0VSWHl0UTNvOVZBL2hwNHBlalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSnlqZnFoa0FvY3oKdkRpNnNGSGFZL1Bvd2tPWkxPMHZ0VGdFRnVDbUpFalZNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJRjVOVVdCVgpmSjgrM0lxU3J1NlFFbjlIa0lsQ0xDMnlvWTlaNHBWMnpBeFNBaUE5NWQzeDhBRXZIcUFNZnIxcXBOWHZ1TW5BCmQzUXBFa1gyWkh3ODZlQlVQZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" 176 ] 177 }, 178 "type": 0 179 }, 180 "version": "0" 181 } 182 }, 183 "version": "1" 184 }, 185 "Org2MSP": { 186 "mod_policy": "Admins", 187 "policies": { 188 "Admins": { 189 "mod_policy": "Admins", 190 "policy": { 191 "type": 1, 192 "value": { 193 "identities": [ 194 { 195 "principal": { 196 "msp_identifier": "Org2MSP", 197 "role": "ADMIN" 198 }, 199 "principal_classification": "ROLE" 200 } 201 ], 202 "rule": { 203 "n_out_of": { 204 "n": 1, 205 "rules": [ 206 { 207 "signed_by": 0 208 } 209 ] 210 } 211 }, 212 "version": 0 213 } 214 }, 215 "version": "0" 216 }, 217 "Readers": { 218 "mod_policy": "Admins", 219 "policy": { 220 "type": 1, 221 "value": { 222 "identities": [ 223 { 224 "principal": { 225 "msp_identifier": "Org2MSP", 226 "role": "MEMBER" 227 }, 228 "principal_classification": "ROLE" 229 } 230 ], 231 "rule": { 232 "n_out_of": { 233 "n": 1, 234 "rules": [ 235 { 236 "signed_by": 0 237 } 238 ] 239 } 240 }, 241 "version": 0 242 } 243 }, 244 "version": "0" 245 }, 246 "Writers": { 247 "mod_policy": "Admins", 248 "policy": { 249 "type": 1, 250 "value": { 251 "identities": [ 252 { 253 "principal": { 254 "msp_identifier": "Org2MSP", 255 "role": "MEMBER" 256 }, 257 "principal_classification": "ROLE" 258 } 259 ], 260 "rule": { 261 "n_out_of": { 262 "n": 1, 263 "rules": [ 264 { 265 "signed_by": 0 266 } 267 ] 268 } 269 }, 270 "version": 0 271 } 272 }, 273 "version": "0" 274 } 275 }, 276 "values": { 277 "AnchorPeers": { 278 "mod_policy": "Admins", 279 "value": { 280 "anchor_peers": [ 281 { 282 "host": "peer0.org2.example.com", 283 "port": 9051 284 } 285 ] 286 }, 287 "version": "0" 288 }, 289 "MSP": { 290 "mod_policy": "Admins", 291 "value": { 292 "config": { 293 "admins": [ 294 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHVENDQWNDZ0F3SUJBZ0lSQU5Pb1lIbk9seU94dTJxZFBteStyV293Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGN4TVRJNU1Ua3lOREEyV2hjTk1qY3hNVEkzTVRreU5EQTIKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk1pNWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkh1M0ZWMGlqdFFzckpsbnBCblgyRy9ickFjTHFJSzgKVDFiSWFyZlpvSkhtQm5IVW11RTBhc1dyKzM4VUs0N3hyczNZMGMycGhFVjIvRnhHbHhXMUZubWpUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSU1pSzdteFpnQVVmCmdrN0RPTklXd2F4YktHVGdLSnVSNjZqVmordHZEV3RUTUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUQxaEtRdk8KVWxyWmVZMmZZY1N2YWExQmJPM3BVb3NxL2tZVElyaVdVM1J3QWlBR29mWmVPUFByWXVlTlk0Z2JCV2tjc3lpZgpNMkJmeXQwWG9NUThyT2VidUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" 295 ], 296 "crypto_config": { 297 "identity_identifier_hash_function": "SHA256", 298 "signature_hash_family": "SHA2" 299 }, 300 "name": "Org2MSP", 301 "root_certs": [ 302 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQU1pVXk5SGRSbXB5MDdsSjhRMlZNWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGN4TVRJNU1Ua3lOREEyV2hjTk1qY3hNVEkzTVRreU5EQTIKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NaTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1pNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQk50YW1PY1hyaGwrQ2hzYXNSeklNWjV3OHpPWVhGcXhQbGV0a3d5UHJrbHpKWE01Qjl4QkRRVWlWNldJS2tGSwo0Vmd5RlNVWGZqaGdtd25kMUNBVkJXaWpYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSU1pSzdteFpnQVVmZ2s3RE9OSVcKd2F4YktHVGdLSnVSNjZqVmordHZEV3RUTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEQ3FFRmFqeU5IQmVaRworOUdWVkNFNWI1YTF5ZlhvS3lkemdLMVgyOTl4ZmdJZ05BSUUvM3JINHFsUE9HbjdSS3Yram9WaUNHS2t6L0F1Cm9FNzI4RWR6WmdRPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" 303 ], 304 "tls_root_certs": [ 305 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQU9JNmRWUWMraHBZdkdMSlFQM1YwQU13Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRjeE1USTVNVGt5TkRBMldoY05NamN4TVRJM01Ua3kKTkRBMldqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCTWZ1QTMwQVVBT1ZKRG1qVlBZd1lNbTlweW92MFN6OHY4SUQ5N0twSHhXOHVOOUdSOU84aVdFMgo5bllWWVpiZFB2V1h1RCszblpweUFNcGZja3YvYUV5alh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJRnk5VHBHcStQL08KUGRXbkZXdWRPTnFqVDRxOEVKcDJmbERnVCtFV2RnRnFNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNZYlhSeApXWDZoUitPU0xBNSs4bFRwcXRMWnNhOHVuS3J3ek1UYXlQUXNVd0lnVSs5YXdaaE0xRzg3bGE0V0h4cmt5eVZ2CkU4S1ZsR09IVHVPWm9TMU5PT0U9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" 306 ] 307 }, 308 "type": 0 309 }, 310 "version": "0" 311 } 312 }, 313 "version": "1" 314 }, 315 "Org3MSP": { 316 "groups": {}, 317 "mod_policy": "Admins", 318 "policies": { 319 "Admins": { 320 "mod_policy": "Admins", 321 "policy": { 322 "type": 1, 323 "value": { 324 "identities": [ 325 { 326 "principal": { 327 "msp_identifier": "Org3MSP", 328 "role": "ADMIN" 329 }, 330 "principal_classification": "ROLE" 331 } 332 ], 333 "rule": { 334 "n_out_of": { 335 "n": 1, 336 "rules": [ 337 { 338 "signed_by": 0 339 } 340 ] 341 } 342 }, 343 "version": 0 344 } 345 }, 346 "version": "0" 347 }, 348 "Readers": { 349 "mod_policy": "Admins", 350 "policy": { 351 "type": 1, 352 "value": { 353 "identities": [ 354 { 355 "principal": { 356 "msp_identifier": "Org3MSP", 357 "role": "MEMBER" 358 }, 359 "principal_classification": "ROLE" 360 } 361 ], 362 "rule": { 363 "n_out_of": { 364 "n": 1, 365 "rules": [ 366 { 367 "signed_by": 0 368 } 369 ] 370 } 371 }, 372 "version": 0 373 } 374 }, 375 "version": "0" 376 }, 377 "Writers": { 378 "mod_policy": "Admins", 379 "policy": { 380 "type": 1, 381 "value": { 382 "identities": [ 383 { 384 "principal": { 385 "msp_identifier": "Org3MSP", 386 "role": "MEMBER" 387 }, 388 "principal_classification": "ROLE" 389 } 390 ], 391 "rule": { 392 "n_out_of": { 393 "n": 1, 394 "rules": [ 395 { 396 "signed_by": 0 397 } 398 ] 399 } 400 }, 401 "version": 0 402 } 403 }, 404 "version": "0" 405 } 406 }, 407 "values": { 408 "MSP": { 409 "mod_policy": "Admins", 410 "value": { 411 "config": { 412 "admins": [ 413 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHRENDQWIrZ0F3SUJBZ0lRQUlSNWN4U0hpVm1kSm9uY3FJVUxXekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhOekV4TWpreE9UTTRNekJhRncweU56RXhNamN4T1RNNE16QmEKTUZzeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVI4d0hRWURWUVFEREJaQlpHMXBia0J2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3CkV3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFSFlkVFY2ZC80cmR4WFd2cm1qZ0hIQlhXc2lxUWxrcnQKZ0p1NzMxcG0yZDRrWU82aEd2b2tFRFBwbkZFdFBwdkw3K1F1UjhYdkFQM0tqTkt0NHdMRG5hTk5NRXN3RGdZRApWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnSWNxUFVhM1VQNmN0Ck9LZmYvKzVpMWJZVUZFeVFlMVAyU0hBRldWSWUxYzB3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnUm5LRnhsTlYKSmppVGpkZmVoczRwNy9qMkt3bFVuUWVuNFkyUnV6QjFrbm9DSUd3dEZ1TEdpRFY2THZSL2pHVXR3UkNyeGw5ZApVNENCeDhGbjBMdXNMTkJYCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" 414 ], 415 "crypto_config": { 416 "identity_identifier_hash_function": "SHA256", 417 "signature_hash_family": "SHA2" 418 }, 419 "name": "Org3MSP", 420 "root_certs": [ 421 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRUkN1U2Y0RVJNaDdHQW1ydTFIQ2FZREFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NeTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhOekV4TWpreE9UTTRNekJhRncweU56RXhNamN4T1RNNE16QmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3pMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jekxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKZXFxOFFQMnllM08vM1J3UzI0SWdtRVdST3RnK3Zyc2pRY1BvTU42NEZiUGJKbmExMklNaVdDUTF6ZEZiTU9hSAorMUlrb21yY0RDL1ZpejkvY0M0NW9xTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FnSWNxUFVhM1VQNmN0T0tmZi8rNWkKMWJZVUZFeVFlMVAyU0hBRldWSWUxYzB3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnTEgxL2xSZElWTVA4Z2FWeQpKRW01QWQ0SjhwZ256N1BVV2JIMzZvdVg4K1lDSUNPK20vUG9DbDRIbTlFbXhFN3ZnUHlOY2trVWd0SlRiTFhqCk5SWjBxNTdWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" 422 ], 423 "tls_root_certs": [ 424 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU9xc2JQQzFOVHJzclEvUUNpalh6K0F3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpNdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRjeE1USTVNVGt6T0RNd1doY05NamN4TVRJM01Ua3oKT0RNd1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSVJTTHdDejdyWENiY0VLMmhxSnhBVm9DaDhkejNqcnA5RHMyYW9TQjBVNTZkSUZhVmZoR2FsKwovdGp6YXlndXpFalFhNlJ1MmhQVnRGM2NvQnJ2Ulpxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJQ2FkVERGa0JPTGkKblcrN2xCbDExL3pPbXk4a1BlYXc0MVNZWEF6cVhnZEVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQlgyMWR3UwpGaG5NdDhHWXUweEgrUGd5aXQreFdQUjBuTE1Jc1p2dVlRaktBaUFLUlE5N2VrLzRDTzZPWUtSakR0VFM4UFRmCm9nTmJ6dTBxcThjbVhseW5jZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" 425 ] 426 }, 427 "type": 0 428 }, 429 "version": "0" 430 } 431 }, 432 "version": "0" 433 } 434 }, 435 "mod_policy": "Admins", 436 "policies": { 437 "Admins": { 438 "mod_policy": "Admins", 439 "policy": { 440 "type": 3, 441 "value": { 442 "rule": "MAJORITY", 443 "sub_policy": "Admins" 444 } 445 }, 446 "version": "0" 447 }, 448 "Readers": { 449 "mod_policy": "Admins", 450 "policy": { 451 "type": 3, 452 "value": { 453 "rule": "ANY", 454 "sub_policy": "Readers" 455 } 456 }, 457 "version": "0" 458 }, 459 "Writers": { 460 "mod_policy": "Admins", 461 "policy": { 462 "type": 3, 463 "value": { 464 "rule": "ANY", 465 "sub_policy": "Writers" 466 } 467 }, 468 "version": "0" 469 } 470 }, 471 "version": "1" 472 }, 473 "Orderer": { 474 "groups": { 475 "OrdererOrg": { 476 "mod_policy": "Admins", 477 "policies": { 478 "Admins": { 479 "mod_policy": "Admins", 480 "policy": { 481 "type": 1, 482 "value": { 483 "identities": [ 484 { 485 "principal": { 486 "msp_identifier": "OrdererMSP", 487 "role": "ADMIN" 488 }, 489 "principal_classification": "ROLE" 490 } 491 ], 492 "rule": { 493 "n_out_of": { 494 "n": 1, 495 "rules": [ 496 { 497 "signed_by": 0 498 } 499 ] 500 } 501 }, 502 "version": 0 503 } 504 }, 505 "version": "0" 506 }, 507 "Readers": { 508 "mod_policy": "Admins", 509 "policy": { 510 "type": 1, 511 "value": { 512 "identities": [ 513 { 514 "principal": { 515 "msp_identifier": "OrdererMSP", 516 "role": "MEMBER" 517 }, 518 "principal_classification": "ROLE" 519 } 520 ], 521 "rule": { 522 "n_out_of": { 523 "n": 1, 524 "rules": [ 525 { 526 "signed_by": 0 527 } 528 ] 529 } 530 }, 531 "version": 0 532 } 533 }, 534 "version": "0" 535 }, 536 "Writers": { 537 "mod_policy": "Admins", 538 "policy": { 539 "type": 1, 540 "value": { 541 "identities": [ 542 { 543 "principal": { 544 "msp_identifier": "OrdererMSP", 545 "role": "MEMBER" 546 }, 547 "principal_classification": "ROLE" 548 } 549 ], 550 "rule": { 551 "n_out_of": { 552 "n": 1, 553 "rules": [ 554 { 555 "signed_by": 0 556 } 557 ] 558 } 559 }, 560 "version": 0 561 } 562 }, 563 "version": "0" 564 } 565 }, 566 "values": { 567 "MSP": { 568 "mod_policy": "Admins", 569 "value": { 570 "config": { 571 "admins": [ 572 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDakNDQWJDZ0F3SUJBZ0lRSFNTTnIyMWRLTTB6THZ0dEdoQnpMVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTNNVEV5T1RFNU1qUXdObG9YRFRJM01URXlOekU1TWpRd05sb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRTZCTVcvY0RGUkUvakFSenV5N1BjeFQ5a3pnZitudXdwKzhzK2xia0hZd0ZpaForMWRhR3gKKzhpS1hDY0YrZ0tpcVBEQXBpZ2REOXNSeTBoTEMwQnRacU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ3o3bDQ2ZXRrODU0NFJEanZENVB6YjV3TzI5N0lIMnNUCngwTjAzOHZibkpzd0NnWUlLb1pJemowRUF3SURTQUF3UlFJaEFNRTJPWXljSnVyYzhVY2hkeTA5RU50RTNFUDIKcVoxSnFTOWVCK0gxSG5FSkFpQUtXa2h5TmI0akRPS2MramJIVmgwV0YrZ3J4UlJYT1hGaEl4ei85elI3UUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" 573 ], 574 "crypto_config": { 575 "identity_identifier_hash_function": "SHA256", 576 "signature_hash_family": "SHA2" 577 }, 578 "name": "OrdererMSP", 579 "root_certs": [ 580 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRY2cxUVZkVmU2Skd6YVU1cmxjcW4vakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTNNVEV5T1RFNU1qUXdObG9YRFRJM01URXlOekU1TWpRd05sb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJQTVI2MGdCcVJham9hS0U1TExRYjRIb28wN3QKYTRuM21Ncy9NRGloQVQ5YUN4UGZBcDM5SS8wMmwvZ2xiMTdCcEtxZGpGd0JKZHNuMVN6ZnQ3NlZkTitqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJTSs1ZU9uclpQT2VPRVE0N3crVDgyK2NEdHZleUI5ckU4ZERkTi9MMjV5Yk1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQVB6SGNOUmQ2a3QxSEdpWEFDclFTM0grL3R5NmcvVFpJa1pTeXIybmdLNQpBaUJnb1BVTTEwTHNsMVFtb2dlbFBjblZGZjJoODBXR2I3NGRIS2tzVFJKUkx3PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" 581 ], 582 "tls_root_certs": [ 583 "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNORENDQWR1Z0F3SUJBZ0lRYWJ5SUl6cldtUFNzSjJacisvRVpXVEFLQmdncWhrak9QUVFEQWpCc01Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4R2pBWUJnTlZCQU1URVhSc2MyTmhMbVY0CllXMXdiR1V1WTI5dE1CNFhEVEUzTVRFeU9URTVNalF3TmxvWERUSTNNVEV5TnpFNU1qUXdObG93YkRFTE1Ba0cKQTFVRUJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdQpZMmx6WTI4eEZEQVNCZ05WQkFvVEMyVjRZVzF3YkdVdVkyOXRNUm93R0FZRFZRUURFeEYwYkhOallTNWxlR0Z0CmNHeGxMbU52YlRCWk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkVZVE9mdG1rTHdiSlRNeG1aVzMKZVdqRUQ2eW1UeEhYeWFQdTM2Y1NQWDlldDZyU3Y5UFpCTGxyK3hZN1dtYlhyOHM5K3E1RDMwWHl6OEh1OWthMQpSc1dqWHpCZE1BNEdBMVVkRHdFQi93UUVBd0lCcGpBUEJnTlZIU1VFQ0RBR0JnUlZIU1VBTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0tRWURWUjBPQkNJRUlJcjduNTVjTWlUdENEYmM5UGU0RFpnZ0ZYdHV2RktTdnBNYUhzbzAKSnpFd01Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lGM1gvMGtQRkFVQzV2N25JVVh6SmI5Z3JscWxET05UeVg2QQpvcmtFVTdWb0FpQkpMbS9IUFZ0aVRHY2NldUZPZTE4SnNwd0JTZ1hxNnY1K1BobEdsbU9pWHc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" 584 ] 585 }, 586 "type": 0 587 }, 588 "version": "0" 589 } 590 }, 591 "version": "0" 592 } 593 }, 594 "mod_policy": "Admins", 595 "policies": { 596 "Admins": { 597 "mod_policy": "Admins", 598 "policy": { 599 "type": 3, 600 "value": { 601 "rule": "MAJORITY", 602 "sub_policy": "Admins" 603 } 604 }, 605 "version": "0" 606 }, 607 "BlockValidation": { 608 "mod_policy": "Admins", 609 "policy": { 610 "type": 3, 611 "value": { 612 "rule": "ANY", 613 "sub_policy": "Writers" 614 } 615 }, 616 "version": "0" 617 }, 618 "Readers": { 619 "mod_policy": "Admins", 620 "policy": { 621 "type": 3, 622 "value": { 623 "rule": "ANY", 624 "sub_policy": "Readers" 625 } 626 }, 627 "version": "0" 628 }, 629 "Writers": { 630 "mod_policy": "Admins", 631 "policy": { 632 "type": 3, 633 "value": { 634 "rule": "ANY", 635 "sub_policy": "Writers" 636 } 637 }, 638 "version": "0" 639 } 640 }, 641 "values": { 642 "BatchSize": { 643 "mod_policy": "Admins", 644 "value": { 645 "absolute_max_bytes": 103809024, 646 "max_message_count": 10, 647 "preferred_max_bytes": 524288 648 }, 649 "version": "0" 650 }, 651 "BatchTimeout": { 652 "mod_policy": "Admins", 653 "value": { 654 "timeout": "2s" 655 }, 656 "version": "0" 657 }, 658 "ChannelRestrictions": { 659 "mod_policy": "Admins", 660 "version": "0" 661 }, 662 "ConsensusType": { 663 "mod_policy": "Admins", 664 "value": { 665 "type": "solo" 666 }, 667 "version": "0" 668 } 669 }, 670 "version": "0" 671 } 672 }, 673 "mod_policy": "", 674 "policies": { 675 "Admins": { 676 "mod_policy": "Admins", 677 "policy": { 678 "type": 3, 679 "value": { 680 "rule": "MAJORITY", 681 "sub_policy": "Admins" 682 } 683 }, 684 "version": "0" 685 }, 686 "Readers": { 687 "mod_policy": "Admins", 688 "policy": { 689 "type": 3, 690 "value": { 691 "rule": "ANY", 692 "sub_policy": "Readers" 693 } 694 }, 695 "version": "0" 696 }, 697 "Writers": { 698 "mod_policy": "Admins", 699 "policy": { 700 "type": 3, 701 "value": { 702 "rule": "ANY", 703 "sub_policy": "Writers" 704 } 705 }, 706 "version": "0" 707 } 708 }, 709 "values": { 710 "BlockDataHashingStructure": { 711 "mod_policy": "Admins", 712 "value": { 713 "width": 4294967295 714 }, 715 "version": "0" 716 }, 717 "Consortium": { 718 "mod_policy": "Admins", 719 "value": { 720 "name": "SampleConsortium" 721 }, 722 "version": "0" 723 }, 724 "HashingAlgorithm": { 725 "mod_policy": "Admins", 726 "value": { 727 "name": "SHA256" 728 }, 729 "version": "0" 730 }, 731 "OrdererAddresses": { 732 "mod_policy": "/Channel/Orderer/Admins", 733 "value": { 734 "addresses": [ 735 "orderer.example.com:7050" 736 ] 737 }, 738 "version": "0" 739 } 740 }, 741 "version": "0" 742 }, 743 "sequence": "3", 744 "type": 0 745 } 746 ``` 747 </details> 748 749 A config might look intimidating in this form, but once you study it you’ll see 750 that it has a logical structure. 751 752 Beyond the definitions of the policies -- defining who can do certain things 753 at the channel level, and who has the permission to change who can change the 754 config -- channels also have other kinds of features that can be modified using 755 a config update. [Adding an Org to a Channel](./channel_update_tutorial.html) 756 takes you through one of the most important -- adding an org to a channel. Some 757 other things that are possible to change with a config update include: 758 759 * **Batch Size.** These parameters dictate the number and size of transactions 760 in a block. No block will appear larger than `absolute_max_bytes` large or 761 with more than `max_message_count` transactions inside the block. If it is 762 possible to construct a block under `preferred_max_bytes`, then a block will 763 be cut prematurely, and transactions larger than this size will appear in 764 their own block. 765 766 ``` 767 { 768 "absolute_max_bytes": 102760448, 769 "max_message_count": 10, 770 "preferred_max_bytes": 524288 771 } 772 ``` 773 774 * **Batch Timeout.** The amount of time to wait after the first transaction 775 arrives for additional transactions before cutting a block. Decreasing this 776 value will improve latency, but decreasing it too much may decrease throughput 777 by not allowing the block to fill to its maximum capacity. 778 779 ``` 780 { "timeout": "2s" } 781 ``` 782 783 * **Channel Restrictions.** The total number of channels the orderer is willing 784 to allocate may be specified as max_count. This is primarily useful in 785 pre-production environments with weak consortium `ChannelCreation` policies. 786 787 ``` 788 { 789 "max_count":1000 790 } 791 ``` 792 793 * **Channel Creation Policy.** Defines the policy value which will be set as the 794 mod_policy for the Application group of new channels for the consortium it is defined in. 795 The signature set attached to the channel creation request will be checked against 796 the instantiation of this policy in the new channel to ensure that the channel 797 creation is authorized. Note that this config value is only set in the orderer 798 system channel. 799 800 ``` 801 { 802 "type": 3, 803 "value": { 804 "rule": "ANY", 805 "sub_policy": "Admins" 806 } 807 } 808 ``` 809 810 * **Kafka brokers.** When `ConsensusType` is set to `kafka`, the `brokers` list 811 enumerates some subset (or preferably all) of the Kafka brokers for the 812 orderer to initially connect to at startup. *Note that it is not possible to 813 change your consensus type after it has been established (during the 814 bootstrapping of the genesis block)*. 815 816 ``` 817 { 818 "brokers": [ 819 "kafka0:9092", 820 "kafka1:9092", 821 "kafka2:9092", 822 "kafka3:9092" 823 ] 824 } 825 ``` 826 827 * **Anchor Peers Definition.** Defines the location of the anchor peers for 828 each Org. 829 830 ``` 831 { 832 "host": "peer0.org2.example.com", 833 "port": 9051 834 } 835 ``` 836 837 * **Hashing Structure.** The block data is an array of byte arrays. The hash of 838 the block data is computed as a Merkle tree. This value specifies the width of 839 that Merkle tree. For the time being, this value is fixed to `4294967295` 840 which corresponds to a simple flat hash of the concatenation of the block data 841 bytes. 842 843 ``` 844 { "width": 4294967295 } 845 ``` 846 847 * **Hashing Algorithm.** The algorithm used for computing the hash values 848 encoded into the blocks of the blockchain. In particular, this affects the 849 data hash, and the previous block hash fields of the block. Note, this field 850 currently only has one valid value (`SHA256`) and should not be changed. 851 852 ``` 853 { "name": "SHA256" } 854 ``` 855 856 * **Block Validation.** This policy specifies the signature requirements for a 857 block to be considered valid. By default, it requires a signature from some 858 member of the ordering org. 859 860 ``` 861 { 862 "type": 3, 863 "value": { 864 "rule": "ANY", 865 "sub_policy": "Writers" 866 } 867 } 868 ``` 869 870 * **Orderer Address.** A list of addresses where clients may invoke the orderer 871 `Broadcast` and `Deliver` functions. The peer randomly chooses among these 872 addresses and fails over between them for retrieving blocks. 873 874 ``` 875 { 876 "addresses": [ 877 "orderer.example.com:7050" 878 ] 879 } 880 ``` 881 882 Just as we add an Org by adding their artifacts and MSP information, you can remove 883 them by reversing the process. 884 885 **Note** that once the consensus type has been defined and the network has been 886 bootstrapped, it is not possible to change it through a configuration update. 887 888 There is another important channel configuration (especially for v1.1) known as 889 **Capability Requirements**. It has its own doc that can be found 890 [here](./capability_requirements.html). 891 892 Let’s say you want to edit the block batch size for the channel (because this is 893 a single numeric field, it’s one of the easiest changes to make). First to make 894 referencing the JSON path easy, we define it as an environment variable. 895 896 To establish this, take a look at your config, find what you’re looking for, and 897 back track the path. 898 899 If you find batch size, for example, you’ll see that it’s a `value` of the 900 `Orderer`. `Orderer` can be found under `groups`, which is under 901 `channel_group`. The batch size value has a parameter under `value` of 902 `max_message_count`. 903 904 Which would make the path this: 905 906 ``` 907 export MAXBATCHSIZEPATH=".channel_group.groups.Orderer.values.BatchSize.value.max_message_count" 908 ``` 909 910 Next, display the value of that property: 911 912 ``` 913 jq "$MAXBATCHSIZEPATH" config.json 914 ``` 915 916 Which should return a value of `10` (in our sample network at least). 917 918 Now, let’s set the new batch size and display the new value: 919 920 ``` 921 jq “$MAXBATCHSIZEPATH = 20” config.json > modified_config.json 922 jq “$MAXBATCHSIZEPATH” modified_config.json 923 ``` 924 925 Once you’ve modified the JSON, it’s ready to be converted and submitted. The 926 scripts and steps in [Adding an Org to a Channel](./channel_update_tutorial.html) 927 will take you through the process for converting the JSON, so let's look at the 928 process of submitting it. 929 930 ## Get the Necessary Signatures 931 932 Once you’ve successfully generated the protobuf file, it’s time to get it 933 signed. To do this, you need to know the relevant policy for whatever it is you’re 934 trying to change. 935 936 By default, editing the configuration of: 937 * **A particular org** (for example, changing anchor peers) requires only the admin 938 signature of that org. 939 * **The application** (like who the member orgs are) requires a majority of the 940 application organizations’ admins to sign. 941 * **The orderer** requires a majority of the ordering organizations’ admins (of 942 which there are by default only 1). 943 * **The top level `channel` group** requires both the agreement of a majority of 944 application organization admins and orderer organization admins. 945 946 If you have made changes to the default policies in the channel, you’ll need to 947 compute your signature requirements accordingly. 948 949 *Note: you may be able to script the signature collection, dependent on your 950 application. In general, you may always collect more signatures than are 951 required.* 952 953 The actual process of getting these signatures will depend on how you’ve set up 954 your system, but there are two main implementations. Currently, the Fabric 955 command line defaults to a “pass it along” system. That is, the Admin of the Org 956 proposing a config update sends the update to someone else (another Admin, 957 typically) who needs to sign it. This Admin signs it (or doesn’t) and passes it 958 along to the next Admin, and so on, until there are enough signatures for the 959 config to be submitted. 960 961 This has the virtue of simplicity -- when there are enough signatures, the last 962 Admin can simply submit the config transaction (in Fabric, the `peer channel update` 963 command includes a signature by default). However, this process will only be 964 practical in smaller channels, since the “pass it along” method can be time 965 consuming. 966 967 The other option is to submit the update to every Admin on a channel and wait 968 for enough signatures to come back. These signatures can then be stitched 969 together and submitted. This makes life a bit more difficult for the Admin who 970 created the config update (forcing them to deal with a file per signer) but is 971 the recommended workflow for users which are developing Fabric management 972 applications. 973 974 Once the config has been added to the ledger, it will be a best practice to 975 pull it and convert it to JSON to check to make sure everything was added 976 correctly. This will also serve as a useful copy of the latest config. 977 978 <!--- Licensed under Creative Commons Attribution 4.0 International License 979 https://creativecommons.org/licenses/by/4.0/ -->