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/ -->