zjb0807 před 7 roky
rodič
revize
927c5d67fd
21 změnil soubory, kde provedl 585 přidání a 19 odebrání
  1. 308 0
      bootstrap.feature
  2. 13 0
      crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem
  3. binární
      crypto-config/ordererOrganizations/ordererOrg1/orderers/channel.tx
  4. binární
      crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.block
  5. 17 0
      crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.ordererOrg1/tls_config/orderer0Signer-orderer0-ordererOrg0-tls.crt
  6. 28 0
      crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.ordererOrg1/tls_config/orderer0Signer-orderer0-ordererOrg0-tls.key
  7. 13 0
      crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem
  8. 17 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/tls_config/peer0Signer-peer0-peerOrg0-tls.crt
  9. 28 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/tls_config/peer0Signer-peer0-peerOrg0-tls.key
  10. 17 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer1.peerOrg1/tls_config/peer1Signer-peer1-peerOrg0-tls.crt
  11. 28 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer1.peerOrg1/tls_config/peer1Signer-peer1-peerOrg0-tls.key
  12. 17 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer2.peerOrg1/tls_config/peer2Signer-peer2-peerOrg0-tls.crt
  13. 28 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer2.peerOrg1/tls_config/peer2Signer-peer2-peerOrg0-tls.key
  14. 17 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer3.peerOrg1/tls_config/peer3Signer-peer3-peerOrg0-tls.crt
  15. 28 0
      crypto-config/peerOrganizations/peerOrg1/peers/peer3.peerOrg1/tls_config/peer3Signer-peer3-peerOrg0-tls.key
  16. 5 4
      docker-compose-cli.yaml
  17. 5 3
      docker-compose-orderer0.yaml
  18. 4 3
      docker-compose-peer0.yaml
  19. 4 3
      docker-compose-peer1.yaml
  20. 4 3
      docker-compose-peer2.yaml
  21. 4 3
      docker-compose-peer3.yaml

+ 308 - 0
bootstrap.feature

@@ -0,0 +1,308 @@
+#
+# Test Bootstrap function
+#
+# Tags that can be used and will affect test internals:
+#  @doNotDecompose will NOT decompose the named compose_yaml after scenario ends.  Useful for setting up environment and reviewing after scenario.
+#
+#  @generateDocs will generate documentation for the scenario that can be used for both verification and comprehension.
+#
+
+@bootstrap
+Feature: Bootstrap
+  As a blockchain entrepreneur
+  I want to bootstrap a new blockchain network
+
+    @doNotDecompose
+    @generateDocs
+  Scenario Outline: Bootstrap a development network with 4 peers (2 orgs)  and 1 orderer (1 org), each having a single independent root of trust (No fabric-ca, just openssl)
+    #creates 1 self-signed key/cert pair per orderer organization
+    Given the orderer network has organizations:
+      | Organization  |   Readers  | Writers  | Admins  |
+      | ordererOrg0   |    member  |  member  |  admin  |
+
+    And user requests role of orderer admin by creating a key and csr for orderer and acquires signed certificate from organization:
+      | User           | Orderer  | Organization  |
+      | orderer0Signer | orderer0 | ordererOrg0   |
+      | orderer1Signer | orderer1 | ordererOrg0   |
+      | orderer2Signer | orderer2 | ordererOrg0   |
+
+
+    # Rolenames : MspPrincipal.proto
+    And the peer network has organizations:
+      | Organization  |  Readers  | Writers  | Admins  |
+      |  peerOrg0     |   member  |  member  |  admin  |
+#      |  peerOrg1     |   member  |  member  |  admin  |
+#      |  peerOrg2     |   member  |  member  |  admin  |
+
+
+
+    And a ordererBootstrapAdmin is identified and given access to all public certificates and orderer node info
+
+    And the ordererBootstrapAdmin creates a cert alias "bootstrapCertAlias" for orderer network bootstrap purposes for organizations
+        | Organization     |
+        |  ordererOrg0     |
+
+    And the ordererBootstrapAdmin generates a GUUID to identify the orderer system chain and refer to it by name as "OrdererSystemChainId"
+
+    And the ordererBootstrapAdmin creates a consortium "consortium1" (network name) for peer orgs who wish to form a network:
+      | Organization  |
+      |  peerOrg0     |
+#      |  peerOrg1     |
+#      |  peerOrg2     |
+
+    # Order info includes orderer admin/orderer information and address (host:port) from previous steps
+    # Only the peer organizations can vary.
+    And the ordererBootstrapAdmin using cert alias "bootstrapCertAlias" creates the genesis block "ordererGenesisBlock" for chain "OrdererSystemChainId" for network config policy "<PolicyType>" and consensus "<ConsensusType>" using consortiums:
+      |   Consortium    |
+      |  consortium1    |
+
+
+    And the orderer admins inspect and approve the genesis block for chain "OrdererSystemChainId"
+
+    # to be used for setting the orderer genesis block path parameter in composition
+    And the orderer admins use the genesis block for chain "OrdererSystemChainId" to configure orderers
+
+    # We now have an orderer network with NO peers.  Now need to configure and start the peer network
+    # This can be currently automated through folder creation of the proper form and placing PEMs.
+    And user requests role for peer by creating a key and csr for peer and acquires signed certificate from organization:
+        | User            | Peer     | Organization  |AliasSavedUnder|
+        | peer0Signer     | peer0    | peerOrg0      |               |
+        | peer1Signer     | peer1    | peerOrg0      |               |
+        | peer2Signer     | peer2    | peerOrg0      |               |
+        | peer3Signer     | peer3    | peerOrg0      |               |
+        | peer0Admin      | peer0    | peerOrg0      |peer-admin-cert|
+        | peer1Admin      | peer1    | peerOrg0      |peer-admin-cert|
+        | peer2Admin      | peer2    | peerOrg0      |peer-admin-cert|
+        | peer3Admin      | peer3    | peerOrg0      |peer-admin-cert|
+
+
+    And we compose "<ComposeFile>"
+
+    # Sleep as to allow system up time
+    And I wait "<SystemUpWaitTime>" seconds
+
+    And the following application developers are defined for peer organizations and each saves their cert as alias
+      | Developer       | Consortium     | Organization  |  AliasSavedUnder   |
+      | dev0Org0        | consortium1    |  peerOrg0     |    dev0Org0App1    |
+      | dev0Org1        | consortium1    |  peerOrg0     |    dev0Org1App1    |
+
+    # Need Consortium MSP info and
+    # need to add the ChannelWriters ConfigItem (using ChannelWriters ref name),
+    # ChannelReaders ConfigItem (using ChannelReaders ref name)AnchorPeers ConfigItem
+    # and the ChaincodeLifecyclePolicy Config Item
+    # NOTE: Template1 will simply hold refs to peer orgs that can create in this channel at the moment
+    And the user "dev0Org0" creates a peer template "template1" with chaincode deployment policy using consortium "consortium1" and peer organizations:
+      | Organization  |
+      |  peerOrg0     |
+#      |  peerOrg1     |
+
+    And the user "dev0Org0" creates an peer anchor set "anchors1" for channel "com.acme.blockchain.jdoe.Channel1" for orgs:
+      | User            | Peer     | Organization  |
+      | peer0Signer     | peer0    | peerOrg0      |
+#      | peer2Signer     | peer2    | peerOrg0      |
+
+    # TODO: grab the peer orgs from template1 and put into Murali's MSP info SCIs.
+    # Entry point for creating a channel from existing templates
+    And the user "dev0Org0" creates a ConfigUpdateEnvelope "createChannelConfigUpdate1"
+        | ChannelID                          | Template     | Consortium    | Anchors  |
+        | com.acme.blockchain.jdoe.Channel1  | template1    | consortium1   | anchors1 |
+
+    And the user "dev0Org0" collects signatures for ConfigUpdateEnvelope "createChannelConfigUpdate1" from developers:
+      |   Developer     |    Cert Alias    |
+      |  dev0Org0       |   dev0Org0App1   |
+      |  dev0Org1       |   dev0Org1App1   |
+
+    And the user "dev0Org0" creates a ConfigUpdate Tx "configUpdateTx1" using cert alias "dev0Org0App1" using signed ConfigUpdateEnvelope "createChannelConfigUpdate1"
+
+    And the user "dev0Org0" using cert alias "dev0Org0App1" broadcasts ConfigUpdate Tx "configUpdateTx1" to orderer "<orderer0>" to create channel "com.acme.blockchain.jdoe.Channel1"
+
+    # Sleep as the deliver takes a bit to have the first block ready
+    And I wait "<BroadcastWaitTime>" seconds
+
+    When user "dev0Org0" using cert alias "dev0Org0App1" connects to deliver function on orderer "<orderer0>"
+    And user "dev0Org0" sends deliver a seek request on orderer "<orderer0>" with properties:
+      | ChainId                               | Start |  End    |
+      | com.acme.blockchain.jdoe.Channel1     |   0   |  0      |
+
+    Then user "dev0Org0" should get a delivery "genesisBlockForMyNewChannel" from "<orderer0>" of "1" blocks with "1" messages within "1" seconds
+
+    Given user "dev0Org0" gives "genesisBlockForMyNewChannel" to user "dev0Org1"
+
+    Given user "dev0Org0" gives "genesisBlockForMyNewChannel" to user "peer0Admin"
+    Given user "dev0Org0" gives "genesisBlockForMyNewChannel" to user "peer1Admin"
+
+
+    # This is entry point for joining an existing channel
+    When user "peer0Admin" using cert alias "peer-admin-cert" requests to join channel using genesis block "genesisBlockForMyNewChannel" on peers with result "joinChannelResult"
+      | Peer       |
+      | peer0      |
+
+    Then user "peer0Admin" expects result code for "joinChannelResult" of "200" from peers:
+      | Peer       |
+      | peer0      |
+
+    When user "peer1Admin" using cert alias "peer-admin-cert" requests to join channel using genesis block "genesisBlockForMyNewChannel" on peers with result "joinChannelResult"
+      | Peer       |
+      | peer1      |
+
+    Then user "peer1Admin" expects result code for "joinChannelResult" of "200" from peers:
+      | Peer       |
+      | peer1      |
+
+    Given user "dev0Org1" gives "genesisBlockForMyNewChannel" to user "peer2Admin"
+    Given user "dev0Org1" gives "genesisBlockForMyNewChannel" to user "peer3Admin"
+
+    When user "peer2Admin" using cert alias "peer-admin-cert" requests to join channel using genesis block "genesisBlockForMyNewChannel" on peers with result "joinChannelResult"
+      | Peer       |
+      | peer2      |
+
+    Then user "peer2Admin" expects result code for "joinChannelResult" of "200" from peers:
+      | Peer       |
+      | peer2      |
+
+    When user "peer3Admin" using cert alias "peer-admin-cert" requests to join channel using genesis block "genesisBlockForMyNewChannel" on peers with result "joinChannelResult"
+      | Peer       |
+      | peer3      |
+
+    Then user "peer3Admin" expects result code for "joinChannelResult" of "200" from peers:
+      | Peer       |
+      | peer3      |
+
+    # Entry point for invoking on an existing channel
+    When user "peer0Admin" creates a chaincode spec "cc_spec" with name "example02" of type "GOLANG" for chaincode "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02" with args
+      | funcName | arg1 |  arg2 | arg3 | arg4 |
+      |   init   |  a   |  100  |  b   |  200 |
+
+    # Under the covers, create a deployment spec, etc.
+    And user "peer0Admin" using cert alias "peer-admin-cert" creates a install proposal "installProposal1" for channel "com.acme.blockchain.jdoe.Channel1" using chaincode spec "cc_spec"
+
+    And user "peer0Admin" using cert alias "peer-admin-cert" sends proposal "installProposal1" to endorsers with timeout of "90" seconds with proposal responses "installProposalResponses":
+        | Endorser |
+        | peer0    |
+
+    Then user "peer0Admin" expects proposal responses "installProposalResponses" with status "200" from endorsers:
+        | Endorser |
+        | peer0    |
+
+    Given user "peer0Admin" gives "cc_spec" to user "peer2Admin"
+
+    # Under the covers, create a deployment spec, etc.
+    When user "peer2Admin" using cert alias "peer-admin-cert" creates a install proposal "installProposal1" for channel "com.acme.blockchain.jdoe.Channel1" using chaincode spec "cc_spec"
+
+    And user "peer2Admin" using cert alias "peer-admin-cert" sends proposal "installProposal1" to endorsers with timeout of "90" seconds with proposal responses "installProposalResponses":
+      | Endorser |
+        | peer2    |
+
+    Then user "peer2Admin" expects proposal responses "installProposalResponses" with status "200" from endorsers:
+      | Endorser |
+        | peer2    |
+
+
+    Given user "peer0Admin" gives "cc_spec" to user "dev0Org0"
+
+    # Under the covers, create a deployment spec, etc.
+    When user "dev0Org0" using cert alias "dev0Org0App1" creates a instantiate proposal "instantiateProposal1" for channel "com.acme.blockchain.jdoe.Channel1" using chaincode spec "cc_spec"
+
+    And user "dev0Org0" using cert alias "dev0Org0App1" sends proposal "instantiateProposal1" to endorsers with timeout of "90" seconds with proposal responses "instantiateProposalResponses":
+      | Endorser |
+      | peer0    |
+      | peer2    |
+
+
+    Then user "dev0Org0" expects proposal responses "instantiateProposalResponses" with status "200" from endorsers:
+      | Endorser |
+      | peer0    |
+      | peer2    |
+
+    And user "dev0Org0" expects proposal responses "instantiateProposalResponses" each have the same value from endorsers:
+      | Endorser |
+      | peer0    |
+      | peer2    |
+
+    When the user "dev0Org0" creates transaction "instantiateTx1" from proposal "instantiateProposal1" and proposal responses "instantiateProposalResponses" for channel "com.acme.blockchain.jdoe.Channel1"
+
+    And the user "dev0Org0" broadcasts transaction "instantiateTx1" to orderer "<orderer1>" on channel "com.acme.blockchain.jdoe.Channel1"
+
+    # Sleep as the deliver takes a bit to have the first block ready
+    And I wait "2" seconds
+
+    And user "dev0Org0" sends deliver a seek request on orderer "<orderer0>" with properties:
+        | ChainId                               |   Start    |  End    |
+        | com.acme.blockchain.jdoe.Channel1     |   1   |  1      |
+
+    Then user "dev0Org0" should get a delivery "deliveredInstantiateTx1Block" from "<orderer0>" of "1" blocks with "1" messages within "1" seconds
+
+    # Sleep as the deliver takes a bit to have the first block ready
+    And I wait "1" seconds
+
+
+    # Entry point for invoking on an existing channel
+    When user "dev0Org0" creates a chaincode invocation spec "querySpec1" using spec "cc_spec" with input:
+        | funcName  | arg1 |
+        |   query   |  a   |
+
+    # Under the covers, create a deployment spec, etc.
+    And user "dev0Org0" using cert alias "dev0Org0App1" creates a proposal "queryProposal1" for channel "com.acme.blockchain.jdoe.Channel1" using chaincode spec "querySpec1"
+
+    And user "dev0Org0" using cert alias "dev0Org0App1" sends proposal "queryProposal1" to endorsers with timeout of "30" seconds with proposal responses "queryProposal1Responses":
+        | Endorser |
+        | peer0    |
+        | peer2    |
+
+    Then user "dev0Org0" expects proposal responses "queryProposal1Responses" with status "200" from endorsers:
+        | Endorser |
+        | peer0    |
+        | peer2    |
+
+    And user "dev0Org0" expects proposal responses "queryProposal1Responses" each have the same value from endorsers:
+        | Endorser |
+        | peer0    |
+        | peer2    |
+
+
+    # Entry point for invoking on an existing channel
+      When user "dev0Org0" creates a chaincode invocation spec "invocationSpec1" using spec "cc_spec" with input:
+        | funcName   | arg1 | arg2 |  arg3  |
+        |   invoke   |  a   |  b   |   10   |
+
+    # Under the covers, create a deployment spec, etc.
+      And user "dev0Org0" using cert alias "dev0Org0App1" creates a proposal "invokeProposal1" for channel "com.acme.blockchain.jdoe.Channel1" using chaincode spec "invocationSpec1"
+
+      And user "dev0Org0" using cert alias "dev0Org0App1" sends proposal "invokeProposal1" to endorsers with timeout of "30" seconds with proposal responses "invokeProposal1Responses":
+        | Endorser |
+        | peer0    |
+        | peer2    |
+
+      Then user "dev0Org0" expects proposal responses "invokeProposal1Responses" with status "200" from endorsers:
+        | Endorser |
+        | peer0    |
+        | peer2    |
+
+      And user "dev0Org0" expects proposal responses "invokeProposal1Responses" each have the same value from endorsers:
+        | Endorser |
+        | peer0    |
+        | peer2    |
+
+      When the user "dev0Org0" creates transaction "invokeTx1" from proposal "invokeProposal1" and proposal responses "invokeProposal1Responses" for channel "com.acme.blockchain.jdoe.Channel1"
+
+      And the user "dev0Org0" broadcasts transaction "invokeTx1" to orderer "<orderer2>" on channel "com.acme.blockchain.jdoe.Channel1"
+
+    # Sleep as the deliver takes a bit to have the first block ready
+      And I wait "2" seconds
+
+      And user "dev0Org0" sends deliver a seek request on orderer "<orderer0>" with properties:
+        | ChainId                               |   Start    |  End    |
+        | com.acme.blockchain.jdoe.Channel1     |   2        |  2      |
+
+      Then user "dev0Org0" should get a delivery "deliveredInvokeTx1Block" from "<orderer0>" of "1" blocks with "1" messages within "1" seconds
+
+
+    # TODO: Once events are working, consider listen event listener as well.
+
+    Examples: Orderer Options
+      |          ComposeFile                                                                                                                       |  SystemUpWaitTime   | ConsensusType | BroadcastWaitTime | orderer0 | orderer1 | orderer2 |Orderer Specific Info|
+      |   docker-compose-next-4.yml                                                                                                                |        0            |     solo      |      2            | orderer0 | orderer0 | orderer0 |                     |
+#      |   docker-compose-next-4.yml  ./environments/orderer-1-kafka-1/docker-compose.yml orderer-3-kafka-1.yml                                     |        5            |     kafka     |      5            | orderer0 | orderer1 | orderer2 |                     |
+#      |   docker-compose-next-4.yml  docker-compose-next-4-couchdb.yml                                                                             |        10            |     solo      |      2            | orderer0 | orderer0 | orderer0 |                     |
+#      |   docker-compose-next-4.yml  docker-compose-next-4-couchdb.yml  ./environments/orderer-1-kafka-1/docker-compose.yml orderer-3-kafka-1.yml  |        10            |     kafka     |      5            | orderer0 | orderer1 | orderer2 |                     |
+#      |   docker-compose-next-4.yml  ./environments/orderer-1-kafka-3/docker-compose.yml                                                           |          5          |     kafka     |      5            | orderer0 | orderer1 | orderer2 |                     |

+ 13 - 0
crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts/ordererOrg0.pem

@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB9TCCAZygAwIBAwICA+gwCgYIKoZIzj0EAwIwWDEUMBIGA1UEAwwLb3JkZXJl
+ck9yZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEX
+MBUGA1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTMzWhcNMTgwNDI3
+MTg0OTMzWjBYMRQwEgYDVQQDDAtvcmRlcmVyT3JnMDELMAkGA1UEBhMCVVMxDDAK
+BgNVBAcMA1JUUDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGlu
+YTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABLawQik+bOgaBNS9M74sjdw4Imqt
+g64ZdUP83144uaSHQPuUq8OYMMK/apGUSWtrorOJ2Gj9PMV+0Qs8yzeOAdWjVjBU
+MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDRTjX3QJOAHbnREWkYokhXR
+pzsGMB8GA1UdIwQYMBaAFDRTjX3QJOAHbnREWkYokhXRpzsGMAoGCCqGSM49BAMC
+A0cAMEQCIBdqKO3TZ2KLWKcDErGiOc7TWIVChFfzO4Bn9AuunU6QAiAvweATe3z1
+4CISjkUeaw8SdMSKV5GgRZCjgwzF8lLvNA==
+-----END CERTIFICATE-----

binární
crypto-config/ordererOrganizations/ordererOrg1/orderers/channel.tx


binární
crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.block


+ 17 - 0
crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.ordererOrg1/tls_config/orderer0Signer-orderer0-ordererOrg0-tls.crt

@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICuDCCAl6gAwIBAwICA+gwCgYIKoZIzj0EAwIwWDEUMBIGA1UEAwwLb3JkZXJl
+ck9yZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEX
+MBUGA1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTM4WhcNMTgwNDI3
+MTg0OTM4WjBVMREwDwYDVQQDDAhvcmRlcmVyMDELMAkGA1UEBhMCVVMxDDAKBgNV
+BAcMA1JUUDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTCC
+ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALZ2ogg1UQ308uLFzKZYveXD
+EwSTEh5zidhzEscmRvegLKZJv5Jnr64k/OIeysQnuz5qyKNqtc3n0zM729KvG9kc
+nik84wjeLRbGieup2YdMfMEezEtHavTvvu4fr0JmQiKCRXJ9aPrkOAaT0aECsMht
+tMv4zwthJvDtbbsSAREaHAsI8B/o5oskP99cyUj1LvgehA6L+K0rqdpOYzlRmqGn
+KDRVktIaUdL5Zq4+cZ5jCz+l3Xouw3kgnfK6PYgk7eASlkWwsB7VvfHbpD1yE/VG
+DfdX4yl7Sw+zthFANe0TumC+Opyn2a62JncS64yIGkmbR4AtMY2PF28JDgIWMGkC
+AwEAAaNQME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUw90WhZlK9Y/0RO81M+5K
+Z6jdzSEwHwYDVR0jBBgwFoAUNFONfdAk4AdudERaRiiSFdGnOwYwCgYIKoZIzj0E
+AwIDSAAwRQIhAOGeIBJyOkS5kcgQymMWKqDK80bM169N/zMiuyiBIYdOAiBRGaPL
+mZbw9hq43sJaknfEtF08V9fuyKK26I4ld06K1Q==
+-----END CERTIFICATE-----

+ 28 - 0
crypto-config/ordererOrganizations/ordererOrg1/orderers/orderer.ordererOrg1/tls_config/orderer0Signer-orderer0-ordererOrg0-tls.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC2dqIINVEN9PLi
+xcymWL3lwxMEkxIec4nYcxLHJkb3oCymSb+SZ6+uJPziHsrEJ7s+asijarXN59Mz
+O9vSrxvZHJ4pPOMI3i0WxonrqdmHTHzBHsxLR2r0777uH69CZkIigkVyfWj65DgG
+k9GhArDIbbTL+M8LYSbw7W27EgERGhwLCPAf6OaLJD/fXMlI9S74HoQOi/itK6na
+TmM5UZqhpyg0VZLSGlHS+WauPnGeYws/pd16LsN5IJ3yuj2IJO3gEpZFsLAe1b3x
+26Q9chP1Rg33V+Mpe0sPs7YRQDXtE7pgvjqcp9mutiZ3EuuMiBpJm0eALTGNjxdv
+CQ4CFjBpAgMBAAECggEBAJhgzIKEXDOGq8ycmYMWO0iFN/2rAQezP5wmxbjRC5VD
+C+a3UihnNPz+4L3KL1XPRH0k2ng25quVfficdcEmAeC4GJGhyoyeVxNdLNNFXmey
+hcEWAlCfzP/OtCnTBh8ynOqK1op9l01niC5eBkQrpg1MKR/qoqYDNW0hK3F94Kwx
+MwzVNpZWli/qkwmwgyj5C46C2r7d+uecQyhqKE5V0RzrVT69UbotMJFLvWpjvq5g
+vVsDpeoc7XQh09TL6eMofvUpPkqJkUKoQ1GOG57q5IBstVgZHti99BhOSE6iMay3
+e9d8N6Xxa4WBgu7HN5GTHaGDHXba7vGtUjWN8a3BAwECgYEA5xNeli/y9ciSAkCB
+vqZyiNWlu7PhQvyMYEQS4zwUiCPaJMQPpEO8YgcsqiPDCB0tVoRx6R/u1zjiIgu7
+iI53NUzw7akfsyEcneqnt9YArSlvUdMYlXLwMN8vdt2RI8PrsRfP8Opg1Nqxgggz
+It8kYksa0yrNMoPrJI078f9NuCECgYEAyiTyQpIv2pYymgbFdx2xqMUmj8vL10ou
+Y7wylNfx5QTMaytfQgbuvKMI2iE04rg0d7vxJH0vpIzrdIq0t115auJk5i54SHXT
+2h2VEWlmgYC6T7JLMtGK2blctxIRz1SGU2h8A12tMxyULlYQfP9hrHmzm1kXeBTx
+y65fSrPKz0kCgYBOJcrTWBv+63oVsOMwKvKJPFf0hv0jvm1rERqiJut6r0VTMcto
+blADhxGf6MBIujVfESPFB7uqpd40TWt631OJfx/sAEpsNkKLVZSrI4DPDzhKn+2s
+fVal8JUIyh4Pzm6jUb5NZ7afxeZKZ6ODo5uWcnf7+nmzH9IiZnFjgkgygQKBgFgo
+wNcztlcYhj0SkvAeLSszwFuaP+5G1fB9VXoAq+h7rUNYCRVcvKXcXLH1JYFzYL6P
+Yt3NEwgqxU1waNxHkfqBfgu9XIwNhzVrDWYol6IHKDo1wgIJzQqjgsH8yXOoo2Sg
+/uTg5/aQkjebJVm+bzSvZxtrQYcHa2SvSbPksaCxAoGBAK/02ByZHxsz4e1xQy48
+84BVYW157ECbmvAHfM/aCwlkHDwHz3ilSeX/1wKTUQlvUTqkfCd2dCrRUAIhI8im
+slhpWNxM5b9mEhy+OIdvQ8TT6koLmrd9ZG7iPNvQDCk5RAvviUrIJPSA2w/47nz3
+FnY+XbDHCqOHfWKERlGpEsSH
+-----END PRIVATE KEY-----

+ 13 - 0
crypto-config/peerOrganizations/peerOrg1/msp/cacerts/peerOrg0.pem

@@ -0,0 +1,13 @@
+-----BEGIN CERTIFICATE-----
+MIIB8DCCAZagAwIBAwICA+gwCgYIKoZIzj0EAwIwVTERMA8GA1UEAwwIcGVlck9y
+ZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEXMBUG
+A1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTM0WhcNMTgwNDI3MTg0
+OTM0WjBVMREwDwYDVQQDDAhwZWVyT3JnMDELMAkGA1UEBhMCVVMxDDAKBgNVBAcM
+A1JUUDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTBZMBMG
+ByqGSM49AgEGCCqGSM49AwEHA0IABHoyrgAAOk5OlEGB1GCLY4eIZuhVtAy55Mea
+moa+LzZGyA5kKfI9n5rw6pbum0ZcoWvv26bB6MJsE53eRJexOu6jVjBUMBIGA1Ud
+EwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFMjjW1UqCPlfPHykFupBF0DJjgAjMB8G
+A1UdIwQYMBaAFMjjW1UqCPlfPHykFupBF0DJjgAjMAoGCCqGSM49BAMCA0gAMEUC
+IQDNERoPNQ0pCa+mnU/q4ef6o/hgMZeOm6cwDVreH/79gwIgf9Xvl2FCIdUFdS5G
+v4D1ZnEJ9emNk6FETGC8NKnnUuc=
+-----END CERTIFICATE-----

+ 17 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/tls_config/peer0Signer-peer0-peerOrg0-tls.crt

@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICszCCAligAwIBAwICA+gwCgYIKoZIzj0EAwIwVTERMA8GA1UEAwwIcGVlck9y
+ZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEXMBUG
+A1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTM4WhcNMTgwNDI3MTg0
+OTM4WjBSMQ4wDAYDVQQDDAVwZWVyMDELMAkGA1UEBhMCVVMxDDAKBgNVBAcMA1JU
+UDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMePgWN2gT6ln8VBG0JX9khWsJpIlPnQ
+KrKuIEJ01DXUqOpNFb+UnNdHZ+0ig+ggltvg5mXUmMlF7TtSPl1okNDFsW+zOLrz
+FypHkH+rSpBuhNhKtBZWjw2Nhw1XbDpBKaqN1clqN543i7XxuMSOAJnHHYGbkkck
+vN4x1CbXfWUZDrbF/YQMhL9ahSKvgP3FiwiSpzgXmTmzsnLH1SQOpeXILLML3XbS
+q98rjw5nsieaESGB5wYXM7lxm1gHmhz2nNvXXC0DuEUH/o1JjTGpjQaTWNzhBq05
+hAcquZflabXA6TbHu4XqYADNYUpYK4qbPlpmzb+XO7Z7cVtxbV4t/J8CAwEAAaNQ
+ME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU2fEQmm2jeglKhPBvKyhoyKKnhgww
+HwYDVR0jBBgwFoAUyONbVSoI+V88fKQW6kEXQMmOACMwCgYIKoZIzj0EAwIDSQAw
+RgIhAIRqbiKrC0hV91aoJw67NsQ0xjdYROWK/wFoCZpgHmnPAiEAwwVS1GhiQPAF
+X+YgjjuIGTOyMSTvVO2U/gzIFdK5jXo=
+-----END CERTIFICATE-----

+ 28 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/tls_config/peer0Signer-peer0-peerOrg0-tls.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDHj4FjdoE+pZ/F
+QRtCV/ZIVrCaSJT50CqyriBCdNQ11KjqTRW/lJzXR2ftIoPoIJbb4OZl1JjJRe07
+Uj5daJDQxbFvszi68xcqR5B/q0qQboTYSrQWVo8NjYcNV2w6QSmqjdXJajeeN4u1
+8bjEjgCZxx2Bm5JHJLzeMdQm131lGQ62xf2EDIS/WoUir4D9xYsIkqc4F5k5s7Jy
+x9UkDqXlyCyzC9120qvfK48OZ7InmhEhgecGFzO5cZtYB5oc9pzb11wtA7hFB/6N
+SY0xqY0Gk1jc4QatOYQHKrmX5Wm1wOk2x7uF6mAAzWFKWCuKmz5aZs2/lzu2e3Fb
+cW1eLfyfAgMBAAECggEAIXYpnvDm+QcyhBPHq1cuf7Cxih0zhbPnBPD3jc0jLCeN
+b0QfqnET33Ektvl7nregNBxA5cBBIjasca73sBfxeGA9wVoO4CIUt00qqI2jQhaW
+BeJ40eoPsJkTlSQcjKQShXuk5lH+I3Ry4741Whfpd9+QTgQ1AeLiHGvEhALMDuBZ
+vh7tuLf74kzmO6npjllkbOy0siO/2O5AK8vS/uc8kE1/vqONGRyurH9IjGM0wy7F
+rqqAKiMmly/ZOATa/YnJ5nPqGv4Efd06N1bNWuYFjVUSlzjJZJHlDuQ6V+iGscS6
+F4bBC5faqbSyBq+HuWjM/R0r2IleA6ZtO7aOqClTkQKBgQDywafTFWlV3HPMJLxo
+AwsE71X4M+1hnBrYtK9jMbf7CdUWSa1hdPRv8co8YGZ1JTNNnNAJoj30q+h2b5on
+RGOlk+XGMGOHnW+nWJl7Tx15dFC+lVLpa0Nec77uUVFcoMAWOQu9/QN/JTzuUHoo
+Cqc8dDTnL2KCtAIVoy5G1g2ouQKBgQDScpMXmAqUhS+4TaRUHzYdTkF32tnGwPtA
+Jpn/x3fsWuNck3VGJ5ze1QltDvf2h6RofZXSAbfqgPUQsKe2NXvYmDPrgjm/BPja
+rOUTUB91u4ay342KdgtysNBhfDtrQtESEiUukJeGsGNslYSv6kOTzd7CELOsVhK9
+9LJzRoB0FwKBgHnKjthoNaDOKYqSI7RLUov3R7pu0vnVx+JRRG0P1K4uEKpN7J6o
+frprJHuGIeFD+KlHs1gh/dNzK/2/oCdzOEsqGG2GeWjgo9Phr58d4ju9D4WOhTp2
+hiYtC+2k/pzqSXTcyfdXqRlxJVCrL55HOgAqjSAvtcy9Yw5YAC+p1NCBAoGAaG95
+dYz7Oyc5PkIxmZl/ll1+ecc+qbadOQGvDNLlPYMBL7Dx0uXXoHGiYt+5yDsaKMyh
+6/z0U0i51RWFtROnqR4nLemLVLNX99UzPTlW02tDdkMgj6TzG3CJiMdJCXq4HDqq
+/we8WpfwTzOIDHC6JoBU2oPFVnHEjUYAxNoo5vMCgYEAy5Gt7yRtbd5Qzn98Yhox
+kZ4lpnotJtkQjFFB/M/SmjjShjA+8kFaWSKdueAumbeFJAiCxRsAyQENaWHtBhz3
+HZwnbDTsgpXA8upAOPUAK4diasKrSSDx8+99fNxB/Kvh9TcNSKnQfBst5u5O5JoD
+c9XsI7+91vNsBHg1arCI+OM=
+-----END PRIVATE KEY-----

+ 17 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer1.peerOrg1/tls_config/peer1Signer-peer1-peerOrg0-tls.crt

@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICsTCCAligAwIBAwICA+gwCgYIKoZIzj0EAwIwVTERMA8GA1UEAwwIcGVlck9y
+ZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEXMBUG
+A1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTM4WhcNMTgwNDI3MTg0
+OTM4WjBSMQ4wDAYDVQQDDAVwZWVyMTELMAkGA1UEBhMCVVMxDDAKBgNVBAcMA1JU
+UDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAKwQKwfDBTqbNbODZqxOTvPhW+k9xRiv
+MaS+B2B93vmBqio9Z5XOMy4jHuW4Go5coYnFZkkErjPmAacky+VRrazFa+jn/ITA
+XAjiko+88BnTQWPyHNruI4J6Hlxjs5dgR9eRzgnZh6/mf0BKln+JX7wXYWYLAWlI
+5PNkCL6WYU4qfvpSseShNqU5kpy6Cf9Q+V/NWM2E12U+Gzibz0EsWjgqQwJU5CzL
+aOkYam4wNg/ArZMLFOoZHgOVRjl1VM60qN5qR+J3bk0eX8CM2e4KlPQq5aZqv7zG
+Kue5JNR+Jxsw/Nu4jlyNeKS3osCcjMSUoQAoDS6PfKOSj447jWN+Aj0CAwEAAaNQ
+ME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUUgMOr+ELzoQ/MTOoY1Gt+cOaijow
+HwYDVR0jBBgwFoAUyONbVSoI+V88fKQW6kEXQMmOACMwCgYIKoZIzj0EAwIDRwAw
+RAIgTlOinFJ3T95XBWS/FlBLQSH6sLaXbt1pjSrL9TiRBdYCIACgZ8wSW2CBsHhz
+tKV8cqDp3nehpBvoUzqSShx08BQB
+-----END CERTIFICATE-----

+ 28 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer1.peerOrg1/tls_config/peer1Signer-peer1-peerOrg0-tls.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCsECsHwwU6mzWz
+g2asTk7z4VvpPcUYrzGkvgdgfd75gaoqPWeVzjMuIx7luBqOXKGJxWZJBK4z5gGn
+JMvlUa2sxWvo5/yEwFwI4pKPvPAZ00Fj8hza7iOCeh5cY7OXYEfXkc4J2Yev5n9A
+SpZ/iV+8F2FmCwFpSOTzZAi+lmFOKn76UrHkoTalOZKcugn/UPlfzVjNhNdlPhs4
+m89BLFo4KkMCVOQsy2jpGGpuMDYPwK2TCxTqGR4DlUY5dVTOtKjeakfid25NHl/A
+jNnuCpT0KuWmar+8xirnuSTUficbMPzbuI5cjXikt6LAnIzElKEAKA0uj3yjko+O
+O41jfgI9AgMBAAECggEAIWdGI0yeEEGfjEkfPqY5N6lxgXdncyJX3eayYe4twnyE
+v4yKNpAAaZ2R2wEBzs924Ns8v0I0W4j0mzFOkCdqMxdkmqOm51K8y1DJKTSB3FGh
+6ThQl8QRirwQdtk4PVQIvnXk7Q6ZA/IYlC+mxf2yYz6avwe1722iXQn3lKB3JYhS
+sSJELfanBfO8IT9WcGunFwzPIAO6nSzeaj3qZc1PtTQsQTbjp+dVqTiQwlXPH3yq
+pi0jQMrYs1i8MxNMv0oOB4JY2UQ2qMe9QcXyPYCJ3VgyXFRPJ1NLrFy+J+ogZCA7
+8OnByUmpJkTAo6O0NZuhZzSRf7Bi5KDnqeHhusA7YQKBgQDkzprArxgyW4f2W9ak
+Msn4/3Fu4IVXvvtopwTnMZFrx65+9Sbpel5hGW7cYUFXN8VZoGPCVY+HOO5QJdxf
+YLu+3sAtDfdYRmGZqZD7Uv5KStZH8T6q/bU7nkt9XxducoEm9Q7KtDenDoEGFUmo
+7Xdb+1JIK/rhmBnybORiZWisNQKBgQDAgyUxc3N3plX/Y+O0raPDqDabGFd5rOkv
+8NDSdOZ+6xAwhCcFH7QWL8F/07KJ04oLMX7zfVX9H5MHyXEAe/sFNgtIQERy4pJl
+68enuf+l8/VPAPRlerS4UrIdmJt+HyrGFTqzwtNdfWLMtdw9QH3PZQOhodIanKYF
+ZtkETqDu6QKBgH+BJrnjmR9O5IiECyu7ZdQNPYAlPAl20xExqcjQVZJzVylGoiWP
+3JJNovrKc6gP2zkj6RO9rFsVfbBKOPEprdYiuYMh+klGB1OjK7jyOeTaqWiz5lFR
+SrJrdvPpjtwskQ5Nl62cGjtNGNdz+3VYx6AJgIPZhlg685Kl3et7SYZVAoGAWr52
+zbSJ/SBe8R94ujYPN68W7kyvDx++W2a8SDfqXnEXFId2jSfAj6S7JTH4upcIPvZ5
+zPSLj+FOQSFnLr9CN9adwtTobu716y0U068NHoC8ZR0iFqOchDYW13ST9wNh+jUP
+kqSHVU5BQBWJVyYLJ7OJ3qqUiw7EA0/ThAA8Q+ECgYBPiCGEaVf0OD9c2jFLOIW+
+I6X0O2e+Oeq+aqiDJhJkaaKun5MR9D/FPkDtbZ68DI2cJoFLWyJlDd5lmDT66C3t
+e71rSbqO6Hakap2dAfGjLif+xmWxAZWtZwFvNjLP7dtaVlTzbVFqh4oHTP6369yu
+OE8ePkFNYhrmYH2fJuGfsw==
+-----END PRIVATE KEY-----

+ 17 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer2.peerOrg1/tls_config/peer2Signer-peer2-peerOrg0-tls.crt

@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICsjCCAligAwIBAwICA+gwCgYIKoZIzj0EAwIwVTERMA8GA1UEAwwIcGVlck9y
+ZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEXMBUG
+A1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTM4WhcNMTgwNDI3MTg0
+OTM4WjBSMQ4wDAYDVQQDDAVwZWVyMjELMAkGA1UEBhMCVVMxDDAKBgNVBAcMA1JU
+UDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBAOFB3AUAGYwDRjpRhVykF8g5Y0bvr2n1
+xGgTiDZeGGTBwtKbxB0lXknLyGavIccTx/ET+deWXT2eKSOu+LvDz37IFuLk/Yow
+dWXeqC5d4w8LXnI/x5eirfijK7/jNcMj3ubqSDytDfmM0hcNdJZYMag9O7XoL9ub
+eM5Z04WuoKFR1AAeZZiJHbxA5mETyzOtoZbkTMQkJ8Fq18PgC8e+dauPX1wLAq4V
+EdBRis4kDzyImwVeaf+gCWZMdrU5OnP8HFIRfCwatUpMLPFMO3v4rmkjB5vPTsrl
+GgGsJhOJizSEZErOEbThCkjRRTfblZ5aYAzZvGYbcFhvh+6Vvdh/oJcCAwEAAaNQ
+ME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUAmYDLIKztguyZZ7X6QQy00O3VVsw
+HwYDVR0jBBgwFoAUyONbVSoI+V88fKQW6kEXQMmOACMwCgYIKoZIzj0EAwIDSAAw
+RQIgTqzafkvDLhH0cND+jdx0YtmnyUova2Hn3xwrHXptdUYCIQCzbnq4rhKnw0QL
+mfxa9yH75r7p59ci77rT2Z72anQuFA==
+-----END CERTIFICATE-----

+ 28 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer2.peerOrg1/tls_config/peer2Signer-peer2-peerOrg0-tls.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDhQdwFABmMA0Y6
+UYVcpBfIOWNG769p9cRoE4g2XhhkwcLSm8QdJV5Jy8hmryHHE8fxE/nXll09nikj
+rvi7w89+yBbi5P2KMHVl3qguXeMPC15yP8eXoq34oyu/4zXDI97m6kg8rQ35jNIX
+DXSWWDGoPTu16C/bm3jOWdOFrqChUdQAHmWYiR28QOZhE8szraGW5EzEJCfBatfD
+4AvHvnWrj19cCwKuFRHQUYrOJA88iJsFXmn/oAlmTHa1OTpz/BxSEXwsGrVKTCzx
+TDt7+K5pIwebz07K5RoBrCYTiYs0hGRKzhG04QpI0UU325WeWmAM2bxmG3BYb4fu
+lb3Yf6CXAgMBAAECggEAbSKDfsi1l+heNhMZEfFOtGtZdhzaV/QC3InaDL06BFb8
+FR3yvkxEimx5A4cGTnV/AYY0Hgdz1U6zj95OFGqiNUKsE/HuBO3Fcz2VLiG+yKMx
+dxj/kq/2qegkYiuq+IiAjlAj/4G4q5dWkmSqf8zrAh/othFwXm3M8e0DVlls6bra
+0rVZW1b6+FW3eRsB4/nOMIjqtJNVpFNn989UfDfGdqYI01FSxQUxwJfDtIwRfS7U
+dZKuCNQW7EcDJ/SCVDWQaCip1yvS+05Iv5wInS3/mZghp+TgktvAXYpnLGAR6rz2
+g79rLHFcuEx0xjZh/mFHdZFyNfG+vXyRRuB9diGNAQKBgQDwj+kYoR0pCCj7f79W
+GJyvIblSLZUeQ8O3cXqbYxKJlACcHffN10+C9CSvRdcLyAJeyFTdobBAIQaOqjDV
+PZURg8BJKbdA5/JosaOY/WWxUQPWpjXmQh4oHQHMzM/yENSkyp0HBILo6a9JLqQD
+cBcLU2Vau6QGgz5j55sAIcs68QKBgQDvtoL9f0F2ziVVxBdqmbbSxPYgmUiV2GVN
+QJmVtccvHr7RvnoZYBecncqncj5jSrnSbFKY+wqOQBCy1spkf0nJW16p4klQmAEc
+b923YfKJ9xmeONHoDXulxeBtFmuyNQvHfjVvuqau73lXSCS8Qr9hsr1EpVbNnsq5
+kx+ZmtlEBwKBgF4iIjd2DEAbJlZLxeZ92Qoa6zbCCYD/SV3GNREK8p0NYjO08lwE
+7eMzgAtqC91bVbobMEJN2/csNTGsXVGEOInTAXJftYrbeJsJMBhUx+9b4WGkRqEk
+rEJMH4ExgAmcFmmps0qktElJ8EJ10s5ZlVrkNlwL4wJ9ZvOXFKs3jhwxAoGAZq9+
+SW0789K295h6l3WldYBeFvTSvS3np0InCJTH8I1xHJRF5ZzeQH7vku9DfnFCTLuO
+Xm4bxXf4L0QHiyljyFfVo1yGH3od77qT9byFk0hAtyCL+qXb89ViIBjcpYhHtXuB
+FI2WXZXEGvmSkvrc1NMmdMOG/aoqGXjGrpxAuf0CgYEAg1Wcgn6Fm6VyJPulDSLR
+1vwifNINP+yCJOGg0FDfghCJ96nHKtkXQMFonxTnwX4JlIHOEC7EUAPVLUGWN0ap
+KguNLFFBgKuBv54CW0qqEBViTF39MTr8JvHODKU2djYOnVCMF0/K+MG5F8vAR0co
+4R7cwp9rD5K35quRhEsnH9M=
+-----END PRIVATE KEY-----

+ 17 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer3.peerOrg1/tls_config/peer3Signer-peer3-peerOrg0-tls.crt

@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICsTCCAligAwIBAwICA+gwCgYIKoZIzj0EAwIwVTERMA8GA1UEAwwIcGVlck9y
+ZzAxCzAJBgNVBAYTAlVTMQwwCgYDVQQHDANSVFAxDDAKBgNVBAoMA0lCTTEXMBUG
+A1UECAwOTm9ydGggQ2Fyb2xpbmEwHhcNMTcwNDI3MTg0OTM4WhcNMTgwNDI3MTg0
+OTM4WjBSMQ4wDAYDVQQDDAVwZWVyMzELMAkGA1UEBhMCVVMxDDAKBgNVBAcMA1JU
+UDEMMAoGA1UECgwDSUJNMRcwFQYDVQQIDA5Ob3J0aCBDYXJvbGluYTCCASIwDQYJ
+KoZIhvcNAQEBBQADggEPADCCAQoCggEBANDbchSLf9NmBuXUwHBb0MIWdnP1qi9D
+E1ILcpQDD3eHCqhkHGZKBvqJiMHxUmCvhNg/LLOov+d8VbJvdWQAww1erchXDZY6
+9oLAkwMPS4c0iiRjbg9hrTObDPnZ3mVmW74eg0AOZOuG0SDmxktqtGagJ+NTjVeI
+MwXPoYXS9QcGs7QKDmpzL96C4HTJBqHr+bumoEDsPWdBJdWNjU2cxHZWjfFnBWeM
+QYr30RjsSlaBhJP+EeLiCgFXQcBQoSZUtFiBaqJwXv3AznkxqzuCJGutGWjO/yh2
+7JcrVyszVX2uzmZJ3XAPODptnhbGx0qLvpoF9TYbNocmwqvlPGGg2+cCAwEAAaNQ
+ME4wDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUa3h+UQJF+R5Tdw8W7FFiOMMu2s4w
+HwYDVR0jBBgwFoAUyONbVSoI+V88fKQW6kEXQMmOACMwCgYIKoZIzj0EAwIDRwAw
+RAIgKbtb2Mu0IaBZQTE2cwApuojErMh9u+DUs6u8HcHZ90UCID/zNOdsQmF/TRND
+m99VeZV/+cSOxBByv+5DAOoRyoag
+-----END CERTIFICATE-----

+ 28 - 0
crypto-config/peerOrganizations/peerOrg1/peers/peer3.peerOrg1/tls_config/peer3Signer-peer3-peerOrg0-tls.key

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDQ23IUi3/TZgbl
+1MBwW9DCFnZz9aovQxNSC3KUAw93hwqoZBxmSgb6iYjB8VJgr4TYPyyzqL/nfFWy
+b3VkAMMNXq3IVw2WOvaCwJMDD0uHNIokY24PYa0zmwz52d5lZlu+HoNADmTrhtEg
+5sZLarRmoCfjU41XiDMFz6GF0vUHBrO0Cg5qcy/eguB0yQah6/m7pqBA7D1nQSXV
+jY1NnMR2Vo3xZwVnjEGK99EY7EpWgYST/hHi4goBV0HAUKEmVLRYgWqicF79wM55
+Mas7giRrrRlozv8oduyXK1crM1V9rs5mSd1wDzg6bZ4WxsdKi76aBfU2GzaHJsKr
+5TxhoNvnAgMBAAECggEAL4Gq6kds1O4BJagF+ci4rF0lpmy7wDJWo7Pc5RPpIbwC
+zZiv6Qhvm+9KvyqgHUPvSKzeAyOgOwxKBeNaZVvTAiiGCOrcOU7CIa2iAvEoseFe
+hrZjI3aJShK7md1Xu+LTfWQ9YIWlqPkqenxjoGXuEOXfDNNFdCKT0H+Q8vqwJ1+S
+quyhuiSIXxtWteRgTPMhTAB88qIDH4gEekUPdv2TSKVZgJHolRQzRW779qLpOZdD
+KYX8OdJvYC5NMmVYVPcTiskEvj5EIJ7Y7YpjfXp+740Pq+dhKN/Q0uymzb1vNDTB
+yLRc6T2zYdOOY4p2uNcyWNgChRsjdGviMlnt4NuPIQKBgQDsVPsx0gP2V20xT/u9
+46oN0uI+kk8kAdkrJYLP8HDVRj1ofk+FR2/Dp4/HCboi2snEt+OlpbvA60h/fKv5
+WUU3FZtKHwof9wq+Z71MZhKpVjyxvGTp3aWoPcXXuFcIGhTIaSAuTro58SIPNibH
+zRvYPP2ddZ1xF9CerF9m7HoydwKBgQDiPR5ozQOgTEWMgGblA187WZTHSyFe9IZS
+8+I//8iMdKjiB3pUTL9+QVbOzSZxzM0MYxB73qbOTgfMF6uvGCJsLSpP/hWLEiG6
+m6QydeswYTllRRUtln/5epEa6Q8nJpGpBdUugpt6dMu3skKSVRB/9ZNRmhkXuA8V
+sFo6LocOEQKBgQCtxDJKSGwHZfLwbingThQMRAF8FmHATOeb1OHg+J5OAm5GdZEM
+oyDnUD3kEB/fXtU6Iids9XYefCD7M/TSyzOcM/PRRQ9Rv3gT1f0Wvnp8Ld9EpAvi
+9MjH8luUqIK9f0fGr50sz1AYKFdtrdhH0mTl0rp7Wy5fKC6JbJ5c9AVJMwKBgQCG
+Kxznpf2qiNEOG+/pjPBjMCMNdb7ao0Ut2Liqn7R9p4moUir353QBGhqzFfLgtkY8
+PFvAOjDOVHRHUxpcAoIXiUl4mwSHrz8VfcwIqOnLjT0Ok8OVf5VxjICVZvW3kCX+
+CRl+NbKjErTlwe+8/HmGiUrOsAaFjIBVqno32vP5IQKBgQC0Ds1IZHqbvQl8Wyn+
+oNO5jm58LK6JkrvqNIo8nZfuphKyJZ0xRjIUX9V5/HW4LJwnxseaR3faAuR45KlW
+0dgI/RGAnRWhwTE7PoCUwhuUeM8NFmEgitpav7oCIn24p7qUvccdLZc4PM82ylkF
+ms4SZrKaeMC4U6eB1ECePoSuEg==
+-----END PRIVATE KEY-----

+ 5 - 4
docker-compose-cli.yaml

@@ -18,11 +18,11 @@ services:
       - CORE_PEER_ADDRESS=peer0:7051
       - CORE_PEER_LOCALMSPID=Org1MSP
       - CORE_PEER_TLS_ENABLED=true
-      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/signcerts/peer0.peerOrg1-cert.pem
-      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/keystore/ffe9eb62cc1265fe251e0e9b09cf177e14c23a43b4548078dcc3fe988ae68f92_sk
-      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1/cacerts/peerOrg1-cert.pem
+      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/config/peers/peer0.peerOrg1/tls_config/peer0Signer-peer0-peerOrg0-tls.crt
+      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/config/peers/peer0.peerOrg1/tls_config/peer0Signer-peer0-peerOrg0-tls.key
+      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/config/msp/cacerts/peerOrg0.pem
       #- CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer0
-      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1
+      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/config/peers/peer0.peerOrg1
 
     working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
     command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; '
@@ -39,6 +39,7 @@ services:
       #- ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
       - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config/
       - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
+      - ./crypto-config/peerOrganizations/peerOrg1/:/etc/hyperledger/config
     #depends_on:
       #- orderer0
       #- peer0

+ 5 - 3
docker-compose-orderer0.yaml

@@ -14,13 +14,15 @@ services:
       - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/orderer.ordererOrg1
       # enabled TLS
       - ORDERER_GENERAL_TLS_ENABLED=true
-      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/orderer.ordererOrg1/keystore/03ffdebe8574e21b4a6e5ed25493200db423d4e91477eccaa25268e2315fee33_sk
-      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/orderer.ordererOrg1/signcerts/orderer.ordererOrg1-cert.pem
-      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/orderer.ordererOrg1/cacerts/ordererOrg1-cert.pem]
+      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/orderer.ordererOrg1/tls_config/orderer0Signer-orderer0-ordererOrg0-tls.key
+      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/orderer.ordererOrg1/tls_config/orderer0Signer-orderer0-ordererOrg0-tls.crt
+      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/tls/orderer/ordererOrg0.pem, /var/hyperledger/tls/peers/peerOrg0.pem]
     working_dir: /opt/gopath/src/github.com/hyperledger/fabric
     command: orderer
     volumes:
       - ./crypto-config/ordererOrganizations/ordererOrg1/orderers/:/var/hyperledger/orderer
+      - ./crypto-config/ordererOrganizations/ordererOrg1/msp/cacerts:/var/hyperledger/tls/orderer
+      - ./crypto-config/peerOrganizations/peerOrg1/msp/cacerts:/var/hyperledger/tls/peers
     ports:
       - 7050:7050
 

+ 4 - 3
docker-compose-peer0.yaml

@@ -28,9 +28,9 @@ services:
       - CORE_PEER_ADDRESS=peer0:7051
       - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0:7051
       - CORE_PEER_LOCALMSPID=Org1MSP
-      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/signcerts/peer0.peerOrg1-cert.pem
-      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/keystore/ffe9eb62cc1265fe251e0e9b09cf177e14c23a43b4548078dcc3fe988ae68f92_sk
-      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/cacerts/peerOrg1-cert.pem
+      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer0Signer-peer0-peerOrg0-tls.crt
+      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer0Signer-peer0-peerOrg0-tls.key
+      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/peerOrg0.pem
       - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer0
       - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
       - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
@@ -39,6 +39,7 @@ services:
     volumes:
       - /var/run/:/host/var/run/
       - ./crypto-config/peerOrganizations/peerOrg1/peers/peer0.peerOrg1:/etc/hyperledger/fabric/msp/sampleconfig
+      - ./crypto-config/peerOrganizations/peerOrg1/msp/cacerts:/etc/hyperledger/tls
     ports:
       - 7051:7051
       - 7053:7053

+ 4 - 3
docker-compose-peer1.yaml

@@ -29,9 +29,9 @@ services:
       - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1:7051
       - CORE_PEER_GOSSIP_BOOTSTRAP=peer0:7051
       - CORE_PEER_LOCALMSPID=Org1MSP
-      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/signcerts/peer1.peerOrg1-cert.pem
-      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/keystore/4f9a82369bc70c2aadeb54e81a6d455c0f0ef1ab1b69897b409b2d8166caef4b_sk
-      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/cacerts/peerOrg1-cert.pem
+      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer1Signer-peer1-peerOrg0-tls.crt
+      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer1Signer-peer1-peerOrg0-tls.key
+      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/peerOrg0.pem
       - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer1
       - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
       - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984
@@ -41,6 +41,7 @@ services:
     volumes:
       - /var/run/:/host/var/run/
       - ./crypto-config/peerOrganizations/peerOrg1/peers/peer1.peerOrg1:/etc/hyperledger/fabric/msp/sampleconfig
+      - ./crypto-config/peerOrganizations/peerOrg1/msp/cacerts:/etc/hyperledger/tls
     ports:
       - 7051:7051
       - 7053:7053

+ 4 - 3
docker-compose-peer2.yaml

@@ -29,9 +29,9 @@ services:
       - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2:7051
       - CORE_PEER_GOSSIP_BOOTSTRAP=peer0:7051
       - CORE_PEER_LOCALMSPID=Org1MSP
-      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/signcerts/peer2.peerOrg1-cert.pem
-      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/keystore/5d269f46af69a8cde00cafd688f656c88125edfc81097405a8bbb164b967c70b_sk
-      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/cacerts/peerOrg1-cert.pem
+      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer2Signer-peer2-peerOrg0-tls.crt
+      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer2Signer-peer2-peerOrg0-tls.key
+      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/peerOrg0.pem
       - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer2
       - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
       - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984
@@ -42,6 +42,7 @@ services:
     volumes:
       - /var/run/:/host/var/run/
       - ./crypto-config/peerOrganizations/peerOrg1/peers/peer2.peerOrg1:/etc/hyperledger/fabric/msp/sampleconfig
+      - ./crypto-config/peerOrganizations/peerOrg1/msp/cacerts:/etc/hyperledger/tls
     ports:
       - 7051:7051
       - 7053:7053

+ 4 - 3
docker-compose-peer3.yaml

@@ -29,9 +29,9 @@ services:
       - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer3:7051
       - CORE_PEER_GOSSIP_BOOTSTRAP=peer0:7051
       - CORE_PEER_LOCALMSPID=Org1MSP
-      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/signcerts/peer3.peerOrg1-cert.pem
-      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/keystore/5df4cda0972b201d38c644ef149d921802b3e9f48cdef2d455cfaf22c181029d_sk
-      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/cacerts/peerOrg1-cert.pem
+      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer3Signer-peer3-peerOrg0-tls.crt
+      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/msp/sampleconfig/tls_config/peer3Signer-peer3-peerOrg0-tls.key
+      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/tls/peerOrg0.pem
       - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer3
       - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
       - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984
@@ -43,6 +43,7 @@ services:
     volumes:
       - /var/run/:/host/var/run/
       - ./crypto-config/peerOrganizations/peerOrg1/peers/peer3.peerOrg1:/etc/hyperledger/fabric/msp/sampleconfig
+      - ./crypto-config/peerOrganizations/peerOrg1/msp/cacerts:/etc/hyperledger/tls
     ports:
       - 7051:7051
       - 7053:7053