From 71a090d015f3233b05103f0f594194ee97859f33 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Fri, 21 Sep 2018 10:43:33 +0000 Subject: [PATCH] Use fabric ca to bootstrap fabric 1.2 Signed-off-by: Shuo Wang --- hyperledger_fabric/fabric-ca/fabric-1.2/.env | 2 + .../fabric-ca/fabric-1.2/configtx.yaml | 149 +++ .../fabric-ca/fabric-1.2/crypto-config.yaml | 83 ++ .../fabric-ca/fabric-1.2/docker-compose.yml | 282 +++++ .../chaincode_example01.go | 104 ++ .../chaincode_example02.go | 193 +++ .../chaincode_example02_test.go | 112 ++ .../chaincode_example03.go | 100 ++ .../chaincode_example03_test.go | 72 ++ .../chaincode_example04.go | 174 +++ .../chaincode_example04_test.go | 119 ++ .../chaincode_example05.go | 215 ++++ .../chaincode_example05_test.go | 128 ++ .../chaincode/go/enccc_example/README.md | 80 ++ .../go/enccc_example/enccc_example.go | 223 ++++ .../chaincode/go/enccc_example/enccc_test.go | 234 ++++ .../chaincode/go/enccc_example/utils.go | 147 +++ .../chaincode/go/eventsender/eventsender.go | 92 ++ .../invokereturnsvalue/invokereturnsvalue.go | 133 +++ .../invokereturnsvalue_test.go | 97 ++ .../examples/chaincode/go/map/map.go | 200 ++++ .../chaincode/go/map/map_experimental.go | 311 +++++ .../go/marbles02/marbles_chaincode.go | 627 ++++++++++ .../chaincode/go/passthru/passthru.go | 72 ++ .../examples/chaincode/go/sleeper/sleeper.go | 124 ++ .../examples/chaincode/go/utxo/Dockerfile | 40 + .../examples/chaincode/go/utxo/README.md | 79 ++ .../examples/chaincode/go/utxo/chaincode.go | 104 ++ .../chaincode/go/utxo/consensus/consensus.go | 482 ++++++++ .../go/utxo/consensus/consensus_wrap.cxx | 812 +++++++++++++ .../examples/chaincode/go/utxo/store.go | 91 ++ ...ransactions_base64_encoded_on_testnet3.txt | 908 ++++++++++++++ ...for_first_500_transactions_on_testnet3.txt | 908 ++++++++++++++ .../examples/chaincode/go/utxo/util/dah.pb.go | 197 +++ .../examples/chaincode/go/utxo/util/dah.proto | 43 + .../examples/chaincode/go/utxo/util/store.go | 72 ++ .../examples/chaincode/go/utxo/util/util.go | 104 ++ .../examples/chaincode/go/utxo/util/utxo.go | 144 +++ .../chaincode/go/utxo/util/utxo_test.go | 206 ++++ .../fabric-1.2/explorer-artifacts/config.json | 57 + .../explorer-artifacts/fabricexplorer.sql | 115 ++ .../fabric-ca/fabric-1.2/fabric-kafka-4.yaml | 425 +++++++ .../fabric-ca/fabric-1.2/fabric-solo-4.yaml | 394 ++++++ .../fabric-ca/fabric-1.2/kafka/README.md | 8 + .../kafka/channel-artifacts/Org1MSP.json | 130 ++ .../kafka/channel-artifacts/Org1MSPanchors.tx | Bin 0 -> 296 bytes .../kafka/channel-artifacts/Org2MSP.json | 130 ++ .../kafka/channel-artifacts/Org2MSPanchors.tx | Bin 0 -> 296 bytes .../kafka/channel-artifacts/Org3MSP.json | 119 ++ .../channel-artifacts/businesschannel.tx | Bin 0 -> 358 bytes .../channel-artifacts/businesschannel.tx.json | 0 .../channel-artifacts/businesschannel_0.block | Bin 0 -> 15759 bytes .../businesschannel_0.block.json | 797 +++++++++++++ .../channel-artifacts/businesschannel_1.block | Bin 0 -> 17593 bytes .../businesschannel_1.block.json | 793 +++++++++++++ .../channel-artifacts/businesschannel_2.block | Bin 0 -> 17659 bytes .../businesschannel_2.block.json | 805 +++++++++++++ .../channel-artifacts/businesschannel_3.block | Bin 0 -> 5399 bytes .../businesschannel_3.block.json | 104 ++ .../channel-artifacts/businesschannel_4.block | Bin 0 -> 5406 bytes .../businesschannel_4.block.json | 104 ++ .../channel-artifacts/businesschannel_5.block | Bin 0 -> 4860 bytes .../businesschannel_5.block.json | 101 ++ .../channel-artifacts/businesschannel_6.block | Bin 0 -> 4869 bytes .../businesschannel_6.block.json | 101 ++ .../channel-artifacts/businesschannel_7.block | Bin 0 -> 24945 bytes .../businesschannel_7.block.json | 1057 +++++++++++++++++ .../businesschannel_config.block | Bin 0 -> 24945 bytes .../businesschannel_config.block.json | 805 +++++++++++++ .../kafka/channel-artifacts/config_delta.json | 201 ++++ .../kafka/channel-artifacts/config_delta.pb | Bin 0 -> 2967 bytes .../channel-artifacts/config_delta_env.json | 213 ++++ .../channel-artifacts/config_delta_env.pb | Bin 0 -> 5803 bytes .../channel-artifacts/orderer.genesis.block | Bin 0 -> 12728 bytes .../orderer.genesis.block.json | 635 ++++++++++ .../orderer.genesis.updated.block | Bin 0 -> 12728 bytes .../orderer.genesis.updated.block.json | 635 ++++++++++ .../channel-artifacts/original_config.json | 639 ++++++++++ .../channel-artifacts/original_config.pb | Bin 0 -> 12675 bytes .../channel-artifacts/testchainid_0.block | Bin 0 -> 12728 bytes .../testchainid_0.block.json | 635 ++++++++++ .../channel-artifacts/testchainid_1.block | Bin 0 -> 18510 bytes .../testchainid_1.block.json | 820 +++++++++++++ .../testchainid_config.block | Bin 0 -> 12728 bytes .../testchainid_config.block.json | 635 ++++++++++ .../channel-artifacts/updated_config.json | 758 ++++++++++++ .../kafka/channel-artifacts/updated_config.pb | Bin 0 -> 15400 bytes .../fabric-ca/fabric-1.2/kafka/configtx.yaml | 207 ++++ .../fabric-ca/fabric-1.2/logs/.readme | 1 + .../fabric-1.2/scripts/download_images.sh | 56 + .../fabric-1.2/scripts/env_cleanup.sh | 17 + .../fabric-ca/fabric-1.2/scripts/env_setup.sh | 26 + .../fabric-ca/fabric-1.2/scripts/func.sh | 623 ++++++++++ .../scripts/gen_channelArtifacts.sh | 68 ++ .../fabric-1.2/scripts/gen_config.sh | 67 ++ .../fabric-1.2/scripts/gen_cryptoArtifacts.sh | 48 + .../fabric-1.2/scripts/init_chaincode_dev.sh | 67 ++ .../fabric-1.2/scripts/initialize_peer0.sh | 40 + .../fabric-1.2/scripts/test_cc_install.sh | 26 + .../fabric-1.2/scripts/test_cc_instantiate.sh | 22 + .../scripts/test_cc_invoke_query.sh | 40 + .../fabric-1.2/scripts/test_cc_peer0.sh | 32 + .../fabric-1.2/scripts/test_cc_upgrade.sh | 32 + .../fabric-1.2/scripts/test_channel_create.sh | 17 + .../scripts/test_channel_getinfo.sh | 23 + .../fabric-1.2/scripts/test_channel_join.sh | 23 + .../fabric-1.2/scripts/test_channel_list.sh | 23 + .../fabric-1.2/scripts/test_channel_update.sh | 39 + .../fabric-1.2/scripts/test_config_update.sh | 82 ++ .../fabric-1.2/scripts/test_configtxlator.sh | 62 + .../fabric-1.2/scripts/test_fetch_blocks.sh | 23 + .../fabric-ca/fabric-1.2/scripts/test_lscc.sh | 67 ++ .../fabric-ca/fabric-1.2/scripts/test_qscc.sh | 35 + .../fabric-1.2/scripts/test_update_anchors.sh | 19 + .../fabric-ca/fabric-1.2/scripts/variables.sh | 117 ++ .../fabric-ca/fabric-1.2/solo/README.md | 7 + .../solo/channel-artifacts/Org1MSP.json | 130 ++ .../solo/channel-artifacts/Org1MSPanchors.tx | Bin 0 -> 296 bytes .../solo/channel-artifacts/Org2MSP.json | 130 ++ .../solo/channel-artifacts/Org2MSPanchors.tx | Bin 0 -> 296 bytes .../solo/channel-artifacts/Org3MSP.json | 119 ++ .../solo/channel-artifacts/businesschannel.tx | Bin 0 -> 358 bytes .../channel-artifacts/businesschannel.tx.json | 0 .../channel-artifacts/businesschannel_0.block | Bin 0 -> 15678 bytes .../businesschannel_0.block.json | 785 ++++++++++++ .../channel-artifacts/businesschannel_1.block | Bin 0 -> 17509 bytes .../businesschannel_1.block.json | 781 ++++++++++++ .../channel-artifacts/businesschannel_2.block | Bin 0 -> 17573 bytes .../businesschannel_2.block.json | 793 +++++++++++++ .../channel-artifacts/businesschannel_3.block | Bin 0 -> 5396 bytes .../businesschannel_3.block.json | 104 ++ .../channel-artifacts/businesschannel_4.block | Bin 0 -> 5405 bytes .../businesschannel_4.block.json | 104 ++ .../channel-artifacts/businesschannel_5.block | Bin 0 -> 4857 bytes .../businesschannel_5.block.json | 101 ++ .../channel-artifacts/businesschannel_6.block | Bin 0 -> 4865 bytes .../businesschannel_6.block.json | 101 ++ .../channel-artifacts/businesschannel_7.block | Bin 0 -> 24861 bytes .../businesschannel_7.block.json | 1045 ++++++++++++++++ .../businesschannel_config.block | Bin 0 -> 24861 bytes .../businesschannel_config.block.json | 793 +++++++++++++ .../solo/channel-artifacts/config_delta.json | 201 ++++ .../solo/channel-artifacts/config_delta.pb | Bin 0 -> 2967 bytes .../channel-artifacts/config_delta_env.json | 213 ++++ .../channel-artifacts/config_delta_env.pb | Bin 0 -> 5802 bytes .../channel-artifacts/orderer.genesis.block | Bin 0 -> 12647 bytes .../orderer.genesis.block.json | 623 ++++++++++ .../orderer.genesis.updated.block | Bin 0 -> 12647 bytes .../orderer.genesis.updated.block.json | 623 ++++++++++ .../channel-artifacts/original_config.json | 627 ++++++++++ .../solo/channel-artifacts/original_config.pb | Bin 0 -> 12594 bytes .../channel-artifacts/testchainid_0.block | Bin 0 -> 12647 bytes .../testchainid_0.block.json | 623 ++++++++++ .../channel-artifacts/testchainid_1.block | Bin 0 -> 18426 bytes .../testchainid_1.block.json | 808 +++++++++++++ .../testchainid_config.block | Bin 0 -> 12647 bytes .../testchainid_config.block.json | 623 ++++++++++ .../channel-artifacts/updated_config.json | 746 ++++++++++++ .../solo/channel-artifacts/updated_config.pb | Bin 0 -> 15319 bytes .../fabric-ca/fabric-1.2/solo/configtx.yaml | 204 ++++ hyperledger_fabric/fabric-ca/scripts/env.sh | 453 +++++++ .../fabric-ca/scripts/run-fabric.sh | 291 +++++ .../fabric-ca/scripts/setup-fabric.sh | 289 +++++ .../scripts/start-intermediate-ca.sh | 31 + .../fabric-ca/scripts/start-orderer.sh | 49 + .../fabric-ca/scripts/start-peer.sh | 52 + .../fabric-ca/scripts/start-root-ca.sh | 26 + 167 files changed, 32856 insertions(+) create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/.env create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/configtx.yaml create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/crypto-config.yaml create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/docker-compose.yml create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example01/chaincode_example01.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02_test.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03_test.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04_test.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05_test.go create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/README.md create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_example.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_test.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/utils.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/eventsender/eventsender.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map_experimental.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/marbles02/marbles_chaincode.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/passthru/passthru.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/sleeper/sleeper.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/Dockerfile create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/README.md create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/chaincode.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus_wrap.cxx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/store.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/First_500_transactions_base64_encoded_on_testnet3.txt create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/Hashes_for_first_500_transactions_on_testnet3.txt create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.pb.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.proto create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/store.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/util.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo_test.go create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/config.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/fabricexplorer.sql create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/fabric-kafka-4.yaml create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/fabric-solo-4.yaml create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/README.md create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSP.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSPanchors.tx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org2MSP.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org2MSPanchors.tx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org3MSP.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel.tx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel.tx.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_3.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_3.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_4.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_4.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta_env.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta_env.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.updated.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.updated.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/original_config.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/original_config.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/kafka/configtx.yaml create mode 100644 hyperledger_fabric/fabric-ca/fabric-1.2/logs/.readme create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/download_images.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_cleanup.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_setup.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/func.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_channelArtifacts.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_config.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_cryptoArtifacts.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/init_chaincode_dev.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/initialize_peer0.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_install.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_instantiate.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_invoke_query.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_peer0.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_upgrade.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_create.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_getinfo.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_join.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_list.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_update.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_config_update.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_configtxlator.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_fetch_blocks.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_lscc.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_qscc.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_update_anchors.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/scripts/variables.sh create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/README.md create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSP.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSPanchors.tx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org2MSP.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org2MSPanchors.tx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org3MSP.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel.tx create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel.tx.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_0.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_0.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_1.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_1.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_7.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_7.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_config.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_config.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.updated.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.updated.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/original_config.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/original_config.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_0.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_0.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.json create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.pb create mode 100755 hyperledger_fabric/fabric-ca/fabric-1.2/solo/configtx.yaml create mode 100755 hyperledger_fabric/fabric-ca/scripts/env.sh create mode 100755 hyperledger_fabric/fabric-ca/scripts/run-fabric.sh create mode 100755 hyperledger_fabric/fabric-ca/scripts/setup-fabric.sh create mode 100755 hyperledger_fabric/fabric-ca/scripts/start-intermediate-ca.sh create mode 100755 hyperledger_fabric/fabric-ca/scripts/start-orderer.sh create mode 100755 hyperledger_fabric/fabric-ca/scripts/start-peer.sh create mode 100755 hyperledger_fabric/fabric-ca/scripts/start-root-ca.sh diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/.env b/hyperledger_fabric/fabric-ca/fabric-1.2/.env new file mode 100644 index 00000000..604bd19c --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/.env @@ -0,0 +1,2 @@ +COMPOSE_PROJECT_NAME=net + diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/configtx.yaml b/hyperledger_fabric/fabric-ca/fabric-1.2/configtx.yaml new file mode 100644 index 00000000..98f5cb72 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/configtx.yaml @@ -0,0 +1,149 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- +################################################################################ +# +# Section: Organizations +# +# - This section defines the different organizational identities which will +# be referenced later in the configuration. +# +################################################################################ +Organizations: + + # SampleOrg defines an MSP using the sampleconfig. It should never be used + # in production but may be used as a template for other definitions + - &OrdererOrg + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: OrdererMSP + + # ID to load the MSP definition as + ID: OrdererMSP + + # MSPDir is the filesystem path which contains the MSP configuration + MSPDir: crypto-config/ordererOrganizations/example.com/msp + + - &Org1 + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: Org1MSP + + # ID to load the MSP definition as + ID: Org1MSP + + MSPDir: crypto-config/peerOrganizations/org1.example.com/msp + + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: peer0.org1.example.com + Port: 7051 + + - &Org2 + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: Org2MSP + + # ID to load the MSP definition as + ID: Org2MSP + + MSPDir: crypto-config/peerOrganizations/org2.example.com/msp + + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: peer0.org2.example.com + Port: 7051 + +################################################################################ +# +# SECTION: Application +# +# - This section defines the values to encode into a config transaction or +# genesis block for application related parameters +# +################################################################################ +Application: &ApplicationDefaults + + # Organizations is the list of orgs which are defined as participants on + # the application side of the network + Organizations: + +################################################################################ +# +# SECTION: Orderer +# +# - This section defines the values to encode into a config transaction or +# genesis block for orderer related parameters +# +################################################################################ +Orderer: &OrdererDefaults + + # Orderer Type: The orderer implementation to start + # Available types are "solo" and "kafka" + OrdererType: solo + + Addresses: + - orderer.example.com:7050 + + # Batch Timeout: The amount of time to wait before creating a batch + BatchTimeout: 2s + + # Batch Size: Controls the number of messages batched into a block + BatchSize: + + # Max Message Count: The maximum number of messages to permit in a batch + MaxMessageCount: 10 + + # Absolute Max Bytes: The absolute maximum number of bytes allowed for + # the serialized messages in a batch. + AbsoluteMaxBytes: 98 MB + + # Preferred Max Bytes: The preferred maximum number of bytes allowed for + # the serialized messages in a batch. A message larger than the preferred + # max bytes will result in a batch larger than preferred max bytes. + PreferredMaxBytes: 512 KB + + Kafka: + # Brokers: A list of Kafka brokers to which the orderer connects + # NOTE: Use IP:port notation + Brokers: + - 127.0.0.1:9092 + + # Organizations is the list of orgs which are defined as participants on + # the orderer side of the network + Organizations: + +################################################################################ +# +# Profile +# +# - Different configuration profiles may be encoded here to be specified +# as parameters to the configtxgen tool +# +################################################################################ +Profiles: + + TwoOrgsOrdererGenesis: + Orderer: + <<: *OrdererDefaults + Organizations: + - *OrdererOrg + Consortiums: + SampleConsortium: + Organizations: + - *Org1 + - *Org2 + TwoOrgsChannel: + Consortium: SampleConsortium + Application: + <<: *ApplicationDefaults + Organizations: + - *Org1 + - *Org2 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/crypto-config.yaml b/hyperledger_fabric/fabric-ca/fabric-1.2/crypto-config.yaml new file mode 100644 index 00000000..73b444d8 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/crypto-config.yaml @@ -0,0 +1,83 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +# --------------------------------------------------------------------------- +# "OrdererOrgs" - Definition of organizations managing orderer nodes +# --------------------------------------------------------------------------- +OrdererOrgs: + # --------------------------------------------------------------------------- + # Orderer + # --------------------------------------------------------------------------- + - Name: Orderer + Domain: example.com + # --------------------------------------------------------------------------- + # "Specs" - See PeerOrgs below for complete description + # --------------------------------------------------------------------------- + Specs: + - Hostname: orderer +# --------------------------------------------------------------------------- +# "PeerOrgs" - Definition of organizations managing peer nodes +# --------------------------------------------------------------------------- +PeerOrgs: + # --------------------------------------------------------------------------- + # Org1 + # --------------------------------------------------------------------------- + - Name: Org1 + Domain: org1.example.com + EnableNodeOUs: true + # --------------------------------------------------------------------------- + # "Specs" + # --------------------------------------------------------------------------- + # Uncomment this section to enable the explicit definition of hosts in your + # configuration. Most users will want to use Template, below + # + # Specs is an array of Spec entries. Each Spec entry consists of two fields: + # - Hostname: (Required) The desired hostname, sans the domain. + # - CommonName: (Optional) Specifies the template or explicit override for + # the CN. By default, this is the template: + # + # "{{.Hostname}}.{{.Domain}}" + # + # which obtains its values from the Spec.Hostname and + # Org.Domain, respectively. + # --------------------------------------------------------------------------- + # Specs: + # - Hostname: foo # implicitly "foo.org1.example.com" + # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above + # - Hostname: bar + # - Hostname: baz + # --------------------------------------------------------------------------- + # "Template" + # --------------------------------------------------------------------------- + # Allows for the definition of 1 or more hosts that are created sequentially + # from a template. By default, this looks like "peer%d" from 0 to Count-1. + # You may override the number of nodes (Count), the starting index (Start) + # or the template used to construct the name (Hostname). + # + # Note: Template and Specs are not mutually exclusive. You may define both + # sections and the aggregate nodes will be created for you. Take care with + # name collisions + # --------------------------------------------------------------------------- + Template: + Count: 2 + # Start: 5 + # Hostname: {{.Prefix}}{{.Index}} # default + # --------------------------------------------------------------------------- + # "Users" + # --------------------------------------------------------------------------- + # Count: The number of user accounts _in addition_ to Admin + # --------------------------------------------------------------------------- + Users: + Count: 1 + # --------------------------------------------------------------------------- + # Org2: See "Org1" for full specification + # --------------------------------------------------------------------------- + - Name: Org2 + Domain: org2.example.com + EnableNodeOUs: true + Template: + Count: 2 + Users: + Count: 1 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/docker-compose.yml b/hyperledger_fabric/fabric-ca/fabric-1.2/docker-compose.yml new file mode 100644 index 00000000..bd1b66bb --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/docker-compose.yml @@ -0,0 +1,282 @@ +version: '2' + +networks: + fabric-ca: + +services: + + ca.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_ca_orderer + image: "hyperledger/fabric-ca:1.2.0" + command: /bin/bash -c '/scripts/start-root-ca.sh 2>&1 | tee /data/logs/ca.orderer.example.com.log' + environment: + - FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_CSR_CN=ca.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.example.com + - FABRIC_CA_SERVER_DEBUG=true + - BOOTSTRAP_USER_PASS=admin:adminpw + - TARGET=/data/crypto-config/ordererOrganizations/example.com/ca + - TLSTARGET=/data/crypto-config/ordererOrganizations/example.com/tlsca + - TARGET_CERTFILE=/data/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem + - FABRIC_ORGS=orderer org1 org2 + volumes: + - ../scripts:/scripts + - ./:/data + networks: + - fabric-ca + + ca.org1.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_ca_org1 + image: "hyperledger/fabric-ca:1.2.0" + command: /bin/bash -c '/scripts/start-root-ca.sh 2>&1 | tee /data/logs/ca.org1.example.com.log' + environment: + - FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_CSR_CN=ca.org1.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com + - FABRIC_CA_SERVER_DEBUG=true + - BOOTSTRAP_USER_PASS=admin:adminpw + - TARGET=/data/crypto-config/peerOrganizations/org1.example.com/ca + - TLSTARGET=/data/crypto-config/peerOrganizations/org1.example.com/tlsca + - TARGET_CERTFILE=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - FABRIC_ORGS=orderer org1 org2 + volumes: + - ../scripts:/scripts + - ./:/data + networks: + - fabric-ca + + ca.org2.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_ca_org2 + image: "hyperledger/fabric-ca:1.2.0" + command: /bin/bash -c '/scripts/start-root-ca.sh 2>&1 | tee /data/logs/ca.org2.example.com.log' + environment: + - FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_CSR_CN=ca.org2.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.org2.example.com + - FABRIC_CA_SERVER_DEBUG=true + - BOOTSTRAP_USER_PASS=admin:adminpw + - TARGET=/data/crypto-config/peerOrganizations/org2.example.com/ca + - TLSTARGET=/data/crypto-config/peerOrganizations/org2.example.com/tlsca + - TARGET_CERTFILE=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + - FABRIC_ORGS=orderer org1 org2 + volumes: + - ../scripts:/scripts + - ./:/data + networks: + - fabric-ca + + setup: + container_name: ${COMPOSE_PROJECT_NAME}_setup + image: "hyperledger/fabric-ca-tools:1.2.0" + command: /bin/bash -c '/scripts/setup-fabric.sh 2>&1 | tee /data/logs/setup.log; sleep 99999' + environment: + - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} + volumes: + - ../scripts:/scripts + - ./:/data + networks: + - fabric-ca + depends_on: + - ca.example.com + - ca.org1.example.com + - ca.org2.example.com + + orderer.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_orderer + image: "hyperledger/fabric-ca-orderer:1.2.0" + environment: + - FABRIC_CA_CLIENT_HOME=/var/hyperledger/orderer + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem + - ENROLLMENT_URL=https://orderer.example.com:orderer.example.compw@ca.example.com:7054 + - ORDERER_HOME=/var/hyperledger/orderer + - ORDERER_HOST=orderer.example.com + - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 + - ORDERER_GENERAL_GENESISMETHOD=file + - ORDERER_GENERAL_GENESISFILE=/data/genesis.block + - ORDERER_GENERAL_LOCALMSPID=OrdererMSP + - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp + - ORDERER_GENERAL_TLS_ENABLED=true + - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_TLS_ROOTCAS=[/data/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem] + + - ORDERER_GENERAL_LOGLEVEL=debug + - ORDERER_DEBUG_BROADCASTTRACEDIR=data/logs + - ORDERER=orderer + - DOMAIN=example.com + command: /bin/bash -c '/scripts/start-orderer.sh 2>&1 | tee /data/logs/orderer.example.com.log' + volumes: + - ../scripts:/scripts + - ./:/data + networks: + - fabric-ca + depends_on: + - setup + + peer0.org1.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer0_org1 + image: "hyperledger/fabric-ca-peer:1.2.0" + environment: + - FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - ENROLLMENT_URL=https://peer0.org1.example.com:peer0.org1.example.compw@ca.org1.example.com:7054 + - PEER_NAME=peer0.org1.example.com + - PEER_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - PEER_HOST=peer0.org1.example.com + - PEER_NAME_PASS=peer0.org1.example.com:peer0.org1.example.compw + - ORG=org1 + - PEER=peer0 + - DOMAIN=org1.example.com + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/msp + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=net_fabric-ca + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org1:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer0.org1.example.com.log' + volumes: + - ../scripts:/scripts + - ./:/data + - /var/run:/host/var/run + networks: + - fabric-ca + depends_on: + - setup + + peer1.org1.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer1_org1 + image: "hyperledger/fabric-ca-peer:1.2.0" + environment: + - FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - ENROLLMENT_URL=https://peer1.org1.example.com:peer1.org1.example.compw@ca.org1.example.com:7054 + - PEER_NAME=peer1.org1.example.com + - PEER_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - PEER_HOST=peer1.org1.example.com + - PEER_NAME_PASS=peer1.org1.example.com:peer1.org1.example.compw + - CORE_PEER_ID=peer1.org1.example.com + - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/msp + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=net_fabric-ca + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - ORG=org1 + - PEER=peer1 + - DOMAIN=org1.example.com + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer1.org1.example.com.log' + volumes: + - ../scripts:/scripts + - ./:/data + - /var/run:/host/var/run + networks: + - fabric-ca + depends_on: + - setup + + peer0.org2.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer0_org2 + image: "hyperledger/fabric-ca-peer:1.2.0" + environment: + - FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + - ENROLLMENT_URL=https://peer0.org2.example.com:peer0.org2.example.compw@ca.org2.example.com:7054 + - PEER_NAME=peer0.org2.example.com + - PEER_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - PEER_HOST=peer0.org2.example.com + - PEER_NAME_PASS=peer0.org2.example.com:peer0.org2.example.compw + - CORE_PEER_ID=peer0.org2.example.com + - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/msp + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=net_fabric-ca + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - ORG=org2 + - PEER=peer0 + - DOMAIN=org2.example.com + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer0.org2.example.com.log' + volumes: + - ../scripts:/scripts + - ./:/data + - /var/run:/host/var/run + networks: + - fabric-ca + depends_on: + - setup + + peer1.org2.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer1_org2 + image: "hyperledger/fabric-ca-peer:1.2.0" + environment: + - FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + - ENROLLMENT_URL=https://peer1.org2.example.com:peer1.org2.example.compw@ca.org2.example.com:7054 + - PEER_NAME=peer1.org2.example.com + - PEER_HOME=/opt/gopath/src/github.com/hyperledger/fabric/peer + - PEER_HOST=peer1.org2.example.com + - PEER_NAME_PASS=peer1.org2.example.com:peer1.org2.example.compw + - CORE_PEER_ID=peer1.org2.example.com + - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/msp + - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=net_fabric-ca + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - ORG=org2 + - PEER=peer1 + - DOMAIN=org2.example.com + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer1.org2.example.com.log' + volumes: + - ../scripts:/scripts + - ./:/data + - /var/run:/host/var/run + networks: + - fabric-ca + depends_on: + - setup \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example01/chaincode_example01.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example01/chaincode_example01.go new file mode 100755 index 00000000..302f2d98 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example01/chaincode_example01.go @@ -0,0 +1,104 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +var A, B string +var Aval, Bval, X int + +// Init callback representing the invocation of a chaincode +// This chaincode will manage two accounts A and B and will transfer X units from A to B upon invoke +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + B = args[2] + Bval, err = strconv.Atoi(args[3]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + /************ + // Write the state to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval)) + if err != nil { + return nil, err + } + + stub.PutState(B, []byte(strconv.Itoa(Bval)) + err = stub.PutState(B, []byte(strconv.Itoa(Bval)) + if err != nil { + return nil, err + } + ************/ + return shim.Success(nil) +} + +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // Transaction makes payment of X units from A to B + X, err := strconv.Atoi(args[0]) + if err != nil { + fmt.Printf("Error convert %s to integer: %s", args[0], err) + return shim.Error(fmt.Sprintf("Error convert %s to integer: %s", args[0], err)) + } + Aval = Aval - X + Bval = Bval + X + ts, err2 := stub.GetTxTimestamp() + if err2 != nil { + fmt.Printf("Error getting transaction timestamp: %s", err2) + return shim.Error(fmt.Sprintf("Error getting transaction timestamp: %s", err2)) + } + fmt.Printf("Transaction Time: %v,Aval = %d, Bval = %d\n", ts, Aval, Bval) + return shim.Success(nil) +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\"") +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02.go new file mode 100755 index 00000000..eb6f430b --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02.go @@ -0,0 +1,193 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Println("ex02 Init") + _, args := stub.GetFunctionAndParameters() + var A, B string // Entities + var Aval, Bval int // Asset holdings + var err error + + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + B = args[2] + Bval, err = strconv.Atoi(args[3]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + fmt.Println("ex02 Invoke") + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + // Make payment of X units from A to B + return t.invoke(stub, args) + } else if function == "delete" { + // Deletes an entity from its state + return t.delete(stub, args) + } else if function == "query" { + // the old "Query" is now implemtned in invoke + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"delete\" \"query\"") +} + +// Transaction makes payment of X units from A to B +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var A, B string // Entities + var Aval, Bval int // Asset holdings + var X int // Transaction value + var err error + + if len(args) != 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + A = args[0] + B = args[1] + + // Get the state from the ledger + // TODO: will be nice to have a GetAllState call to ledger + Avalbytes, err := stub.GetState(A) + if err != nil { + return shim.Error("Failed to get state") + } + if Avalbytes == nil { + return shim.Error("Entity not found") + } + Aval, _ = strconv.Atoi(string(Avalbytes)) + + Bvalbytes, err := stub.GetState(B) + if err != nil { + return shim.Error("Failed to get state") + } + if Bvalbytes == nil { + return shim.Error("Entity not found") + } + Bval, _ = strconv.Atoi(string(Bvalbytes)) + + // Perform the execution + X, err = strconv.Atoi(args[2]) + if err != nil { + return shim.Error("Invalid transaction amount, expecting a integer value") + } + Aval = Aval - X + Bval = Bval + X + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state back to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Deletes an entity from state +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + A := args[0] + + // Delete the key from the state in ledger + err := stub.DelState(A) + if err != nil { + return shim.Error("Failed to delete state") + } + + return shim.Success(nil) +} + +// query callback representing the query of a chaincode +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var A string // Entities + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the person to query") + } + + A = args[0] + + // Get the state from the ledger + Avalbytes, err := stub.GetState(A) + if err != nil { + jsonResp := "{\"Error\":\"Failed to get state for " + A + "\"}" + return shim.Error(jsonResp) + } + + if Avalbytes == nil { + jsonResp := "{\"Error\":\"Nil amount for " + A + "\"}" + return shim.Error(jsonResp) + } + + jsonResp := "{\"Name\":\"" + A + "\",\"Amount\":\"" + string(Avalbytes) + "\"}" + fmt.Printf("Query Response:%s\n", jsonResp) + return shim.Success(Avalbytes) +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02_test.go new file mode 100755 index 00000000..c6c8ed7f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example02/chaincode_example02_test.go @@ -0,0 +1,112 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkQuery(t *testing.T, stub *shim.MockStub, name string, value string) { + res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)}) + if res.Status != shim.OK { + fmt.Println("Query", name, "failed", string(res.Message)) + t.FailNow() + } + if res.Payload == nil { + fmt.Println("Query", name, "failed to get value") + t.FailNow() + } + if string(res.Payload) != value { + fmt.Println("Query value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample02_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123"), []byte("B"), []byte("234")}) + + checkState(t, stub, "A", "123") + checkState(t, stub, "B", "234") +} + +func TestExample02_Query(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=345 B=456 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("345"), []byte("B"), []byte("456")}) + + // Query A + checkQuery(t, stub, "A", "345") + + // Query B + checkQuery(t, stub, "B", "456") +} + +func TestExample02_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=567 B=678 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("567"), []byte("B"), []byte("678")}) + + // Invoke A->B for 123 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("A"), []byte("B"), []byte("123")}) + checkQuery(t, stub, "A", "444") + checkQuery(t, stub, "B", "801") + + // Invoke B->A for 234 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("B"), []byte("A"), []byte("234")}) + checkQuery(t, stub, "A", "678") + checkQuery(t, stub, "B", "567") + checkQuery(t, stub, "A", "678") + checkQuery(t, stub, "B", "567") +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03.go new file mode 100755 index 00000000..d667a822 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03.go @@ -0,0 +1,100 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// This program is an erroneous chaincode program that attempts to put state in query context - query should return error +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init takes a string and int. These are stored as a key/value pair in the state +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var A string // Entity + var Aval int // Asset holding + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d\n", Aval) + + // Write the state to the ledger - this put is legal within Run + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke is a no-op +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "query" { + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"query\"") +} + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var A string // Entity + var Aval int // Asset holding + var err error + + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d\n", Aval) + + // Write the state to the ledger - this put is illegal within Run + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + jsonResp := "{\"Error\":\"Cannot put state within chaincode query\"}" + return shim.Error(jsonResp) + } + + return shim.Success(nil) +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03_test.go new file mode 100755 index 00000000..812650e0 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example03/chaincode_example03_test.go @@ -0,0 +1,72 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +func checkInit(t *testing.T, scc *SimpleChaincode, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", res.Message) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, scc *SimpleChaincode, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Query failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample03_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex03", scc) + + // Init A=123 B=234 + checkInit(t, scc, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123")}) + + checkState(t, stub, "A", "123") +} + +func TestExample03_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex03", scc) + + // Init A=345 B=456 + checkInit(t, scc, stub, [][]byte{[]byte("init"), []byte("A"), []byte("345")}) + + // Invoke "query" + checkInvoke(t, scc, stub, [][]byte{[]byte("query"), []byte("A"), []byte("345")}) +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04.go new file mode 100755 index 00000000..b874ad73 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04.go @@ -0,0 +1,174 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode is a test for chaincode invoking another chaincode - invokes chaincode_example02 + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +func toChaincodeArgs(args ...string) [][]byte { + bargs := make([][]byte, len(args)) + for i, arg := range args { + bargs[i] = []byte(arg) + } + return bargs +} + +// Init takes two arguments, a string and int. These are stored in the key/value pair in the state +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var event string // Indicates whether event has happened. Initially 0 + var eventVal int // State of event + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // Initialize the chaincode + event = args[0] + eventVal, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for event status") + } + fmt.Printf("eventVal = %d\n", eventVal) + + err = stub.PutState(event, []byte(strconv.Itoa(eventVal))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke invokes another chaincode - chaincode_example02, upon receipt of an event and changes event state +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var event string // Event entity + var eventVal int // State of event + var err error + + if len(args) != 3 && len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 3 or 4") + } + + chainCodeToCall := args[0] + event = args[1] + eventVal, err = strconv.Atoi(args[2]) + if err != nil { + return shim.Error("Expected integer value for event state change") + } + channelID := "" + if len(args) == 4 { + channelID = args[3] + } + + if eventVal != 1 { + fmt.Printf("Unexpected event. Doing nothing\n") + return shim.Success(nil) + } + + f := "invoke" + invokeArgs := toChaincodeArgs(f, "a", "b", "10") + response := stub.InvokeChaincode(chainCodeToCall, invokeArgs, channelID) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to invoke chaincode. Got error: %s", string(response.Payload)) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + fmt.Printf("Invoke chaincode successful. Got response %s", string(response.Payload)) + + // Write the event state back to the ledger + err = stub.PutState(event, []byte(strconv.Itoa(eventVal))) + if err != nil { + return shim.Error(err.Error()) + } + + return response +} + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var event string // Event entity + var err error + + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting entity to query") + } + + event = args[0] + var jsonResp string + + // Get the state from the ledger + eventValbytes, err := stub.GetState(event) + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + event + "\"}" + return shim.Error(jsonResp) + } + + if eventValbytes == nil { + jsonResp = "{\"Error\":\"Nil value for " + event + "\"}" + return shim.Error(jsonResp) + } + + if len(args) > 3 { + chainCodeToCall := args[1] + queryKey := args[2] + channel := args[3] + f := "query" + invokeArgs := toChaincodeArgs(f, queryKey) + response := stub.InvokeChaincode(chainCodeToCall, invokeArgs, channel) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to invoke chaincode. Got error: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + jsonResp = string(response.Payload) + } else { + jsonResp = "{\"Name\":\"" + event + "\",\"Amount\":\"" + string(eventValbytes) + "\"}" + } + fmt.Printf("Query Response: %s\n", jsonResp) + + return shim.Success([]byte(jsonResp)) +} + +// Invoke is called by fabric to execute a transaction +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } else if function == "query" { + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"query\"") +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04_test.go new file mode 100755 index 00000000..9d252e2d --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example04/chaincode_example04_test.go @@ -0,0 +1,119 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" + ex02 "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02" +) + +// this is the response to any successful Invoke() on chaincode_example04 +var eventResponse = "{\"Name\":\"Event\",\"Amount\":\"1\"}" + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkQuery(t *testing.T, stub *shim.MockStub, name string, value string) { + res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)}) + if res.Status != shim.OK { + fmt.Println("Query", name, "failed", string(res.Message)) + t.FailNow() + } + if res.Payload == nil { + fmt.Println("Query", name, "failed to get value") + t.FailNow() + } + if string(res.Payload) != value { + fmt.Println("Query value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample04_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex04", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("Event"), []byte("123")}) + + checkState(t, stub, "Event", "123") +} + +func TestExample04_Query(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex04", scc) + + // Init A=345 B=456 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("Event"), []byte("1")}) + + // Query A + checkQuery(t, stub, "Event", eventResponse) +} + +func TestExample04_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex04", scc) + + chaincodeToInvoke := "ex02" + + ccEx2 := new(ex02.SimpleChaincode) + stubEx2 := shim.NewMockStub(chaincodeToInvoke, ccEx2) + checkInit(t, stubEx2, [][]byte{[]byte("init"), []byte("a"), []byte("111"), []byte("b"), []byte("222")}) + stub.MockPeerChaincode(chaincodeToInvoke, stubEx2) + + // Init A=567 B=678 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("Event"), []byte("1")}) + + // Invoke A->B for 10 via Example04's chaincode + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeToInvoke), []byte("Event"), []byte("1")}) + checkQuery(t, stub, "Event", eventResponse) + checkQuery(t, stubEx2, "a", "101") + checkQuery(t, stubEx2, "b", "232") + + // Invoke A->B for 10 via Example04's chaincode + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeToInvoke), []byte("Event"), []byte("1")}) + checkQuery(t, stub, "Event", eventResponse) + checkQuery(t, stubEx2, "a", "91") + checkQuery(t, stubEx2, "b", "242") +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05.go new file mode 100755 index 00000000..35ef5074 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05.go @@ -0,0 +1,215 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode is a test for chaincode querying another chaincode - invokes chaincode_example02 and computes the sum of a and b and stores it as state + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +func toChaincodeArgs(args ...string) [][]byte { + bargs := make([][]byte, len(args)) + for i, arg := range args { + bargs[i] = []byte(arg) + } + return bargs +} + +// Init takes two arguments, a string and int. The string will be a key with +// the int as a value. +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + var sum string // Sum of asset holdings across accounts. Initially 0 + var sumVal int // Sum of holdings + var err error + _, args := stub.GetFunctionAndParameters() + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // Initialize the chaincode + sum = args[0] + sumVal, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for sum") + } + fmt.Printf("sumVal = %d\n", sumVal) + + // Write the state to the ledger + err = stub.PutState(sum, []byte(strconv.Itoa(sumVal))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke queries another chaincode and updates its own state +func (t *SimpleChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var sum, channelName string // Sum entity + var Aval, Bval, sumVal int // value of sum entity - to be computed + var err error + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting atleast 2") + } + + chaincodeName := args[0] // Expecting name of the chaincode you would like to call, this name would be given during chaincode install time + sum = args[1] + + if len(args) > 2 { + channelName = args[2] + } else { + channelName = "" + } + + // Query chaincode_example02 + f := "query" + queryArgs := toChaincodeArgs(f, "a") + + // if chaincode being invoked is on the same channel, + // then channel defaults to the current channel and args[2] can be "". + // If the chaincode being called is on a different channel, + // then you must specify the channel name in args[2] + + response := stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Aval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + queryArgs = toChaincodeArgs(f, "b") + response = stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Bval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + // Compute sum + sumVal = Aval + Bval + + // Write sumVal back to the ledger + err = stub.PutState(sum, []byte(strconv.Itoa(sumVal))) + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Printf("Invoke chaincode successful. Got sum %d\n", sumVal) + return shim.Success([]byte(strconv.Itoa(sumVal))) +} + +func (t *SimpleChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var sum, channelName string // Sum entity + var Aval, Bval, sumVal int // value of sum entity - to be computed + var err error + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting atleast 2") + } + + chaincodeName := args[0] // Expecting name of the chaincode you would like to call, this name would be given during chaincode install time + sum = args[1] + + if len(args) > 2 { + channelName = args[2] + } else { + channelName = "" + } + + // Query chaincode_example02 + f := "query" + queryArgs := toChaincodeArgs(f, "a") + + // if chaincode being invoked is on the same channel, + // then channel defaults to the current channel and args[2] can be "". + // If the chaincode being called is on a different channel, + // then you must specify the channel name in args[2] + response := stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Aval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + queryArgs = toChaincodeArgs(f, "b") + response = stub.InvokeChaincode(chaincodeName, queryArgs, channelName) + if response.Status != shim.OK { + errStr := fmt.Sprintf("Failed to query chaincode. Got error: %s", response.Payload) + fmt.Printf(errStr) + return shim.Error(errStr) + } + Bval, err = strconv.Atoi(string(response.Payload)) + if err != nil { + errStr := fmt.Sprintf("Error retrieving state from ledger for queried chaincode: %s", err.Error()) + fmt.Printf(errStr) + return shim.Error(errStr) + } + + // Compute sum + sumVal = Aval + Bval + + fmt.Printf("Query chaincode successful. Got sum %d\n", sumVal) + jsonResp := "{\"Name\":\"" + sum + "\",\"Value\":\"" + strconv.Itoa(sumVal) + "\"}" + fmt.Printf("Query Response:%s\n", jsonResp) + return shim.Success([]byte(strconv.Itoa(sumVal))) +} + +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } else if function == "query" { + return t.query(stub, args) + } + + return shim.Success([]byte("Invalid invoke function name. Expecting \"invoke\" \"query\"")) +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05_test.go new file mode 100755 index 00000000..1f6d3047 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/chaincode_example05/chaincode_example05_test.go @@ -0,0 +1,128 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" + ex02 "github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02" +) + +var chaincodeName = "ex02" + +// chaincode_example05 looks like it wanted to return a JSON response to Query() +// it doesn't actually do this though, it just returns the sum value +func jsonResponse(name string, value string) string { + return fmt.Sprintf("jsonResponse = \"{\"Name\":\"%v\",\"Value\":\"%v\"}", name, value) +} + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, expect string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != expect { + fmt.Println("State value", name, "was not", expect, "as expected") + t.FailNow() + } +} + +func checkQuery(t *testing.T, stub *shim.MockStub, args [][]byte, expect string) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Query", args, "failed", string(res.Message)) + t.FailNow() + } + if res.Payload == nil { + fmt.Println("Query", args, "failed to get result") + t.FailNow() + } + if string(res.Payload) != expect { + fmt.Println("Query result ", string(res.Payload), "was not", expect, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } +} + +func TestExample05_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex05", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("sumStoreName"), []byte("432")}) + + checkState(t, stub, "sumStoreName", "432") +} + +func TestExample05_Query(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex05", scc) + + ccEx2 := new(ex02.SimpleChaincode) + stubEx2 := shim.NewMockStub(chaincodeName, ccEx2) + checkInit(t, stubEx2, [][]byte{[]byte("init"), []byte("a"), []byte("111"), []byte("b"), []byte("222")}) + stub.MockPeerChaincode(chaincodeName, stubEx2) + + checkInit(t, stub, [][]byte{[]byte("init"), []byte("sumStoreName"), []byte("0")}) + + // a + b = 111 + 222 = 333 + checkQuery(t, stub, [][]byte{[]byte("query"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}, "333") // example05 doesn't return JSON? +} + +func TestExample05_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex05", scc) + + ccEx2 := new(ex02.SimpleChaincode) + stubEx2 := shim.NewMockStub(chaincodeName, ccEx2) + checkInit(t, stubEx2, [][]byte{[]byte("init"), []byte("a"), []byte("222"), []byte("b"), []byte("333")}) + stub.MockPeerChaincode(chaincodeName, stubEx2) + + checkInit(t, stub, [][]byte{[]byte("init"), []byte("sumStoreName"), []byte("0")}) + + // a + b = 222 + 333 = 555 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}) + checkQuery(t, stub, [][]byte{[]byte("query"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}, "555") // example05 doesn't return JSON? + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("a")}, "222") + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("b")}, "333") + + // update A-=10 and B+=10 + checkInvoke(t, stubEx2, [][]byte{[]byte("invoke"), []byte("a"), []byte("b"), []byte("10")}) + + // a + b = 212 + 343 = 555 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}) + checkQuery(t, stub, [][]byte{[]byte("query"), []byte(chaincodeName), []byte("sumStoreName"), []byte("")}, "555") // example05 doesn't return JSON? + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("a")}, "212") + checkQuery(t, stubEx2, [][]byte{[]byte("query"), []byte("b")}, "343") +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/README.md b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/README.md new file mode 100644 index 00000000..8d4e10b4 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/README.md @@ -0,0 +1,80 @@ +# Using EncCC + +To test `EncCC` you need to first generate an AES 256 bit key as a base64 +encoded string so that it can be passed as JSON to the peer chaincode +invoke's transient parameter. + +Note: Before getting started you must use govendor to add external dependencies. Please issue the following commands inside the "enccc_example" folder: +``` +govendor init +govendor add +external +``` + +Let's generate the encryption and decryption keys. The example will simulate a shared key so the key is used for both encryption and decryption. +``` +ENCKEY=`openssl rand 32 -base64` && DECKEY=$ENCKEY +``` + +At this point, you can invoke the chaincode to encrypt key-value pairs as +follows: + +Note: the following assumes the env is initialized and peer has joined channel "my-ch". +``` +peer chaincode invoke -n enccc -C my-ch -c '{"Args":["ENCRYPT","key1","value1"]}' --transient "{\"ENCKEY\":\"$ENCKEY\"}" +``` + +This call will encrypt using a random IV. This may be undesirable for +instance if the chaincode invocation needs to be endorsed by multiple +peers since it would cause the endorsement of conflicting read/write sets. +It is possible to encrypt deterministically by specifying the IV, as +follows: at first the IV must be created + +``` +IV=`openssl rand 16 -base64` +``` + +Then, the IV may be specified in the transient field + +``` +peer chaincode invoke -n enccc -C my-ch -c '{"Args":["ENCRYPT","key2","value2"]}' --transient "{\"ENCKEY\":\"$ENCKEY\",\"IV\":\"$IV\"}" +``` + +Two such invocations will produce equal KVS writes, which can be endorsed by multiple nodes. + +The value can be retrieved back as follows + +``` +peer chaincode query -n enccc -C my-ch -c '{"Args":["DECRYPT","key1"]}' --transient "{\"DECKEY\":\"$DECKEY\"}" +``` +``` +peer chaincode query -n enccc -C my-ch -c '{"Args":["DECRYPT","key2"]}' --transient "{\"DECKEY\":\"$DECKEY\"}" +``` +Note that in this case we use a chaincode query operation; while the use of the +transient field guarantees that the content will not be written to the ledger, +the chaincode decrypts the message and puts it in the proposal response. An +invocation would persist the result in the ledger for all channel readers to +see whereas a query can be discarded and so the result remains confidential. + +To test signing and verifying, you also need to generate an ECDSA key for the appopriate +curve, as follows. + +``` +On Intel: +SIGKEY=`openssl ecparam -name prime256v1 -genkey | tail -n5 | base64 -w0` && VERKEY=$SIGKEY + +On Mac: +SIGKEY=`openssl ecparam -name prime256v1 -genkey | tail -n5 | base64` && VERKEY=$SIGKEY +``` + +At this point, you can invoke the chaincode to sign and then encrypt key-value +pairs as follows + +``` +peer chaincode invoke -n enccc -C my-ch -c '{"Args":["ENCRYPTSIGN","key3","value3"]}' --transient "{\"ENCKEY\":\"$ENCKEY\",\"SIGKEY\":\"$SIGKEY\"}" +``` + +And similarly to retrieve them using a query + +``` +peer chaincode query -n enccc -C my-ch -c '{"Args":["DECRYPTVERIFY","key3"]}' --transient "{\"DECKEY\":\"$DECKEY\",\"VERKEY\":\"$VERKEY\"}" +``` \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_example.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_example.go new file mode 100755 index 00000000..284695d3 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_example.go @@ -0,0 +1,223 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "fmt" + + "github.com/hyperledger/fabric/bccsp" + "github.com/hyperledger/fabric/bccsp/factory" + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/core/chaincode/shim/ext/entities" + pb "github.com/hyperledger/fabric/protos/peer" +) + +const DECKEY = "DECKEY" +const VERKEY = "VERKEY" +const ENCKEY = "ENCKEY" +const SIGKEY = "SIGKEY" +const IV = "IV" + +// EncCC example simple Chaincode implementation of a chaincode that uses encryption/signatures +type EncCC struct { + bccspInst bccsp.BCCSP +} + +// Init does nothing for this cc +func (t *EncCC) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Encrypter exposes how to write state to the ledger after having +// encrypted it with an AES 256 bit key that has been provided to the chaincode through the +// transient field +func (t *EncCC) Encrypter(stub shim.ChaincodeStubInterface, args []string, encKey, IV []byte) pb.Response { + // create the encrypter entity - we give it an ID, the bccsp instance, the key and (optionally) the IV + ent, err := entities.NewAES256EncrypterEntity("ID", t.bccspInst, encKey, IV) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + if len(args) != 2 { + return shim.Error("Expected 2 parameters to function Encrypter") + } + + key := args[0] + cleartextValue := []byte(args[1]) + + // here, we encrypt cleartextValue and assign it to key + err = encryptAndPutState(stub, ent, key, cleartextValue) + if err != nil { + return shim.Error(fmt.Sprintf("encryptAndPutState failed, err %+v", err)) + } + return shim.Success(nil) +} + +// Decrypter exposes how to read from the ledger and decrypt using an AES 256 +// bit key that has been provided to the chaincode through the transient field. +func (t *EncCC) Decrypter(stub shim.ChaincodeStubInterface, args []string, decKey, IV []byte) pb.Response { + // create the encrypter entity - we give it an ID, the bccsp instance, the key and (optionally) the IV + ent, err := entities.NewAES256EncrypterEntity("ID", t.bccspInst, decKey, IV) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + if len(args) != 1 { + return shim.Error("Expected 1 parameters to function Decrypter") + } + + key := args[0] + + // here we decrypt the state associated to key + cleartextValue, err := getStateAndDecrypt(stub, ent, key) + if err != nil { + return shim.Error(fmt.Sprintf("getStateAndDecrypt failed, err %+v", err)) + } + + // here we return the decrypted value as a result + return shim.Success(cleartextValue) +} + +// EncrypterSigner exposes how to write state to the ledger after having received keys for +// encrypting (AES 256 bit key) and signing (X9.62/SECG curve over a 256 bit prime field) that has been provided to the chaincode through the +// transient field +func (t *EncCC) EncrypterSigner(stub shim.ChaincodeStubInterface, args []string, encKey, sigKey []byte) pb.Response { + // create the encrypter/signer entity - we give it an ID, the bccsp instance and the keys + ent, err := entities.NewAES256EncrypterECDSASignerEntity("ID", t.bccspInst, encKey, sigKey) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + if len(args) != 2 { + return shim.Error("Expected 2 parameters to function EncrypterSigner") + } + + key := args[0] + cleartextValue := []byte(args[1]) + + // here, we sign cleartextValue, encrypt it and assign it to key + err = signEncryptAndPutState(stub, ent, key, cleartextValue) + if err != nil { + return shim.Error(fmt.Sprintf("signEncryptAndPutState failed, err %+v", err)) + } + + return shim.Success(nil) +} + +// DecrypterVerify exposes how to get state to the ledger after having received keys for +// decrypting (AES 256 bit key) and verifying (X9.62/SECG curve over a 256 bit prime field) that has been provided to the chaincode through the +// transient field +func (t *EncCC) DecrypterVerify(stub shim.ChaincodeStubInterface, args []string, decKey, verKey []byte) pb.Response { + // create the decrypter/verify entity - we give it an ID, the bccsp instance and the keys + ent, err := entities.NewAES256EncrypterECDSASignerEntity("ID", t.bccspInst, decKey, verKey) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256DecrypterEntity failed, err %s", err)) + } + + if len(args) != 1 { + return shim.Error("Expected 1 parameters to function DecrypterVerify") + } + key := args[0] + + // here we decrypt the state associated to key and verify it + cleartextValue, err := getStateDecryptAndVerify(stub, ent, key) + if err != nil { + return shim.Error(fmt.Sprintf("getStateDecryptAndVerify failed, err %+v", err)) + } + + // here we return the decrypted and verified value as a result + return shim.Success(cleartextValue) +} + +// RangeDecrypter shows how range queries may be satisfied by using the decrypter +// entity directly to decrypt previously encrypted key-value pairs +func (t *EncCC) RangeDecrypter(stub shim.ChaincodeStubInterface, decKey []byte) pb.Response { + // create the encrypter entity - we give it an ID, the bccsp instance and the key + ent, err := entities.NewAES256EncrypterEntity("ID", t.bccspInst, decKey, nil) + if err != nil { + return shim.Error(fmt.Sprintf("entities.NewAES256EncrypterEntity failed, err %s", err)) + } + + bytes, err := getStateByRangeAndDecrypt(stub, ent, "", "") + if err != nil { + return shim.Error(fmt.Sprintf("getStateByRangeAndDecrypt failed, err %+v", err)) + } + + return shim.Success(bytes) +} + +// Invoke for this chaincode exposes functions to ENCRYPT, DECRYPT transactional +// data. It also supports an example to ENCRYPT and SIGN and DECRYPT and +// VERIFY. The Initialization Vector (IV) can be passed in as a parm to +// ensure peers have deterministic data. +func (t *EncCC) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + // get arguments and transient + f, args := stub.GetFunctionAndParameters() + tMap, err := stub.GetTransient() + if err != nil { + return shim.Error(fmt.Sprintf("Could not retrieve transient, err %s", err)) + } + + switch f { + case "ENCRYPT": + // make sure there's a key in transient - the assumption is that + // it's associated to the string "ENCKEY" + if _, in := tMap[ENCKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient encryption key %s", ENCKEY)) + } + + return t.Encrypter(stub, args[0:], tMap[ENCKEY], tMap[IV]) + case "DECRYPT": + + // make sure there's a key in transient - the assumption is that + // it's associated to the string "DECKEY" + if _, in := tMap[DECKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient decryption key %s", DECKEY)) + } + + return t.Decrypter(stub, args[0:], tMap[DECKEY], tMap[IV]) + case "ENCRYPTSIGN": + // make sure keys are there in the transient map - the assumption is that they + // are associated to the string "ENCKEY" and "SIGKEY" + if _, in := tMap[ENCKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", ENCKEY)) + } else if _, in := tMap[SIGKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", SIGKEY)) + } + + return t.EncrypterSigner(stub, args[0:], tMap[ENCKEY], tMap[SIGKEY]) + case "DECRYPTVERIFY": + // make sure keys are there in the transient map - the assumption is that they + // are associated to the string "DECKEY" and "VERKEY" + if _, in := tMap[DECKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", DECKEY)) + } else if _, in := tMap[VERKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", VERKEY)) + } + + return t.DecrypterVerify(stub, args[0:], tMap[DECKEY], tMap[VERKEY]) + case "RANGEQUERY": + // make sure there's a key in transient - the assumption is that + // it's associated to the string "ENCKEY" + if _, in := tMap[DECKEY]; !in { + return shim.Error(fmt.Sprintf("Expected transient key %s", DECKEY)) + } + + return t.RangeDecrypter(stub, tMap[DECKEY]) + default: + return shim.Error(fmt.Sprintf("Unsupported function %s", f)) + } +} + +func main() { + factory.InitFactories(nil) + + err := shim.Start(&EncCC{factory.GetDefault()}) + if err != nil { + fmt.Printf("Error starting EncCC chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_test.go new file mode 100755 index 00000000..7daf2813 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/enccc_test.go @@ -0,0 +1,234 @@ +package main + +import ( + "bytes" + "encoding/json" + "testing" + + "github.com/hyperledger/fabric/bccsp/factory" + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/stretchr/testify/assert" +) + +const ( + AESKEY1 = "01234567890123456789012345678901" + AESKEY2 = "01234567890123456789012345678902" + ECDSAKEY1 = `-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIH4Uv66F9kZMdOQxwNegkGm8c3AB3nGPOtxNKi6wb/ZooAoGCCqGSM49 +AwEHoUQDQgAEEPE+VLOh+e4NpwIjI/b/fKYHi4weU7r9OTEYPiAJiJBQY6TZnvF5 +oRMvwO4MCYxFtpIRO4UxIgcZBj4NCBxKqQ== +-----END EC PRIVATE KEY-----` + ECDSAKEY2 = `-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIE8Seyc9TXx+yQfnGPuzjkuEfMbkq203IYdfyvMd0r3OoAoGCCqGSM49 +AwEHoUQDQgAE4dcGMMroH2LagI/s5i/Bx4t4ggGDoJPNVkKBDBlIaMYjJFYD1obk +JOWqAZxKKsBxBC5Ssu+fS26VPfdNWxDsFQ== +-----END EC PRIVATE KEY-----` + IV1 = "0123456789012345" +) + +func TestInit(t *testing.T) { + factory.InitFactories(nil) + + scc := new(EncCC) + stub := shim.NewMockStub("enccc", scc) + stub.MockTransactionStart("a") + res := scc.Init(stub) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) +} + +// unfortunately we can't tese this cc though invoke since the +// mock shim doesn't support transient. We test failure scenarios +// and the tests below focus on the functionality by invoking +// functions as opposed to cc +func TestInvoke(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + res := stub.MockInvoke("tx", [][]byte{[]byte("barf")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) + res = stub.MockInvoke("tx", [][]byte{[]byte("ENC")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) + res = stub.MockInvoke("tx", [][]byte{[]byte("SIG")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) + res = stub.MockInvoke("tx", [][]byte{[]byte("RANGE")}) + assert.NotEqual(t, res.Status, int32(shim.OK)) +} + +func TestEnc(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + // success + stub.MockTransactionStart("a") + res := scc.Encrypter(stub, []string{"key", "value"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // fail - bad key + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key", "value"}, []byte("badkey"), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - not enough args + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // success + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{"key"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + assert.True(t, bytes.Equal(res.Payload, []byte("value"))) + + // fail - not enough args + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad kvs key + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{"badkey"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad key + stub.MockTransactionStart("a") + res = scc.Decrypter(stub, []string{"key"}, []byte(AESKEY2), nil) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) +} + +func TestSig(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + // success + stub.MockTransactionStart("a") + res := scc.EncrypterSigner(stub, []string{"key", "value"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // fail - bad key + stub.MockTransactionStart("a") + res = scc.EncrypterSigner(stub, []string{"key", "value"}, []byte(AESKEY1), []byte("barf")) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad args + stub.MockTransactionStart("a") + res = scc.EncrypterSigner(stub, []string{"key"}, []byte(AESKEY1), []byte("barf")) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad signing key + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{"key"}, []byte(AESKEY1), []byte(ECDSAKEY2)) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad args + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // fail - bad kvs key + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{"badkey"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // success + stub.MockTransactionStart("a") + res = scc.EncrypterSigner(stub, []string{"key", "value"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // success + stub.MockTransactionStart("a") + res = scc.DecrypterVerify(stub, []string{"key"}, []byte(AESKEY1), []byte(ECDSAKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + assert.True(t, bytes.Equal(res.Payload, []byte("value"))) +} + +func TestEncCC_RangeDecrypter(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + stub.MockTransactionStart("a") + res := scc.Encrypter(stub, []string{"key1", "value1"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key2", "value2"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key3", "value3"}, []byte(AESKEY1), nil) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + // failed range query + res = scc.RangeDecrypter(stub, nil) + assert.NotEqual(t, res.Status, int32(shim.OK)) + + // success range query + stub.MockTransactionStart("a") + res = scc.RangeDecrypter(stub, []byte(AESKEY1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + keys := []keyValuePair{} + err := json.Unmarshal(res.Payload, &keys) + assert.NoError(t, err) + assert.Equal(t, keys[0].Key, "key1") + assert.Equal(t, string(keys[0].Value), "value1") + assert.Equal(t, keys[1].Key, "key2") + assert.Equal(t, string(keys[1].Value), "value2") + assert.Equal(t, keys[2].Key, "key3") + assert.Equal(t, string(keys[2].Value), "value3") + + _, err = getStateByRangeAndDecrypt(stub, nil, string([]byte{0}), string([]byte{0})) + assert.Error(t, err) +} + +func TestDeterministicEncryption(t *testing.T) { + factory.InitFactories(nil) + + scc := &EncCC{factory.GetDefault()} + stub := shim.NewMockStub("enccc", scc) + + stub.MockTransactionStart("a") + res := scc.Encrypter(stub, []string{"key1", "value1"}, []byte(AESKEY1), []byte(IV1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + c1, err := stub.GetState("key1") + assert.NoError(t, err) + assert.NotNil(t, c1) + + stub.MockTransactionStart("a") + res = scc.Encrypter(stub, []string{"key1", "value1"}, []byte(AESKEY1), []byte(IV1)) + stub.MockTransactionEnd("a") + assert.Equal(t, res.Status, int32(shim.OK)) + + c2, err := stub.GetState("key1") + assert.NoError(t, err) + assert.NotNil(t, c1) + assert.True(t, bytes.Equal(c1, c2)) +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/utils.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/utils.go new file mode 100755 index 00000000..9af6e6fa --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/enccc_example/utils.go @@ -0,0 +1,147 @@ +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/core/chaincode/shim/ext/entities" + "github.com/pkg/errors" +) + +// the functions below show some best practices on how +// to use entities to perform cryptographic operations +// over the ledger state + +// getStateAndDecrypt retrieves the value associated to key, +// decrypts it with the supplied entity and returns the result +// of the decryption +func getStateAndDecrypt(stub shim.ChaincodeStubInterface, ent entities.Encrypter, key string) ([]byte, error) { + // at first we retrieve the ciphertext from the ledger + ciphertext, err := stub.GetState(key) + if err != nil { + return nil, err + } + + // GetState will return a nil slice if the key does not exist. + // Note that the chaincode logic may want to distinguish between + // nil slice (key doesn't exist in state db) and empty slice + // (key found in state db but value is empty). We do not + // distinguish the case here + if len(ciphertext) == 0 { + return nil, errors.New("no ciphertext to decrypt") + } + + return ent.Decrypt(ciphertext) +} + +// encryptAndPutState encrypts the supplied value using the +// supplied entity and puts it to the ledger associated to +// the supplied KVS key +func encryptAndPutState(stub shim.ChaincodeStubInterface, ent entities.Encrypter, key string, value []byte) error { + // at first we use the supplied entity to encrypt the value + ciphertext, err := ent.Encrypt(value) + if err != nil { + return err + } + + return stub.PutState(key, ciphertext) +} + +// getStateDecryptAndVerify retrieves the value associated to key, +// decrypts it with the supplied entity, verifies the signature +// over it and returns the result of the decryption in case of +// success +func getStateDecryptAndVerify(stub shim.ChaincodeStubInterface, ent entities.EncrypterSignerEntity, key string) ([]byte, error) { + // here we retrieve and decrypt the state associated to key + val, err := getStateAndDecrypt(stub, ent, key) + if err != nil { + return nil, err + } + + // we unmarshal a SignedMessage from the decrypted state + msg := &entities.SignedMessage{} + err = msg.FromBytes(val) + if err != nil { + return nil, err + } + + // we verify the signature + ok, err := msg.Verify(ent) + if err != nil { + return nil, err + } else if !ok { + return nil, errors.New("invalid signature") + } + + return msg.Payload, nil +} + +// signEncryptAndPutState signs the supplied value, encrypts +// the supplied value together with its signature using the +// supplied entity and puts it to the ledger associated to +// the supplied KVS key +func signEncryptAndPutState(stub shim.ChaincodeStubInterface, ent entities.EncrypterSignerEntity, key string, value []byte) error { + // here we create a SignedMessage, set its payload + // to value and the ID of the entity and + // sign it with the entity + msg := &entities.SignedMessage{Payload: value, ID: []byte(ent.ID())} + err := msg.Sign(ent) + if err != nil { + return err + } + + // here we serialize the SignedMessage + b, err := msg.ToBytes() + if err != nil { + return err + } + + // here we encrypt the serialized version associated to args[0] + return encryptAndPutState(stub, ent, key, b) +} + +type keyValuePair struct { + Key string `json:"key"` + Value string `json:"value"` +} + +// getStateByRangeAndDecrypt retrieves a range of KVS pairs from the +// ledger and decrypts each value with the supplied entity; it returns +// a json-marshalled slice of keyValuePair +func getStateByRangeAndDecrypt(stub shim.ChaincodeStubInterface, ent entities.Encrypter, startKey, endKey string) ([]byte, error) { + // we call get state by range to go through the entire range + iterator, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return nil, err + } + defer iterator.Close() + + // we decrypt each entry - the assumption is that they have all been encrypted with the same key + keyvalueset := []keyValuePair{} + for iterator.HasNext() { + el, err := iterator.Next() + if err != nil { + return nil, err + } + + v, err := ent.Decrypt(el.Value) + if err != nil { + return nil, err + } + + keyvalueset = append(keyvalueset, keyValuePair{el.Key, string(v)}) + } + + bytes, err := json.Marshal(keyvalueset) + if err != nil { + return nil, err + } + + return bytes, nil +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/eventsender/eventsender.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/eventsender/eventsender.go new file mode 100755 index 00000000..45606252 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/eventsender/eventsender.go @@ -0,0 +1,92 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// EventSender example simple Chaincode implementation +type EventSender struct { +} + +// Init function +func (t *EventSender) Init(stub shim.ChaincodeStubInterface) pb.Response { + err := stub.PutState("noevents", []byte("0")) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success(nil) +} + +// Invoke function +func (t *EventSender) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + b, err := stub.GetState("noevents") + if err != nil { + return shim.Error("Failed to get state") + } + noevts, _ := strconv.Atoi(string(b)) + + tosend := "Event " + string(b) + for _, s := range args { + tosend = tosend + "," + s + } + + err = stub.PutState("noevents", []byte(strconv.Itoa(noevts+1))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.SetEvent("evtsender", []byte(tosend)) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(nil) +} + +// Query function +func (t *EventSender) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + b, err := stub.GetState("noevents") + if err != nil { + return shim.Error("Failed to get state") + } + jsonResp := "{\"NoEvents\":\"" + string(b) + "\"}" + return shim.Success([]byte(jsonResp)) +} + +func (t *EventSender) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "invoke" { + return t.invoke(stub, args) + } else if function == "query" { + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"invoke\" \"query\"") +} + +func main() { + err := shim.Start(new(EventSender)) + if err != nil { + fmt.Printf("Error starting EventSender chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go new file mode 100755 index 00000000..78d4ec61 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue.go @@ -0,0 +1,133 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strconv" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init method of chaincode +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + _, args := stub.GetFunctionAndParameters() + var A, B string // Entities + var Aval, Bval int // Asset holdings + var err error + + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // Initialize the chaincode + A = args[0] + Aval, err = strconv.Atoi(args[1]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + B = args[2] + Bval, err = strconv.Atoi(args[3]) + if err != nil { + return shim.Error("Expecting integer value for asset holding") + } + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success([]byte("OK")) +} + +// Invoke transaction makes payment of X units from A to B +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + _, args := stub.GetFunctionAndParameters() + + var A, B string // Entities + var Aval, Bval int // Asset holdings + var X int // Transaction value + var err error + + if len(args) != 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + A = args[0] + B = args[1] + + // Get the state from the ledger + // TODO: will be nice to have a GetAllState call to ledger + Avalbytes, err := stub.GetState(A) + if err != nil { + return shim.Error("Failed to get state") + } + if Avalbytes == nil { + return shim.Error("Entity not found") + } + Aval, _ = strconv.Atoi(string(Avalbytes)) + + Bvalbytes, err := stub.GetState(B) + if err != nil { + return shim.Error("Failed to get state") + } + if Bvalbytes == nil { + return shim.Error("Entity not found") + } + Bval, _ = strconv.Atoi(string(Bvalbytes)) + + // Perform the execution + X, err = strconv.Atoi(args[2]) + if err != nil { + return shim.Error("Invalid transaction amount, expecting a integer value") + } + Aval = Aval - X + Bval = Bval + X + fmt.Printf("Aval = %d, Bval = %d\n", Aval, Bval) + + // Write the state back to the ledger + err = stub.PutState(A, []byte(strconv.Itoa(Aval))) + if err != nil { + return shim.Error(err.Error()) + } + + err = stub.PutState(B, []byte(strconv.Itoa(Bval))) + if err != nil { + return shim.Error(err.Error()) + } + + return shim.Success([]byte(fmt.Sprintf("{%d,%d}", Aval, Bval))) +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go new file mode 100755 index 00000000..1d9d1e1f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/invokereturnsvalue/invokereturnsvalue_test.go @@ -0,0 +1,97 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package main + +import ( + "fmt" + "testing" + + "github.com/hyperledger/fabric/core/chaincode/shim" +) + +func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte, retval []byte) { + res := stub.MockInit("1", args) + if res.Status != shim.OK { + fmt.Println("Init failed", string(res.Message)) + t.FailNow() + } + if retval != nil { + if res.Payload == nil { + fmt.Printf("Init returned nil, expected %s", string(retval)) + t.FailNow() + } + if string(res.Payload) != string(retval) { + fmt.Printf("Init returned %s, expected %s", string(res.Payload), string(retval)) + t.FailNow() + } + } +} + +func checkState(t *testing.T, stub *shim.MockStub, name string, value string) { + bytes := stub.State[name] + if bytes == nil { + fmt.Println("State", name, "failed to get value") + t.FailNow() + } + if string(bytes) != value { + fmt.Println("State value", name, "was not", value, "as expected") + t.FailNow() + } +} + +func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte, retval []byte) { + res := stub.MockInvoke("1", args) + if res.Status != shim.OK { + fmt.Println("Invoke", args, "failed", string(res.Message)) + t.FailNow() + } + + if retval != nil { + if res.Payload == nil { + fmt.Printf("Invoke returned nil, expected %s", string(retval)) + t.FailNow() + } + if string(res.Payload) != string(retval) { + fmt.Printf("Invoke returned %s, expected %s", string(res.Payload), string(retval)) + t.FailNow() + } + } +} + +func Test_Init(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=123 B=234 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123"), []byte("B"), []byte("234")}, []byte("OK")) + + checkState(t, stub, "A", "123") + checkState(t, stub, "B", "234") +} + +func Test_Invoke(t *testing.T) { + scc := new(SimpleChaincode) + stub := shim.NewMockStub("ex02", scc) + + // Init A=567 B=678 + checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("567"), []byte("B"), []byte("678")}, []byte("OK")) + + // Invoke A->B for 123 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("A"), []byte("B"), []byte("123")}, []byte("{444,801}")) + + // Invoke B->A for 234 + checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("B"), []byte("A"), []byte("234")}, []byte("{567,678}")) +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map.go new file mode 100755 index 00000000..b45b8471 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map.go @@ -0,0 +1,200 @@ +// +build !experimental + +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode implements a simple map that is stored in the state. +// The following operations are available. + +// Invoke operations +// put - requires two arguments, a key and value +// remove - requires a key +// get - requires one argument, a key, and returns a value +// keys - requires no arguments, returns all keys + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init is a no-op +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke has two functions +// put - takes two arguments, a key and value, and stores them in the state +// remove - takes one argument, a key, and removes if from the state +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + switch function { + + case "put": + if len(args) < 2 { + return shim.Error("put operation must include two arguments: [key, value]") + } + key := args[0] + value := args[1] + + if err := stub.PutState(key, []byte(value)); err != nil { + fmt.Printf("Error putting state %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + indexName := "compositeKeyTest" + compositeKeyTestIndex, err := stub.CreateCompositeKey(indexName, []string{key}) + if err != nil { + return shim.Error(err.Error()) + } + + valueByte := []byte{0x00} + if err := stub.PutState(compositeKeyTestIndex, valueByte); err != nil { + fmt.Printf("Error putting state with compositeKey %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state with compositeKey: %s", err)) + } + + return shim.Success(nil) + + case "remove": + if len(args) < 1 { + return shim.Error("remove operation must include one argument: [key]") + } + key := args[0] + + err := stub.DelState(key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation failed. Error updating state: %s", err)) + } + return shim.Success(nil) + + case "get": + if len(args) < 1 { + return shim.Error("get operation must include one argument, a key") + } + key := args[0] + value, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + + case "keys": + if len(args) < 2 { + return shim.Error("put operation must include two arguments, a key and value") + } + startKey := args[0] + endKey := args[1] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 2 { + stime, _ = strconv.Atoi(args[2]) + } + + keysIter, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "query": + query := args[0] + keysIter, err := stub.GetQueryResult(query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "history": + key := args[0] + keysIter, err := stub.GetHistoryForKey(key) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.TxId) + } + + for key, txID := range keys { + fmt.Printf("key %d contains %s\n", key, txID) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + default: + return shim.Success([]byte("Unsupported operation")) + } +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map_experimental.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map_experimental.go new file mode 100755 index 00000000..16c9780f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/map/map_experimental.go @@ -0,0 +1,311 @@ +// +build experimental + +/* +Copyright IBM Corp. All Rights Reserved. + +SPDX-License-Identifier: Apache-2.0 +*/ + +package main + +import ( + "encoding/json" + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// This chaincode implements a simple map that is stored in the state. +// The following operations are available. + +// Invoke operations +// put - requires two arguments, a key and value +// remove - requires a key +// get - requires one argument, a key, and returns a value +// keys - requires no arguments, returns all keys + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init is a no-op +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke has two functions +// put - takes two arguments, a key and value, and stores them in the state +// remove - takes one argument, a key, and removes if from the state +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + switch function { + + case "putPrivate": + if len(args) < 3 { + return shim.Error("put operation on private data must include three arguments: [collection, key, value]") + } + collection := args[0] + key := args[1] + value := args[2] + + if err := stub.PutPrivateData(collection, key, []byte(value)); err != nil { + fmt.Printf("Error putting private data%s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + return shim.Success(nil) + + case "removePrivate": + if len(args) < 2 { + return shim.Error("remove operation on private data must include two arguments: [collection, key]") + } + collection := args[0] + key := args[1] + + err := stub.DelPrivateData(collection, key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation on private data failed. Error updating state: %s", err)) + } + return shim.Success(nil) + + case "getPrivate": + if len(args) < 2 { + return shim.Error("get operation on private data must include two arguments: [collection, key]") + } + collection := args[0] + key := args[1] + value, err := stub.GetPrivateData(collection, key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation on private data failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + + case "keysPrivate": + if len(args) < 3 { + return shim.Error("range query operation on private data must include three arguments, a collection, key and value") + } + collection := args[0] + startKey := args[1] + endKey := args[2] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 3 { + stime, _ = strconv.Atoi(args[3]) + } + + keysIter, err := stub.GetPrivateDataByRange(collection, startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed on private data. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation on private data failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation on private data failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + case "queryPrivate": + collection := args[0] + query := args[1] + keysIter, err := stub.GetPrivateDataQueryResult(collection, query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation on private data failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + case "put": + if len(args) < 2 { + return shim.Error("put operation must include two arguments: [key, value]") + } + key := args[0] + value := args[1] + + if err := stub.PutState(key, []byte(value)); err != nil { + fmt.Printf("Error putting state %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state: %s", err)) + } + + indexName := "compositeKeyTest" + compositeKeyTestIndex, err := stub.CreateCompositeKey(indexName, []string{key}) + if err != nil { + return shim.Error(err.Error()) + } + + valueByte := []byte{0x00} + if err := stub.PutState(compositeKeyTestIndex, valueByte); err != nil { + fmt.Printf("Error putting state with compositeKey %s", err) + return shim.Error(fmt.Sprintf("put operation failed. Error updating state with compositeKey: %s", err)) + } + + return shim.Success(nil) + + case "remove": + if len(args) < 1 { + return shim.Error("remove operation must include one argument: [key]") + } + key := args[0] + + err := stub.DelState(key) + if err != nil { + return shim.Error(fmt.Sprintf("remove operation failed. Error updating state: %s", err)) + } + return shim.Success(nil) + + case "get": + if len(args) < 1 { + return shim.Error("get operation must include one argument, a key") + } + key := args[0] + value, err := stub.GetState(key) + if err != nil { + return shim.Error(fmt.Sprintf("get operation failed. Error accessing state: %s", err)) + } + jsonVal, err := json.Marshal(string(value)) + return shim.Success(jsonVal) + + case "keys": + if len(args) < 2 { + return shim.Error("put operation must include two arguments, a key and value") + } + startKey := args[0] + endKey := args[1] + + //sleep needed to test peer's timeout behavior when using iterators + stime := 0 + if len(args) > 2 { + stime, _ = strconv.Atoi(args[2]) + } + + keysIter, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + //if sleeptime is specied, take a nap + if stime > 0 { + time.Sleep(time.Duration(stime) * time.Millisecond) + } + + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + for key, value := range keys { + fmt.Printf("key %d contains %s\n", key, value) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("keys operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "query": + query := args[0] + keysIter, err := stub.GetQueryResult(query) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.Key) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + case "history": + key := args[0] + keysIter, err := stub.GetHistoryForKey(key) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + defer keysIter.Close() + + var keys []string + for keysIter.HasNext() { + response, iterErr := keysIter.Next() + if iterErr != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error accessing state: %s", err)) + } + keys = append(keys, response.TxId) + } + + for key, txID := range keys { + fmt.Printf("key %d contains %s\n", key, txID) + } + + jsonKeys, err := json.Marshal(keys) + if err != nil { + return shim.Error(fmt.Sprintf("query operation failed. Error marshaling JSON: %s", err)) + } + + return shim.Success(jsonKeys) + + default: + return shim.Success([]byte("Unsupported operation")) + } +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/marbles02/marbles_chaincode.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/marbles02/marbles_chaincode.go new file mode 100755 index 00000000..4ea4654a --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/marbles02/marbles_chaincode.go @@ -0,0 +1,627 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +*/ + +// ====CHAINCODE EXECUTION SAMPLES (CLI) ================== + +// ==== Invoke marbles ==== +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble1","blue","35","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble2","red","50","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["initMarble","marble3","blue","70","tom"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarble","marble2","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' +// peer chaincode invoke -C myc1 -n marbles -c '{"Args":["delete","marble1"]}' + +// ==== Query marbles ==== +// peer chaincode query -C myc1 -n marbles -c '{"Args":["readMarble","marble1"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getMarblesByRange","marble1","marble3"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["getHistoryForMarble","marble1"]}' + +// Rich Query (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarblesByOwner","tom"]}' +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"owner\":\"tom\"}}"]}' + +//The following examples demonstrate creating indexes on CouchDB +//Example hostname:port configurations +// +//Docker or vagrant environments: +// http://couchdb:5984/ +// +//Inside couchdb docker container +// http://127.0.0.1:5984/ + +// Index for chaincodeid, docType, owner. +// Note that docType and owner fields must be prefixed with the "data" wrapper +// chaincodeid must be added for all queries +// +// Definition for use with Fauxton interface +// {"index":{"fields":["chaincodeid","data.docType","data.owner"]},"ddoc":"indexOwnerDoc", "name":"indexOwner","type":"json"} +// +// example curl definition for use with command line +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[\"chaincodeid\",\"data.docType\",\"data.owner\"]},\"name\":\"indexOwner\",\"ddoc\":\"indexOwnerDoc\",\"type\":\"json\"}" http://hostname:port/myc1/_index +// + +// Index for chaincodeid, docType, owner, size (descending order). +// Note that docType, owner and size fields must be prefixed with the "data" wrapper +// chaincodeid must be added for all queries +// +// Definition for use with Fauxton interface +// {"index":{"fields":[{"data.size":"desc"},{"chaincodeid":"desc"},{"data.docType":"desc"},{"data.owner":"desc"}]},"ddoc":"indexSizeSortDoc", "name":"indexSizeSortDesc","type":"json"} +// +// example curl definition for use with command line +// curl -i -X POST -H "Content-Type: application/json" -d "{\"index\":{\"fields\":[{\"data.size\":\"desc\"},{\"chaincodeid\":\"desc\"},{\"data.docType\":\"desc\"},{\"data.owner\":\"desc\"}]},\"ddoc\":\"indexSizeSortDoc\", \"name\":\"indexSizeSortDesc\",\"type\":\"json\"}" http://hostname:port/myc1/_index + +// Rich Query with index design doc and index name specified (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":\"marble\",\"owner\":\"tom\"}, \"use_index\":[\"_design/indexOwnerDoc\", \"indexOwner\"]}"]}' + +// Rich Query with index design doc specified only (Only supported if CouchDB is used as state database): +// peer chaincode query -C myc1 -n marbles -c '{"Args":["queryMarbles","{\"selector\":{\"docType\":{\"$eq\":\"marble\"},\"owner\":{\"$eq\":\"tom\"},\"size\":{\"$gt\":0}},\"fields\":[\"docType\",\"owner\",\"size\"],\"sort\":[{\"size\":\"desc\"}],\"use_index\":\"_design/indexSizeSortDoc\"}"]}' + +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "strconv" + "strings" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +type marble struct { + ObjectType string `json:"docType"` //docType is used to distinguish the various types of objects in state database + Name string `json:"name"` //the fieldtags are needed to keep case from bouncing around + Color string `json:"color"` + Size int `json:"size"` + Owner string `json:"owner"` +} + +// =================================================================================== +// Main +// =================================================================================== +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting Simple chaincode: %s", err) + } +} + +// Init initializes chaincode +// =========================== +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return shim.Success(nil) +} + +// Invoke - Our entry point for Invocations +// ======================================== +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + fmt.Println("invoke is running " + function) + + // Handle different functions + if function == "initMarble" { //create a new marble + return t.initMarble(stub, args) + } else if function == "transferMarble" { //change owner of a specific marble + return t.transferMarble(stub, args) + } else if function == "transferMarblesBasedOnColor" { //transfer all marbles of a certain color + return t.transferMarblesBasedOnColor(stub, args) + } else if function == "delete" { //delete a marble + return t.delete(stub, args) + } else if function == "readMarble" { //read a marble + return t.readMarble(stub, args) + } else if function == "queryMarblesByOwner" { //find marbles for owner X using rich query + return t.queryMarblesByOwner(stub, args) + } else if function == "queryMarbles" { //find marbles based on an ad hoc rich query + return t.queryMarbles(stub, args) + } else if function == "getHistoryForMarble" { //get history of values for a marble + return t.getHistoryForMarble(stub, args) + } else if function == "getMarblesByRange" { //get marbles based on range query + return t.getMarblesByRange(stub, args) + } + + fmt.Println("invoke did not find func: " + function) //error + return shim.Error("Received unknown function invocation") +} + +// ============================================================ +// initMarble - create a new marble, store into chaincode state +// ============================================================ +func (t *SimpleChaincode) initMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var err error + + // 0 1 2 3 + // "asdf", "blue", "35", "bob" + if len(args) != 4 { + return shim.Error("Incorrect number of arguments. Expecting 4") + } + + // ==== Input sanitation ==== + fmt.Println("- start init marble") + if len(args[0]) <= 0 { + return shim.Error("1st argument must be a non-empty string") + } + if len(args[1]) <= 0 { + return shim.Error("2nd argument must be a non-empty string") + } + if len(args[2]) <= 0 { + return shim.Error("3rd argument must be a non-empty string") + } + if len(args[3]) <= 0 { + return shim.Error("4th argument must be a non-empty string") + } + marbleName := args[0] + color := strings.ToLower(args[1]) + owner := strings.ToLower(args[3]) + size, err := strconv.Atoi(args[2]) + if err != nil { + return shim.Error("3rd argument must be a numeric string") + } + + // ==== Check if marble already exists ==== + marbleAsBytes, err := stub.GetState(marbleName) + if err != nil { + return shim.Error("Failed to get marble: " + err.Error()) + } else if marbleAsBytes != nil { + fmt.Println("This marble already exists: " + marbleName) + return shim.Error("This marble already exists: " + marbleName) + } + + // ==== Create marble object and marshal to JSON ==== + objectType := "marble" + marble := &marble{objectType, marbleName, color, size, owner} + marbleJSONasBytes, err := json.Marshal(marble) + if err != nil { + return shim.Error(err.Error()) + } + //Alternatively, build the marble json string manually if you don't want to use struct marshalling + //marbleJSONasString := `{"docType":"Marble", "name": "` + marbleName + `", "color": "` + color + `", "size": ` + strconv.Itoa(size) + `, "owner": "` + owner + `"}` + //marbleJSONasBytes := []byte(str) + + // === Save marble to state === + err = stub.PutState(marbleName, marbleJSONasBytes) + if err != nil { + return shim.Error(err.Error()) + } + + // ==== Index the marble to enable color-based range queries, e.g. return all blue marbles ==== + // An 'index' is a normal key/value entry in state. + // The key is a composite key, with the elements that you want to range query on listed first. + // In our case, the composite key is based on indexName~color~name. + // This will enable very efficient state range queries based on composite keys matching indexName~color~* + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marble.Color, marble.Name}) + if err != nil { + return shim.Error(err.Error()) + } + // Save index entry to state. Only the key name is needed, no need to store a duplicate copy of the marble. + // Note - passing a 'nil' value will effectively delete the key from state, therefore we pass null character as value + value := []byte{0x00} + stub.PutState(colorNameIndexKey, value) + + // ==== Marble saved and indexed. Return success ==== + fmt.Println("- end init marble") + return shim.Success(nil) +} + +// =============================================== +// readMarble - read a marble from chaincode state +// =============================================== +func (t *SimpleChaincode) readMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var name, jsonResp string + var err error + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting name of the marble to query") + } + + name = args[0] + valAsbytes, err := stub.GetState(name) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + name + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + name + "\"}" + return shim.Error(jsonResp) + } + + return shim.Success(valAsbytes) +} + +// ================================================== +// delete - remove a marble key/value pair from state +// ================================================== +func (t *SimpleChaincode) delete(stub shim.ChaincodeStubInterface, args []string) pb.Response { + var jsonResp string + var marbleJSON marble + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + marbleName := args[0] + + // to maintain the color~name index, we need to read the marble first and get its color + valAsbytes, err := stub.GetState(marbleName) //get the marble from chaincode state + if err != nil { + jsonResp = "{\"Error\":\"Failed to get state for " + marbleName + "\"}" + return shim.Error(jsonResp) + } else if valAsbytes == nil { + jsonResp = "{\"Error\":\"Marble does not exist: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = json.Unmarshal([]byte(valAsbytes), &marbleJSON) + if err != nil { + jsonResp = "{\"Error\":\"Failed to decode JSON of: " + marbleName + "\"}" + return shim.Error(jsonResp) + } + + err = stub.DelState(marbleName) //remove the marble from chaincode state + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + + // maintain the index + indexName := "color~name" + colorNameIndexKey, err := stub.CreateCompositeKey(indexName, []string{marbleJSON.Color, marbleJSON.Name}) + if err != nil { + return shim.Error(err.Error()) + } + + // Delete index entry to state. + err = stub.DelState(colorNameIndexKey) + if err != nil { + return shim.Error("Failed to delete state:" + err.Error()) + } + return shim.Success(nil) +} + +// =========================================================== +// transfer a marble by setting a new owner name on the marble +// =========================================================== +func (t *SimpleChaincode) transferMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "name", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + marbleName := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarble ", marbleName, newOwner) + + marbleAsBytes, err := stub.GetState(marbleName) + if err != nil { + return shim.Error("Failed to get marble:" + err.Error()) + } else if marbleAsBytes == nil { + return shim.Error("Marble does not exist") + } + + marbleToTransfer := marble{} + err = json.Unmarshal(marbleAsBytes, &marbleToTransfer) //unmarshal it aka JSON.parse() + if err != nil { + return shim.Error(err.Error()) + } + marbleToTransfer.Owner = newOwner //change the owner + + marbleJSONasBytes, _ := json.Marshal(marbleToTransfer) + err = stub.PutState(marbleName, marbleJSONasBytes) //rewrite the marble + if err != nil { + return shim.Error(err.Error()) + } + + fmt.Println("- end transferMarble (success)") + return shim.Success(nil) +} + +// =========================================================================================== +// getMarblesByRange performs a range query based on the start and end keys provided. + +// Read-only function results are not typically submitted to ordering. If the read-only +// results are submitted to ordering, or if the query is used in an update transaction +// and submitted to ordering, then the committing peers will re-execute to guarantee that +// result sets are stable between endorsement time and commit time. The transaction is +// invalidated by the committing peers if the result set has changed between endorsement +// time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) getMarblesByRange(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + startKey := args[0] + endKey := args[1] + + resultsIterator, err := stub.GetStateByRange(startKey, endKey) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryResults + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getMarblesByRange queryResult:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} + +// ==== Example: GetStateByPartialCompositeKey/RangeQuery ========================================= +// transferMarblesBasedOnColor will transfer marbles of a given color to a certain new owner. +// Uses a GetStateByPartialCompositeKey (range query) against color~name 'index'. +// Committing peers will re-execute range queries to guarantee that result sets are stable +// between endorsement time and commit time. The transaction is invalidated by the +// committing peers if the result set has changed between endorsement time and commit time. +// Therefore, range queries are a safe option for performing update transactions based on query results. +// =========================================================================================== +func (t *SimpleChaincode) transferMarblesBasedOnColor(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 1 + // "color", "bob" + if len(args) < 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + color := args[0] + newOwner := strings.ToLower(args[1]) + fmt.Println("- start transferMarblesBasedOnColor ", color, newOwner) + + // Query the color~name index by color + // This will execute a key range query on all keys starting with 'color' + coloredMarbleResultsIterator, err := stub.GetStateByPartialCompositeKey("color~name", []string{color}) + if err != nil { + return shim.Error(err.Error()) + } + defer coloredMarbleResultsIterator.Close() + + // Iterate through result set and for each marble found, transfer to newOwner + var i int + for i = 0; coloredMarbleResultsIterator.HasNext(); i++ { + // Note that we don't get the value (2nd return variable), we'll just get the marble name from the composite key + responseRange, err := coloredMarbleResultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + + // get the color and name from color~name composite key + objectType, compositeKeyParts, err := stub.SplitCompositeKey(responseRange.Key) + if err != nil { + return shim.Error(err.Error()) + } + returnedColor := compositeKeyParts[0] + returnedMarbleName := compositeKeyParts[1] + fmt.Printf("- found a marble from index:%s color:%s name:%s\n", objectType, returnedColor, returnedMarbleName) + + // Now call the transfer function for the found marble. + // Re-use the same function that is used to transfer individual marbles + response := t.transferMarble(stub, []string{returnedMarbleName, newOwner}) + // if the transfer failed break out of loop and return error + if response.Status != shim.OK { + return shim.Error("Transfer failed: " + response.Message) + } + } + + responsePayload := fmt.Sprintf("Transferred %d %s marbles to %s", i, color, newOwner) + fmt.Println("- end transferMarblesBasedOnColor: " + responsePayload) + return shim.Success([]byte(responsePayload)) +} + +// =======Rich queries ========================================================================= +// Two examples of rich queries are provided below (parameterized query and ad hoc query). +// Rich queries pass a query string to the state database. +// Rich queries are only supported by state database implementations +// that support rich query (e.g. CouchDB). +// The query string is in the syntax of the underlying state database. +// With rich queries there is no guarantee that the result set hasn't changed between +// endorsement time and commit time, aka 'phantom reads'. +// Therefore, rich queries should not be used in update transactions, unless the +// application handles the possibility of result set changes between endorsement and commit time. +// Rich queries can be used for point-in-time queries against a peer. +// ============================================================================================ + +// ===== Example: Parameterized rich query ================================================= +// queryMarblesByOwner queries for marbles based on a passed in owner. +// This is an example of a parameterized query where the query logic is baked into the chaincode, +// and accepting a single query parameter (owner). +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarblesByOwner(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "bob" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + owner := strings.ToLower(args[0]) + + queryString := fmt.Sprintf("{\"selector\":{\"docType\":\"marble\",\"owner\":\"%s\"}}", owner) + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ===== Example: Ad hoc rich query ======================================================== +// queryMarbles uses a query string to perform a query for marbles. +// Query string matching state database syntax is passed in and executed as is. +// Supports ad hoc queries that can be defined at runtime by the client. +// If this is not desired, follow the queryMarblesForOwner example for parameterized queries. +// Only available on state databases that support rich query (e.g. CouchDB) +// ========================================================================================= +func (t *SimpleChaincode) queryMarbles(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + // 0 + // "queryString" + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + queryString := args[0] + + queryResults, err := getQueryResultForQueryString(stub, queryString) + if err != nil { + return shim.Error(err.Error()) + } + return shim.Success(queryResults) +} + +// ========================================================================================= +// getQueryResultForQueryString executes the passed in query string. +// Result set is built and returned as a byte array containing the JSON results. +// ========================================================================================= +func getQueryResultForQueryString(stub shim.ChaincodeStubInterface, queryString string) ([]byte, error) { + + fmt.Printf("- getQueryResultForQueryString queryString:\n%s\n", queryString) + + resultsIterator, err := stub.GetQueryResult(queryString) + if err != nil { + return nil, err + } + defer resultsIterator.Close() + + // buffer is a JSON array containing QueryRecords + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + queryResponse, err := resultsIterator.Next() + if err != nil { + return nil, err + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"Key\":") + buffer.WriteString("\"") + buffer.WriteString(queryResponse.Key) + buffer.WriteString("\"") + + buffer.WriteString(", \"Record\":") + // Record is a JSON object, so we write as-is + buffer.WriteString(string(queryResponse.Value)) + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getQueryResultForQueryString queryResult:\n%s\n", buffer.String()) + + return buffer.Bytes(), nil +} + +func (t *SimpleChaincode) getHistoryForMarble(stub shim.ChaincodeStubInterface, args []string) pb.Response { + + if len(args) < 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + marbleName := args[0] + + fmt.Printf("- start getHistoryForMarble: %s\n", marbleName) + + resultsIterator, err := stub.GetHistoryForKey(marbleName) + if err != nil { + return shim.Error(err.Error()) + } + defer resultsIterator.Close() + + // buffer is a JSON array containing historic values for the marble + var buffer bytes.Buffer + buffer.WriteString("[") + + bArrayMemberAlreadyWritten := false + for resultsIterator.HasNext() { + response, err := resultsIterator.Next() + if err != nil { + return shim.Error(err.Error()) + } + // Add a comma before array members, suppress it for the first array member + if bArrayMemberAlreadyWritten == true { + buffer.WriteString(",") + } + buffer.WriteString("{\"TxId\":") + buffer.WriteString("\"") + buffer.WriteString(response.TxId) + buffer.WriteString("\"") + + buffer.WriteString(", \"Value\":") + // if it was a delete operation on given key, then we need to set the + //corresponding value null. Else, we will write the response.Value + //as-is (as the Value itself a JSON marble) + if response.IsDelete { + buffer.WriteString("null") + } else { + buffer.WriteString(string(response.Value)) + } + + buffer.WriteString(", \"Timestamp\":") + buffer.WriteString("\"") + buffer.WriteString(time.Unix(response.Timestamp.Seconds, int64(response.Timestamp.Nanos)).String()) + buffer.WriteString("\"") + + buffer.WriteString(", \"IsDelete\":") + buffer.WriteString("\"") + buffer.WriteString(strconv.FormatBool(response.IsDelete)) + buffer.WriteString("\"") + + buffer.WriteString("}") + bArrayMemberAlreadyWritten = true + } + buffer.WriteString("]") + + fmt.Printf("- getHistoryForMarble returning:\n%s\n", buffer.String()) + + return shim.Success(buffer.Bytes()) +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/passthru/passthru.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/passthru/passthru.go new file mode 100755 index 00000000..49d978bf --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/passthru/passthru.go @@ -0,0 +1,72 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + "strings" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// PassthruChaincode passes thru invoke and query to another chaincode where +// called ChaincodeID = function +// called chaincode's function = args[0] +// called chaincode's args = args[1:] +type PassthruChaincode struct { +} + +func toChaincodeArgs(args ...string) [][]byte { + bargs := make([][]byte, len(args)) + for i, arg := range args { + bargs[i] = []byte(arg) + } + return bargs +} + +//Init func will return error if function has string "error" anywhere +func (p *PassthruChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + function, _ := stub.GetFunctionAndParameters() + if strings.Index(function, "error") >= 0 { + return shim.Error(function) + } + return shim.Success([]byte(function)) +} + +//helper +func (p *PassthruChaincode) iq(stub shim.ChaincodeStubInterface, function string, args []string) pb.Response { + if function == "" { + return shim.Error("Chaincode ID not provided") + } + chaincodeID := function + + return stub.InvokeChaincode(chaincodeID, toChaincodeArgs(args...), "") +} + +// Invoke passes through the invoke call +func (p *PassthruChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + return p.iq(stub, function, args) +} + +func main() { + err := shim.Start(new(PassthruChaincode)) + if err != nil { + fmt.Printf("Error starting Passthru chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/sleeper/sleeper.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/sleeper/sleeper.go new file mode 100755 index 00000000..088b598c --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/sleeper/sleeper.go @@ -0,0 +1,124 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +// Sleeper chaincode sleeps and works with one state variable +// Init - 1 param, a sleep time in millisecs +// Invoke - 4 or 3 params, "put" or "get", value to set and sleep time in millisecs +// +// Sleeper can be used to test the "chaincode.executetimeout" property + +import ( + "fmt" + "strconv" + "time" + + "github.com/hyperledger/fabric/core/chaincode/shim" + pb "github.com/hyperledger/fabric/protos/peer" +) + +// SleeperChaincode example simple Chaincode implementation +type SleeperChaincode struct { +} + +func (t *SleeperChaincode) sleep(sleepTime string) { + st, _ := strconv.Atoi(sleepTime) + if st >= 0 { + time.Sleep(time.Duration(st) * time.Millisecond) + } +} + +// Init initializes chaincode...all it does is sleep a bi +func (t *SleeperChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + args := stub.GetStringArgs() + + if len(args) != 1 { + return shim.Error("Incorrect number of arguments. Expecting 1") + } + + sleepTime := args[0] + + t.sleep(sleepTime) + + return shim.Success(nil) +} + +// Invoke sets key/value and sleeps a bit +func (t *SleeperChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + if function == "put" { + if len(args) != 3 { + return shim.Error("Incorrect number of arguments. Expecting 3") + } + + // Make payment of X units from A to B + return t.invoke(stub, args) + } else if function == "get" { + if len(args) != 2 { + return shim.Error("Incorrect number of arguments. Expecting 2") + } + + // the old "Query" is now implemtned in invoke + return t.query(stub, args) + } + + return shim.Error("Invalid invoke function name. Expecting \"put\" or \"get\"") +} + +// Transaction makes payment of X units from A to B +func (t *SleeperChaincode) invoke(stub shim.ChaincodeStubInterface, args []string) pb.Response { + // set state + key := args[0] + val := args[1] + + err := stub.PutState(key, []byte(val)) + if err != nil { + return shim.Error(err.Error()) + } + + sleepTime := args[2] + + //sleep for a bit + t.sleep(sleepTime) + + return shim.Success([]byte("OK")) +} + +// query callback representing the query of a chaincode +func (t *SleeperChaincode) query(stub shim.ChaincodeStubInterface, args []string) pb.Response { + key := args[0] + + // Get the state from the ledger + val, err := stub.GetState(key) + if err != nil { + return shim.Error(err.Error()) + } + + sleepTime := args[1] + + //sleep for a bit + t.sleep(sleepTime) + + return shim.Success(val) +} + +func main() { + err := shim.Start(new(SleeperChaincode)) + if err != nil { + fmt.Printf("Error starting Sleeper chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/Dockerfile b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/Dockerfile new file mode 100755 index 00000000..e3aa5d5f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/Dockerfile @@ -0,0 +1,40 @@ +# FIXME: someone from the UTXO team will need to verify or rework this +# Copyright London Stock Exchange Group All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +FROM ubuntu:latest + +RUN apt-get update && apt-get install pkg-config autoconf libtool -y +RUN cd /tmp && git clone https://github.com/bitcoin/secp256k1.git && cd secp256k1/ +WORKDIR /tmp/secp256k1 +RUN ./autogen.sh +RUN ./configure --enable-module-recovery +RUN make +RUN ./tests +RUN make install + +WORKDIR /tmp +RUN apt-get install libtool libboost1.55-all-dev -y +RUN git clone https://github.com/libbitcoin/libbitcoin-consensus.git +WORKDIR /tmp/libbitcoin-consensus +RUN ./autogen.sh +RUN ./configure +RUN make +RUN make install + +# Now SWIG +WORKDIR /tmp +# Need pcre lib for building +RUN apt-get install libpcre3-dev -y +RUN wget http://prdownloads.sourceforge.net/swig/swig-3.0.8.tar.gz && tar xvf swig-3.0.8.tar.gz +WORKDIR /tmp/swig-3.0.8 +RUN ./autogen.sh +RUN ./configure +RUN make +RUN make install + +# Now add this for SWIG execution requirement to get missing stubs-32.h header file +RUN apt-get install g++-multilib -y + +ENV CGO_LDFLAGS="-L/usr/local/lib/ -lbitcoin-consensus -lstdc++" diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/README.md b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/README.md new file mode 100755 index 00000000..6b7f42c1 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/README.md @@ -0,0 +1,79 @@ +### UTXO Chaincode + +The UTXO example chaincode contains a single invocation function named `execute`. This function accepts BASE64 encoded transactions from the Bitcoin network. This chaincode will parse the transactions and pass the transaction components to the Bitcoin libconsensus C library for script verification. + +The purpose of this chaincode is to + +1. Demonstrate how the world state can be used to store and process unspent transaction outputs (UTXO). + +2. Demonstrate how to include and use a C library from within a chaincode. + +A client for exercising this chaincode is avilable at https://github.com/srderson/hyperledger-fabric-utxo-client-java. + + +The following are instructions for building and deploying the UTXO chaincode in Hypereledger Fabric. All commands should be run with vagrant. + +First, build the Docker image for the UTXO chaincode. + +``` +cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/utxo/ +docker build -t utxo:0.1.0 . +``` + +Next, modify the `core.yaml` file in the Hyperledger Fabric project to point to the local Docker image that was built in the previous step. In the core.yaml file find `chaincode.golang.Dockerfile` and change it from from `hyperledger/fabric-baseimage` to `utxo:0.1.0` + +Start the peer using the following commands +``` +peer node start +``` + +In a second window, deploy the example UTXO chaincode +``` +CORE_PEER_ADDRESS=localhost:7051 peer chaincode deploy -p github.com/hyperledger/fabric/examples/chaincode/go/utxo -c '{"Function":"init", "Args": []}' +``` +Wait about 30 seconds for the chaincode to be deployed. Output from the window where the peer is running will indicate that this is successful. + +Next, find the `image ID` for the deployed chaincode. Run +``` +docker images +``` +and look for the image ID of the most recently deployed chaincode. The image ID will likely be similar to +``` + dev-jdoe-cbe6be7ed67931b9be2ce31dd833e523702378bef91b29917005f0eaa316b57e268e19696093d48b91076f1134cbf4b06afd78e6afd947133f43cb51bf40b0a4 + ``` + Make a note of this as we'll be using it later. + +Stop the running peer. + +Build a peer docker image by running the following test. This will allow for easy testing of the chaincode by giving us the ability to reset the database to a clean state. +``` +go test github.com/hyperledger/fabric/core/container -run=BuildImage_Peer +``` + +Using the Docker image that we just built, start a peer within a container in `chaincodedev` mode. +``` +docker run -it -p 7051:7051 -p 7053:7053 hyperledger/fabric-peer peer node start --peer-chaincodedev +``` + + +In another window, start UTXO chaincode in a container. The refers to the UTXO image ID noted in a prior step. +``` +docker run -it /bin/bash +``` + +Build the UTXO chaincode. +``` +cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/utxo/ +go build +CORE_PEER_ADDRESS=172.17.0.2:7051 CORE_CHAINCODE_ID_NAME=utxo ./utxo +``` + +In another window, deploy the chaincode +``` +peer chaincode deploy -n utxo -c '{"Function":"init", "Args": []}' +``` + +The chaincode is now deployed and ready to accept transactions. + +Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License. +s diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/chaincode.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/chaincode.go new file mode 100755 index 00000000..ca1a2878 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/chaincode.go @@ -0,0 +1,104 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "encoding/base64" + "errors" + "fmt" + + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/utxo/util" +) + +// The UTXO example chaincode contains a single invocation function named execute. This function accepts BASE64 +// encoded transactions from the Bitcoin network. This chaincode will parse the transactions and pass the transaction +// components to the Bitcoin libconsensus C library for script verification. A table of UTXOs is maintained to ensure +// each transaction is valid. +// Documentation can be found at +// https://github.com/hyperledger/fabric/blob/master/examples/chaincode/go/utxo/README.md + +// SimpleChaincode example simple Chaincode implementation +type SimpleChaincode struct { +} + +// Init does nothing in the UTXO chaincode +func (t *SimpleChaincode) Init(stub shim.ChaincodeStubInterface) pb.Response { + return nil, nil +} + +// Invoke callback representing the invocation of a chaincode +func (t *SimpleChaincode) Invoke(stub shim.ChaincodeStubInterface) pb.Response { + function, args := stub.GetFunctionAndParameters() + switch function { + + case "execute": + + if len(args) < 1 { + return nil, errors.New("execute operation must include single argument, the base64 encoded form of a bitcoin transaction") + } + txDataBase64 := args[0] + txData, err := base64.StdEncoding.DecodeString(txDataBase64) + if err != nil { + return nil, fmt.Errorf("Error decoding TX as base64: %s", err) + } + + utxo := util.MakeUTXO(MakeChaincodeStore(stub)) + execResult, err := utxo.Execute(txData) + if err != nil { + return nil, fmt.Errorf("Error executing TX: %s", err) + } + + fmt.Printf("\nExecResult: Coinbase: %t, SumInputs %d, SumOutputs %d\n\n", execResult.IsCoinbase, execResult.SumPriorOutputs, execResult.SumCurrentOutputs) + + if execResult.IsCoinbase == false { + if execResult.SumCurrentOutputs > execResult.SumPriorOutputs { + return nil, fmt.Errorf("sumOfCurrentOutputs > sumOfPriorOutputs: sumOfCurrentOutputs = %d, sumOfPriorOutputs = %d", execResult.SumCurrentOutputs, execResult.SumPriorOutputs) + } + } + + return nil, nil + + case "getTran": + + if len(args) < 1 { + return nil, errors.New("queryBTC operation must include single argument, the TX hash hex") + } + + utxo := util.MakeUTXO(MakeChaincodeStore(stub)) + tx, err := utxo.Query(args[0]) + if err != nil { + return nil, fmt.Errorf("Error querying for transaction: %s", err) + } + if tx == nil { + var data []byte + return data, nil + } + return tx, nil + + default: + return nil, errors.New("Unsupported operation") + } + +} + +func main() { + err := shim.Start(new(SimpleChaincode)) + if err != nil { + fmt.Printf("Error starting chaincode: %s", err) + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus.go new file mode 100755 index 00000000..74b5b20c --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus.go @@ -0,0 +1,482 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 3.0.8 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +// source: consensus.swg + +package consensus + +/* +#define intgo swig_intgo +typedef void *swig_voidp; + +#include + + +typedef int intgo; +typedef unsigned int uintgo; + + + +typedef struct { char *p; intgo n; } _gostring_; +typedef struct { void* array; intgo len; intgo cap; } _goslice_; + + +typedef long long swig_type_1; +typedef long long swig_type_2; +extern void _wrap_Swig_free_consensus_0731991c73947514(uintptr_t arg1); +extern swig_intgo _wrap_verify_result_eval_false_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_eval_true_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_script_size_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_push_size_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_op_count_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_stack_size_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_sig_count_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_pubkey_count_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_verify_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_equalverify_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_checkmultisigverify_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_checksigverify_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_numequalverify_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_bad_opcode_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_disabled_opcode_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_invalid_stack_operation_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_invalid_altstack_operation_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_unbalanced_conditional_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_sig_hashtype_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_sig_der_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_minimaldata_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_sig_pushonly_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_sig_high_s_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_sig_nulldummy_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_pubkeytype_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_cleanstack_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_discourage_upgradable_nops_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_op_return_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_unknown_error_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_tx_invalid_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_tx_size_invalid_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_tx_input_invalid_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_negative_locktime_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_result_unsatisfied_locktime_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_none_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_p2sh_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_strictenc_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_dersig_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_low_s_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_nulldummy_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_sigpushonly_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_minimaldata_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_discourage_upgradable_nops_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_cleanstack_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_flags_checklocktimeverify_consensus_0731991c73947514(void); +extern swig_intgo _wrap_verify_script_consensus_0731991c73947514(swig_voidp arg1, swig_type_1 arg2, swig_voidp arg3, swig_type_2 arg4, swig_intgo arg5, swig_intgo arg6); +#undef intgo +*/ +import "C" + +import "unsafe" +import _ "runtime/cgo" +import "sync" + +type _ unsafe.Pointer + +var Swig_escape_always_false bool +var Swig_escape_val interface{} + +type _swig_fnptr *byte +type _swig_memberptr *byte + +type _ sync.Mutex + +func Swig_free(arg1 uintptr) { + _swig_i_0 := arg1 + C._wrap_Swig_free_consensus_0731991c73947514(C.uintptr_t(_swig_i_0)) +} + +const LIBBITCOIN_CONSENSUS_VERSION string = "2.0.0" +const LIBBITCOIN_CONSENSUS_MAJOR_VERSION int = 2 +const LIBBITCOIN_CONSENSUS_MINOR_VERSION int = 0 +const LIBBITCOIN_CONSENSUS_PATCH_VERSION int = 0 + +type LibbitcoinConsensusVerify_result_type int + +func _swig_getverify_result_eval_false() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_eval_false_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_eval_false LibbitcoinConsensusVerify_result_type = _swig_getverify_result_eval_false() + +func _swig_getverify_result_eval_true() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_eval_true_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_eval_true LibbitcoinConsensusVerify_result_type = _swig_getverify_result_eval_true() + +func _swig_getverify_result_script_size() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_script_size_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_script_size LibbitcoinConsensusVerify_result_type = _swig_getverify_result_script_size() + +func _swig_getverify_result_push_size() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_push_size_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_push_size LibbitcoinConsensusVerify_result_type = _swig_getverify_result_push_size() + +func _swig_getverify_result_op_count() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_op_count_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_op_count LibbitcoinConsensusVerify_result_type = _swig_getverify_result_op_count() + +func _swig_getverify_result_stack_size() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_stack_size_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_stack_size LibbitcoinConsensusVerify_result_type = _swig_getverify_result_stack_size() + +func _swig_getverify_result_sig_count() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_sig_count_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_sig_count LibbitcoinConsensusVerify_result_type = _swig_getverify_result_sig_count() + +func _swig_getverify_result_pubkey_count() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_pubkey_count_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_pubkey_count LibbitcoinConsensusVerify_result_type = _swig_getverify_result_pubkey_count() + +func _swig_getverify_result_verify() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_verify_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_verify LibbitcoinConsensusVerify_result_type = _swig_getverify_result_verify() + +func _swig_getverify_result_equalverify() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_equalverify_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_equalverify LibbitcoinConsensusVerify_result_type = _swig_getverify_result_equalverify() + +func _swig_getverify_result_checkmultisigverify() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_checkmultisigverify_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_checkmultisigverify LibbitcoinConsensusVerify_result_type = _swig_getverify_result_checkmultisigverify() + +func _swig_getverify_result_checksigverify() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_checksigverify_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_checksigverify LibbitcoinConsensusVerify_result_type = _swig_getverify_result_checksigverify() + +func _swig_getverify_result_numequalverify() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_numequalverify_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_numequalverify LibbitcoinConsensusVerify_result_type = _swig_getverify_result_numequalverify() + +func _swig_getverify_result_bad_opcode() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_bad_opcode_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_bad_opcode LibbitcoinConsensusVerify_result_type = _swig_getverify_result_bad_opcode() + +func _swig_getverify_result_disabled_opcode() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_disabled_opcode_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_disabled_opcode LibbitcoinConsensusVerify_result_type = _swig_getverify_result_disabled_opcode() + +func _swig_getverify_result_invalid_stack_operation() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_invalid_stack_operation_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_invalid_stack_operation LibbitcoinConsensusVerify_result_type = _swig_getverify_result_invalid_stack_operation() + +func _swig_getverify_result_invalid_altstack_operation() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_invalid_altstack_operation_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_invalid_altstack_operation LibbitcoinConsensusVerify_result_type = _swig_getverify_result_invalid_altstack_operation() + +func _swig_getverify_result_unbalanced_conditional() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_unbalanced_conditional_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_unbalanced_conditional LibbitcoinConsensusVerify_result_type = _swig_getverify_result_unbalanced_conditional() + +func _swig_getverify_result_sig_hashtype() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_sig_hashtype_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_sig_hashtype LibbitcoinConsensusVerify_result_type = _swig_getverify_result_sig_hashtype() + +func _swig_getverify_result_sig_der() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_sig_der_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_sig_der LibbitcoinConsensusVerify_result_type = _swig_getverify_result_sig_der() + +func _swig_getverify_result_minimaldata() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_minimaldata_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_minimaldata LibbitcoinConsensusVerify_result_type = _swig_getverify_result_minimaldata() + +func _swig_getverify_result_sig_pushonly() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_sig_pushonly_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_sig_pushonly LibbitcoinConsensusVerify_result_type = _swig_getverify_result_sig_pushonly() + +func _swig_getverify_result_sig_high_s() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_sig_high_s_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_sig_high_s LibbitcoinConsensusVerify_result_type = _swig_getverify_result_sig_high_s() + +func _swig_getverify_result_sig_nulldummy() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_sig_nulldummy_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_sig_nulldummy LibbitcoinConsensusVerify_result_type = _swig_getverify_result_sig_nulldummy() + +func _swig_getverify_result_pubkeytype() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_pubkeytype_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_pubkeytype LibbitcoinConsensusVerify_result_type = _swig_getverify_result_pubkeytype() + +func _swig_getverify_result_cleanstack() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_cleanstack_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_cleanstack LibbitcoinConsensusVerify_result_type = _swig_getverify_result_cleanstack() + +func _swig_getverify_result_discourage_upgradable_nops() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_discourage_upgradable_nops_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_discourage_upgradable_nops LibbitcoinConsensusVerify_result_type = _swig_getverify_result_discourage_upgradable_nops() + +func _swig_getverify_result_op_return() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_op_return_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_op_return LibbitcoinConsensusVerify_result_type = _swig_getverify_result_op_return() + +func _swig_getverify_result_unknown_error() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_unknown_error_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_unknown_error LibbitcoinConsensusVerify_result_type = _swig_getverify_result_unknown_error() + +func _swig_getverify_result_tx_invalid() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_tx_invalid_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_tx_invalid LibbitcoinConsensusVerify_result_type = _swig_getverify_result_tx_invalid() + +func _swig_getverify_result_tx_size_invalid() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_tx_size_invalid_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_tx_size_invalid LibbitcoinConsensusVerify_result_type = _swig_getverify_result_tx_size_invalid() + +func _swig_getverify_result_tx_input_invalid() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_tx_input_invalid_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_tx_input_invalid LibbitcoinConsensusVerify_result_type = _swig_getverify_result_tx_input_invalid() + +func _swig_getverify_result_negative_locktime() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_negative_locktime_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_negative_locktime LibbitcoinConsensusVerify_result_type = _swig_getverify_result_negative_locktime() + +func _swig_getverify_result_unsatisfied_locktime() (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_result_unsatisfied_locktime_consensus_0731991c73947514()) + return swig_r +} + +var Verify_result_unsatisfied_locktime LibbitcoinConsensusVerify_result_type = _swig_getverify_result_unsatisfied_locktime() + +type LibbitcoinConsensusVerify_flags_type int + +func _swig_getverify_flags_none() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_none_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_none LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_none() + +func _swig_getverify_flags_p2sh() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_p2sh_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_p2sh LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_p2sh() + +func _swig_getverify_flags_strictenc() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_strictenc_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_strictenc LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_strictenc() + +func _swig_getverify_flags_dersig() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_dersig_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_dersig LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_dersig() + +func _swig_getverify_flags_low_s() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_low_s_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_low_s LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_low_s() + +func _swig_getverify_flags_nulldummy() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_nulldummy_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_nulldummy LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_nulldummy() + +func _swig_getverify_flags_sigpushonly() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_sigpushonly_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_sigpushonly LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_sigpushonly() + +func _swig_getverify_flags_minimaldata() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_minimaldata_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_minimaldata LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_minimaldata() + +func _swig_getverify_flags_discourage_upgradable_nops() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_discourage_upgradable_nops_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_discourage_upgradable_nops LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_discourage_upgradable_nops() + +func _swig_getverify_flags_cleanstack() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_cleanstack_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_cleanstack LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_cleanstack() + +func _swig_getverify_flags_checklocktimeverify() (_swig_ret LibbitcoinConsensusVerify_flags_type) { + var swig_r LibbitcoinConsensusVerify_flags_type + swig_r = (LibbitcoinConsensusVerify_flags_type)(C._wrap_verify_flags_checklocktimeverify_consensus_0731991c73947514()) + return swig_r +} + +var Verify_flags_checklocktimeverify LibbitcoinConsensusVerify_flags_type = _swig_getverify_flags_checklocktimeverify() + +func Verify_script(arg1 *byte, arg2 int64, arg3 *byte, arg4 int64, arg5 uint, arg6 uint) (_swig_ret LibbitcoinConsensusVerify_result_type) { + var swig_r LibbitcoinConsensusVerify_result_type + _swig_i_0 := arg1 + _swig_i_1 := arg2 + _swig_i_2 := arg3 + _swig_i_3 := arg4 + _swig_i_4 := arg5 + _swig_i_5 := arg6 + swig_r = (LibbitcoinConsensusVerify_result_type)(C._wrap_verify_script_consensus_0731991c73947514(C.swig_voidp(_swig_i_0), C.swig_type_1(_swig_i_1), C.swig_voidp(_swig_i_2), C.swig_type_2(_swig_i_3), C.swig_intgo(_swig_i_4), C.swig_intgo(_swig_i_5))) + return swig_r +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus_wrap.cxx b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus_wrap.cxx new file mode 100755 index 00000000..a2259cd0 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/consensus/consensus_wrap.cxx @@ -0,0 +1,812 @@ +/* ---------------------------------------------------------------------------- + * This file was automatically generated by SWIG (http://www.swig.org). + * Version 3.0.8 + * + * This file is not intended to be easily readable and contains a number of + * coding conventions designed to improve portability and efficiency. Do not make + * changes to this file unless you know what you are doing--modify the SWIG + * interface file instead. + * ----------------------------------------------------------------------------- */ + +// source: consensus.swg + +#define SWIGMODULE consensus + +#ifdef __cplusplus +/* SwigValueWrapper is described in swig.swg */ +template class SwigValueWrapper { + struct SwigMovePointer { + T *ptr; + SwigMovePointer(T *p) : ptr(p) { } + ~SwigMovePointer() { delete ptr; } + SwigMovePointer& operator=(SwigMovePointer& rhs) { T* oldptr = ptr; ptr = 0; delete oldptr; ptr = rhs.ptr; rhs.ptr = 0; return *this; } + } pointer; + SwigValueWrapper& operator=(const SwigValueWrapper& rhs); + SwigValueWrapper(const SwigValueWrapper& rhs); +public: + SwigValueWrapper() : pointer(0) { } + SwigValueWrapper& operator=(const T& t) { SwigMovePointer tmp(new T(t)); pointer = tmp; return *this; } + operator T&() const { return *pointer.ptr; } + T *operator&() { return pointer.ptr; } +}; + +template T SwigValueInit() { + return T(); +} +#endif + +/* ----------------------------------------------------------------------------- + * This section contains generic SWIG labels for method/variable + * declarations/attributes, and other compiler dependent labels. + * ----------------------------------------------------------------------------- */ + +/* template workaround for compilers that cannot correctly implement the C++ standard */ +#ifndef SWIGTEMPLATEDISAMBIGUATOR +# if defined(__SUNPRO_CC) && (__SUNPRO_CC <= 0x560) +# define SWIGTEMPLATEDISAMBIGUATOR template +# elif defined(__HP_aCC) +/* Needed even with `aCC -AA' when `aCC -V' reports HP ANSI C++ B3910B A.03.55 */ +/* If we find a maximum version that requires this, the test would be __HP_aCC <= 35500 for A.03.55 */ +# define SWIGTEMPLATEDISAMBIGUATOR template +# else +# define SWIGTEMPLATEDISAMBIGUATOR +# endif +#endif + +/* inline attribute */ +#ifndef SWIGINLINE +# if defined(__cplusplus) || (defined(__GNUC__) && !defined(__STRICT_ANSI__)) +# define SWIGINLINE inline +# else +# define SWIGINLINE +# endif +#endif + +/* attribute recognised by some compilers to avoid 'unused' warnings */ +#ifndef SWIGUNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +# elif defined(__ICC) +# define SWIGUNUSED __attribute__ ((__unused__)) +# else +# define SWIGUNUSED +# endif +#endif + +#ifndef SWIG_MSC_UNSUPPRESS_4505 +# if defined(_MSC_VER) +# pragma warning(disable : 4505) /* unreferenced local function has been removed */ +# endif +#endif + +#ifndef SWIGUNUSEDPARM +# ifdef __cplusplus +# define SWIGUNUSEDPARM(p) +# else +# define SWIGUNUSEDPARM(p) p SWIGUNUSED +# endif +#endif + +/* internal SWIG method */ +#ifndef SWIGINTERN +# define SWIGINTERN static SWIGUNUSED +#endif + +/* internal inline SWIG method */ +#ifndef SWIGINTERNINLINE +# define SWIGINTERNINLINE SWIGINTERN SWIGINLINE +#endif + +/* exporting methods */ +#if (__GNUC__ >= 4) || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) +# ifndef GCC_HASCLASSVISIBILITY +# define GCC_HASCLASSVISIBILITY +# endif +#endif + +#ifndef SWIGEXPORT +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# if defined(STATIC_LINKED) +# define SWIGEXPORT +# else +# define SWIGEXPORT __declspec(dllexport) +# endif +# else +# if defined(__GNUC__) && defined(GCC_HASCLASSVISIBILITY) +# define SWIGEXPORT __attribute__ ((visibility("default"))) +# else +# define SWIGEXPORT +# endif +# endif +#endif + +/* calling conventions for Windows */ +#ifndef SWIGSTDCALL +# if defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) +# define SWIGSTDCALL __stdcall +# else +# define SWIGSTDCALL +# endif +#endif + +/* Deal with Microsoft's attempt at deprecating C standard runtime functions */ +#if !defined(SWIG_NO_CRT_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE) +# define _CRT_SECURE_NO_DEPRECATE +#endif + +/* Deal with Microsoft's attempt at deprecating methods in the standard C++ library */ +#if !defined(SWIG_NO_SCL_SECURE_NO_DEPRECATE) && defined(_MSC_VER) && !defined(_SCL_SECURE_NO_DEPRECATE) +# define _SCL_SECURE_NO_DEPRECATE +#endif + +/* Deal with Apple's deprecated 'AssertMacros.h' from Carbon-framework */ +#if defined(__APPLE__) && !defined(__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES) +# define __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES 0 +#endif + +/* Intel's compiler complains if a variable which was never initialised is + * cast to void, which is a common idiom which we use to indicate that we + * are aware a variable isn't used. So we just silence that warning. + * See: https://github.com/swig/swig/issues/192 for more discussion. + */ +#ifdef __INTEL_COMPILER +# pragma warning disable 592 +#endif + + +#include +#include +#include +#include +#include + + + +typedef int intgo; +typedef unsigned int uintgo; + + + +typedef struct { char *p; intgo n; } _gostring_; +typedef struct { void* array; intgo len; intgo cap; } _goslice_; + + + + +#define swiggo_size_assert_eq(x, y, name) typedef char name[(x-y)*(x-y)*-2+1]; +#define swiggo_size_assert(t, n) swiggo_size_assert_eq(sizeof(t), n, swiggo_sizeof_##t##_is_not_##n) + +swiggo_size_assert(char, 1) +swiggo_size_assert(short, 2) +swiggo_size_assert(int, 4) +typedef long long swiggo_long_long; +swiggo_size_assert(swiggo_long_long, 8) +swiggo_size_assert(float, 4) +swiggo_size_assert(double, 8) + +#ifdef __cplusplus +extern "C" { +#endif +extern void crosscall2(void (*fn)(void *, int), void *, int); +extern char* _cgo_topofstack(void) __attribute__ ((weak)); +extern void _cgo_allocate(void *, int); +extern void _cgo_panic(void *, int); +#ifdef __cplusplus +} +#endif + +static char *_swig_topofstack() { + if (_cgo_topofstack) { + return _cgo_topofstack(); + } else { + return 0; + } +} + +static void _swig_gopanic(const char *p) { + struct { + const char *p; + } a; + a.p = p; + crosscall2(_cgo_panic, &a, (int) sizeof a); +} + + + + +#define SWIG_contract_assert(expr, msg) \ + if (!(expr)) { _swig_gopanic(msg); } else + + +static void Swig_free(void* p) { + free(p); +} + + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void _wrap_Swig_free_consensus_0731991c73947514(void *_swig_go_0) { + void *arg1 = (void *) 0 ; + + arg1 = *(void **)&_swig_go_0; + + Swig_free(arg1); + +} + + +intgo _wrap_verify_result_eval_false_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_eval_false; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_eval_true_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_eval_true; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_script_size_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_script_size; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_push_size_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_push_size; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_op_count_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_op_count; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_stack_size_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_stack_size; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_sig_count_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_sig_count; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_pubkey_count_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_pubkey_count; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_verify_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_verify; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_equalverify_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_equalverify; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_checkmultisigverify_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_checkmultisigverify; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_checksigverify_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_checksigverify; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_numequalverify_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_numequalverify; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_bad_opcode_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_bad_opcode; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_disabled_opcode_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_disabled_opcode; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_invalid_stack_operation_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_invalid_stack_operation; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_invalid_altstack_operation_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_invalid_altstack_operation; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_unbalanced_conditional_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_unbalanced_conditional; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_sig_hashtype_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_sig_hashtype; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_sig_der_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_sig_der; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_minimaldata_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_minimaldata; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_sig_pushonly_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_sig_pushonly; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_sig_high_s_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_sig_high_s; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_sig_nulldummy_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_sig_nulldummy; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_pubkeytype_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_pubkeytype; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_cleanstack_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_cleanstack; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_discourage_upgradable_nops_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_discourage_upgradable_nops; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_op_return_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_op_return; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_unknown_error_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_unknown_error; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_tx_invalid_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_tx_invalid; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_tx_size_invalid_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_tx_size_invalid; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_tx_input_invalid_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_tx_input_invalid; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_negative_locktime_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_negative_locktime; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_result_unsatisfied_locktime_consensus_0731991c73947514() { + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_result_unsatisfied_locktime; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_none_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_none; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_p2sh_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_p2sh; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_strictenc_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_strictenc; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_dersig_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_dersig; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_low_s_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_low_s; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_nulldummy_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_nulldummy; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_sigpushonly_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_sigpushonly; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_minimaldata_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_minimaldata; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_discourage_upgradable_nops_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_discourage_upgradable_nops; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_cleanstack_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_cleanstack; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_flags_checklocktimeverify_consensus_0731991c73947514() { + libbitcoin::consensus::verify_flags_type result; + intgo _swig_go_result; + + + result = libbitcoin::consensus::verify_flags_checklocktimeverify; + + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +intgo _wrap_verify_script_consensus_0731991c73947514(char *_swig_go_0, long long _swig_go_1, char *_swig_go_2, long long _swig_go_3, intgo _swig_go_4, intgo _swig_go_5) { + unsigned char *arg1 = (unsigned char *) 0 ; + size_t arg2 ; + unsigned char *arg3 = (unsigned char *) 0 ; + size_t arg4 ; + unsigned int arg5 ; + unsigned int arg6 ; + libbitcoin::consensus::verify_result_type result; + intgo _swig_go_result; + + arg1 = *(unsigned char **)&_swig_go_0; + arg2 = (size_t)_swig_go_1; + arg3 = *(unsigned char **)&_swig_go_2; + arg4 = (size_t)_swig_go_3; + arg5 = (unsigned int)_swig_go_4; + arg6 = (unsigned int)_swig_go_5; + + result = (libbitcoin::consensus::verify_result_type)libbitcoin::consensus::verify_script((unsigned char const *)arg1,arg2,(unsigned char const *)arg3,arg4,arg5,arg6); + _swig_go_result = (intgo)result; + return _swig_go_result; +} + + +#ifdef __cplusplus +} +#endif + diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/store.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/store.go new file mode 100755 index 00000000..cc107411 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/store.go @@ -0,0 +1,91 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package main + +import ( + "fmt" + + "github.com/golang/protobuf/proto" + "github.com/hyperledger/fabric/core/chaincode/shim" + "github.com/hyperledger/fabric/examples/chaincode/go/utxo/util" +) + +// Store struct uses a chaincode stub for state access +type Store struct { + stub shim.ChaincodeStubInterface +} + +// MakeChaincodeStore returns a store for storing keys in the state +func MakeChaincodeStore(stub shim.ChaincodeStubInterface) util.Store { + store := &Store{} + store.stub = stub + return store +} + +func keyToString(key *util.Key) string { + return key.TxHashAsHex + ":" + string(key.TxIndex) +} + +// GetState returns the transaction for a given key +func (s *Store) GetState(key util.Key) (*util.TX_TXOUT, bool, error) { + keyToFetch := keyToString(&key) + data, err := s.stub.GetState(keyToFetch) + if err != nil { + return nil, false, fmt.Errorf("Error getting state from stub: %s", err) + } + if data == nil { + return nil, false, nil + } + // Value found, unmarshal + var value = &util.TX_TXOUT{} + err = proto.Unmarshal(data, value) + if err != nil { + return nil, false, fmt.Errorf("Error unmarshalling value: %s", err) + } + return value, true, nil +} + +// DelState deletes the transaction for the given key +func (s *Store) DelState(key util.Key) error { + return s.stub.DelState(keyToString(&key)) +} + +// PutState stores the given transaction and key +func (s *Store) PutState(key util.Key, value *util.TX_TXOUT) error { + data, err := proto.Marshal(value) + if err != nil { + return fmt.Errorf("Error marshalling value to bytes: %s", err) + } + return s.stub.PutState(keyToString(&key), data) +} + +// GetTran returns a transaction for the given hash +func (s *Store) GetTran(key string) ([]byte, bool, error) { + data, err := s.stub.GetState(key) + if err != nil { + return nil, false, fmt.Errorf("Error getting state from stub: %s", err) + } + if data == nil { + return nil, false, nil + } + return data, true, nil +} + +// PutTran adds a transaction to the state with the hash as a key +func (s *Store) PutTran(key string, value []byte) error { + return s.stub.PutState(key, value) +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/First_500_transactions_base64_encoded_on_testnet3.txt b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/First_500_transactions_base64_encoded_on_testnet3.txt new file mode 100755 index 00000000..36fb2e3a --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/First_500_transactions_base64_encoded_on_testnet3.txt @@ -0,0 +1,908 @@ +Block: 0 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////9NBP//AB0BBEVUaGUgVGltZXMgMDMvSmFuLzIwMDkgQ2hhbmNlbGxvciBvbiBicmluayBvZiBzZWNvbmQgYmFpbG91dCBmb3IgYmFua3P/////AQDyBSoBAAAAQ0EEZ4r9sP5VSCcZZ/GmcTC3EFzWqCjgOQmmeWLg6h9h3rZJ9rw/TO84xPNVBOUewRLeXDhN97oLjVeKTHAra/EdX6wAAAAA +Block: 1 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCDnSU0BfwYvUDJTSC//////AQDyBSoBAAAAIyECGury+GOKEpoxVvvn5e9jUiawuv1JX/A6/iyEPX46S1GsAAAAAA== +Block: 2 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDLnSU0BDgYvUDJTSC//////AQDyBSoBAAAAIyEDin9u8cjKDFiKpT+oYBKAd8nmwR5oMPTX7k52Ola3cY+sAAAAAA== +Block: 3 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIbnSU0BUQYvUDJTSC//////AQDyBSoBAAAAIyED9tn/TBKVlEXKVUnIEWg7+ciOY3siLdLgMRFUxMhc9COsAAAAAA== +Block: 4 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKrnSU0BHQYvUDJTSC//////AQDyBSoBAAAAIyECH3LeHP8Xd6lYTzGtxFgEGBTDvDnGYkGsTUMTbXEGrr6sAAAAAA== +Block: 5 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBjoSU0BagYvUDJTSC//////AQDyBSoBAAAAIyEDc+pzmn503u60Qxptd99BlywYXm6D4cMA65ExCWM5g+esAAAAAA== +Block: 6 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDHoSU0BFgYvUDJTSC//////AQDyBSoBAAAAIyEDoO+Q7VYFbhJuvloUwRLwuciQyU/ytKvp5xSIo6qUABasAAAAAA== +Block: 7 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIHoSU0BUAYvUDJTSC//////AQDyBSoBAAAAIyEChbxHksK4djxvfgi4VoytTM664Bd6zgo+7E8+TQRHFE+sAAAAAA== +Block: 8 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKDoSU0BGQYvUDJTSC//////AQDyBSoBAAAAIyECMETlaS4M62G/iAGKu5m89dAGPi8IKk5Fh5oWQHKNtbysAAAAAA== +Block: 9 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBP3oSU0BWwYvUDJTSC//////AQDyBSoBAAAAIyEDnBGEA/SSj8H0oPqm/ML/5R5FShONBOGCB2tmehT/dUasAAAAAA== +Block: 10 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDXpSU0BNgYvUDJTSC//////AQDyBSoBAAAAIyEDjIZh3LP/iadr3RHpVxLAn7AZWAajLl8O1zmwZHVne/+sAAAAAA== +Block: 11 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBH3pSU0BRwYvUDJTSC//////AQDyBSoBAAAAIyEDH96UU8YWwE7gP4Cf+gSH7sk0QMqxrQbuaga2oYw4kpasAAAAAA== +Block: 12 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBELqSU0CwgAGL1AyU0gv/////wEA8gUqAQAAACMhAgIKNC4+LiDFAAd8tDBKMVXae1qYWOoTaazXtuyzwyUErAAAAAA= +Block: 13 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJnqSU0BUgYvUDJTSC//////AQDyBSoBAAAAIyECKjNeYBvHflQBDnsV9ZeC1vcEhbC64+uF3yW6QeOtfIesAAAAAA== +Block: 14 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKHqSU0BBQYvUDJTSC//////AQDyBSoBAAAAIyEDrIfcVRiUMUkBOa7g5pC4wNQedwKRq5DOjaHqqOE732isAAAAAA== +Block: 15 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBK3qSU0BCQYvUDJTSC//////AQDyBSoBAAAAIyECpAwbcwsLplZwrckU2YVwjav4xSSwMl1E7id30QVVbKGsAAAAAA== +Block: 16 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMPqSU0BEgYvUDJTSC//////AQDyBSoBAAAAIyECwfrFEBgeQHRGx3JzWrx2WrgZdbsMPKmxYXSY6SnIhW+sAAAAAA== +Block: 17 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBFHrSU0CiQAGL1AyU0gv/////wEA8gUqAQAAACMhAu9x/ERPDFCLH+Zz9EkGacdLHUNJBNJlrjHPj8qij36nrAAAAAA= +Block: 18 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBH3rSU0BKQYvUDJTSC//////AQDyBSoBAAAAIyEDsbskjzdWg95PsEVNPlF9UYlBUaDX7pRlaPutz07igl2sAAAAAA== +Block: 19 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLDrSU0BLwYvUDJTSC//////AQDyBSoBAAAAIyECAela3YC/7QecmoXpwcVBHvmq9Igg7/pPrp6+po6gOeasAAAAAA== +Block: 20 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLPrSU0BAwYvUDJTSC//////AQDyBSoBAAAAIyECOCTb7SV0yI7jdXiNlWnfDqCyTM/Socpx6ix0Q2fec1usAAAAAA== +Block: 21 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBnsSU0BYwYvUDJTSC//////AQDyBSoBAAAAIyEDOxvsrCrf3LzfkqF6sW2hdDI0STQcvDDKFaguehlJhjSsAAAAAA== +Block: 22 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBBbtSU0C+gAGL1AyU0gv/////wEA8gUqAQAAACMhA7eHkgWUy0f7/M7pFb765ArC4rKVIkRg7uB1rQraTAxUrAAAAAA= +Block: 23 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBE3tSU0BNgYvUDJTSC//////AQDyBSoBAAAAIyECKifvqihaTQSfERtUPc1YLGxxuyHyCyKniRx3yXX7O8OsAAAAAA== +Block: 24 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBGnuSU0CFwEGL1AyU0gv/////wEA8gUqAQAAACMhA8BULZnHhUkkwRuChgNlmiruT0O6R8lNAKmIjwuhr7/zrAAAAAA= +Block: 25 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBP/wSU0CjQIGL1AyU0gv/////wEA8gUqAQAAACMhAxGkBMZd+Vjgbo7VWoLTzgo/gcV4AiFLSVS9x890lFRirAAAAAA= +Block: 26 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDrxSU0BMwYvUDJTSC//////AQDyBSoBAAAAIyECffJ5kZ4Q7JLmSbsjk86Kh21LCmDi2MuN4ESioZnesPKsAAAAAA== +Block: 27 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFnxSU0BGQYvUDJTSC//////AQDyBSoBAAAAIyECcJP3Vfc3TUatwc3raJDpEf2EI3rQ30yLph5MO/sy012sAAAAAA== +Block: 28 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBF7xSU0BAwYvUDJTSC//////AQDyBSoBAAAAIyEDhOZsm1BYwtjpDfh7mAKxflVlaFthoun6idSM7fGafSOsAAAAAA== +Block: 29 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNrxSU0BdwYvUDJTSC//////AQDyBSoBAAAAIyECWXKM/kRtVcixvUPEg9y21vCzgqdLCEQG4Ig8mZMlzKisAAAAAA== +Block: 30 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBIHySU0CowAGL1AyU0gv/////wEA8gUqAQAAACMhAs/LJ+fERSyRleiLOeSxjUX14Ecz5yzVWDF3lx/L0wJTrAAAAAA= +Block: 31 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKrySU0BJwYvUDJTSC//////AQDyBSoBAAAAIyECPU5mVU5PatRnuw8wIibdoUzITkeZQhk67Kpv5ezUjTSsAAAAAA== +Block: 32 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBL/ySU0BEwYvUDJTSC//////AQDyBSoBAAAAIyECtvPaaw1EP0rmDVLOibHEztobgYLCWYhVSXZJArIwpHusAAAAAA== +Block: 33 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM7ySU0BCQYvUDJTSC//////AQDyBSoBAAAAIyEDzFQB490ZDRQ1WMOuhSC4sZ651G9sh2DJ+ZcuWuIflWCsAAAAAA== +Block: 34 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNPySU0BAQYvUDJTSC//////AQDyBSoBAAAAIyECSylQW41EXWOZ31CvExD6+aXabV0TrFSinEwMY9+pj86sAAAAAA== +Block: 35 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBTzSU0BPgYvUDJTSC//////AQDyBSoBAAAAIyECE8p6oDbtxI7jSmW2lNfLn6oxtoLi88KLdQB7BfBeBlusAAAAAA== +Block: 36 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBG3zSU0BVgYvUDJTSC//////AQDyBSoBAAAAIyEChAl8To2kjVb58pc1oWzLfRImNg9q8srVh4VHczZYV12sAAAAAA== +Block: 37 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBH3zSU0BDgYvUDJTSC//////AQDyBSoBAAAAIyEDE5yzxxZ4WFoduT16wym78lpcAw+rP70r2eMnHZ94ScqsAAAAAA== +Block: 38 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBN/0SU0CXwEGL1AyU0gv/////wEA8gUqAQAAACMhAhPWoDG6689omfxxvV8+TJgHb8Id0gkb2k3i0rkvZ/oorAAAAAA= +Block: 39 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBA71SU0BKgYvUDJTSC//////AQDyBSoBAAAAIyEDQIng3kzxC1cm+G0Bnth9Sa7KOHFuCm3z4xLyYCJ7O4+sAAAAAA== +Block: 40 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJD1SU0BfgYvUDJTSC//////AQDyBSoBAAAAIyECoY1wflhE9PVB9dwhSknejApBY/eIE0CvIKObEuf6B+asAAAAAA== +Block: 41 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNL2SU0CPwEGL1AyU0gv/////wEA8gUqAQAAACMhAmcdzpOspNYs6o/TN5CzDiqhx9K96neEhROlO47zm49arAAAAAA= +Block: 42 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOP2SU0BDQYvUDJTSC//////AQDyBSoBAAAAIyEDfO7OWX00d7xOLX5GiwhH9WSnZqMSzmnOLg1oZ86i4cGsAAAAAA== +Block: 43 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBE/3SU0BawYvUDJTSC//////AQDyBSoBAAAAIyEDOsp3p/iuhz87/hjiQaW5MLFTEAMjdHBG9toI78bR6CWsAAAAAA== +Block: 44 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBI/3SU0BPQYvUDJTSC//////AQDyBSoBAAAAIyEDWGIJZypV1ghaNLShPzAtGfr2hY41jb8JAJ8hk9v2NwusAAAAAA== +Block: 45 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBC34SU0CmgAGL1AyU0gv/////wEA8gUqAQAAACMhAp+9ICcmETU29ZlGo4RRY25HXEhmg91nRnSBASYH18B7rAAAAAA= +Block: 46 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBFD6SU0CHQIGL1AyU0gv/////wEA8gUqAQAAACMhA4XwdH0k+Heveh7uQ3phvM9SVCbtT1l9Eq0Y3fPYsjtQrAAAAAA= +Block: 47 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGb6SU0BEgYvUDJTSC//////AQDyBSoBAAAAIyEDZhcjinxBQXVgFLA+iAGp1VZsalDx+gptnX5pzTFgLomsAAAAAA== +Block: 48 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHv6SU0BEQYvUDJTSC//////AQDyBSoBAAAAIyEC1/pOUjVLwQLKHrbmzekcK3mM5m27Pw2DfceQQWGPIAesAAAAAA== +Block: 49 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKD7SU0CIgEGL1AyU0gv/////wEA8gUqAQAAACMhAiDrQHypfIhJFYRfd0eD5sw0sUdED2ddyxZjTYRiTU0OrAAAAAA= +Block: 50 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNn7SU0BNgYvUDJTSC//////AQDyBSoBAAAAIyECzrgonxvoWIwfydrc0JwZfPFzpoqE7TRNHP6fDLJXYR6sAAAAAA== +Block: 51 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFz8SU0BfQYvUDJTSC//////AQDyBSoBAAAAIyEDr0DSfmYfDJs++dvPnylmZNXo6w+uI1FSJ9pE0/LgxQisAAAAAA== +Block: 52 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGX8SU0BBgYvUDJTSC//////AQDyBSoBAAAAIyECR0ME6erPMG6zEPONKd2e4PkWuxQbS3McimdcBviLh5SsAAAAAA== +Block: 53 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBBX9SU0CrgAGL1AyU0gv/////wEA8gUqAQAAACMhA/EIOKqd9tFpqUFm5q8D3f0UmaPOpXYHzC+BdKh9Q11lrAAAAAA= +Block: 54 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDX9SU0BGgYvUDJTSC//////AQDyBSoBAAAAIyEClk2EdET+f2E7Kt/Ayfl+I9X7zZ6Mz8jkqR2flAMszmusAAAAAA== +Block: 55 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPn9SU0CwQAGL1AyU0gv/////wEA8gUqAQAAACMhA8v9vShdzgiq3fYDiu7o2fmp0vTpVdo8k7kTuWLDU+xtrAAAAAA= +Block: 56 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBP39SU0BAQYvUDJTSC//////AQDyBSoBAAAAIyECmp028rYoYhYHasQ1vK47uroaK1B6WLIP1WHqfo4iAzisAAAAAA== +Block: 57 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEr+SU0BSQYvUDJTSC//////AQDyBSoBAAAAIyECej6GuUWYaRu62yUOCQje4vi8K9C+VTDELG/6lMPSPbqsAAAAAA== +Block: 58 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBF/+SU0BEQYvUDJTSC//////AQDyBSoBAAAAIyECcEE7ucUapHJFm85zreQ3upb18xlIoRNc+wdnsfzPUVSsAAAAAA== +Block: 59 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKP+SU0BQgYvUDJTSC//////AQDyBSoBAAAAIyECyPrrEQItHPOXtZlEQ9qQrCdLxzTF327jDNhBP+e9kHmsAAAAAA== +Block: 60 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLP+SU0BDgYvUDJTSC//////AQDyBSoBAAAAIyECyEpYC2LXJzJqHz8198VHG19CD1+n/kSCnxc2e6ZpBfqsAAAAAA== +Block: 61 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCX/SU0BbwYvUDJTSC//////AQDyBSoBAAAAIyEC5QZU5g1XN84Sap0NGdZwTrxu4t3M+0A+VJ1mYM0LMcSsAAAAAA== +Block: 62 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBH7/SU0BVwYvUDJTSC//////AQDyBSoBAAAAIyEDydEjy+7iKghK4PUM8ZyOqRFwsROlC5uw/gNCN2Q9UdqsAAAAAA== +Block: 63 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNL/SU0BTQYvUDJTSC//////AQDyBSoBAAAAIyED1WiZB9m6NTr+d+ME7Wj2XpWGXSnNkIsP72cPYxEHU42sAAAAAA== +Block: 64 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBD0ASk0BZgYvUDJTSC//////AQDyBSoBAAAAIyECzGG9c2zi1DiTrg9QPSeB2rX+VIf/oONq+eJVPLX0qgasAAAAAA== +Block: 65 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJQASk0BUgYvUDJTSC//////AQDyBSoBAAAAIyEDeVzpequjyO8ZQQeEmHHhsoYTJsewby6iJGgc6KSWwpqsAAAAAA== +Block: 66 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKMASk0BCQYvUDJTSC//////AQDyBSoBAAAAIyECAiEO+Qdmz5FpUwry8Ro1MOTfWXk5J1THOTFvnXFi6VysAAAAAA== +Block: 67 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKgASk0BAgYvUDJTSC//////AQDyBSoBAAAAIyECirk7Gw8pjP7Ir8lsWfcMStVKPfkms+Go/OqOJmr0lXGsAAAAAA== +Block: 68 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOIASk0BNwYvUDJTSC//////AQDyBSoBAAAAIyECh5wT3uZUInQ/YidZdpAh8mLwMJ7VCQxJR6ieVMBNRrGsAAAAAA== +Block: 69 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBMBSk0BLgYvUDJTSC//////AQDyBSoBAAAAIyEDA66EL4cQecB7lIS2SvJhOKdVbBqDvMz2sUpg3XCrwK6sAAAAAA== +Block: 70 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBC4BSk0BFgYvUDJTSC//////AQDyBSoBAAAAIyEDk1oBxCVyg2vY53MZolz9+ZSWC+MZx9p3j3k8OFAHJ9GsAAAAAA== +Block: 71 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGYBSk0BNQYvUDJTSC//////AQDyBSoBAAAAIyECDmH2JO8GPQAM7t9hooYcj5sUinvZ78qBuw4Dd4n0K5usAAAAAA== +Block: 72 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKUBSk0BOgYvUDJTSC//////AQDyBSoBAAAAIyECFF5f5/Z+jml3cQzeXcJRDdK8UipNynl5WxeDmlSjq1SsAAAAAA== +Block: 73 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPwBSk0BUQYvUDJTSC//////AQDyBSoBAAAAIyECnhA+aRuRezF2e8WEGG/s7V8nc8EtaztPL+0EpbfjPZqsAAAAAA== +Block: 74 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBM0CSk0CzQAGL1AyU0gv/////wEA8gUqAQAAACMhA8IkXPeRF5hovk2URYw48sE8qBZN2/hVmGHDTqfIOUPqrAAAAAA= +Block: 75 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBCEESk0CTwEGL1AyU0gv/////wEA8gUqAQAAACMhAyF77cSm6Fcc1+7SixaXLAjqbcACJueGouOB/8fL9KdbrAAAAAA= +Block: 76 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNgESk0CsQAGL1AyU0gv/////wEA8gUqAQAAACMhA4Q4ZrFzL7O+rRNPn1GlFZSj1QPbpIB2mB+Nl8BtW3JgrAAAAAA= +Block: 77 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEEFSk0BZQYvUDJTSC//////AQDyBSoBAAAAIyEDBWUMsPAGRZhzGK/mJPCnGUdp9Uv+IEvklL2r1UTpj8CsAAAAAA== +Block: 78 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLgFSk0BdQYvUDJTSC//////AQDyBSoBAAAAIyEDeN6b8cqvdr+sNsSTYFnPf1UdCFbmKi0gWv1FKVHr7mqsAAAAAA== +Block: 79 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNcFSk0BHQYvUDJTSC//////AQDyBSoBAAAAIyECxtpvDSQjzrxLIXUx1r9SY34QVRzE+AzhV/lFnFMV2aisAAAAAA== +Block: 80 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBP8GSk0CIQEGL1AyU0gv/////wEA8gUqAQAAACMhA4fXPIkMjM8Fw51yXPpY0LpoBqIRi49vNM2NvDZZRrNCrAAAAAA= +Block: 81 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBoHSk0BFwYvUDJTSC//////AQDyBSoBAAAAIyEDPiCVXPu1XICM1gydMr47Nc0ePwNmnm7hUBXmqskaY0SsAAAAAA== +Block: 82 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBI4HSk0BcwYvUDJTSC//////AQDyBSoBAAAAIyED4YYspc2ccGWimDbH1cofSdDAkepk8ackLroibbzSpIusAAAAAA== +Block: 83 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJ8HSk0BDwYvUDJTSC//////AQDyBSoBAAAAIyECTp/aW1UTcPN28O7w1Go7jamne+51lR8QCiSC57OzxWWsAAAAAA== +Block: 84 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLwHSk0BGwYvUDJTSC//////AQDyBSoBAAAAIyEDLD0fFf178690BLd3hIBRMWutBwHaeksqee/yOiAdxNmsAAAAAA== +Block: 85 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPkISk0COgEGL1AyU0gv/////wEA8gUqAQAAACMhA8ku4jTOrGgCQdXBhEmQwa8CIcIYVrgKek4mIuFlxOr8rAAAAAA= +Block: 86 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBH4JSk0CgwAGL1AyU0gv/////wEA8gUqAQAAACMhArdNqbvb9LnevbFlhSY+uK9qvP7Ue7psxbAcg4rlJ3eWrAAAAAA= +Block: 87 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPUKSk0CcgEGL1AyU0gv/////wEA8gUqAQAAACMhA6S52CxTnl/IQyoeBkQYmzBZckrsJoGYVwOEOiZERacPrAAAAAA= +Block: 88 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDcLSk0BPwYvUDJTSC//////AQDyBSoBAAAAIyEC/xp5RA5PGqknb6ogNmXbB87Wz3BDHcexnVgIQRSCbeysAAAAAA== +Block: 89 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDsLSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyECERJMGxQyGb/271PHI4bhd1jU9F3RNHBSRzEgBKCY0BmsAAAAAA== +Block: 90 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBEgMSk0CCQEGL1AyU0gv/////wEA8gUqAQAAACMhAknGp243wvzVZofd5rdbvfcvze6rb+gVYanEGskNnR9IrAAAAAA= +Block: 91 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIkMSk0BPwYvUDJTSC//////AQDyBSoBAAAAIyECC6nvDf8UAxjJV0TJgszNp0/vSx6s/xp3jS9KNQPNECqsAAAAAA== +Block: 92 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLMMSk0BJgYvUDJTSC//////AQDyBSoBAAAAIyEDX/Pb/4LxrP8BUqJ5toAAX7zLYkAnR6CSS73Mza4uJ/SsAAAAAA== +Block: 93 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAYNSk0BTQYvUDJTSC//////AQDyBSoBAAAAIyED238//BrNaXpFgoJQqhDfbG03KklVowE63vIF/LhRwzWsAAAAAA== +Block: 94 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDgOSk0CKQEGL1AyU0gv/////wEA8gUqAQAAACMhA3Lt3dFjLO00uwOF5Qi0rbMWM5i4w1Px/zIKRDhJNU8ArAAAAAA= +Block: 95 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBD0OSk0BAQYvUDJTSC//////AQDyBSoBAAAAIyEDuKDxIuMDhmTrMmCxNE6VDkEzSChCj8yFp/VZ9ydLsASsAAAAAA== +Block: 96 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEEOSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyEDaMPL9oFu1z1Q8EjbqHa/qAZLxBTLLyVrKxEi3Yok30SsAAAAAA== +Block: 97 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFsOSk0BFQYvUDJTSC//////AQDyBSoBAAAAIyECA23/zJ/0yI3V3PGTelRLpNJwSDDjSmV4vwATu0APHSusAAAAAA== +Block: 98 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGIOSk0BBQYvUDJTSC//////AQDyBSoBAAAAIyECseBU+/S+VjT6CZMxNhF7s7MdCesDGFzR3+7ebDcDIJGsAAAAAA== +Block: 99 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHQOSk0BDQYvUDJTSC//////AQDyBSoBAAAAIyEDYJIpTSiKIZSZb4WuYs6egFJKl/UljgFQHNA+aU+wlzSsAAAAAA== +Block: 100 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOEOSk0BaQYvUDJTSC//////AQDyBSoBAAAAIyECp0EHEWS0CwHErSiRPEqioQFcxbBk8MgCJyVS8Xrgh1CsAAAAAA== +Block: 101 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBN8PSk0C/AAGL1AyU0gv/////wEA8gUqAQAAACMhAuDXugKxeyPjCOvbF3DocZCvUcibYhIRvwm6c4WnnLOErAAAAAA= +Block: 102 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOgPSk0BBgYvUDJTSC//////AQDyBSoBAAAAIyECjWrD9Yi8FDFKE0YTDEAIqat0AqqfwVq+Fc2LFSEwSbKsAAAAAA== +Block: 103 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBO4PSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyEDYorAJhhfbpTZx4n/5cuSwMREKksSS49oEfoujNLXrtqsAAAAAA== +Block: 104 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBAQSk0BHgYvUDJTSC//////AQDyBSoBAAAAIyEC3XXrVkgaG+NMvqLawe0bJMcD/ULrIQ+8MBEt9Tc+zBGsAAAAAA== +Block: 105 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFMQSk0BPgYvUDJTSC//////AQDyBSoBAAAAIyEDKziPAFRNIxoclk2zUULokJ6weapTPItw8jlHqKMAKomsAAAAAA== +Block: 106 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJIQSk0BPwYvUDJTSC//////AQDyBSoBAAAAIyECnap6EmSxNxBja9sb9WKBjEOc+IaVL11ZEfuhicQETSKsAAAAAA== +Block: 107 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPoQSk0BYQYvUDJTSC//////AQDyBSoBAAAAIyEDQbRZLdFqTyYVWs1rOWpWBLenSg+e/GvSst+fkWElJtysAAAAAA== +Block: 108 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBM8RSk0C0gAGL1AyU0gv/////wEA8gUqAQAAACMhAlCVtoPrkh4/BjYdI2SNmZQslxj2Ai6F4L9nsNGOSQ94rAAAAAA= +Block: 109 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBHsSSk0CqQAGL1AyU0gv/////wEA8gUqAQAAACMhAkVeiQoVVJnM3cKkTS2KpE6VtNM7Hv5m81yM0OLoeE35rAAAAAA= +Block: 110 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJ4SSk0BIQYvUDJTSC//////AQDyBSoBAAAAIyED/MYoWE+Nakd/ASdja62uaaDg8YBaBlPId6zNo9QvOeCsAAAAAA== +Block: 111 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAETSk0BXgYvUDJTSC//////AQDyBSoBAAAAIyEDulAFvCPjIXYYydMeS9Hy9GgxGV1FMXPhjeXT4TAsWwisAAAAAA== +Block: 112 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBMETSk0CugAGL1AyU0gv/////wEA8gUqAQAAACMhApYlJaLMQwsCUvCvE2GitF+TAmd3RtY1/OlpcSRgBxWhrAAAAAA= +Block: 113 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAUUSk0BQQYvUDJTSC//////AQDyBSoBAAAAIyEDKEdW/gN0khwyVjZKfx9nJcvH4qOOczj8zqJLykLlCwesAAAAAA== +Block: 114 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBoUSk0BEwYvUDJTSC//////AQDyBSoBAAAAIyEDL/EK5v6tK6oGqFFqe8//IV0PA4SAAQSL9oBlHCE7+I2sAAAAAA== +Block: 115 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDAUSk0BEgYvUDJTSC//////AQDyBSoBAAAAIyEDrFOsSWu4ejinHQ0ZyCsYeFn2lmOi0IZCNlCN7jEiEVOsAAAAAA== +Block: 116 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFIUSk0BHwYvUDJTSC//////AQDyBSoBAAAAIyECj0sipvPHM6oX2Suk6PK+LqKb1d4d/p1V/1QzP9w28zasAAAAAA== +Block: 117 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDsVSk0C5wAGL1AyU0gv/////wEA8gUqAQAAACMhAmeMh63HQmd8cON/IfxgbUeQ7dFT1K21wLz9pxQS4Ry8rAAAAAA= +Block: 118 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHEVSk0BMQYvUDJTSC//////AQDyBSoBAAAAIyECN/Qd2eah2UkEmQg2RIfkcLW0ioNNergQqVMdEfek6resAAAAAA== +Block: 119 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBI4WSk0CGwEGL1AyU0gv/////wEA8gUqAQAAACMhAzMl14BRqQarAAF+6UfE6MZ9xSjCdSfs1kvgxHmb655FrAAAAAA= +Block: 120 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBIsXSk0C9wAGL1AyU0gv/////wEA8gUqAQAAACMhAl/2wZV0zb65Vo0vpQlAoAGfK6mW/XdHHHGupdwMOK4vrAAAAAA= +Block: 121 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAMYSk0BdwYvUDJTSC//////AQDyBSoBAAAAIyEDFeUkW4kgurJkKtZppFFONYbuCUqngDiX/Pt9+H0NJHSsAAAAAA== +Block: 122 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBAYSk0BCwYvUDJTSC//////AQDyBSoBAAAAIyECjMDQibQYuqWWAFTuz6dY6kNMSlqIosrrvIdLsUQmfRusAAAAAA== +Block: 123 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBoYSk0BBwYvUDJTSC//////AQDyBSoBAAAAIyEDxmWiC8T1BP8SGur/FIWgXfxYYcHKeL4npwGuFq67ACKsAAAAAA== +Block: 124 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBEgZSk0CKwEGL1AyU0gv/////wEA8gUqAQAAACMhAwHf2sC7W2d2IH994GJVVX7tRHe32CbuCtrzo2MLuMYVrAAAAAA= +Block: 125 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFUZSk0BCwYvUDJTSC//////AQDyBSoBAAAAIyED0hDa6WdJtpZ6p98G6m2UjqiixKyIuJ0MFPajGmjssBmsAAAAAA== +Block: 126 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKEZSk0BSwYvUDJTSC//////AQDyBSoBAAAAIyEC6Tum2NedfqmBS8N+FQE+NDwZ9KFXXPVWJyzmRk8JCCqsAAAAAA== +Block: 127 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBO8ZSk0BSgYvUDJTSC//////AQDyBSoBAAAAIyEC7KD44OHRMoAgeSAAC7x0Oj84FPEZi1Xg4SBSggQS4t2sAAAAAA== +Block: 128 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCEaSk0BLQYvUDJTSC//////AQDyBSoBAAAAIyED03efe2zTPZ5E5IEp9ISyf0FMMZEaBTOW03/yCvR2GM+sAAAAAA== +Block: 129 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBE4aSk0BKgYvUDJTSC//////AQDyBSoBAAAAIyECwalSu7EuBcSrjEG2inHKaIpIuFyoK1DRQJVYLf+HSjWsAAAAAA== +Block: 130 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGwaSk0BGgYvUDJTSC//////AQDyBSoBAAAAIyEDnJcLkSa7HVF9W8TBdvX3Vc0B5uy2lxV8HzLiYl89CSSsAAAAAA== +Block: 131 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKcbSk0CNgEGL1AyU0gv/////wEA8gUqAQAAACMhAgwI2E8OE8zFqqaK+g+tivMz9gGHpo+bHjh6ezyFdarBrAAAAAA= +Block: 132 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMUbSk0BGgYvUDJTSC//////AQDyBSoBAAAAIyED3vQjnrHezODS7A3yL6p+uEqBalS+A3ZcnJv1TGYlmdusAAAAAA== +Block: 133 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAAcSk0BNwYvUDJTSC//////AQDyBSoBAAAAIyECPgylKGKmLvlCsYsvfc6etncxnBfkOzyCsUc+2f/5/D+sAAAAAA== +Block: 134 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDkcSk0BNwYvUDJTSC//////AQDyBSoBAAAAIyEDmAG3xKRdjqz1TlXMHkjy8VCwBa7Z0BXDgSFyRhbSsiCsAAAAAA== +Block: 135 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNQcSk0ClwAGL1AyU0gv/////wEA8gUqAQAAACMhAql6KbWWtQ3glHcRUGYj3ZoP5FNTn8LrGsWCelXHorCDrAAAAAA= +Block: 136 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOYcSk0BDgYvUDJTSC//////AQDyBSoBAAAAIyEDI8XxVM4wiDQ8N0moqKA3aYzTf30OHKpT/oNa8gWnr2qsAAAAAA== +Block: 137 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBMwdSk0C4QAGL1AyU0gv/////wEA8gUqAQAAACMhAo49WfWmzQi7F5tzwpGkvJ6e8RKR7OYSVJSeKT9IiGhtrAAAAAA= +Block: 138 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNodSk0BCQYvUDJTSC//////AQDyBSoBAAAAIyECi017LAVObSf/5Rwfix/FhWBC2jNRTlZ4KfrnUnvfmTOsAAAAAA== +Block: 139 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBO8dSk0BFAYvUDJTSC//////AQDyBSoBAAAAIyECW2XIUIXSxutXOlHs48KS0x7TKI/XXyPp59+kvgAFu6isAAAAAA== +Block: 140 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPcdSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyEDpl1cLBpqfSzONTnwQsdqHOFjhHH0fdVVFDXhrKHzcz2sAAAAAA== +Block: 141 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBIkeSk0CjwAGL1AyU0gv/////wEA8gUqAQAAACMhAo639YmdK+SsumPwiPgosjcIPN4bguWzANGhJONA6npKrAAAAAA= +Block: 142 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBP4eSk0BcwYvUDJTSC//////AQDyBSoBAAAAIyEDh1Y6ou0Q7r88w3LyFO4Ou+VAckXDrbCqK+ieFH3jksCsAAAAAA== +Block: 143 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAcfSk0BBgYvUDJTSC//////AQDyBSoBAAAAIyECgYYEfoORKB4/4+fBR2LN2pELTRbhJSpFEos+/kwqOWmsAAAAAA== +Block: 144 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJofSk0CjwAGL1AyU0gv/////wEA8gUqAQAAACMhAlR7Ij1Y612nx2kHSPcKO6sVCct1ePqskDI5nwtrzjHWrAAAAAA= +Block: 145 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDsgSk0CngAGL1AyU0gv/////wEA8gUqAQAAACMhA//fMrrnSOufu49dboDO10CHqbQrMLK8IVpadlmbklNIrAAAAAA= +Block: 146 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBH0gSk0BPQYvUDJTSC//////AQDyBSoBAAAAIyEC5OG3sNSMSlP9KpYGnUWZdDg5VNohjMPMsH5fW6AxYNesAAAAAA== +Block: 147 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOggSk0BZQYvUDJTSC//////AQDyBSoBAAAAIyEDeEPHfTsL4Bfb3ccC4idXbDyNqcTkrZKEZVvj17uvpRSsAAAAAA== +Block: 148 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAAhSk0BGAYvUDJTSC//////AQDyBSoBAAAAIyED57ygEjbUgyC3aieMvHbX1pcm4LCUC3IOfdl+PP4fbGWsAAAAAA== +Block: 149 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBC4hSk0BKwYvUDJTSC//////AQDyBSoBAAAAIyED+FCDPTLkqxp0MVfJluKh57I19Dn9Iih7Woi6Tb8afRWsAAAAAA== +Block: 150 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJIiSk0CXgEGL1AyU0gv/////wEA8gUqAQAAACMhA+mAqc9h4nD0t45VfLx2UUUA0/p4kqxabd2ZmYuq6gbkrAAAAAA= +Block: 151 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBLQjSk0CHwEGL1AyU0gv/////wEA8gUqAQAAACMhAmPucb2v4yUFUs+fsMFzQHJ1j/9ce58LGgRe6RRh/euHrAAAAAA= +Block: 152 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBB0kSk0BZQYvUDJTSC//////AQDyBSoBAAAAIyEC9xVG/Fl+Y+KnLa3u61DAymQHmlpTDLAd2TlxbUHp1ICsAAAAAA== +Block: 153 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIckSk0BZwYvUDJTSC//////AQDyBSoBAAAAIyECTRtIq6UP01DI9p7iiDVWNa/jito7eNknrlptxob8CMmsAAAAAA== +Block: 154 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMUkSk0BOQYvUDJTSC//////AQDyBSoBAAAAIyEDRUuy+NWMnk9ILuZ8DsapFVsOEDCC2KhTZXhMPg/0pLGsAAAAAA== +Block: 155 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCglSk0BXQYvUDJTSC//////AQDyBSoBAAAAIyECpWAAkqzDwjMqnXaDKK1kwh8APDmky4ymzsjsiQwAPIysAAAAAA== +Block: 156 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBOklSk0CvwAGL1AyU0gv/////wEA8gUqAQAAACMhAyNBmkFIDhmpISxIaAl8BYhRlGkBGV02hWlvr5HUQ8SNrAAAAAA= +Block: 157 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPMlSk0BBwYvUDJTSC//////AQDyBSoBAAAAIyECVUwl8GtKXoE/NvfIsnO79lk3xtuTS0whn0U9xaWNfZ2sAAAAAA== +Block: 158 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBIEmSk0CiwAGL1AyU0gv/////wEA8gUqAQAAACMhA2eaRhiZvGK0In2a/nKOXB769+5t51fHwe27IRDD8RDWrAAAAAA= +Block: 159 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJUmSk0BEgYvUDJTSC//////AQDyBSoBAAAAIyECSnRxC9g7iWyJOp5+YM/FZgmbcbPsmVh5aSkjv/1Fr+KsAAAAAA== +Block: 160 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBL8mSk0BJwYvUDJTSC//////AQDyBSoBAAAAIyEC5D7rknn6lh1+hyHQtrGTqi5eDm7RQ3kZ9nTgfZeqQO2sAAAAAA== +Block: 161 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBIAnSk0CvgAGL1AyU0gv/////wEA8gUqAQAAACMhAky0lADzyWXLORNQEhDBS4Y+ALXvKIBDqAc++PzHoWMfrAAAAAA= +Block: 162 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPwnSk0BeQYvUDJTSC//////AQDyBSoBAAAAIyEDZl+fHnBeazj0LWAi5pTzm/sexX+/HOAWCH1HgkKwPJGsAAAAAA== +Block: 163 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBMkoSk0CygAGL1AyU0gv/////wEA8gUqAQAAACMhA8WnNOO3JQUBUrPDxen13ndh2yW+n3MxlW+XRd2iTLcCrAAAAAA= +Block: 164 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOooSk0BHQYvUDJTSC//////AQDyBSoBAAAAIyEC/lxWWAay2wT4o39Tr2Ns7nwO+lyMF5SZq8rI1U1X/FKsAAAAAA== +Block: 165 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBHspSk0CjwAGL1AyU0gv/////wEA8gUqAQAAACMhAk3t/tXOCj9LycCuXAWJ0v8jtOUZvOEgiA/jVcpaDVusrAAAAAA= +Block: 166 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBBIqSk0CkwAGL1AyU0gv/////wEA8gUqAQAAACMhA9xfxtKVRJeu2iyjBtle7aNf4PX9iJp49sOdNZngbhberAAAAAA= +Block: 167 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBUqSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyEDzt1mHK9GZEgenCDf5gVQ9pkqBW2ynXSIx+R/u1p4+7+sAAAAAA== +Block: 168 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBB8qSk0BBgYvUDJTSC//////AQDyBSoBAAAAIyECcmG4uffmlftTc8/q0HovvNkqByGT9iSYD1JLoD3T2KGsAAAAAA== +Block: 169 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCQqSk0BAQYvUDJTSC//////AQDyBSoBAAAAIyECKJDBT07ersXWrdbd1y6AZ2YDmQQ6+Vp4g6NLUMTJ+qysAAAAAA== +Block: 170 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGgqSk0BQgYvUDJTSC//////AQDyBSoBAAAAIyECZWWUoDCWh1c1W9w74ve+UH981Eo1UM5e/1v5cAU6fOSsAAAAAA== +Block: 171 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIYqSk0BGQYvUDJTSC//////AQDyBSoBAAAAIyEDF2fHjUsx87d2NosEP+141eCTd+K3U51XYtvUrlrtDN6sAAAAAA== +Block: 172 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBK4qSk0BJwYvUDJTSC//////AQDyBSoBAAAAIyEDFRrbmh92qUy24UA0dOBXZkjabZdjzX09/eehBoXur4WsAAAAAA== +Block: 173 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDQsSk0CgwEGL1AyU0gv/////wEA8gUqAQAAACMhA9V0fQUO8S9LLUYyAF/C1pjsS4Nj04HBCWOIMBeJQpIfrAAAAAA= +Block: 174 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJIsSk0BWgYvUDJTSC//////AQDyBSoBAAAAIyEDUY2+hN3z/qi3FLQeVdbXeo2qvk+n2HI7YnmL++mj2JqsAAAAAA== +Block: 175 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBA0tSk0BdwYvUDJTSC//////AQDyBSoBAAAAIyED2ajBIKQoSY0sQtN9UXzjxN9RdlATZuFxZtE/VNb8TRGsAAAAAA== +Block: 176 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCktSk0BGgYvUDJTSC//////AQDyBSoBAAAAIyED0zYlPDsSgALLnDg8eSTEv1O+XSZip7udyNxu6mct6dysAAAAAA== +Block: 177 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBD4tSk0BEwYvUDJTSC//////AQDyBSoBAAAAIyECnmCVvaEzV5T+87o5aRJ7V+zCO1cDMiN8RQrpstQoIC2sAAAAAA== +Block: 178 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEEtSk0BAQYvUDJTSC//////AQDyBSoBAAAAIyECw1GLuJsZoO7CcGxZqIj0Fde9iM46b2hCOkkPzYbPpVCsAAAAAA== +Block: 179 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNQtSk0CjwAGL1AyU0gv/////wEA8gUqAQAAACMhA9FiMoAzSvLf//IuTOJ7iIr42iWVGqjSPJgOwD/I11G1rAAAAAA= +Block: 180 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBIkuSk0CsQAGL1AyU0gv/////wEA8gUqAQAAACMhAgzoxgCUp6u2tfbFsyVyNtQa1/eOlPEKsP22ypizmbPArAAAAAA= +Block: 181 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNcuSk0BSQYvUDJTSC//////AQDyBSoBAAAAIyED/KDiunzajPWWBt5052FD09r91nJKgwvJUXu9j+zK8qCsAAAAAA== +Block: 182 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOQuSk0BCwYvUDJTSC//////AQDyBSoBAAAAIyECAbjIKatNox8k1l5eferyl5W0rT74d1W4ZMHOlBmCypWsAAAAAA== +Block: 183 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDYvSk0BTQYvUDJTSC//////AQDyBSoBAAAAIyECDCHJxkNMLSKT4njHLAKf6Fie9Y6EIKdO1Sh7OpFaHB2sAAAAAA== +Block: 184 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNgvSk0CngAGL1AyU0gv/////wEA8gUqAQAAACMhAkuwZCiL1dTp6Gkdi29dKmRdOduF1BfZOSTmEeGVX6b0rAAAAAA= +Block: 185 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPkvSk0BHwYvUDJTSC//////AQDyBSoBAAAAIyECxpIXgk3R2CVVVDs9VbcrPR9+ENIS/+EmgydRuJb02CisAAAAAA== +Block: 186 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJgwSk0CmQAGL1AyU0gv/////wEA8gUqAQAAACMhAtL4lYkIp7ccSXLAtdvkK4ItTk1+TGDCEzuV5nEyBVErrAAAAAA= +Block: 187 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOwwSk0BUgYvUDJTSC//////AQDyBSoBAAAAIyECPCzw98DWpVH8vkz5wB/gBPPv/PSW9hpJuvuBmUzqyyKsAAAAAA== +Block: 188 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPsxSk0CCwEGL1AyU0gv/////wEA8gUqAQAAACMhAvngQPVLq7NX+R44ubEpXFXPa54gDs75/TuqqNVfIISqrAAAAAA= +Block: 189 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCQySk0BJQYvUDJTSC//////AQDyBSoBAAAAIyECcV6R030jneqDLxRg6R42gRXYymzCOn2pZnlautnjtpmsAAAAAA== +Block: 190 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEIySk0BGgYvUDJTSC//////AQDyBSoBAAAAIyECOsJ4ba9fVJTKq/sBzn8ZyEMY40Xde7mq8IqgxzJsiP2sAAAAAA== +Block: 191 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHwySk0BNgYvUDJTSC//////AQDyBSoBAAAAIyEDYaxjeSGC4vmLLnZSBiOQoVs/N8OQhh1VjbsmvSJWDeOsAAAAAA== +Block: 192 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKcySk0BKgYvUDJTSC//////AQDyBSoBAAAAIyEDE6nEK2vcgUcSPaAGG1lcRoVpH9pMgMELnLyWp8PSEtSsAAAAAA== +Block: 193 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPkySk0BTwYvUDJTSC//////AQDyBSoBAAAAIyECgiabwnuNypax6R76wnwP+WoSo5URuQfZJNXGzMJMDHCsAAAAAA== +Block: 194 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDozSk0BPAYvUDJTSC//////AQDyBSoBAAAAIyECRpq1+j+DYgxIgFHEm9UXzHN17P9kTVK05kSzXTwJbgusAAAAAA== +Block: 195 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPUzSk0CtQAGL1AyU0gv/////wEA8gUqAQAAACMhA255L0d5BkzSHLyHyk1k2g8YQ+rO+KUmbt2wRBdI4IAXrAAAAAA= +Block: 196 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBE0Sk0BGQYvUDJTSC//////AQDyBSoBAAAAIyECAIZcl1++mP3bwjoeLm+zNyIQs+IvDkC1PCV4PTBlmtGsAAAAAA== +Block: 197 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHI0Sk0BXQYvUDJTSC//////AQDyBSoBAAAAIyECjLR7uNNby9GgkoGEDLZJ9E+5jbEpdYjmn+DIaqV7EICsAAAAAA== +Block: 198 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIc0Sk0BEgYvUDJTSC//////AQDyBSoBAAAAIyED2qBTZEmx5B7uBDjoBvifJC47pnN69ttFkXMLKYbIV/2sAAAAAA== +Block: 199 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBN40Sk0BVwYvUDJTSC//////AQDyBSoBAAAAIyEDqq5d+o3hT8+n8SFTXNxKed5P2hHyzqF5aueZsBs8q/isAAAAAA== +Block: 200 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFw1Sk0BegYvUDJTSC//////AQDyBSoBAAAAIyECfYhreF3fEPCFznCYEHUP49yTjI2+QNlrB/Gnq5CcsF+sAAAAAA== +Block: 201 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIE1Sk0BIQYvUDJTSC//////AQDyBSoBAAAAIyED/MnOAprXSvn+yszmi8x3XMbvywAKC4zCs6rK1IULxLCsAAAAAA== +Block: 202 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIQ1Sk0BAQYvUDJTSC//////AQDyBSoBAAAAIyEDGLR8jsPYWgkNOT25W2J35cPx1tEynq0CqOcvIzc+/JesAAAAAA== +Block: 203 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKg1Sk0BIQYvUDJTSC//////AQDyBSoBAAAAIyEDpTE0hjwmpiIpprcrlfdySjeIXsPXiHcRsbc1nuzsNeCsAAAAAA== +Block: 204 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM81Sk0BJQYvUDJTSC//////AQDyBSoBAAAAIyECFv8YWuZ34zrgQrQJtZm7l1uU/+VAiK+MPKNp6LwyK/CsAAAAAA== +Block: 205 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNw1Sk0BCQYvUDJTSC//////AQDyBSoBAAAAIyEDqIiMpDLtIWiJdsenyU/cG+8Dkb1K6fFgIw0+xtrJpH+sAAAAAA== +Block: 206 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDg2Sk0BWwYvUDJTSC//////AQDyBSoBAAAAIyEDkkPygwnlTXCiX1sKhnXsLegIt0Ljcr9xpFA1SAchL5usAAAAAA== +Block: 207 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEY2Sk0BCQYvUDJTSC//////AQDyBSoBAAAAIyEC0cirEKovJKnAWPMlnZASXhXiq5hBtVY9NmHia/SDip6sAAAAAA== +Block: 208 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIs2Sk0BQQYvUDJTSC//////AQDyBSoBAAAAIyEDR3mrcSLWZyPk+AEZeqDYbMU369AyilWs62jasGgH/FisAAAAAA== +Block: 209 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPc2Sk0BZgYvUDJTSC//////AQDyBSoBAAAAIyECI1tcjpvtgMvY13MdVfn9cI0Q66cYW5MEW2YTmMF0DGqsAAAAAA== +Block: 210 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKU3Sk0CqwAGL1AyU0gv/////wEA8gUqAQAAACMhA4UT2yCaEBXO8+K1tsUXtXvcF/gUyER4o6Mp88+7U7o4rAAAAAA= +Block: 211 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM43Sk0BJwYvUDJTSC//////AQDyBSoBAAAAIyEDQztds6F7JDGdYV3FwkUj1r7QuyPBfdtwItfxQpwDjPSsAAAAAA== +Block: 212 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNc3Sk0BBgYvUDJTSC//////AQDyBSoBAAAAIyEDkO6NUxYzgjwm87IpiOTuAOggdX4N8eq3yLWExeVjzxWsAAAAAA== +Block: 213 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEM4Sk0BaQYvUDJTSC//////AQDyBSoBAAAAIyECVggb+D65XJ0dUkYoiY6b8dQ2WrI/1Slbqnx1ksHEndSsAAAAAA== +Block: 214 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKo4Sk0BYwYvUDJTSC//////AQDyBSoBAAAAIyECBIkqmiTU8fNIMESRp4yM/BAhwbuwjyf3JgY3lYArr06sAAAAAA== +Block: 215 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBI85Sk0C4gAGL1AyU0gv/////wEA8gUqAQAAACMhAkuKR3KQysRLoewC6BecSqjM+t3ka1XFiNlBB86Te8ARrAAAAAA= +Block: 216 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKE6Sk0CDQEGL1AyU0gv/////wEA8gUqAQAAACMhA7jPtN3qUeGA6atc5I6F+797GlFI9rOt/oDjZhAEJ/x6rAAAAAA= +Block: 217 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCE7Sk0BfwYvUDJTSC//////AQDyBSoBAAAAIyECGcFv4b+90LIVuMhMZrmZrBL2HElwCE/ZeIwp2lSkbFOsAAAAAA== +Block: 218 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDI7Sk0BDwYvUDJTSC//////AQDyBSoBAAAAIyECVMM/t4acgW2wl3m7rNrmW2Bcb6o9eysiGc5ZkimmKk2sAAAAAA== +Block: 219 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEU7Sk0BDwYvUDJTSC//////AQDyBSoBAAAAIyED9fuhtvoIzHBSYAYPUi18+TxpIuT3xLBEo5jugxaqzJKsAAAAAA== +Block: 220 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJg7Sk0BTQYvUDJTSC//////AQDyBSoBAAAAIyEChBswuJJl+LxHr3C8ZIa0nhEHu9dF7CBr9KIg9nc3UWesAAAAAA== +Block: 221 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBN07Sk0BQwYvUDJTSC//////AQDyBSoBAAAAIyECTfrdKVALUbJ2oTu3TOt89rmu14vx8AzqVBauraYZGgWsAAAAAA== +Block: 222 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDM8Sk0BUQYvUDJTSC//////AQDyBSoBAAAAIyEDEV1Fnz7h+T1mFnKt5rmQfzQyPHUQ1+2t4ggDkaMcc9GsAAAAAA== +Block: 223 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIE8Sk0BSgYvUDJTSC//////AQDyBSoBAAAAIyEC2sGJQbO4JHenGo2TZQQJcET2SFD2GiXBolI5/CuAU7ysAAAAAA== +Block: 224 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIk8Sk0BBQYvUDJTSC//////AQDyBSoBAAAAIyECAvjkjnxZZ5iWH+/mxnKPN4D4g5CowExSUXPQpoi3S42sAAAAAA== +Block: 225 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM88Sk0BQgYvUDJTSC//////AQDyBSoBAAAAIyEDEuJepCVFIAzYpkz71pIQRcbXJntufmttiYSx4Je26desAAAAAA== +Block: 226 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNo8Sk0BDAYvUDJTSC//////AQDyBSoBAAAAIyECLZc94YDLPFptsR2czEZhaZ+pcdPoLYYVJB751wF34FesAAAAAA== +Block: 227 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOI8Sk0BBgYvUDJTSC//////AQDyBSoBAAAAIyECfG5yGKhAyG0ZcdqyJU/qSksw97f/IiRxi+V5VaeyOn6sAAAAAA== +Block: 228 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBC89Sk0BSgYvUDJTSC//////AQDyBSoBAAAAIyEDLtOWt889VoeQivkM0OD5gPvu4EZjsearjW+6aAktEIusAAAAAA== +Block: 229 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDM9Sk0BAgYvUDJTSC//////AQDyBSoBAAAAIyECANaEjBFFTE1JizLMEMoGfQVkfiSwJHqradz50PWbYwqsAAAAAA== +Block: 230 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBGo+Sk0CMwEGL1AyU0gv/////wEA8gUqAQAAACMhAiRR64mo80zoSkOCKV95wLrA3gRJbNMCE9T0oxAIvcjYrAAAAAA= +Block: 231 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMQ+Sk0BVwYvUDJTSC//////AQDyBSoBAAAAIyEDcn8cAvoY/POn5kd0YqL63Ub6xgexr8TqR0Tls7wu60msAAAAAA== +Block: 232 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPA+Sk0BKQYvUDJTSC//////AQDyBSoBAAAAIyECjWiw8RmTXPx4gsMqorvySezHazpv92KB9eZ9PHj04BqsAAAAAA== +Block: 233 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBA4/Sk0BGgYvUDJTSC//////AQDyBSoBAAAAIyECNdE1/RytMjMSHbHimpZmjabjB+8EYqZniTebq7N+ghKsAAAAAA== +Block: 234 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFE/Sk0BQgYvUDJTSC//////AQDyBSoBAAAAIyEDmekRYSKx5XfTCkyZVAdiP6Q4DTHxwNivraFaO97GvEKsAAAAAA== +Block: 235 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNY/Sk0CggAGL1AyU0gv/////wEA8gUqAQAAACMhAkHJPaTCsoHXiY2be2mOKtscOGlv2qpYRa79Jz7Vp3UnrAAAAAA= +Block: 236 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEBASk0BZQYvUDJTSC//////AQDyBSoBAAAAIyEDeDF4XubIYSUDpx4+aosCmjB7gkUp08Nr6gs7QBx18N2sAAAAAA== +Block: 237 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJZASk0BUwYvUDJTSC//////AQDyBSoBAAAAIyEDq6NpbCSWZNlsn+fgnTEBAHEYnACZXZVzAmrrV+4Y4UKsAAAAAA== +Block: 238 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBChBSk0CjQAGL1AyU0gv/////wEA8gUqAQAAACMhAtyS1H1w3anahuWIOZyrKS1kex0IvtxmonHeXFfUWmEDrAAAAAA= +Block: 239 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBM9BSk0CoQAGL1AyU0gv/////wEA8gUqAQAAACMhAlNuTA+BQrHA0LOtsgkwKzhzIuzDbyjyHdMgEQOc+ANSrAAAAAA= +Block: 240 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOBBSk0BCgYvUDJTSC//////AQDyBSoBAAAAIyEDdrS5vHRcn6Akg58B/WI11I9TDq5rwQxpB87c95kCDOusAAAAAA== +Block: 241 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBO1BSk0BCQYvUDJTSC//////AQDyBSoBAAAAIyEC+sHBligYx4TtS+cWEZhv2wbBlXfUEPREeqnI5wWYNgmsAAAAAA== +Block: 242 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPFCSk0C/gAGL1AyU0gv/////wEA8gUqAQAAACMhAz5/DxQyf8ROkF4Pg2gD8MYJED0F/URrV0awvF4FMRKNrAAAAAA= +Block: 243 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJ1DSk0CqgAGL1AyU0gv/////wEA8gUqAQAAACMhAvEL6Z0o6OqWZOUYN/3jknjg73MN6uEfYrO8U0szpYcOrAAAAAA= +Block: 244 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMVDSk0BJgYvUDJTSC//////AQDyBSoBAAAAIyEDgzMUayirzRYw3yrhUGTSSwIKEH7UVviFj4UC72FDRlesAAAAAA== +Block: 245 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBClESk0BYwYvUDJTSC//////AQDyBSoBAAAAIyEDsknmetlzUMelgrf+MTCgNbpc6IsOyW0170PjRJT2dFusAAAAAA== +Block: 246 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBLJESk0ChQAGL1AyU0gv/////wEA8gUqAQAAACMhAuNLBd7+swlxHxCEeLiXEOYRW/gFQdlgwnIg1JmHbbFKrAAAAAA= +Block: 247 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAZFSk0BUQYvUDJTSC//////AQDyBSoBAAAAIyED8NnbkMpwQSlCl2bnp7p9Ah38qaf/idUQWm5qElWt89OsAAAAAA== +Block: 248 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNxFSk0C1AAGL1AyU0gv/////wEA8gUqAQAAACMhAt7m1hSRY4iYKgdUxenze6Z4eKAe2wA3KD8ldqOw8IohrAAAAAA= +Block: 249 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPtFSk0BGwYvUDJTSC//////AQDyBSoBAAAAIyECoxw6WUVf3l0sGw5/qht59qsliYPKImFMIBrzITNSvbOsAAAAAA== +Block: 250 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBB5GSk0BHQYvUDJTSC//////AQDyBSoBAAAAIyEDa/5HErDUCl+ilct1eVsU1FR8A3nFJHHBJX3myJtQuSusAAAAAA== +Block: 251 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJtGSk0BewYvUDJTSC//////AQDyBSoBAAAAIyEDOfeN78x5nXPqNHxfujrEVkRbFrgKArtNuKQz4umMDMKsAAAAAA== +Block: 252 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBO5GSk0BTwYvUDJTSC//////AQDyBSoBAAAAIyECgARqRE+dW6czGMxEd4Qp62s/tOtSOf2yfqTXLQigx/isAAAAAA== +Block: 253 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCFHSk0BLQYvUDJTSC//////AQDyBSoBAAAAIyECGlK3+ujjmC3/bNJUwmrULEeC9wxE6uUTymGByu0Nop2sAAAAAA== +Block: 254 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHJHSk0BTQYvUDJTSC//////AQDyBSoBAAAAIyEDr1fLoRViqetDWdhvOnfoTg/YbqmCjZK6n5vUAjOHw1OsAAAAAA== +Block: 255 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKJISk0CKgEGL1AyU0gv/////wEA8gUqAQAAACMhAiF850NCmPpCLZg6E1c2vK8Y12mh0SRqj5UHoiwegTE0rAAAAAA= +Block: 256 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBN9ISk0BOwYvUDJTSC//////AQDyBSoBAAAAIyEDVsPykwKGvHLHzZXEaKdvUxqXECAP9vU1aEunYXrtTQCsAAAAAA== +Block: 257 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFhJSk0BdQYvUDJTSC//////AQDyBSoBAAAAIyEDa7ISIXjuDKz+uNL5/TL3KYXhTFXj2qfjr02EURWSut2sAAAAAA== +Block: 258 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDFKSk0C1gAGL1AyU0gv/////wEA8gUqAQAAACMhA/VtPpHLdmU8spftyBYtXH857a+QxbZ/5G3YSxObE+lhrAAAAAA= +Block: 259 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDdKSk0BAQYvUDJTSC//////AQDyBSoBAAAAIyEChiMwbDSEP/9mZGdOsFD4JM/8Vhhu8zcqulQnDwtEhQKsAAAAAA== +Block: 260 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEhKSk0BDQYvUDJTSC//////AQDyBSoBAAAAIyECKsh+x8WJnVho7hFgccsYTtUwz0slkPW7SKfrY3QC0FysAAAAAA== +Block: 261 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEtKSk0BAgYvUDJTSC//////AQDyBSoBAAAAIyEDTn70G2FwjOklF1WM+0/h6OHxm6gEkcgB1gXdJ+wxo0CsAAAAAA== +Block: 262 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHxKSk0BLQYvUDJTSC//////AQDyBSoBAAAAIyEDypCWFxqTkpoIgRo1OgVBTuxOMkz4n0IODvsmMFEG2kSsAAAAAA== +Block: 263 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBAJLSk0CgwAGL1AyU0gv/////wEA8gUqAQAAACMhA7Zo5osQ9NKd6UJNOmEqvjmveXdSUeIUkQHv7qSlQ6HVrAAAAAA= +Block: 264 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDZLSk0BMgYvUDJTSC//////AQDyBSoBAAAAIyEDfIBMO0DZ7ILWnWPjgPsbCXd2iCFmDhdnCL9+17M2bcusAAAAAA== +Block: 265 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKRLSk0BagYvUDJTSC//////AQDyBSoBAAAAIyECAMcAWmPnFWdAjyLXES99MTnr6TbIp9rkinzUOV0b04esAAAAAA== +Block: 266 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJ9NSk0C+AEGL1AyU0gv/////wEA8gUqAQAAACMhAtK3cpic/viQVF/p4GRN7ZuuFbmka41cnYUgfhae21zLrAAAAAA= +Block: 267 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOZNSk0BRAYvUDJTSC//////AQDyBSoBAAAAIyECHZsSLy6OzVh6BTL+lnMJdJUFg/y+lNn1gQdFlQIu5iCsAAAAAA== +Block: 268 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPZNSk0BDAYvUDJTSC//////AQDyBSoBAAAAIyECR26G1B7pkR0TbXpUbz0JJ3gA+J4ijsBy72VgfDV/xyysAAAAAA== +Block: 269 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBVOSk0BGwYvUDJTSC//////AQDyBSoBAAAAIyECuBY3aJnhxeMerlYihgEGBGF9vCfoypFS7Z1Xjm9P6I6sAAAAAA== +Block: 270 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPdOSk0C3gAGL1AyU0gv/////wEA8gUqAQAAACMhApd8Sk/3u6WL5vWSHaDvg3UUaZ604WHJfqODwT7TyA+QrAAAAAA= +Block: 271 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDNPSk0BNwYvUDJTSC//////AQDyBSoBAAAAIyEDnBENVP9DDw7ClCIT+HHnwbXsUqh9MJ0TupDZ8rDdBoOsAAAAAA== +Block: 272 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBERQSk0CDQEGL1AyU0gv/////wEA8gUqAQAAACMhA7GPp0LHwkqy4FBy0SgDqXYhTiWEsCWs7GNqKgM1iYRPrAAAAAA= +Block: 273 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFdQSk0BEwYvUDJTSC//////AQDyBSoBAAAAIyECt+vOKLtL9wKpEUjVVVWrSsQ99sgx/YqV+8/CkUiY9HqsAAAAAA== +Block: 274 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIlQSk0BLwYvUDJTSC//////AQDyBSoBAAAAIyECs2+OzzEBWMfTShnFaTJnjEVCXava4psybbPWVrovnDqsAAAAAA== +Block: 275 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBI1QSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyECTZvPfgwKuXVlOrX5UJ54Mpxb4uVzFgSN7HYolgaJbMWsAAAAAA== +Block: 276 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKZQSk0BFwYvUDJTSC//////AQDyBSoBAAAAIyEDU498ZAACzeVS1BhC1r6RWvBYcBlbiq9lLkteirNrzQisAAAAAA== +Block: 277 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBHJRSk0CxwAGL1AyU0gv/////wEA8gUqAQAAACMhA/RFf4WMmTOKzPGcvMS3CZmOYRCCC+fZzAFrhrULAvuPrAAAAAA= +Block: 278 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBAtSSk0ClwAGL1AyU0gv/////wEA8gUqAQAAACMhAn4j+GKryGb9RE6dVgrP62b6Nq6hK3rEjZ+ZmLvWwOsNrAAAAAA= +Block: 279 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKBSSk0CkwAGL1AyU0gv/////wEA8gUqAQAAACMhAu76Jj0FzhyaSUZQlcV3LuFbz1pOz1IfyvdlM4Oos8yHrAAAAAA= +Block: 280 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBFlTSk0CtQAGL1AyU0gv/////wEA8gUqAQAAACMhAs1FOotXlgkLRDgWQU/yi/aE0U8U/zQpR6PbM6pu0q4hrAAAAAA= +Block: 281 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBLBUSk0CUQEGL1AyU0gv/////wEA8gUqAQAAACMhAkdpln3V9AtTGVHXI7VTPBdGiI9Rnb/wO28AHp//mHFnrAAAAAA= +Block: 282 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM5USk0BGQYvUDJTSC//////AQDyBSoBAAAAIyEDRMzrgAFXp9wnzwC8uCQqwgnar1WobSiC9WzGZNzfXVasAAAAAA== +Block: 283 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBG9VSk0CngAGL1AyU0gv/////wEA8gUqAQAAACMhA3j5R+g938N7rDkoun/hCAMimKYCp+86cJn/7z13BjXWrAAAAAA= +Block: 284 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBFpWSk0C5gAGL1AyU0gv/////wEA8gUqAQAAACMhAgjV9Yp7qlyyUjp5/dIb2fmwXBp7gClhYOOpnlKCdQHSrAAAAAA= +Block: 285 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBLlWSk0BXQYvUDJTSC//////AQDyBSoBAAAAIyECcSk5hCxpm5aMlEGVoaA9RywmsnNHrssmAsRGksFNnT2sAAAAAA== +Block: 286 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMRWSk0BBwYvUDJTSC//////AQDyBSoBAAAAIyECv7BfnETqQMg9qkxrz2QfCbDysKg25BOhNICvsMqjw1ysAAAAAA== +Block: 287 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBP5WSk0BNwYvUDJTSC//////AQDyBSoBAAAAIyED4HbHp25RfjeF4/IL8+qUbozO7SV8OKJ4XkJ2OZmx+9usAAAAAA== +Block: 288 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBGRYSk0CYgEGL1AyU0gv/////wEA8gUqAQAAACMhAtEEIYRvVcin+cG9/gPyEcuYrmfYMyuHqS3SzgnHr5ddrAAAAAA= +Block: 289 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBN5YSk0BdwYvUDJTSC//////AQDyBSoBAAAAIyEC05rigcMpbb2gI6UjOmpb/88BwcYraM/jY2DxyM3FJmesAAAAAA== +Block: 290 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPxYSk0BGQYvUDJTSC//////AQDyBSoBAAAAIyECYiGYIUzxQ9c4YeyROSxocG03qkh20EfIbzSHcErfvZ2sAAAAAA== +Block: 291 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBA9ZSk0BEQYvUDJTSC//////AQDyBSoBAAAAIyECjyOgf/1GIcunyn0Cfe3RSX+sTQvyqAi7qJY2IPQ3bgqsAAAAAA== +Block: 292 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHRZSk0BYgYvUDJTSC//////AQDyBSoBAAAAIyEC0V1OVIMreuaIkQHBRjxouu1+JiPFsRewlyid9DhqlC2sAAAAAA== +Block: 293 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBPhaSk0CfgEGL1AyU0gv/////wEA8gUqAQAAACMhAxu9yrpjkeru+WGSNSNnYZsFVyczB75DrMuFS0O1yfCjrAAAAAA= +Block: 294 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBM1bSk0C0gAGL1AyU0gv/////wEA8gUqAQAAACMhA0YYJPx+9uCN8vVD4mM5yy4P1OuyBMGfQWXC3hHWShEprAAAAAA= +Block: 295 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBM9cSk0C/wAGL1AyU0gv/////wEA8gUqAQAAACMhAsPL3L0C3ePoQz3QeR49kSGk172zGa8GOtvgXF3j8AsLrAAAAAA= +Block: 296 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEhdSk0BdgYvUDJTSC//////AQDyBSoBAAAAIyECGX/6hW/UpcmWJHDxEiKvpWKpxfMAM0UaWGEZX90iA96sAAAAAA== +Block: 297 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHddSk0BLgYvUDJTSC//////AQDyBSoBAAAAIyEDDkC6bD0vBFNhdHlq71Fra3jvriynTUE+Tf8VCLYcE4ysAAAAAA== +Block: 298 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMBdSk0BRgYvUDJTSC//////AQDyBSoBAAAAIyECV+oP9slNLFb1OX8bo+r1BWGUuIA1T7cz+9WfbiDfyQCsAAAAAA== +Block: 299 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMtdSk0BCQYvUDJTSC//////AQDyBSoBAAAAIyECT/h+SGj1AvaJDPeLhBajxkANRuZel1P/8lBAXGHmxB2sAAAAAA== +Block: 300 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCNeSk0BVwYvUDJTSC//////AQDyBSoBAAAAIyECUDdwpPmbGWv7WSTQzccC+ZGKRZMQMw9ueAQebmL/Fm6sAAAAAA== +Block: 301 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDVeSk0BDgYvUDJTSC//////AQDyBSoBAAAAIyEDShd/ShSrI5j25YHL6AdMyynwXwPLE7RA3zih+25NfPSsAAAAAA== +Block: 302 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKteSk0BcwYvUDJTSC//////AQDyBSoBAAAAIyEDm5d0lWNxKRpg4haXTbnqyGGh4TkM6vqhwN5cKO9uET2sAAAAAA== +Block: 303 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJ5gSk0C7gEGL1AyU0gv/////wEA8gUqAQAAACMhAxNe3FaWa8OEIOs7vES7Q1oobsGXPC+ZdrkgxtAxIxCGrAAAAAA= +Block: 304 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBI5hSk0C7wAGL1AyU0gv/////wEA8gUqAQAAACMhAiND40HQsVyLEQ9MBsuL2VRt2j781ePe+RlnqwIjCn3HrAAAAAA= +Block: 305 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNlhSk0BRQYvUDJTSC//////AQDyBSoBAAAAIyECskvdq1owUIMtUU0/wCJxztKXIn+SEb9h0o9tmH8Dbk2sAAAAAA== +Block: 306 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBpiSk0BPQYvUDJTSC//////AQDyBSoBAAAAIyECiHXTU2Qrp89KYrw5yarUE55ZxOgJK5p4QOC7f3Li5jWsAAAAAA== +Block: 307 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBHNjSk0CVgEGL1AyU0gv/////wEA8gUqAQAAACMhA+bmB9+1FT/JHTSR0DXe9L5qTZMUGMkeCyAqvAh9x33GrAAAAAA= +Block: 308 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMZjSk0BTgYvUDJTSC//////AQDyBSoBAAAAIyED04A+WhT5nJIlRChBs3K3PqoDj3GKt6Xs2ib+bI0EQlasAAAAAA== +Block: 309 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDZlSk0CawEGL1AyU0gv/////wEA8gUqAQAAACMhA9sulRR4GAhwIIoWySbA7Dv8JiHu3R25D1UuAZgUdmnBrAAAAAA= +Block: 310 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDtlSk0BAwYvUDJTSC//////AQDyBSoBAAAAIyECRAZ0utIh6PixGzYmncAGio8s9Er18UDGf8YOrr9qkC+sAAAAAA== +Block: 311 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBMBlSk0CgwAGL1AyU0gv/////wEA8gUqAQAAACMhAp2lvs7yS4KPZo+Rzl3O5r2U8zxJqx9BAe4RNWejmdmRrAAAAAA= +Block: 312 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBChoSk0CYwIGL1AyU0gv/////wEA8gUqAQAAACMhApggy0FpE/aiEX61RBVgGj/jLyb+aEJkkApHWkP8SjlNrAAAAAA= +Block: 313 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDBoSk0BBQYvUDJTSC//////AQDyBSoBAAAAIyEC1RZXAXheb0vne7pyxo0wJ+6gdMp8KrGy1ogtsA90N5GsAAAAAA== +Block: 314 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDloSk0BBwYvUDJTSC//////AQDyBSoBAAAAIyEDu6E6EXgrPYWgrmSNq2HKl3o8Huo6YETBMtmnEkv4jh+sAAAAAA== +Block: 315 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKJoSk0BZwYvUDJTSC//////AQDyBSoBAAAAIyECn0ZcxFfxFSVd1QxxYiQy+4Xr4WgsyIV+bOGMSNJoxLOsAAAAAA== +Block: 316 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBK1oSk0BCQYvUDJTSC//////AQDyBSoBAAAAIyECDR8TNLIw3DOojCFg18iSDPPyHd5Hr0dY4xZU/AbTpCusAAAAAA== +Block: 317 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBD1pSk0CiQAGL1AyU0gv/////wEA8gUqAQAAACMhAx/cpRd4jHhU40CZ3Tt09V6NV6fRnY6oops5AaK9hFkHrAAAAAA= +Block: 318 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBExpSk0BDgYvUDJTSC//////AQDyBSoBAAAAIyEDWz3ypJACXosV1QLe/I8ajC08ezpMgRdpPO4RCyt0oP+sAAAAAA== +Block: 319 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMRpSk0BdwYvUDJTSC//////AQDyBSoBAAAAIyEDEQInMLJ9QQ6q+X9sFucLwJ22KlvRzbpgCcd0bRFvMdasAAAAAA== +Block: 320 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPJpSk0BKgYvUDJTSC//////AQDyBSoBAAAAIyEDzDSFi5e6rt2VKVQUkHqaUJtMy4mH3KJzocE3/EqmW9msAAAAAA== +Block: 321 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBLVqSk0CwQAGL1AyU0gv/////wEA8gUqAQAAACMhA1wQCXL/jFctyA6qFalYq5kGTXxrnlXw5kCN7BHt1N67rAAAAAA= +Block: 322 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPdqSk0BPQYvUDJTSC//////AQDyBSoBAAAAIyECYcgeGzWMxdkmN3wHj3FqGdiqCZ/s1gvDeaiJl6GW/m+sAAAAAA== +Block: 323 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBANsSk0CCwEGL1AyU0gv/////wEA8gUqAQAAACMhArOwhWKN7fNEsylQYOs9FrELB8SbVvlhYfyWK1AIUYPyrAAAAAA= +Block: 324 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBA1sSk0BBQYvUDJTSC//////AQDyBSoBAAAAIyED6SIqWnTyJt0LeaMotEXe1vnDoifwcnOYzQ3GYPtKBbSsAAAAAA== +Block: 325 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBZsSk0BBQYvUDJTSC//////AQDyBSoBAAAAIyECW7o6ef/zh8wZx+wqvW+PGW49b2dGgXC3Olhnx8pUaWusAAAAAA== +Block: 326 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBHdsSk0BXgYvUDJTSC//////AQDyBSoBAAAAIyEC54WZrmPKmTwjRDgZxaPojONpKtkTfLE1MDfDfNR7So+sAAAAAA== +Block: 327 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBI5sSk0BFQYvUDJTSC//////AQDyBSoBAAAAIyEDjSNUWZW6G78p6QlDKas3EGrj5TtxwcWmCpdLrLQ78CSsAAAAAA== +Block: 328 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJ9sSk0BEQYvUDJTSC//////AQDyBSoBAAAAIyEDzm4l+afXBIHj0t8M3TF9aBPC0y2yb2ShJrweti1oJ8GsAAAAAA== +Block: 329 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBCxtSk0CiQAGL1AyU0gv/////wEA8gUqAQAAACMhAq+s961cy+5zZRwWiP64GdvmGWaCNG57f8agT/pQs78OrAAAAAA= +Block: 330 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJNtSk0BYQYvUDJTSC//////AQDyBSoBAAAAIyECeYMamvcTAjuxTSHsVdyGrWsBE+DREQ5pcDlZFwbdJOSsAAAAAA== +Block: 331 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM1tSk0BNQYvUDJTSC//////AQDyBSoBAAAAIyEDd/5YWLMVLlnl0XfU8rV5PwVj48yLh1H0H+xLZX1pTESsAAAAAA== +Block: 332 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOltSk0BGwYvUDJTSC//////AQDyBSoBAAAAIyEDE9MeitjuD8RJO44P/dQhK8nRfb4w+WbPJQBn3TuQbyesAAAAAA== +Block: 333 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBG5uSk0ChAAGL1AyU0gv/////wEA8gUqAQAAACMhA7TFGsk9cOJsjGgjkZUqCZ1InChkARUKbSqHyGXzb8WHrAAAAAA= +Block: 334 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBAlvSk0ClwAGL1AyU0gv/////wEA8gUqAQAAACMhAgkQvHJqWPZWjZhL3O8FWochVbyoXZvKo8mRAAlsubADrAAAAAA= +Block: 335 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBGtvSk0BXQYvUDJTSC//////AQDyBSoBAAAAIyEDToi/gEVC+9ATssGR+xe8TrEGe7xT087HDfTpEaFQ4JOsAAAAAA== +Block: 336 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBL9vSk0BTgYvUDJTSC//////AQDyBSoBAAAAIyEDpcbNO3Den8ygi53GyDQNLhsM0AFsemnf+q5+f1SZ3TGsAAAAAA== +Block: 337 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMRvSk0BAQYvUDJTSC//////AQDyBSoBAAAAIyEDjTbrEyBGn55+QMdhMTW0ALOjMiBxJVdTv7O8vjz0PbKsAAAAAA== +Block: 338 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNxvSk0BFgYvUDJTSC//////AQDyBSoBAAAAIyECv++suofydbTR2BshSi4TFSv9weOt3ziWGZSuXgyzsEesAAAAAA== +Block: 339 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBLZwSk0C1gAGL1AyU0gv/////wEA8gUqAQAAACMhA7QLYU686ntrf/wH45PCQjghwcPS0KP7GuUWIrqCcE+lrAAAAAA= +Block: 340 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBMFwSk0BCwYvUDJTSC//////AQDyBSoBAAAAIyEDqkfWcPmElLwGnloEQGeiJaKbvS1ttNJcSJsrwc4t9FisAAAAAA== +Block: 341 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBEJxSk0BfAYvUDJTSC//////AQDyBSoBAAAAIyECnfOs+lLcdqrdzKNb7tGW6n++dVtSQ/Uz6mTcWZwsHhGsAAAAAA== +Block: 342 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBM1ySk0ChwEGL1AyU0gv/////wEA8gUqAQAAACMhAj0hDV0TQPXA4+ZuWecJc39kBtnueq0mwtFSnezLLUv+rAAAAAA= +Block: 343 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBH5zSk0CrgAGL1AyU0gv/////wEA8gUqAQAAACMhAtgsz0IPBasVvf73ZzDk/OUgRonWeLSaOTCswNvd48zdrAAAAAA= +Block: 344 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAB0Sk0BfQYvUDJTSC//////AQDyBSoBAAAAIyECcEHP7r1zbYuawJrt6no2y8N8tnUk9Mib+I/26ZgMoAmsAAAAAA== +Block: 345 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBR0Sk0BEgYvUDJTSC//////AQDyBSoBAAAAIyECAfxLln08efJ1y0XyGJRaEiNLIUELSr/LQk2DOL63wDCsAAAAAA== +Block: 346 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDl0Sk0BIQYvUDJTSC//////AQDyBSoBAAAAIyEDViUFv+39ptdQjCVo0V3s5b1sna+2UM37QPdSQEGR+KKsAAAAAA== +Block: 347 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNx0Sk0CnwAGL1AyU0gv/////wEA8gUqAQAAACMhA7W6nNXsPLrQGlqXYLjbrH4QA7Yew5XzfwgmmJ3++u0wrAAAAAA= +Block: 348 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBOJ0Sk0BAgYvUDJTSC//////AQDyBSoBAAAAIyEDjWYOqswb4F95Qu4QnQD73TpcFfXYuTI5UHMx8qONuY+sAAAAAA== +Block: 349 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKJ1Sk0CuwAGL1AyU0gv/////wEA8gUqAQAAACMhAvUBO2CyHCfprywohcYCrObMWDjWh4iGylfRt42/1Ke2rAAAAAA= +Block: 350 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNB1Sk0BKgYvUDJTSC//////AQDyBSoBAAAAIyEDY8Id8oMz8KkrFlWs2zYsO5n/HftyDzj3GKHxJ9V9CiisAAAAAA== +Block: 351 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPt1Sk0BJwYvUDJTSC//////AQDyBSoBAAAAIyECpw3MG+iKsTO2dOw/kPpg2bYgLtbrx+NRY3tAjb+cTVasAAAAAA== +Block: 352 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBP91Sk0BAwYvUDJTSC//////AQDyBSoBAAAAIyEDJcoHYbHrsuX1EfRdUswfmhHkLNFPDIkdzadoUN7QPEqsAAAAAA== +Block: 353 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBH12Sk0BewYvUDJTSC//////AQDyBSoBAAAAIyEDHumdK3hqs7CZEyXy3oSJJGpqP9twD20FEbHYDPX0zUOsAAAAAA== +Block: 354 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJp2Sk0BGwYvUDJTSC//////AQDyBSoBAAAAIyEDHqOre8xHkf6rEaOlIqsM4UBRkFatZaXfGW/BGLvg9CusAAAAAA== +Block: 355 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBCp3Sk0CjQAGL1AyU0gv/////wEA8gUqAQAAACMhAoKaYUbtTnM73y3uxNDqKy2EjGcfb32Ucwh9Md77ea1crAAAAAA= +Block: 356 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBF93Sk0BMQYvUDJTSC//////AQDyBSoBAAAAIyEDBIr7jOb7aJ0a/iUHTn7M+cx5guxmfURqOuKR91Hfm5OsAAAAAA== +Block: 357 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBAR4Sk0CoQAGL1AyU0gv/////wEA8gUqAQAAACMhAtnHD4P5OuLMEOMkwaIhv/0BZgFPVfwHf+doYzMyMdTbrAAAAAA= +Block: 358 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBLl4Sk0CtAAGL1AyU0gv/////wEA8gUqAQAAACMhA0dcBAU1zrAGZtQrALMpjf60ui9Aio1qm+lL9lzAHraVrAAAAAA= +Block: 359 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDR5Sk0BdwYvUDJTSC//////AQDyBSoBAAAAIyECu2AGwvBdGHsRUnGxV3tYL18ftxBRiUhHSPiZ31qmXcWsAAAAAA== +Block: 360 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDh5Sk0BAQYvUDJTSC//////AQDyBSoBAAAAIyECdJAbBaGTd0AVUcdVxiIt31Liw14t1rADGJpqXUlSbvysAAAAAA== +Block: 361 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBGh7Sk0CKwIGL1AyU0gv/////wEA8gUqAQAAACMhA9D5EgGSNwefKx9VG7GdxvuZGSqjQoPzZM2jAI23Yo1YrAAAAAA= +Block: 362 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBBN8Sk0CpQAGL1AyU0gv/////wEA8gUqAQAAACMhAxGnoExVuiond8iy2n41H7oZmGcEX6VQWZz+3O0c9cXprAAAAAA= +Block: 363 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKV8Sk0CjQAGL1AyU0gv/////wEA8gUqAQAAACMhAky76WsHdHTJbAkvnuv71R2saHBNel6F+sWbfPnJ+TyKrAAAAAA= +Block: 364 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBKh8Sk0BAQYvUDJTSC//////AQDyBSoBAAAAIyECwZ+K9C9cBS1I97OKfXeQJ5tvV2pyVJBYOT928W8+IKesAAAAAA== +Block: 365 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNF8Sk0BJQYvUDJTSC//////AQDyBSoBAAAAIyEDPW+87EPmSI5uMg5P8lfuj1SXRMdSzCHcu3EnOKEaTh2sAAAAAA== +Block: 366 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBN98Sk0BCgYvUDJTSC//////AQDyBSoBAAAAIyECmpEQKEnlGICR+RkxXGObpraJYmDOMJRTixqGZnZYADmsAAAAAA== +Block: 367 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPx8Sk0BGwYvUDJTSC//////AQDyBSoBAAAAIyECLTqckuVJ7uIQT0VfNhCToauL6WpF8Ou/lrtUqn/k1+KsAAAAAA== +Block: 368 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBJt9Sk0CmgAGL1AyU0gv/////wEA8gUqAQAAACMhAxyoEW56li5Lxiceziox0uHpnsRqAMLMJFxCOLte8oCBrAAAAAA= +Block: 369 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNR9Sk0BNQYvUDJTSC//////AQDyBSoBAAAAIyECsCKD2KHnlrbyu6WUGTT4JIEZZvQMv9PmvEbRwSoD4DCsAAAAAA== +Block: 370 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBMp+Sk0C8gAGL1AyU0gv/////wEA8gUqAQAAACMhAoIdJ/fOa8RZvWU7iU/aGUaiOrQCMgKT5ZMJb2Vjk6SbrAAAAAA= +Block: 371 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNJ+Sk0BAgYvUDJTSC//////AQDyBSoBAAAAIyEDMXygp4z7PzMk9L7OEaGTetj4XOyHhWB29UHISJMqUIKsAAAAAA== +Block: 372 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBP9+Sk0BKQYvUDJTSC//////AQDyBSoBAAAAIyEDVX1IbruQG/FSHMZBck9prAvpQODDfxT75baRcm5iw2KsAAAAAA== +Block: 373 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBBB/Sk0BDgYvUDJTSC//////AQDyBSoBAAAAIyED7q6wlz4R1zS4FOXOMyh4RLvVCAQ8AldHstZlA6PlZe+sAAAAAA== +Block: 374 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBN5/Sk0CywAGL1AyU0gv/////wEA8gUqAQAAACMhAu5RJpSItwynYmPLEtbLfLzyCaG8cyfnEx8VTm4LOk+brAAAAAA= +Block: 375 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBO9/Sk0BDQYvUDJTSC//////AQDyBSoBAAAAIyEDH/sHLBmnyAmHAmSlPZLUclfVIzBOl1ZgxCXL6yX14MesAAAAAA== +Block: 376 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBG6ASk0BeQYvUDJTSC//////AQDyBSoBAAAAIyEC5GhzlVJNLsDjLR/rP04KbenNO/6fkglYm+N1Wuo4LwisAAAAAA== +Block: 377 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBDaBSk0CxwAGL1AyU0gv/////wEA8gUqAQAAACMhA/kTeZISeowcv6IKrLBhWHjeB2wqtRN4gvvHh8CmHR+trAAAAAA= +Block: 378 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBCuCSk0C7wAGL1AyU0gv/////wEA8gUqAQAAACMhA9/eKmncdXdW9oiyDggTgYtgoZarW7FmkalS/WmZTHnprAAAAAA= +Block: 379 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBMqCSk0CmQAGL1AyU0gv/////wEA8gUqAQAAACMhA+zqQs/smSu3+uNnC6Wfr3epSEQDCasZgNQ221DSkdYvrAAAAAA= +Block: 380 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNKCSk0BBgYvUDJTSC//////AQDyBSoBAAAAIyEDlg7ykxqE16PC4P4V7m7mW+KY7t61w2tV1aq/4EyVrdSsAAAAAA== +Block: 381 +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 +Block: 382 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBJSDSk0BIgYvUDJTSC//////AQDyBSoBAAAAIyECyQc/AvZwyrHTCiSHE7OVE3hiXYaMb6HcDqixfIzW5AusAAAAAA== +Block: 383 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBNiDSk0BPwYvUDJTSC//////AQDyBSoBAAAAIyEC76d0dqCFNEIwEJdooWxlngL6mw6wnOzB3G/MzEq8qAmsAAAAAA== +AQAAAAJDTSsPKYh0w/bYRnwH3qaIOmUN4A1IKYzW+0joMi4QWAAAAABIRzBEAiAr8Xh4YIOG+y576Bs5z26mLrlAc/tSCVdA3AoYdZ6eOAIgPmpvra1X7KfblGuLSMBoyHx6m68HXlsomUEWwrMSa6oB/////+c5F21itYhWavpH9fu8DsAao/BYwDbKDujzzRPkIj4BAAAAAElIMEUCIQCiUWkgI7wj6Ls2yBHmgQoCSA/shxmxAnBLCnlimmuvmwIgJpQT7kHtd56+dMGlQKwc0knzs823gDNzP1cirD63EToB/////wJAT8PtAAAAABl2qRSyIFpNvB1YfF0Hdpl3lisXPqtQdoiswJRIZgEAAAAXqRRB+2UE+LyyggZZYYT9QKXtQrzlPYcAAAAA +AQAAAAJsfZDmPcVCGCJ1ODFlyl7mkUVv029WqDmwSocC6x5ifgAAAABsSTBGAiEAl0A6zPd6BxFwZo+o+MJIyjIeDRBNW3IC3DXAoWh67MACIQC4o5tDaAYqIV7qU/+lm3dRIIEiYwZ3SNPge1XCDegKWQEhApcd1yLs7nu8PNvIxqc2XbdBErbsQTarPVdzS9gNeEHf/////6ru+FspdiLs8xHcXSlmn9TjhjRUxv7qNh7OT1R7pS5qAAAAAEhHMEQCIGQTIa3I+y5klSwSm2zDINek016Q8pokSLGPrELPIZXDAiAeLkfySMQvKc2L0/DtY9eXCYud5hIc57VEkDZfxXNcjgH/////AoBAtigBAAAAGXapFLyfR0jI5kmy0HcomI7spk3zCtfjiKzAyq0qAQAAABepFCkLujKkkxV4mgMLtAsAR/j7kP9mhwAAAAA= +Block: 384 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBHGESk0CjgAGL1AyU0gv/////wEA8gUqAQAAACMhAjEGa4bqDL3auhqvd6WOXyPzubyhsKYufOFrPP0fx2yXrAAAAAA= +AQAAAAKONDBXPP3i8+Huzorv5mHdhBvLZl01gyQVurT3UmeFIgAAAABJSDBFAiEAnMqPscSjSYLE6aWf0VhWQEwCCF+SYEPPxmZJJKW5420CIFgR+Fs5XENJIWS4szhn10UhHYx//c0bKI5W9029rtFbAf/////jq/WYGhvWRX7Azcq3bMKhdtwNfhb203ga68aE8TzE/QAAAABIRzBEAiA4e7zumeNw6iEV6sz9jEjrOAZTMDtmxpRuCQP7C7xvhgIgKy7wSFGdRVJUE/ZLcnodhf8s99katGBzCCJLTDDVhGgB/////wJA8fI6AAAAABl2qRQiA8pZ7fZpaXV+bMkjixs29Nw1uIiswPIYGQIAAAAXqRSeshmA3J1BPY6sJzFJOLnakg7lPocAAAAA +AQAAAAJzosVNU2wZ8NCRVu+60Yym+WsenzvISQNClY8k7Y/DLQAAAABJSDBFAiBMhuLgS149dvF38s3XyBcLJctyfM8cmxTOkmK2vGfp0QIhAPp2suH3JfxZ+04h48HWZ40QgcHt04ESfQJjzRuypfBTAf/////oBzpcCoD5jhX8Auz9GV1ioEUEKyc8ZVyLNg9mYOjnIgAAAABrSDBFAiAtloB14eFcqB/nJUQNxjV+AgMBlyXDygW3fL04vMVdBwIhAMZAhqcGKbMHV4U1XYtcVXdyvsnG/JZiNfkwUw0ympNkASECOZ3dTkuqwZZe/E2IJlbySGa+FM9bz2QiIzTx/dWSBIH/////AoDi5XUAAAAAGXapFHzHj+QlGySumyOjmeIWCHnxiDNiiKzAXuOhAQAAABepFONxeCWCpK3bVBNixVVl0s31b2SYhwAAAAA= +AQAAAAKjDj8UKb8qjtFMpuyfM5a4WTuLtqweTTW9Q18FBYCU6gAAAABIRzBEAiATvXKkQqFB1YzKA4QXAM1WETClMNONxQymJ4EMqf6DbQIgZpBxlR1C+pCwJjN1I+H/PKQvojKsHUp3ZpLoXXBjjJYB/////yQ1aPL/a/kDhqTXV20jzZIqgpx9mK0SUdeNnlGk32HyAAAAAGpHMEQCIGom075AfeA/vSILSItlgz4/T7VRZM1a69VJr4UGADTVAiAjOn1iq3gqJGfXl+IHbwQ/lgzkqx9gfCkiuxRlhPyrZQEhAsukzpMrON2dpTZox4fT/D0ks37RFtlrQsWIWFqGWf1W/////wLACT51AAAAABl2qRS0Qdm9GwTXUvkfFNxk7Xx7eu4TT4iswCh+3QEAAAAXqRQJ9wuJYWnDeYHStUs3HfDYGhNqLIcAAAAA +Block: 385 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBCOJSk0BYQYvUDJTSC//////AaB4ByoBAAAAIyEDumW4wKCi0CnkzevDkYheRm5ly9+odjj4tkYNDSvo1aKsAAAAAA== +AQAAAAMozhDHGJAmhmvPwdBrJ4mB3fIewONk4o4pQ2W1wyjNQwEAAAD9RgEASTBGAiEAp48YD1hR6+nefmrm+I7PNu2fFl5d8eF+7BayLmOX3AsCIQDDrohAApSuRkZl1juANfHeS7Gd3XzAzFwdWj/ij0/K5wFHMEQCIG8DXOQ2+jBwOL9LrBWouX+ts8gJttkonq594ND51SexAiAmU01pW+LXrb69pdLEze6D4nAV7tMqX/lQ7PE2oduFdgFHMEQCIBoKasD0iOfcj8fJrKXXm1QdYNetGq9h9V7lfmH/LatKAiACZ7/M5SeBDXr1SjDr+wztNxqiS/d5HuckdMX/VwPTUgFMaVMhAsoqgQqxckm2AzoDjeVjmDiBtAaScBg/PAq6lFZT5EIWIQP0gPG2SNDVFngErU1Ybg51fMM/3g4TP9A25F1g0ttZ4SEDwYEx2N6Z1F+3KndMqwzMJYzSq9lgVhDaILmiMsiKPLZTrv////964AGu9Wb4Jzp80U3LwdK815J955LFBCN1AzmR71UjwwEAAAD9/gAASDBFAiEAtI8WWuCTGlQKXSFR6pQIpVESLbrge6T+JrLYQNiBKuACIHzIc0bC3qOtKHOVF20VqWOWFB+xsb2qu6nb80ZQb2AVAUgwRQIgJvLblShumDHC78YMKmXD5JKKX6nwRVYVQPaJ2N6FYiECIQCuzXd+F7B+7wRtQARtoLkPzqhpOLIUeasO8NFYq4Y53AFMaVIhAsoqgQqxckm2AzoDjeVjmDiBtAaScBg/PAq6lFZT5EIWIQP0gPG2SNDVFngErU1Ybg51fMM/3g4TP9A25F1g0ttZ4SEDwYEx2N6Z1F+3KndMqwzMJYzSq9lgVhDaILmiMsiKPLZTrv////+lG+N67kx28jRhFo7m2C26BxgbMYOQYluayy7CvhAEugEAAADcAEgwRQIhAOSi6NuNAg/BXsg5YYIPAhvO3HSAdeW0mF7r+gBt7BTsAiAW6lFGG+rILHrvBZqDWQFShmcpY/pXH8P5hJfuMwOzdAFJMEYCIQCObY1WDjvY6uKvYukM00OdgPaOTEUyfBbZikRcj/lBqgIhANOb7g//ImwmQEcmTbtCG/N4NiyJML9EY7sJ7xtP34pyAUdSIQLKKoEKsXJJtgM6A43lY5g4gbQGknAYPzwKupRWU+RCFiED9IDxtkjQ1RZ4BK1NWG4OdXzDP94OEz/QNuRdYNLbWeFSrv////8FwMqtKgEAAAAXqRQdnKce+jbYFEJOpsoUN+Zyh66+NIfAlEhmAQAAABepFCT7x3zcYnAq3nTc+YnBXl0/kkC8h8Be46EBAAAAF6kUr7+3TumUx9RfZphzi8QibQZSZveHYEOZOwAAAAAZdqkU0qN84grJ7E8V3QWnxujp+9uZhQ6IrADyBSoBAAAAGXapFGsgRBRqRDjm5b+8ZfFHr+tk0U+7iKwAAAAA +Block: 386 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDKJSk0BCgYvUDJTSC//////AQDyBSoBAAAAIyEDeTdOC2CP5ahK99R/fs1AWCY1BuzhE4oiDZ/tLY00/x+sAAAAAA== +Block: 387 +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 +Block: 388 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBKGLSk0CHQEGL1AyU0gv/////wEA8gUqAQAAACMhAwX9IJKSmlcapcG4YDQm05VDWbbhumnE3UuFJurVG6j/rAAAAAA= +AQAAAAFsfZDmPcVCGCJ1ODFlyl7mkUVv029WqDmwSocC6x5ifgEAAABrSDBFAiEA2eqQkvC+WlQ3MHYZM3373Scyzz8j+Zd/tDW0pbS/RmgCIAw33THNfTjV9LmgDHUekFk1b+8O1OiPUqdbTnx0PzRNASECyiqBCrFySbYDOgON5WOYOIG0BpJwGD88CrqUVlPkQhb/////AsDOGB8WAAAAGXapFCOVLLskny8m3VZ8LoNF14XGNUN+iKwA8gUqAQAAABl2qRQyBAF4xc+ByyAKuZrxEx8Yd0W1FYisAAAAAA== +AQAAAAEkNWjy/2v5A4ak11dtI82SKoKcfZitElHXjZ5RpN9h8gEAAABwAEgwRQIhAOmPoLEPUZJMoLIdyy8enTg7ZSzi9RkWyu7x5H0T/2ekAiAmy5/zI82unted3YKaDMG0nJN0wmKT9U2RnLbcX48K4gElUSECyiqBCrFySbYDOgON5WOYOIG0BpJwGD88CrqUVlPkQhZRrv////8CwNinAAAAAAAZdqkUSy0ZmkDUiL5v5TBaHUX0kFOvS/6IrADyBSoBAAAAGXapFGsgRBRqRDjm5b+8ZfFHr+tk0U+7iKwAAAAA +Block: 389 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBAuMSk0BZQYvUDJTSC//////AVC1BioBAAAAIyEDJGxAijhRNKm/X0EFXtwmUwawz0PM+8WvaeoSnQegJsmsAAAAAA== +AQAAAAJSJqjPEi4VVb4BqQCCGW1UhFTnPFG0i0G7IE7FOPIZ9QEAAACMSTBGAiEAuW4v0gFbs/4iwjxxLDrEqGNtSnjffWabq9ZOq6MUwjYCIQD0AtfjOS0XcM4r4Mgj6rASK7g+4L1l9d5Uof61PkUu7QFBBMS+5ebbtcFlFDfLQ4bBUVx3dsZFNQdyBMbyTwWjfQSjK8eL6yGTtTsQTJlUxEsM4Wi8eO/V8eHH251sIbMBZZn/////cRmMYXCfjZiDFfRfo/kWCnDwUlX72tDY+6yriJwASNcAAAAAa0gwRQIhAJLpb0GF/Bu3S02cJYIZ3F/8ca+0PnPsDni92RuvvjhuAiAZ/Fs9lgIAW2H13HXnvU3eHBmgcAwKeVhQNSgBTTkBkQEhAidOrgHTkbvsMtS2DiTV0k+cwjyo2mcIz2wGI4G/pxAG/////wEA8gUqAQAAABl2qRTb+JUJF2qXXkHQTMCvJM/I3kOUqYisAAAAAA== +Block: 390 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFmMSk0BSgYvUDJTSC//////AVC1BioBAAAAIyEDfDnB8DlD9eTbYyQ10IiEdqtdt+iuGlZQ79UD9qNfIXusAAAAAA== +AQAAAAboBzpcCoD5jhX8Auz9GV1ioEUEKyc8ZVyLNg9mYOjnIgEAAACSAEgwRQIhAJBBmeGlaJDYHZVXilP7vGU7cdJTv3r7amIwhMR/d2oiAiBLCE75DLf+MR9xDlFsEicgKLcHFnZ9oJKTjUE1kaobhwFHUSECyiqBCrFySbYDOgON5WOYOIG0BpJwGD88CrqUVlPkQhYhA/SA8bZI0NUWeAStTVhuDnV8wz/eDhM/0DbkXWDS21nhUq7/////cRmMYXCfjZiDFfRfo/kWCnDwUlX72tDY+6yriJwASNcBAAAA/UgBAEgwRQIhAKw06INxKPXAIAp3h4XdxMp4lNsgehkH6l8Hvg+qU3gHAiALmCUQrc2gBtRykbvnIMXsTxqmZl+ussn02o7Kgu2dSAFIMEUCIQC8Uuohl7lOF/B+vPq5rc8Ngog0SbkOG/FKc/VY3dToDgIgUkflx+QlIbxHuyHr83M5oGpBvQF4NK+EpHKPVegLxt0BSTBGAiEApsB3UUPvfleMYVn+Ln/0B1PZYiMLilAq0xqY82mnfLoCIQDgTVrBnqsoV8PEphIESZBCtZ3j01qvPjyNvws2yzvgHQFMaVMhAsoqgQqxckm2AzoDjeVjmDiBtAaScBg/PAq6lFZT5EIWIQP0gPG2SNDVFngErU1Ybg51fMM/3g4TP9A25F1g0ttZ4SEDwYEx2N6Z1F+3KndMqwzMJYzSq9lgVhDaILmiMsiKPLZTrv////+yyBJsy4LbegArWg61VwLSRQwVwpcxOUYPwsu8yK/XEwAAAABrSDBFAiBhi6lNXcCQCSQGyymONwRsC0dtDlKax/X/Z/HXZKJ81gIhAOl6XNOJyFP9l6HLVkpn9ka2xi1Y8H+2/MbxK+ksTOEAASEDEnxLvPb/FM/YU7+SF2lxMIy3shLaKORrKJ1ERMQhXlT/////ssgSbMuC23oAK1oOtVcC0kUMFcKXMTlGD8LLvMiv1xMBAAAAakcwRAIgARPiavSxwFKjCTfQpdu271OiaQMiwWa1c2soASiVUlECICoikRfdzJJoZBcygWBPfIfgoF4iaW5V4gXntkCti64hASECyiqBCrFySbYDOgON5WOYOIG0BpJwGD88CrqUVlPkQhb/////UiaozxIuFVW+AakAghltVIRU5zxRtItBuyBOxTjyGfUAAAAAa0gwRQIgB9HtDBH9oIsz6+c+OdWR27B2zo6Z8ZhPxlH60Yzol8cCIQDgtVEqPco7rZ4LEqPzsF487AA6rT0qNti+K4OhzoofWgEhAr/BmwSVNL5aaSq0IHiWiAfDuHu1DKR330rNKW4p5RVz/////7EkzKfpaGN1OAyEXQ/QAu1wSu9EcvTMGT/KSqGzQE2kAwAAAGpHMEQCIEnw8K/fx/3SDZ9lT+ozvSqcdZ3kkVnpgoDVMeXkyxWSAiAc2Vz/wIYiwy8Q3uzcvAbj1Uhjg9BfdDAXmjSJwKBkxAEhA4c2LbJ9I8veyiFmSLo7pRnVO3dqYDHPjucKh5ODqZ1x/////wLQ3QYAAAAAABl2qRR+my2sJ4obHRDml7wpo2A8Cy43pIisgHN9SB4AAAAZdqkU2/iVCRdql15B0EzAryTPyN5DlKmIrAAAAAA= +Block: 391 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBI+MSk0BMQYvUDJTSC//////AQDyBSoBAAAAIyEC9TSrbZ8/QJobDAd6MZORdK4GdzdThyfnkyXDILNNmn6sAAAAAA== +Block: 392 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBFKPSk0BOgYvUDJTSC//////AVC1BioBAAAAIyEDvoTLWezyb45BZ7zEyR3Us3sUS0mYCzmelEbXIY64AUesAAAAAA== +AQAAAAHOQV6rnLo1SuBCwirJ8Gwaadel26ZxNvq++T2C83TdPgAAAABJSDBFAiB3NTA++3Fv5asTpCQePVx2VWuL5ToC8wKbhih4iuS8igIhAMZyNEufv2E8KRo+dfJfmzBLeevpe9ryVLihAw4NKiLiAf////8BAPIFKgEAAAAXqRQpC7oypJMVeJoDC7QLAEf4+5D/ZocAAAAA +AQAAAAGDKMjO0oyVqz+XgfONl6reqgfFgmf9roJ6x8plzhnwKQAAAABrSDBFAiB7cPcRvrTWTdVObIsT4VYcgwJdynx08WdNHm99d1PgwgIhAPJAUfw4vVIT147Ze6bYJCz+d6m+GcuIT81RaeHrRQKJASECZmcCPB/PiNe87QJpmXx7gTbPIOmu3oP/WVFORzQPHvT/////AYAaBgAAAAAAGXapFNv4lQkXapdeQdBMwK8kz8jeQ5SpiKwAAAAA +Block: 393 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBIGPSk0BKwYvUDJTSC//////AQDyBSoBAAAAIyEDNpb7mdoBVlmuNermDC62XfiJkUfwG8ur8R0qSulSX4WsAAAAAA== +Block: 394 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBM6PSk0BSwYvUDJTSC//////AVC1BioBAAAAIyEDn+iPQp+cSxRdE0IKHAFZmt2djOluPWsZhmm1BjnavT6sAAAAAA== +AQAAAAHkoS/eVsA+6hrLXrG1fTWrHablXVROghLEfOJ3QWsbPgAAAABKSTBGAiEA7es8koOmJhXkaSVtgxuox0Ggavk/t3eKgZp0LwcMRpwCIQDrYPJhNBhf4pz+OvDnT7vMhX+UrcxmFmDdjF2VPlotbwH/////AQDyBSoBAAAAF6kUQftlBPi8soIGWWGE/UCl7UK85T2HAAAAAA== +AQAAAAEARQQA2oX+EPd8W3TQYEMAO8TVxDpZyEeAEdKBR1IaXgAAAAAmJVEhAsoqgQqxckm2AzoDjeVjmDiBtAaScBg/PAq6lFZT5EIWUa7/////AbAuBSoBAAAAGXapFNv4lQkXapdeQdBMwK8kz8jeQ5SpiKwAAAAA +Block: 395 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPmPSk0BJQYvUDJTSC//////AQDyBSoBAAAAIyEDOcEdldIyfNcAZe0ChYQJazMtYhbi9QeycTlbwnTERmisAAAAAA== +Block: 396 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBA6TSk0BRwYvUDJTSC//////AQDyBSoBAAAAIyEDtvkQ28+OY54ki+oXYvWa0fw11k8vxB/B4cMH7V58twOsAAAAAA== +Block: 397 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBPyTSk0BIgYvUDJTSC//////AQDyBSoBAAAAIyECx9UHjpCRe3FVOjaiFqNnSgnF3v2HBWMDbbwmwU43LEOsAAAAAA== +Block: 398 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8OBDiUSk0BYQYvUDJTSC//////AQDyBSoBAAAAIyED6NynJo7IyuATbKSg3y1fpVP8O+mZS7AI0jEGsnyk6TusAAAAAA== +AQAAAAMozhDHGJAmhmvPwdBrJ4mB3fIewONk4o4pQ2W1wyjNQwAAAABsSTBGAiEAuRiVHMVfuyhRaABN5+qyHnAuidxDwWe6D8GwknPinPUCIQD5XCS2x0DiMGpFvqHnoMjyAyydTaTY0cxrXEFm0fq/5QEhAzst1v5TYR7z0RK3CYqJmfSL8nx7+UvQRUOdh6nsEfyj//////xPHtSYxfMf6QsQOJ8SVmozUKUIDbHbofAfiDTlgTypAAAAAEhHMEQCIBYe4n760oLoyYQFFBj8wrymhU8/XU4kAxuVC814U5Q6AiArVWbHKur/IpXbgsedUtiNvpRQ4BxslR1dAUjCkPbLvgH//////F7s+pDUau7aNrsaLy2mHk+b6BJTAzrlViXQCssT7zUAAAAASkkwRgIhAPfZlrw57wCyFwFO4+f4tJ7XFPzOL+lwoq2iuah6dBwtAiEAxVpgicKyPsh8UGNRPGyKv8FMkT+Ktpz06+1qWMIglGkB/////wNA8fI6AAAAABl2qRTwaXVv/Z0zERnlQwJoQ3rtFCEK+4isAPIFKgEAAAAXqRQpC7oypJMVeJoDC7QLAEf4+5D/ZocA8gUqAQAAABepFB2cpx76NtgUQk6myhQ35nKHrr40hwAAAAA= +Block: 399 +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 +Block: 400 +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 +Block: 401 +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 +Block: 402 +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 +Block: 403 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBNeYSk0CigAGL1AyU0gv/////wEA8gUqAQAAACMhAvSAIBforWw9d5r61WUFwLbKiqG7Tp+aErawLUcCCw9BrAAAAAA= +Block: 404 +AQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////8PBEuZSk0C5wAGL1AyU0gv/////wGQwgkqAQAAACMhA2M90osFInstoaaOr1OuVZ68aSxOd4R1qmtfVh38juDPrAAAAAA= +AQAAAAHUz5ov//pM08kXm1o2SBNfLeyYmaP9/7v6utrFI8jiZQAAAABqRzBEAiAvPMxWNCWyfhfCGKBsu9BBnfGhj/Z4TOZCOh53+ypBMAIgKQTG1IJA/WaHUP4uWOi6nsRW42jVmqH539sowoy5eTMBIQMtlAKfQyMs9rD7Od6KLeXjL83x0LAqYCg9Jl0P6nO9Y/////8CnoyJJwEAAAAZdqkUhcLH3x399PH5vfZsvUgypPnj1YWIrKCXDQAAAAAAGXapFJI6pCiACahG/QRJoZ57kFlM9aW5iKwAAAAA +AQAAAAETJi/Em9crkuHXMYc4av2HOPRwgR0bl+5K21jgh+/dbgAAAABrSDBFAiEAs5Bs1KcJLYpbPRJXfCLDiPfAoy5Z9mXt+mN3Wh0VK9wCIHEtTY79qYP865OodCc7J9qQde7OPZi+TRLAK+KzVyNPASEDcl0mtwg9OItg6p4NEsMl1rPtf1dkb4dBturQdRnx9rr/////AvIyfCcBAAAAGXapFPjNQHXq/0oRUc1H5trANhjd1Hd+iKxclgwAAAAAABl2qRQYXsXAUBKpQ4ooqiBjAJcVOQe4uYisAAAAAA== +AQAAAAHNH3Yh//0+QlQ4KMVm0wi4AB+4LI7tE+KFvtp9KEWiEwAAAABsSTBGAiEAi09l6CH4tlTGfpJpsLIJoES+MglJXJ0scV3lvYuiDvcCIQDcYqnWS71lO40xjwaDeGlQU1Tfpt4NVo1cKNwDgAC3tAEhAmay0ZebRYarD30nSlO4rKAX/8h63499dbdXXyKNIFM//////wI3YngnAQAAABl2qRSugUfjKIsvTmPoR1eYaPGrIsGx+Yisaw0DAAAAAAAXqRTMrfNVbSe2QIbGg1B57YfKTlV8vYcAAAAA +AQAAAAFBe12aREF9QTLAfeZARnqRBNgvc8cHVdGU8IfO40uWsQAAAABqRzBEAiB/xOllg6Pqly0rhU3mKT65GThAvBQIhaOBLK+tQr6+NAIgE5cposZIj9e+jGhBxrFoEX/+muYz8NJMwyRg5wPjvSYBIQPdNRiHz07EbettCy4OQRw/v9mo3o8AAG0kDOCT7lO0Zv////8Cz0xzJwEAAAAZdqkU6HnXJoHyQItNzFADHpdOkG6L+8+IrBhSBAAAAAAAF6kUr7+3TumUx9RfZphzi8QibQZSZveHAAAAAA== +AQAAAAGIjBCCsjgls53v4HcZvaWIlbJAn1W6eTiqefPP9NTwDgAAAABqRzBEAiB4evy04bEzyTTB1l1MfmvnFET5FSmUO4uVvOuvAvB3YwIgd8cCiHMcB/kGWp4xpUnZtRL+LLRZVUWQvTpMsZ5JilwBIQNsVirqETKlqd8w7wMTdW3YrscT6ZELH6ts7jJNTei5U/////8CAiltJwEAAAAZdqkUqOjsIat4A4FqxXwrWQ7Ilm42vaiIrH1gBQAAAAAAF6kUZfb3FRfJ/UhUFwScLe1SdVPC0QeHAAAAAA== +Block: 405 +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 \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/Hashes_for_first_500_transactions_on_testnet3.txt b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/Hashes_for_first_500_transactions_on_testnet3.txt new file mode 100755 index 00000000..3850b45e --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/Hashes_for_first_500_transactions_on_testnet3.txt @@ -0,0 +1,908 @@ +Block: 0 +Transacion 0: A4E5E1B4AA8BF9A32315A8883CB18CF716F86776E3C27CA72B21B7A7DFDE3AB3 +Block: 1 +Transacion 0: 0F13F5CF8307D907DA65742E028453D83D47F5C33E7824328CA0C729AF0B8CAB +Block: 2 +Transacion 0: 0222E29BF085595596621C21BBA50AFDA45BBA3C01E7126A59A0CEB3E253142E +Block: 3 +Transacion 0: 174261297DDA0C89C010E867A40579F4951E56B78AA8B15130EAA235CFA5AB14 +Block: 4 +Transacion 0: D2F156E779F027C4C46D099414258AB32D79DC018EE69D03AD2ADD6775D679C4 +Block: 5 +Transacion 0: 8610BC1457372250463CEC3CD43DA980972EE47AA5C71AABA6B3C8111C6C6C3B +Block: 6 +Transacion 0: 8E541CF5D114C509F18BBA0D04816D6BBABCE03F3A58B5B742DC9A6896207E1D +Block: 7 +Transacion 0: DA362EAC5D49076F8B3800BCF91C84DA1CD14A083928BE397C9144EC95F17D1C +Block: 8 +Transacion 0: 6796EC299FF3A9DF15FFEA42E34070B64E5E80C86F5910AA6BEDE9EDC5334120 +Block: 9 +Transacion 0: 25AEB9B769B7906FA26CFEC93E56CED4FC80AAABD601ED6FD843D51627447916 +Block: 10 +Transacion 0: 45461B3C2F15060F81F3DA864A6038D8D2A10CEA0E950970E2EC9423C6622CE2 +Block: 11 +Transacion 0: 5EE1217BDAF7E1AB3716DA73AF2E048DEA39CEFAF09C1D62A3F85BDFA594BF92 +Block: 12 +Transacion 0: 1831BACF2664CE54943CE4B34683608DB0E8E23A26CC810F8C5757554435D8E7 +Block: 13 +Transacion 0: B69E8C913E734AF35B8327569232EAE99927D9055BEDBA6B8ECA0F3E53EB3FAE +Block: 14 +Transacion 0: FD0025868F865136D4050245D0CE6BF6EC90F7529B49B23FB88DB8AF3443C44D +Block: 15 +Transacion 0: 9E4D7F149C78A036E538B1D03AE8C8D734C25FC2C842AA56A7910E932C85FE0A +Block: 16 +Transacion 0: 0D58283D17F1570D586C8178F40B0D94EA905DCE59CEF6A5DB82F9B44517C245 +Block: 17 +Transacion 0: 71920001780EECEB8A1DD41E56D3C55F69829D47B61CEA567F671FBCFA7FBEDA +Block: 18 +Transacion 0: FC357DCC8DA390A9FCCB13E91EC0E1B3013E4DB26A575B96DF6D6BC98B2DBDE4 +Block: 19 +Transacion 0: 374A89A8FD64B25604FC5A09790814472B89FC4A937FC3A170C2C2F6DBEB757C +Block: 20 +Transacion 0: 4DF5D97A639197E9D9B70DC32C097E8057AEC4AB5DB6B8FF1A1553BFBBD39FAE +Block: 21 +Transacion 0: 17A43D53A865866049E18BF7144FC2A9896AB17AC368370C6B7569A190EAD705 +Block: 22 +Transacion 0: D22CC7D8B4895F2EDE00C9CF61A44C99F0810EC3D4B5177E089F8C7B2B5C1F15 +Block: 23 +Transacion 0: F36ACF2E619EC1D99C6A6217869E8DFB4BEA75EA0C2D560944C2EF6C8E326328 +Block: 24 +Transacion 0: 9FED83E8D0CBA6F70DA131CCA8A7072DA5032DCBE98E792858C47A5A452E9EEF +Block: 25 +Transacion 0: F43C1FC65D59123D5E042E7E2AF1AB855683B347F0529D7AA24488C84F984F09 +Block: 26 +Transacion 0: 2A19795218960268DEF8E2C4D882027ED2A31CDEFF6584BCF66B61089C355D6B +Block: 27 +Transacion 0: 02371302C953F1C670BB9A40ABAEDC9F6095882B51859EEA03999F324DD43F2F +Block: 28 +Transacion 0: F3DAD74E05BD02BF367339E434B3D170233D661DCF8F9F5CB198E8883AEB5C6E +Block: 29 +Transacion 0: 3DBCC2BF111806EDD2AF70D8C999399395F796A88B93F0F31469335A1798E62E +Block: 30 +Transacion 0: A2D96809C737AA708BF5F195662F25E2D21D0FC2D95317A77E8E8ACAF8D6BFC4 +Block: 31 +Transacion 0: B16C8BCA53554A697CF4C3BB66A80BA195647EF11810283D5E9AAD453783B822 +Block: 32 +Transacion 0: 8939616292F1BF479806F15D6E07E26B50F06A73020EE334929E28956B3D04E5 +Block: 33 +Transacion 0: C196190DE8616BF4E140104CA8437B0B693E9AB9B7770B748112116A4CA10B5E +Block: 34 +Transacion 0: F4AA9D561AA29BE53CF4E220E2DF856E45B5F565495565FA795C7C29E1CAC19A +Block: 35 +Transacion 0: 5D503E8FC5B7ECF3C0222D9F1281814F1A3A0A613122833D2050A07F8219F19E +Block: 36 +Transacion 0: E65228ABB7A5968CB8D820718E33D34932CA4B6B8451DE66569547CF55DBAC96 +Block: 37 +Transacion 0: 57379ADBBC73CA97E43ADCB4022DA01F02EAF8F14C17493A1CCE9784AF2904F2 +Block: 38 +Transacion 0: 70195C1C86B83B8BE6B9C59297BF20A1B91E0CA561152BBA72366B36CBDF3ECE +Block: 39 +Transacion 0: E6169C8D9A63269D482903A22C8153374537F6597F4FAF9436F26D3412ABC234 +Block: 40 +Transacion 0: 56815D13D9AA1FF1A596BD66A2D2B04A88B356BBB8521FB5A823FCA752BB3A11 +Block: 41 +Transacion 0: 4C959D16CC06A721FACDA6A802E0481FDAE802122C47F51EE22013DD09AC64EB +Block: 42 +Transacion 0: A9E267F4B01648CE18FF63C5A117889D71DD0580EDDA12F65CB1DDC709435279 +Block: 43 +Transacion 0: 6323464AD31CC13367992E482999DACA95F9229AC152B1648699675AA1F11A78 +Block: 44 +Transacion 0: E1E929712E75314C38EF659CB11ABB8DF7C4EF3E83C190236E94229BAF73189A +Block: 45 +Transacion 0: C3369FDA7A0C7FA6AC29A63239DDB3B6172487AB9DB8B4214C2D3D891175125D +Block: 46 +Transacion 0: E880D69D5CBFD81FBA371A352C353B372B768D602510D1942D0F97958F05C4D2 +Block: 47 +Transacion 0: CD491CE8CD04CDAC46011ADE0EB98D6769111E35FC28251BAA6B35A4C6980B7B +Block: 48 +Transacion 0: 4B188DFB56D2D2A93FFCCAD074CE30C573A74F89BF156416ABA374BA6901E1C1 +Block: 49 +Transacion 0: 782CA94DD3DAF11B870CF1949F2A0E5FE2B4F6EB13617CCB413CF80AD93086F6 +Block: 50 +Transacion 0: 42C2FAC11C4F42A172391E5E70CCD95C272F36D9AFCAE0FCDBAD3AB935122D09 +Block: 51 +Transacion 0: 764FC1684F34CAE7004F49DDB6D52B9E99AA467EA735778290C64EBA233F71D0 +Block: 52 +Transacion 0: 73A4FA7498AE0294544540944B51AF0861AB49FD925EAFC0441384899A13CB7F +Block: 53 +Transacion 0: 8253DF0375A4A60B066C1BB8116ADB52E053D7BF63729DAD48EADDF29046F8F3 +Block: 54 +Transacion 0: EBF19047FB8CE2031DC0032639494C929749114DB29F4AA179FEA5452808FAF6 +Block: 55 +Transacion 0: 27FE886C65EE305D083A9530E0279958D85439EDBCE8E888CCD2E704F837D90A +Block: 56 +Transacion 0: 85312A3737DDFE943B0FFEF9A7D638A04781C968880EA63CD76C6B4375EAB744 +Block: 57 +Transacion 0: 2E2A48C47DF96F22D71BC451973C5FDD9F2AA3CAFA70B88BDA463A946742555B +Block: 58 +Transacion 0: 750AEEBD659E338668035B0EE706A0E540D5E0A8EC6030575BED6ECD524DFE5D +Block: 59 +Transacion 0: 77109E090BF6B6C5AF69876DB8DDDC30AC2EF21B65587F50EACCFDA9B2D41CE5 +Block: 60 +Transacion 0: 2E8E9E02EF089A5F847FD4511A2B36DE7C824641119FBF08DA6E9D7A072A3583 +Block: 61 +Transacion 0: 7F64EE18122B5CE6ADF968E2297FD1D3F5BD58964018D8D3EAE6149C2C7E397D +Block: 62 +Transacion 0: B6E7B6D0E4D21A650F5B5300327B63C21DF5213C8AC376ECDAF428578854DFC3 +Block: 63 +Transacion 0: 72AE85BAEC608215D46636BD4024989D8FCF76067FC416E5C3D1B519F58802AC +Block: 64 +Transacion 0: E469C10131523AC7CDD85870D87D0D302BB2794349759FF70C96A3667DBB4DAD +Block: 65 +Transacion 0: 793780DFDBAD331F77D5ADE2935AFD53EB760B80C606A0C7AF6564DEE6F39DA7 +Block: 66 +Transacion 0: 1CE9C6F3F200A2EFABE5644DCBF0DC2E70853537610A27AC9982C8422CE110D2 +Block: 67 +Transacion 0: EEF95E45637283470BDCACEB0E072B6653278CEA847BD9D46C535D0D2FB01AE8 +Block: 68 +Transacion 0: 42CC2E40E3ECA94551B6924C1C08C4C10D50EC9C79410F8C25065840D1C9B9D5 +Block: 69 +Transacion 0: 21F032E8663935EC5E621C874216AA93FC0F54ED14BD7C7224452E846FE339AB +Block: 70 +Transacion 0: 381D5FD0F83F0BABE7073E2605D7E31E60B5D94513F9320EF595BB97F6A4E79A +Block: 71 +Transacion 0: 11845976ACC2AD8E319F3ED6269EA60727C35423177389BE28DCC83B5748DAB2 +Block: 72 +Transacion 0: B5B337F698A9F4CBC31747616B17B61BA79C8CEE5FF3F28F82DBA2098C25E844 +Block: 73 +Transacion 0: B9F945589F1A2EEE2EA3AF7557D395F59C516F541D42EC4C66C3E35E98705578 +Block: 74 +Transacion 0: 6B2DFA54A31F104C4156AE706290E0B0E824E1FBD840F15A3C7EBB4855C2879C +Block: 75 +Transacion 0: 41C1793B12E76424EB296D61BB88128EE51CCE046C7D51A42A136B08D4B0F88B +Block: 76 +Transacion 0: 8ADCB38D0A4F4B5F59A9D52D3997771E607FA98EDB434F1E07F8737A1DEEFEA2 +Block: 77 +Transacion 0: C933E3D8FF83C1572E442B5084AA1B9487246F3373574D848BB6F2ACBCAB27B5 +Block: 78 +Transacion 0: F2FD55491D4D47650EB4061908525D02C5C0B15570D0BBA65387B75DB9DBFDC0 +Block: 79 +Transacion 0: A53BE0523C9E8C5E30F7CE58BB550AFEABE45209773318A922E997A1693D2A03 +Block: 80 +Transacion 0: 79AB45C7B83B56ABAA1385698CC7B40086621C71B43382AAF8E2E4802BF37B53 +Block: 81 +Transacion 0: 1DE8145EDC1A55C11121C4879C7DF75A0E604BC7A73E2F2417A4028F7C5D0F6F +Block: 82 +Transacion 0: 22C793F05837F6613DF3992FAC656E9D3D52A92526FA3CFCCA8F9F31C043756D +Block: 83 +Transacion 0: 864C4D0E50425D23128C84B739454B8FCD9BE09F5312D78D547C496DE51A4980 +Block: 84 +Transacion 0: BB756A5FF9F3D0FEC49872DCA7D3EBDF26691D5B752856E80FC30B46022FB9FD +Block: 85 +Transacion 0: 0723C7FB8998BD250C8924F52199CDBB59D370C0FB157EECA1203DEB69833377 +Block: 86 +Transacion 0: FFF9F5E1DCC63AB8813C971890CD7E5DC18EE0D135921DBA4F149D469A89C3E5 +Block: 87 +Transacion 0: 4929B967E61B21C313A6067D70CA568672599E87CA7959844CC415D064D917CA +Block: 88 +Transacion 0: BED49855568974D074D6622FBB032A2A57F835C16D942DA543BFAF47E2B821AC +Block: 89 +Transacion 0: 5EA4267AEF9246E30A721EA9C7077C6664B7491F8A6F613C5CB2C323EA5EBEAB +Block: 90 +Transacion 0: 20C5F74B054FC5C921E778D60136E3B9F8AA258B3D5ECDAE28EE68AD15B2B1A4 +Block: 91 +Transacion 0: 39BDFB42528C6BBD24F6F8B6821A70F0B1689310B5BB7F96F413B42DF591B4E5 +Block: 92 +Transacion 0: C7DDABEAC231AFDD3FA7860FBD86E032094B3ADB545BDD96EAEE0ECC0DA31A52 +Block: 93 +Transacion 0: 1CA2A5AC3EFE7D880F88CFAFD662E74D68181AEAD4F274B7AF060C0520476BEB +Block: 94 +Transacion 0: 462F13E5224DE320453FADC2F713BB02CEE41306C13A536AE5E06428F3380B5D +Block: 95 +Transacion 0: BBD413A6AC23D5915F4631137266B8DE22860A905AB9982E577B21E53B614DF4 +Block: 96 +Transacion 0: 9443F91C59B440AF8D136CEE76E5CC3DE5D654BA4BA801F131ADD3A79FB68F61 +Block: 97 +Transacion 0: 0CC41453670377733FDA84FE5E5D90BE8C381E0D84223B2ACEFCA6084A849223 +Block: 98 +Transacion 0: 6DCC0DA064CE086B24F46978169C4C0334C7587260C5D0F76EF380FF04183241 +Block: 99 +Transacion 0: B5A09B3E75769B73FC5557E4CD840B6F39BC64187122282C578707A634DC09D0 +Block: 100 +Transacion 0: 274AF90F85926F3CA180A9C9473194C81B1809FF8C9302E8762AC71C95332A89 +Block: 101 +Transacion 0: 1D24FF86321874A2D276316822CC09A63B37097F56A7D37431E3D420A315F90E +Block: 102 +Transacion 0: 6FEE3ADDF456635330445A533EA7148771B0AB818B174A426D691E694D3D5B55 +Block: 103 +Transacion 0: 95D84FF92436C233ACA0BF8357DD8A3219DA6BACFC1EC56D60A7B7FA8029FA94 +Block: 104 +Transacion 0: 769467A22E021C7050557699CDCEB96B5AA4B788E14B9B1623A333360BD05B81 +Block: 105 +Transacion 0: 5BF2FC3095ABD4EA10EFECD4FB99704F9593F67F55EF3CFA44741A058B6456F8 +Block: 106 +Transacion 0: 4107D20DB19E32342C40AF84C8B0738FF1245008A7CF3395B71F41122B94E8A7 +Block: 107 +Transacion 0: B9845C6516211C96AB876A27700C30294947E14F5BBEED573E0D42EBFBA3B9B8 +Block: 108 +Transacion 0: 82F63509F597F986634B6185C242D8ECD6D34E2145F57DEAE3E2606C3574B5EB +Block: 109 +Transacion 0: 6EE27EAACAA4DEF6C905360A881A830C2FF3A8311C83BCAD467B44A014E14CB8 +Block: 110 +Transacion 0: 8F5CD5C2A31B270EAA3F2AB70DEC42362949D26AA350C4F6C8C52F6EDA19E28E +Block: 111 +Transacion 0: E3DD473F28D39FEBAF63176ABD5A7D96A1C60F9CA22C240EA453ABC9BAE514EC +Block: 112 +Transacion 0: 4600AE9F51506E4F515F5FE34975A5368C6669942D1B381D3FE14141272B33FF +Block: 113 +Transacion 0: 55C4C9F33F9B01148A29F909FE97E92185787F5B4BD7A7D888A8617B00C77719 +Block: 114 +Transacion 0: 810CD8B85D8152783330E9722BA547D58B6A928C77E22A6631C17078F2AD078A +Block: 115 +Transacion 0: F08DA27F8BC70DBC5A1DCE77D509A44DD0751FA2AB3EF3973AD3424DC863D45D +Block: 116 +Transacion 0: D2438452865CB38913FE6725085FF91D153C8FCE908F88766F8BD579D4F0DEEE +Block: 117 +Transacion 0: FDA9353057B3F0871A690DABF5826BC3C353D0407A6C89DB7455D6496592717D +Block: 118 +Transacion 0: B4518A34A3D058AD7A9A07842B9CFA718CF9A2C13458DF883F30B74D69210758 +Block: 119 +Transacion 0: B99BCC672614F4E61E78834B9FB955CA2AD7E7D17584465C8D604D91D5651C7B +Block: 120 +Transacion 0: 9700FF159A785C679924EC104DF962CFC18A229B725B2C1E84A8005A3629A690 +Block: 121 +Transacion 0: 1985DEF8BDCC65373924FE62694B041113B198DDB9732AC3BD674201D7D37E5B +Block: 122 +Transacion 0: 6B417A4E70C86DDE0CC3CC7833349DA8E71D4087081CDD36CF87A2C676804B83 +Block: 123 +Transacion 0: 9F558EBCCE91D5B1E59AE27DEA61235FAE1155B1CF7D3AF0DED0B6508C5734C1 +Block: 124 +Transacion 0: 4B27CA6FE3FADAC37657E04307DB40C59C0065F332A955AFFDB11F20F5896624 +Block: 125 +Transacion 0: A9F3AC66CD6D2E0E314B36045CF0D40808C2AF3E078B997B97DA25304325605C +Block: 126 +Transacion 0: 17588504EFF9F3706D3ECC205BF7486F5B48CD831228FB2759A78C618BC4592D +Block: 127 +Transacion 0: 32456269E0F40C03DC0A5A20A429CE3DBF4D69C2E0EDA2A09240375DCA2417B1 +Block: 128 +Transacion 0: 52BE53C2ACE54B98C9FCAE139E2214D6FFB9AB7E47B96DB9C23F66BB14029496 +Block: 129 +Transacion 0: 30A5899E2FC047CCFB11098C5447BECE0837A9DE522509EF73124ECB0052D5F0 +Block: 130 +Transacion 0: 5ADD490797C2A96DDF1A014D1BC9F9B2B270BE692D9335A0E0E10C1BF2A0CA8C +Block: 131 +Transacion 0: B7F959E0BAA981D1FBA7FEAD3D11C95ACF8C96C679153EE8C22754D4226B7251 +Block: 132 +Transacion 0: FF862E8F129AA42D1972281B3F9690AD2D1AA073840BCC87EB30631A78FD7B96 +Block: 133 +Transacion 0: A643E43EBB13BA2BFF89AD6996C3F0DCFD135384E992C0439B79775E49DAAD58 +Block: 134 +Transacion 0: 26DE07B5373DEAABF450F9ED0DADECCD0091E48EF1174675D0A379E845203600 +Block: 135 +Transacion 0: 7DD993C21FE2B29B85F4C71E7EF53EBD7591143E65828A5C99203F3D235661FF +Block: 136 +Transacion 0: DAAC50396C315BB389AAAA3D0BF7398D589519BAA6C6225184B6D87746EFFB7C +Block: 137 +Transacion 0: F1FF402E25DF797B4AAC64F3FF0263D4E9814A7B9190AEBC09599E6F150C8ADB +Block: 138 +Transacion 0: D2A49B49F0E0D2FDFA3A5DC8A12AD55E93B172104FFD454C6E672FEBE480AAC4 +Block: 139 +Transacion 0: 182497B07A3AFB497AD8B0ED1E675476A134E828801F9C3BBCB2FF5D745CE559 +Block: 140 +Transacion 0: 410A7CE37AA854449C6DF6A0D358FA15722F95FBE0FBBF1EB33486EA6CBB545C +Block: 141 +Transacion 0: B974F15E4BD428D4347F78E3317103BBEB186DA4F3A6077E98C42E40D8453653 +Block: 142 +Transacion 0: CC687462C47BC20D806651C62A464A1D1466C2989941FFA95BEE16FA9473A0F1 +Block: 143 +Transacion 0: 274DCF34CA75A6B4F2F1531E3B012A8DA301213AF6CD8731CE326764592033FC +Block: 144 +Transacion 0: 225876257F4BAB51423853D566BCB148DD166EFEA8ECEE1E3F2EDFC3750343E8 +Block: 145 +Transacion 0: 704E6A2D1F74223161491ABBF6FD90C69E81E68A96E110F40E14F69FCC09E622 +Block: 146 +Transacion 0: D54D07B9630AC02A00CA412E4CF349DB09E9378A92556E28558532837F86DBA0 +Block: 147 +Transacion 0: 95312925CD6AFAAA7F6583B02C3654652878C93992BE93F11015025FD6625E87 +Block: 148 +Transacion 0: F65FDFDE5D6BABC425105B36248BEE7D0C4082BD326C488135CA6AD833F16B2D +Block: 149 +Transacion 0: B142EC4CEC5091FD20A84F1439F461C1F3BD6CBB6F113DF33FE9B0860FC30B1F +Block: 150 +Transacion 0: C50C6A5AA28A141998510D930F40A523A1BF6AF9428142BA2544D2A0F9E66987 +Block: 151 +Transacion 0: 8501E2238E84BF6DC89284D00ED056A3886AED70C7648D6F3C478892F0B2D434 +Block: 152 +Transacion 0: 10040CB5759E5A8280DC82B0BFE7A00DB0C8838C0E220C24E5825237815101B5 +Block: 153 +Transacion 0: DE79DB20034CCFE9356ECA2D088A37BD65930A78FF8547EF086A470CA8986EF1 +Block: 154 +Transacion 0: CC4CCC27B0A3F659F4B6E25E13B86B1BF9B40B76CC7E176D6C7D4692754BC71B +Block: 155 +Transacion 0: D23CF8DE42F8592430948CB3F9E1B69F6AC81DABFE65190D0F91C635D45C2A37 +Block: 156 +Transacion 0: 4AF5A9429D64EFADB1C6E275B19A14CA9051F5D4A6953753689EFC3120C58DF6 +Block: 157 +Transacion 0: B97AF236B791CCCAE09A7FB91B00088096DB3D254646E7CEB9F286CA4AF76569 +Block: 158 +Transacion 0: 1B24142042F0976925620B518F8DD4F6E9A6FB566070F15407DDE707A728A5CE +Block: 159 +Transacion 0: 081275A54425179975884E95FC8C180898F999A7588F2E8C0C5D864DAFD2803E +Block: 160 +Transacion 0: A9124A08448259A61650202556D2B59B56002CD250F15FA089BEBBEF6CEC1AEC +Block: 161 +Transacion 0: C77230FD6B2B7CD4703C5FA4F7B146480DD7D7F703BF2EEF5107EDEBB6902F96 +Block: 162 +Transacion 0: ECC90E655EC6FFE481925BF7DC580CD1897DED8086B2C92E8C223A1A3C15B82B +Block: 163 +Transacion 0: F4F1F722AF674BAABDF6F9039029056E71D4A16E1F9C0D67CF26E4EBE50E1416 +Block: 164 +Transacion 0: CF0D80464703DAC273D32425212096528400C3D0607237605C22AEF50E20B2E4 +Block: 165 +Transacion 0: 2BED756E9291332DA0CC14CA5EEAA6A86DE4F98B483EB1806E8548E7108A89F5 +Block: 166 +Transacion 0: 1380A067B7AF4AF7C6193A4B03C2397C8D8BF11CFD686473B012BEC5909BFC5D +Block: 167 +Transacion 0: 65A1C9B523CBAF222290FF857AA9E0FFBCFF830E7CD8AE046AA284A751E11F57 +Block: 168 +Transacion 0: 34D14A443C5B63788468855A5E74DAFF6EB08B50A7FD1BBA6D8657AA23BB3054 +Block: 169 +Transacion 0: FA95FAA636E0896DD940F57A818305AD3054497B5582AAD4CE821F7DA7D5AE13 +Block: 170 +Transacion 0: 98BE93DF4054D67C601A6627BCDE85C2CDEA7DB1A6A4E2832AC4266BF8592EEB +Block: 171 +Transacion 0: 1E50E1C396BEE2AC32A307206C864D39EE9EC198EE133AC010AF002E34EC0EA1 +Block: 172 +Transacion 0: 5BA5B3BEB03EA33C268EB90D54C37555046348A430B69080D1FBAA9A40879264 +Block: 173 +Transacion 0: 776BAB8BF26A81F3A1387B50152EB2A75542B074F98027FAD943AB5E1D45851D +Block: 174 +Transacion 0: 4840EE9C31A591F83FF72F3F6B503FD4BE863B451C8E6AD0898C1EA9CABB6457 +Block: 175 +Transacion 0: 2F8DB71AD63FFD8D5BC13CE4E9E7B375C6BDBB27340C041278F33E784EE4BAD8 +Block: 176 +Transacion 0: 974F39F6A3DDC1831508C61E5911554B21601E1828697A975A7CB47760737516 +Block: 177 +Transacion 0: 7BB7EF28041E793A0C403E416431BA92CCC5DBD63F28BA5E689DD818EECEBB4B +Block: 178 +Transacion 0: E15FB5A869FB5ACA8AD56C68458CEDB4BF9C724E1B31BD65727E0652ABA18CD7 +Block: 179 +Transacion 0: 3291B6FDDDE92D944AD9A840561781E92A89F6D0FD542A113CBC367A2C442CA5 +Block: 180 +Transacion 0: 2EB377CDC77C8DFF306E0A34311BE354DAE5B9961F22A353D3CDF3DAF24E6E06 +Block: 181 +Transacion 0: BE5D1FA61FE999FEE18004D11ABA8A4D50DE218BE962385009FE4122D2F7632A +Block: 182 +Transacion 0: 9AC3185E4388F10F1ABD1BD0805A0533A66521F98301B09EF13F5C894DE1F4CF +Block: 183 +Transacion 0: 7DF85C829FE00738F2DC6BBF81C1835A33651D5F6AB862DA14EF502671666522 +Block: 184 +Transacion 0: 0A920E24FDB994B503FC591C8C78E698E2D93552D09716CF15B5F9C33F94DC19 +Block: 185 +Transacion 0: 53FE31BCA00D52655EA33035218EB9F4E16AD2F2A1BB63ADEEA64D09AFCEE5CF +Block: 186 +Transacion 0: 4013E6BE12D943854C7AA15FCBA3F5979BA2C2024EC2484808A509F27B17D474 +Block: 187 +Transacion 0: 75DB616F062ED403F6F326C69BC51DB6D70C6196D770475107182FA20EE34CCB +Block: 188 +Transacion 0: F44515939990A0DC688902918CC2A267EE2A544465A80ECA0C15BE23798BC1AC +Block: 189 +Transacion 0: 00038DB28BDAD97D66F49D2ECB410DEAD3C93BD4C25DD685865EFB98A92BF4C2 +Block: 190 +Transacion 0: 1E25E57201E1F145446D5B1984E2A1E6F30D785974E22F60F6FEB28232B19E86 +Block: 191 +Transacion 0: 8513A31BA0E68D6F694E67B9062A7E9F4AE5A828684D89BD32357B7B01B9D23A +Block: 192 +Transacion 0: 84478A66084ABB4935D771A69BE6D6466EF8716325EAFE3AB7311AA56FD4EBFE +Block: 193 +Transacion 0: 3D9DF8495896FADD682451329A4558743743E6BB638D47D773D5DC8D37B7CCE0 +Block: 194 +Transacion 0: B25A526C33669B7E184112E42681A27E7BA4E6ADFAAD8F07568308EF17960C33 +Block: 195 +Transacion 0: 72E9408813BCE244D1B6DA2B04F295129CE5A2D11B0143F4F9C26AB430637848 +Block: 196 +Transacion 0: 046F44EFE24A07E4DD99AE2ECF3E1ADD608C4252D0250FAF0106307140E1E557 +Block: 197 +Transacion 0: DDE670E27B0E29CACA83621C3D6412C881D807875940CF6197E5156A650A39E9 +Block: 198 +Transacion 0: 05E31685EE3F88D6F6DBD9731CBF0E4A471D64E98A149575A68E2C024DF20B96 +Block: 199 +Transacion 0: F7603D45451CE00405E3304B776E359DA698FE741CE054896F33EF6F5B8BF0FC +Block: 200 +Transacion 0: 547104DB4D373CC3A29D12D341318778EDD268281DFA38363244BBA44C214D88 +Block: 201 +Transacion 0: DF4CC31F486CBEA1873D6F61E7D0CD671A2CC67BACDC0CE7546DB1A1895FBA3E +Block: 202 +Transacion 0: B32F74E782D6748C99977B415F130798ED9546FD94A423719C6E8DDDBD0DDB41 +Block: 203 +Transacion 0: 335E2EAC0B5ACCFEFF0AAD66F5B8FDBD78902612B864538CF4FAFE5F64A7AD7E +Block: 204 +Transacion 0: E7E9EC57FEBB95FD3BE82454AF9174346336D62B355806A6ED1C2C13F7A686FD +Block: 205 +Transacion 0: EA0F17D9ADC6C33B9C30D98BB6C3A19AD79A32828B92B1F927E9EC88514731C9 +Block: 206 +Transacion 0: 646E19BB59854C33324257C02137DD229968837178B8F8BE7C784D180ECD5898 +Block: 207 +Transacion 0: 5F38A6A30CFBC62554127E6CE228FC63AAAACFDCA30B736AD4718FA75455DE96 +Block: 208 +Transacion 0: 26C32873E5596D430ED220A8A56FA7E379002CB526183EE7A7DD352D4331FBE5 +Block: 209 +Transacion 0: 2EEB010E97A954ACB04CF95567229A5AC8157F5979E32AA864A1B20BBDC818F3 +Block: 210 +Transacion 0: EC42B7CE0A6A9B2997975941A07444A6730A484EF154EE479BD4A9550ED4A433 +Block: 211 +Transacion 0: BFE7DAA72079393E28C925A3ADFFC3D6AED7CC12798C331527D1F269FA63092D +Block: 212 +Transacion 0: 92BF17129D0C1347508907DD878F2BBC976E0934EA9C8FC3B91972CA46465F4A +Block: 213 +Transacion 0: 5ED0C457ACC8B1E615B51BD74543E8FFA861DE7A959D3C33A21CFED0CED063A8 +Block: 214 +Transacion 0: 29B1E8AD9C4BFB47F97643BE82945CB59C5EF685559504844DDD46A1DCC37BE2 +Block: 215 +Transacion 0: 243260DA2118368CFD808A484B7959012F833A869AEA72141F86FDA89DE4F58F +Block: 216 +Transacion 0: 722B3FAEAFE96569BE678A69C05905E227B746F043D430A13A5C99B19AEF622D +Block: 217 +Transacion 0: B0283F61968394BA35B7F9601FFAC6F1B8A177E16179A0BEC4AF62F47ADC88F3 +Block: 218 +Transacion 0: 7178A912E54E192CF1DB3E2EBD090F735E171E673208A8E3AC533C71110FD7B5 +Block: 219 +Transacion 0: 24FB2B2C07ED381C3EBC1F32C374E609C6E568A4A29D8C04842F0F0DC0242997 +Block: 220 +Transacion 0: AE49085050F534DB53D4E1CA6BB8B3958B6933F9CE6AC41DE8A2FB9241F3E03A +Block: 221 +Transacion 0: 0338BC898080D83A808870F3A59C253C0AB25A249337B63CE26DF34D641B11C3 +Block: 222 +Transacion 0: 93D392D2650FEDD9D2CD4CD67AF8792526BDF7509AD9C4104F766EFCAEB3C71B +Block: 223 +Transacion 0: BF2A8B59866740CD1BD0C1A399FDB1B5801AAA84EB632B9FE70B5A89C54DF42E +Block: 224 +Transacion 0: 4C365AE469930A4CE2C2B52BB6CB0CC25328A3C424F8A948C34F07B4B40F23C8 +Block: 225 +Transacion 0: C5DAF96771C7646ACEEEC484892CD4E8D9778FB9EC7C8579941C298DBD060F95 +Block: 226 +Transacion 0: 17F898824DE670FDDAC71EE77474FE3235F638968995840020CD834AE06C046F +Block: 227 +Transacion 0: 67C3B1FE96340ED2C96069BE1E3829E26275C584D9FE709A9B98AFDA73C3CA95 +Block: 228 +Transacion 0: FD784B0505E776DF56731C579985984CF739864F1B349FBE031827506353E52E +Block: 229 +Transacion 0: 2124DD113F28088226FF292FD05D9AE665C9FD9D0A45028A47F7388BF1FEA351 +Block: 230 +Transacion 0: AB3D904C6C32198304D1ABEE9A3EDEF06DD3173DE598069F18964443B8693812 +Block: 231 +Transacion 0: 2B2F2AF6E7FCD81AB3AF6D453ADDA38E7CAECF2A4AF76D7330CB4B0F8A1E8F7F +Block: 232 +Transacion 0: B5EE6BF7B6A0B0B70CFEE686E58CD51B97F95595F4B4BF0131A4A904A2C9B46E +Block: 233 +Transacion 0: E3B1B614772EC74C2128E445D55E6AD1BA53D75B1BE5BCA1AEE30C65EDF21A4E +Block: 234 +Transacion 0: 35DC0CBE986E28ACC5532DE06D6F067403CAF57CA129B7985FB0DF8C88A53AF0 +Block: 235 +Transacion 0: 0FC94817E1476C418BAF9E387A37CB7BA744FF999977401482D86FB87D99CE3B +Block: 236 +Transacion 0: 550377252E9922FBAAB445B1393944288094831059B54D7148F6DF463C8B52C1 +Block: 237 +Transacion 0: A6E25AB745F4ECE163AEEF6C4543683E4DF96692D5CD113FCE226792B58FEEAA +Block: 238 +Transacion 0: B59FEB8D4DBFF34EE30262E81875DE29ED1B85643D577BA8A222B6368A381DAC +Block: 239 +Transacion 0: CC16AB9F1835608FADF8D91E5020F3EDD0CD9462D9A86CA7F6C3881B94A2D95D +Block: 240 +Transacion 0: 760DB09C3A33EB03DCAC07BC773D0DCB980529751D1C20799C667B42A3B0992A +Block: 241 +Transacion 0: 10E3224E31DC3F8EE0AC630C850F3AA10CE0CBBF5F74AFA665885B26D671937E +Block: 242 +Transacion 0: BF15760DEA728B80335BEC2797EC77FFC1A01F2B4E8C2812217E5DD2CEC2F5AF +Block: 243 +Transacion 0: E146943CD1D6EFD812B1D7059A9455277E71F39CB1A5643A3A81A853E3D58F17 +Block: 244 +Transacion 0: A47E3DE47480ED9CDFBF0158FE838286A5F7D789E6724867E029F9E8A033A046 +Block: 245 +Transacion 0: 64290A6A8911A348C1820C333039F770052AC4981B0199B46AAD556A270F60C8 +Block: 246 +Transacion 0: 11C47D4554BCFA439E844A2137E6F09E62DE50AA741EF9FA90BF187AF1EA3903 +Block: 247 +Transacion 0: C2C27A64DD86B0F2B02E626AF8CF2F945F9805C43B590E0108C0D69CA6290E2F +Block: 248 +Transacion 0: E04FB7918E070C886A4044B7B56BF7EB35F2743685088C58511A3DBDF4DE503C +Block: 249 +Transacion 0: CCB64DA9DB3AC1752806F2C9EF207B55E77D110B9A9320C1BCA749C596CFE804 +Block: 250 +Transacion 0: F09D91F3D8AAEFD8F100E54C5955A0EB05ADBD2C502B9141E595F77ED04D35CF +Block: 251 +Transacion 0: C6F00826031E4E572D3BF8C5E4E89262C0F34B3F2451D1D8B15D49EBE6E156C3 +Block: 252 +Transacion 0: 238AA765770816A8BDE3A8B039E42AA470613CF7E5A915F7C314962EB02E0B29 +Block: 253 +Transacion 0: 15AE5DD71A77AAD7B14B9D62AE93A2C416D5158DC1DC12ABAFB2CBC737ECEECE +Block: 254 +Transacion 0: 904A5F0927AA6AA53DEAB0E4743BF9F8176AC0B5BD99BCEFAA13B876AE3EC218 +Block: 255 +Transacion 0: 3A0E1E9B7A22020A156DAA08F1B1248DA8A64D76344EE5B97E10763AC2612691 +Block: 256 +Transacion 0: 7B64E63E637AC7F9128B792FCC9ACF026AF45A21892C6E21731DEBDCD68187AB +Block: 257 +Transacion 0: 708CDF710539593B56B92626DB7ED741782E1AD739718DDE0F39C6651F097105 +Block: 258 +Transacion 0: 5AE06A6FF0F242FA09997DFC47761E948943F50DE170BB951F4A9B3F8B01A8F5 +Block: 259 +Transacion 0: 952A69E8A179A49B4DA6C55ACDC5CF022678D9813385E7D14BFADEB917C59847 +Block: 260 +Transacion 0: 8358B279FF43030387BA5D95BCDB85A4900E1BD6BFB8AE53390DB20EDD88B6C4 +Block: 261 +Transacion 0: 3A29DF8EB46B59C66AF3F2299994F9163CDE3E759B676D2B2B93AD2E7D47AD41 +Block: 262 +Transacion 0: 36927167905873357B104C399B47C243774CC70283AE55B54BD5C2B443D4FC67 +Block: 263 +Transacion 0: 2A4957FBF6A80F74D6F344A094114EE338E5A5C576A85D5A3278DB4F554A8CD2 +Block: 264 +Transacion 0: EE8167476C693DB55DE1500619C39EC674318193E9B2327C1B8D7A36598FE070 +Block: 265 +Transacion 0: EAA56C2DAC02C8E12A663273D16561C9421209CD5264F84078E764A22BE94FA4 +Block: 266 +Transacion 0: F4DBE6D395C7E93CF0E527C3D6C5FB14F1CAB10088B2FE0B782C4CB04329D437 +Block: 267 +Transacion 0: 3FAD31404D8404988697F3C3221E26C3E5CE81FB4523F368AC5F29F358758257 +Block: 268 +Transacion 0: 0A4FE4E326D3E9FE15FDE6732B39DFB5A1AC26691A6515EDF71F866AB394CD62 +Block: 269 +Transacion 0: 68F723467C0D39CD822314E57CD56554C3C93C19C135536B4A50C3E9E738A35E +Block: 270 +Transacion 0: 975E17E211AFAB0674B881B4FB820360C3A31A2A2CC77B60DBC27C2F531C3080 +Block: 271 +Transacion 0: 418F2343797ACB0990B77634CFF89B8004736186731DA21B69C1170BBD4291DA +Block: 272 +Transacion 0: E8AE5D397F893664281E375F02B9D4ACF7ACB9CF3BB9D86862A064881C8B0155 +Block: 273 +Transacion 0: 87A7327727E0B63577808F62DED3FB460253A34A0AE03176E7CDD965E37F4D45 +Block: 274 +Transacion 0: DF4A6FC4671F456EF277B6719EE69E16244F81ECE8F20DEC7A8AA13A5EB5A6A6 +Block: 275 +Transacion 0: C8E3DF1808DCB932EDD2903EF5DAF5B228A294373F075A4C0FE1A7AF76737081 +Block: 276 +Transacion 0: BCB248F3CA047C720068837652DBD2F6FD18928D328269713F41972E7090A51E +Block: 277 +Transacion 0: 3B224AC24234E0C9699ECBE3C00EF8FA0830BACDA03D039E88FC498C1E88CD6F +Block: 278 +Transacion 0: 884967FF0184272F9CA36C15FE924B6C4F08D061E1F28A951F88CC839E2BC118 +Block: 279 +Transacion 0: 7D6294D1EDD1E8D094BDA5E171C8629932E3B5C7A47AF7F5DDAAC3922F89FFB0 +Block: 280 +Transacion 0: 07927F55432755A5424FBAA5772907614EE972A65BC2EBA6A2DC80D1A7005B77 +Block: 281 +Transacion 0: A286B5736560D59ECF4478C802303B897387BB2EC900AC3038C573CF5D503405 +Block: 282 +Transacion 0: 7F5CA571B6BC1D00A863777A6029F426FA98E4A450E9AF3D959C4F493D9C9761 +Block: 283 +Transacion 0: B760A4BD2C34A782B9B7165B4C404853FAF145B21C73E7E6738DA21E29D6BD52 +Block: 284 +Transacion 0: E3E040D88DA72F2B805D1A73CB86E132BBD2BBA436437AB5B0D24DE3487B0619 +Block: 285 +Transacion 0: E291A329072C2310F6DCA22D6F96F6A98F8E700B98992524094B7E4943A91851 +Block: 286 +Transacion 0: 4DF437A5C7CEB7150BCBA89AE850226E322E591F5FD304B8A958767B4344EF6C +Block: 287 +Transacion 0: 9009265BBE017E7739030E7D75292A37E77017137AE671DCC7385606098F6D21 +Block: 288 +Transacion 0: CBBF961139F9F8B1330A9B2FCA606B9BC12AE77ECF9C1B4CFB6FE33F5754BA54 +Block: 289 +Transacion 0: 880A09AB0ED3D5C360A48DCEF4982A6C92FABD0738C9ADD39ECE4530D04FE272 +Block: 290 +Transacion 0: 6FD4837D07212F04C08278CD4BFB7DF567D1F3DD871ED9FF20E39913BFDB57F1 +Block: 291 +Transacion 0: 1C3CD06143D410F638D51A29CFB3CBB7C74F2C27285B83270B2D45EAC36422A7 +Block: 292 +Transacion 0: ED567767572E73D8C36543265DC07ADDA68D9D77030EDCCEC80F6D1DB2E89937 +Block: 293 +Transacion 0: A0807C71A404637606295AA2C34E64360B0C3FDC3AF5B6BCEADBD1D6B896D840 +Block: 294 +Transacion 0: 6F0284045D2E8CEDB02B8361A907A88676FEB700DE502F10148EC08C1C5F48FE +Block: 295 +Transacion 0: FB9928BC2D57A6E23B3F134BA687B3D7E33B94B111D2C148DA88D4BF0EB7B02D +Block: 296 +Transacion 0: 2B544C2144C96E18865BDC2587608994B3040870C3203EEC4764BB05D901F57F +Block: 297 +Transacion 0: 5349C232586129C7199A903B2AF1BE9D952BD5AD46E5E22315329452876B1DFC +Block: 298 +Transacion 0: 5237D9837A59972316691BA82D8B865F301CCE5FEC64640FBF82A78CBFD2C421 +Block: 299 +Transacion 0: EE408DEF96C7F38E05378E9069B597343499C04694CFD51A64680FC0C158F69C +Block: 300 +Transacion 0: FED86F29C1533394C0EF76A659C00A830C369D816221C40BEE701A8E87CBEE57 +Block: 301 +Transacion 0: 8E27628916CCDCAAD5D7379057C6D79C40AC21250E51A06E79E18751A970C937 +Block: 302 +Transacion 0: 2AF236410966662C0C5257F46DA184C3830272F6D5551966C75C262B2B645B6A +Block: 303 +Transacion 0: 34578F62E43649464CCE0E9AA54763376DC8D7511336C03290F36350121C99AB +Block: 304 +Transacion 0: 70DADADF7728CD087A77EB7E3AB9B8E72A12C0D135AD63BAF78572AA0F00D6FD +Block: 305 +Transacion 0: 40610F7D6525C7EADFE147D8BB4C13239BAE3EAE77B8191AF083020FCC65E016 +Block: 306 +Transacion 0: 73363375BAB4F662B4FD2FBDCE2BEC3A5E0B9DFE83DDBE7D7FAE14C95099FFAF +Block: 307 +Transacion 0: 90E5BE62397951A3BD95AD76AF33B4DC3E7A19B3494E8CE0A18AC54AA485A0EB +Block: 308 +Transacion 0: 18D2236DB947FCC7FA2D81158C747BE4D473143D55394FEE3E32391051FC095C +Block: 309 +Transacion 0: F4D9F729573ABF344386410355B456CF9B8587E4812810A9747C1C04E1731F7A +Block: 310 +Transacion 0: 98D9C4D7A64D0689B5EEF36BE54E98F5497339DAB2D8E3C44A3CA3DB47AC4940 +Block: 311 +Transacion 0: 6639E7E42AE559FCF44A940EDDCEE8E63C39932FC637576F9E3C5D238AE18006 +Block: 312 +Transacion 0: 515EA5F03C185AA49F3E728FC522700028AF4B05CE1F0CD826F39CC07D2B1DF6 +Block: 313 +Transacion 0: F38E4AD932FCEE2878C9FEF03AEAA968FC7CB938FF10EEA71EA5EE458788CC4A +Block: 314 +Transacion 0: BC39041B0E204EAAF5E609C48C634B6B68EAF6B8009AA902D8584F9A0C77185E +Block: 315 +Transacion 0: B2EFF3AC5056EE12E2B5A96AF746F5973818AAB93FCF4738B3F391F27C66B159 +Block: 316 +Transacion 0: 18993059912EC40D6E99D0DA4EEAB6B6C68B9F959B31DC0C2D4D2D30498A62E2 +Block: 317 +Transacion 0: B100A150AEF9B61591B6CA2CFD8692925204627EE2F661B37D151E08885A446A +Block: 318 +Transacion 0: DD3925C652A893370AC0D0D3B5DEC42AF6391A3AAFF91996EE48E71E58DB290F +Block: 319 +Transacion 0: 835FFAFF59E532597D29F974049EC861AB865AD8991DD054EDCFBB4DA5C945BB +Block: 320 +Transacion 0: C026E8D8047E96DA914FB6EBE3BF7ECFBCFAA19D8A1DD6732C2D4B8787C315BC +Block: 321 +Transacion 0: 30F086EEFFEF66AB6314B07C9617FC740DB852B92C2A9D79AE2115038D0E3A16 +Block: 322 +Transacion 0: 6CFDF75F7A699B9856521D5982DA57E5668D02E94AA614F9669763A784C8FDBC +Block: 323 +Transacion 0: 817ED60CCE3E03EA3BA82C06EFCFA7441861E7BD3EE016852596BAFF29EA61FC +Block: 324 +Transacion 0: 6C2B940931F1F4807BA24CB13ACA6B13F26100E84D5C4BA55CBFB679895CEE71 +Block: 325 +Transacion 0: 2B3F28B6368049E01917F44EEAF8EF96844B9D0CC72475C86323BFA4AF8DEF0A +Block: 326 +Transacion 0: 21512B092BDE6528C9840184F1D78E665C78BD1C765C829803B0A482A5D46161 +Block: 327 +Transacion 0: 8B8C325B6B2C154F774CF1DDB46EA98494963793D38EC3E416980CD89D33FB24 +Block: 328 +Transacion 0: 06DE54975CC13CB84CB43B229496ED9D1F004BEE7C2B52601C8031591D60E3B7 +Block: 329 +Transacion 0: 0569C1508BF9FB344A65935BD8AF967F7C72B2DE7D1ED6A3BC9AF082517B3EBE +Block: 330 +Transacion 0: 39AEF4674D4C0B262F46D7737A9A19A9CDB6E567F8585BA57C30489C3DFA0641 +Block: 331 +Transacion 0: 8720B1B397FF28606E4EA4317F9D5E7B01EF8C89617A37516215D8FC443D31AC +Block: 332 +Transacion 0: 5629FA1E2E63C145471455E7FA87A47165572007EA1324B5CF7147C91B143F41 +Block: 333 +Transacion 0: 70B0FE7E9F9A287348DFA35A534BAD004A064403E9B8029DB18B705B7D5CB82A +Block: 334 +Transacion 0: 7CCFECBAE66AF4EAFAF3306F1CDE711ABE277E216DF252A3D74F10B79C76926A +Block: 335 +Transacion 0: 3F9AE2B0505EAD2BD2B701C419DF519538AFF99CC036A174AE2B6C569CA2CABC +Block: 336 +Transacion 0: C098334CCD1B4BB48FC6B460A3F6FF3E1184AB9776181E55A80097E0B690FF3B +Block: 337 +Transacion 0: CB090B2BD2CDB73C3ED8A828AA20FFC3EAFFE72B53A345363E15C0DF188E4447 +Block: 338 +Transacion 0: 3DDEC50405754518AD33CA09D9B35D4AC00439AA88D8A5B5D57D72765135F787 +Block: 339 +Transacion 0: 0D46267788252FCC1C88FEA3C59AC443DC8A058127121AB83A4FA078B94850DF +Block: 340 +Transacion 0: F0AA1AF92FD3E1287043D7B3B9CCD1798454776D87D1985BEEB24F2F6EBFA80E +Block: 341 +Transacion 0: AADC016A5DC27002B6B7D5BC70ADE49F46A3E83A86D48C1BA0F68D003383E6E1 +Block: 342 +Transacion 0: 32BA3D2E00F08F8A89461B76261DDFB73388AA230C1271D5215CF163DBB40F1C +Block: 343 +Transacion 0: BCC5E3AE406243C4DF00290D31DDBE4827575C0B6F929C2C5DB775BF69A84255 +Block: 344 +Transacion 0: 6743246DCA88E466A693633F39A4D68C95404506ECEB214C40855310C2C05C53 +Block: 345 +Transacion 0: F38136E53DA65AB5367A0EC73B6A495A5050D49133B1DDC5C6D90F409710F62C +Block: 346 +Transacion 0: D71CBADDDBD255A7321C73FA552BEA8AD8969A2D3DBCBBA2652DC9BF604BF089 +Block: 347 +Transacion 0: 3D756DF956E48B9A6E376B17C8C6A3A98D85B3CD47903AF1F3FFBFE52648A139 +Block: 348 +Transacion 0: ABB7EE4AAEDE4D65C06245655ACA8F4035284A6947D686AF6D2314351346FD9D +Block: 349 +Transacion 0: E771ADC73320CD15D1374E3B406ACBA471A17894927BC034F8004C2E9EF94C29 +Block: 350 +Transacion 0: B791A0CA3698AF9FD0F9D0D67AFFE631C3A5D3BBC6F65085C00C96E7843BBC93 +Block: 351 +Transacion 0: 39AC112A53A81BD270242242CF853DB983F793268C817AE29383B90D5315721A +Block: 352 +Transacion 0: 4EA1F74C4877C69D3133945CDD07285D34431E0E0697C123BCAB0F4779BBE9AB +Block: 353 +Transacion 0: 10A40D28A379C75B8A5AB4DF9CAA72EC94768CF31DC5F4F97220856827D51E0C +Block: 354 +Transacion 0: 18FF334A67C25F9312F923895F7100BF7D64FA4BC8D84944FBBB4BB7AD2640E3 +Block: 355 +Transacion 0: 3B938EFA4F754E3E457DFD664FDF088EDEBF787220FAB267C44433E0CFE47713 +Block: 356 +Transacion 0: F09ED1E006F39C4B9D49E3CEC362EE052438DFEE57B60D3BB8B31DD1194D3B6B +Block: 357 +Transacion 0: 5EF8635853C98DB3FB1BFBCFB08E1617BC24CBE442CE0AF56AF8F21AA99A2F53 +Block: 358 +Transacion 0: DFC03A58B170B6244A97C2207188601D2C93FFE61483CDF6B95B3D34C4A8EC5A +Block: 359 +Transacion 0: 78FF80396E51F5688468B6F2CE72BFEF36E5B474AEF07772059FE3A1008DE4DD +Block: 360 +Transacion 0: DE2386BEFCE7D2934F53FEEB632A291EB329069816E708784269F382F880D3FB +Block: 361 +Transacion 0: B8F38E7AA14AFF384CEF118EAFE364AEAE6DB1BE7BD57D016C11EB2BA2FA588E +Block: 362 +Transacion 0: 85A87B92A8A4393F2602BA45179FA9296C0C72FE3036AA9AFDD83B1D5330D7E1 +Block: 363 +Transacion 0: 5C10C7F312B6E5D80363D168430CEA4118FAEB3CD5663BFC155ACF006452CA31 +Block: 364 +Transacion 0: C5E412DDE2BE6FC6C4F150EA2F8C92BDE8FE662ADCFADDEFE1264274EF16D326 +Block: 365 +Transacion 0: D778D6BF6A6EBBA3A4C33838214587F24BED311CB2BF3A1E12AAC926065446C7 +Block: 366 +Transacion 0: 438E41EDAD640494590741B6105EDF9E3DA85730A4D89B8FE0C4E541BF7BBD43 +Block: 367 +Transacion 0: 9FFAA000736EB73EFEAC89AA4F2FCD9358EEA8616A271E8F9F4D7E3E79C35DC7 +Block: 368 +Transacion 0: 178FE851AA72D32A9DA1D93D1F77A699BFB0BEF3742A86264E66411E13730B88 +Block: 369 +Transacion 0: F938C68D867385EE6A891E7E2A4F29FE4A6E69344D5B7DDC3D98E5B0E27D3C0B +Block: 370 +Transacion 0: 7769CDA03EA71EA44847C758A4BC073C8F37A3161A06A83B84FDCEF13B2702E5 +Block: 371 +Transacion 0: B77B35FE0F7C5888EF6846E3DBFAFA65AB7C22F6D5BC66BE90945690CE8B8C50 +Block: 372 +Transacion 0: 55D0DB951F6797C7ED0169E7D9D05C3C88816554D3F8C9202A9FE7A9FFC8AA40 +Block: 373 +Transacion 0: BDC4623D731C77710B3A6590E50279E35504BC1C16B2E1F39C22E5E14820BC72 +Block: 374 +Transacion 0: 5C6E48FC0AB0AAB94A3C133799C40E61A05DB1D1731B71DC69D01EC7EDAED98E +Block: 375 +Transacion 0: D50BD0A86C0AB145BE4F8681AB6827C81041CE05843E311416FF0EE01DE3A4C3 +Block: 376 +Transacion 0: 8B011A55762D2C6B44B934FE325F13855540BA6C7AB340DB803BB4158578C8D4 +Block: 377 +Transacion 0: 27C8C2A828A410A45073E44D08CBFCD761C5F34F4B41EC0D82EFD2D60B183DEA +Block: 378 +Transacion 0: D11603AB55FC62A9BFBB41DFEE89C54D4DE3A6A1DC2C62A4624E95F55C3D86C8 +Block: 379 +Transacion 0: BB6EF035598980E62580AF72361758E315249470CF9E439C013857EE93B129B7 +Block: 380 +Transacion 0: 699EA87979D27AFC031F13272C76B9B316320C9A105C9002748C4FD12DFEE4D7 +Block: 381 +Transacion 0: 8E8518921E64EE0BAAA7DB3C95F0C89502CCF54FD2FA502CB3924DEAB515CF22 +Transacion 1: E726E1BE2078A40B938A65F63DF654196EE5AC561383572281245CD36E09D7C6 +Block: 382 +Transacion 0: D62508A97EB750BA19C9BF50C27A4998F2262BE5D76802C09158905C4BAF9699 +Block: 383 +Transacion 0: 2898FBBE9E8F2E7EADCC82B2FB00F43FE5A6CB4B4492680EFFE435E8B9AEDCEA +Transacion 1: 227E8E0666F063B8C556C372B240540A26D591DFCE20CF51E89F08A0C5A3708E +Transacion 2: 2F16FD4A15E9D87D1521DA89D7C928A229DC32D6757D4A68309FB6FF2F865342 +Block: 384 +Transacion 0: AC520F75AD7B0AF214965F51167958484D8B0C3E21A0B7B257F481EC95C76DB2 +Transacion 1: 34DC823C5B563492E82E463E0CE12FDD189872B60D1CFCB6686209817C01EC82 +Transacion 2: AB4001EB2CE2BCA9B526093813B18170ABD28D6EE86116432F67C4EEA73EB15A +Transacion 3: 3C3255FE1993305732405C297ED7297DCB2D1CBCD41DC7A3728F665FEA100EA7 +Block: 385 +Transacion 0: 04E527C66B6925E81CB850A3B81AD55D3050E4DDD392C2979CFCCBF6B9CC0E81 +Transacion 1: 4AD4043B1AA4ACF391CC4F2744FEA407DE200DF0D548C0835736869E7ACC421B +Block: 386 +Transacion 0: 32B636C9DF02C715EE9159BFC45BFC608B6D06305720BAADD2FD13047BF4EB7E +Block: 387 +Transacion 0: FB83034C0C5DA5874753F2C0FE2F926AAC593AF06748F90FA0A79BF2EA4E9EC0 +Transacion 1: 9AF31C323A2FEC3E1FDBF7064D8982207730A22BE01D0900C443B6CD966E7549 +Transacion 2: 7D8400C988BACABF8D0DADBF55250F07A0619F3AF54F513889D8F90716C89117 +Block: 388 +Transacion 0: D4FBA46266A7D8B70FFA3351A1B2FEA755A3CE47064262A69229A52845E99F07 +Transacion 1: 317DFA8CCBBC2CF0649313792C51C0542D20755BE0A5B200A7BD28BCC6218C2B +Transacion 2: 5F912F835CE402BB14B84B15C37E454845D69128009A10EB5551E221FC8A6225 +Block: 389 +Transacion 0: 5E70FCA75E3E1F0F50878A30097A7F6119DD223C7B3CD8EB699826A555662B0E +Transacion 1: B3E5EC565F885DFB33CCE989EF57993129FB79DB775C83AD260EF01FB2947058 +Block: 390 +Transacion 0: 19F1401F10E728631AF6294CE0C5758A06A60F7CD445A55810145EF0F97D735A +Transacion 1: 920F91EC56AC7CA728EADF76285C70AAEDAA79D83F1879F3BA59C82DEC8C8238 +Block: 391 +Transacion 0: C331B8CE4CAADD98E5038EB84BFA0DAFEBDDCF409917259A12F877B2204F4022 +Block: 392 +Transacion 0: 1916C6C9E984615DB98F97D4BF71B1058E81717B4CD186931186B4E285EBDCA2 +Transacion 1: E5A12574182D1108748C95A34C5D4CB30034060D47B5C77F01EF58AD00405400 +Transacion 2: 86A78DCA2B352AB665FC7E84040CD6A2D160BF8766E7F2C57462A24E7B7C22A0 +Block: 393 +Transacion 0: D7F0AE58D2C8407B8F40426A60801AD0429BEC3A038B9ECD25458DDCFECEDA09 +Block: 394 +Transacion 0: 3673D57B4E344E199CB9FC64EC9424D25007F8386B35539C53ED0E0A8655BEFF +Transacion 1: 20082DF2A8AA12B0E98C050976CE5C32FB9706D93887CC6591867548C84FC24E +Transacion 2: 3B1CD9874B59B39674714AD789258FAEC1DCC49FA354ABE2340A9FD7C7BD6255 +Block: 395 +Transacion 0: 3BE24FBE826513125DD8A21EB33EAEC8A0B5A41F74C3FFB10E33930D53004337 +Block: 396 +Transacion 0: 38D507C7E9C2DCE2F2090B1C2BCB97BDF16942EBE355284102697AA0CA6AA190 +Block: 397 +Transacion 0: 2B714EABF8CC8A4DE641032FE78FB6650D6A8A5161AE7A3FA384D65A77212BCE +Block: 398 +Transacion 0: 5590BA3AF5F8F283307E90941BC59ECA29B66D1C865F415F058C57511218F097 +Transacion 1: F9ED8FA26E2A650122C60DA24277F8E21E207EC17B440E8A7069EEA98616A781 +Block: 399 +Transacion 0: 31F20390249989D70E2945981B0A8A97386BCD187F80AAB6D1549A30564F0997 +Transacion 1: 30E8B9F9ECAA536141F21E7AD0370A60F5094AA74BD49C910450CF5B9966B47D +Transacion 2: 8493E2F7076AEB57F771F35E294D142318B4BBAA01410A739832C23613059763 +Transacion 3: B0E03F28C5F55FBE5D01EAEAA9A87D06C88ABF7D12C469474B3FF000939EF692 +Transacion 4: F8E287D4658934A5B2357704BCC9AF3DCAD329B9EAB2F3F0AB68978D46B81F23 +Transacion 5: B3C539D8E0C3F483779512747737F98CEB3DE907A99287F4D1D56294E17687ED +Transacion 6: F4BAF4CF420BD9DA834D2598B6F41C9F5293B133A2846ED698149CFFA9DC3F55 +Transacion 7: D30051683F838A45B26C9C8970679A144B8FA246D9D5E299E074AC8E5A744BF9 +Transacion 8: 246901E399CA7EADC38AF2067C9EBDA772F7B2BBFB5F850D67F8EC0A4FEAE7C9 +Block: 400 +Transacion 0: AB736A9180F675EE3B9751FC9B83AA726C49998DA7E09227CD3D8B486DD50B6C +Transacion 1: 166E31153CC1AF37C80D88E75B09B41B483656F1823ACF66637EF5F0E109930D +Transacion 2: 801054F7282B2575E17275DA1D7CA714F482DC92EA819B33942588771D0EC9B0 +Transacion 3: 2FDF7AD3E27CA9AC1EAC317215A216AA0EE44E305E5CA894C896A9DBC9FE3C4A +Transacion 4: 60EF5D279702D3060686297D41898CFB1D323F75F4887A4ACA1E9311DF956F0D +Transacion 5: 9C53B59700B0AE869DAF70D8E0375A5AB36D4D4BF66499A3AC2E3835A07A3715 +Transacion 6: 9154CC92C8B025C1DF13EF7D09A0F9662F46B40368175AD76A92948C5C2D86DE +Transacion 7: B01773AB0DFE7D44CA21EBEF4F5A5D9FD1F532C4F16BEA2F8385CE1E3188919C +Transacion 8: 667B07D690B83D6B4E57A57A242F87B101A53B86F521CAD2A54A7FBC63565D89 +Transacion 9: 14F72D1D00EA8092D43191E2D0226D6857F3D36B7CCA0BE8F22DDCA7BA6DD076 +Transacion 10: 9D3A8B333CBE818D9A6AACD363A4A06E7DB158CE136A2EB8AEEF8769DC512F4F +Transacion 11: 506830763DE017845A7D45EB55D49AE8663F3E0C6B0153AEDF67FB6D5EEB64AB +Transacion 12: 34AC918C91C2B47A94FAE82B7F86FEA65368E902BD737B13BAB395CE6C09717B +Transacion 13: 2F75BC9B48BDA054C7203E9BD11F579EDEB1373C269285B39261080E04C074AD +Transacion 14: 2B309C29DA939833FE0D9FA7D8CCA40E0B8F644FAFAC5D44B475EA07BC44A271 +Transacion 15: 02BA2EED6BBE7F432E67AAA254871415DF97FD2AC15379755E5C01637D3EB802 +Transacion 16: 34A6DA66683A4718758BCD0B68B3AB427418A7C3B06AA8B18DA398449BEF3505 +Transacion 17: 1FFBE330992ACBE9D0BD834A97E097E4F78787B2C7DAAE1572357F7E4C4D6239 +Block: 401 +Transacion 0: CC3E7A487087173B934A76752009F90F6689C56994A2EB186B08A9973586A788 +Transacion 1: 5540F54A2BCC34F68E4FA2DDE4C3349BBB4249CDAD285474777B67675A284D98 +Transacion 2: 31B4242928B779163EA407D2CA8F72A32B2FFB326364250AF99561EAE73889F7 +Transacion 3: 2CC456BF4B09A88F94483224A1DCCA468FFBC18E0DFC846542B93B1E15A15DF0 +Transacion 4: 259CC9DEE90C5CE17633F64717A68A171F2450243C79135EDF04EE936946E53C +Transacion 5: 55B8E3917B02EB8DE033D4E2F5F02C195FF7C51621369D3624551CF0CFF3C464 +Transacion 6: 8F0670606178B0BEA00BC79AE337A84E801E4574D082302E39393AEFBCBD288B +Transacion 7: 2B8364FC33E2FCF8C36D8CADBCBD3F3FF85DCCCB3A5A1436347A419676754CF9 +Transacion 8: 497A65786A1FC2BD18DCBA12366F2AAEF3D7AF5D0A74A2C68119CC173FFA6E7E +Transacion 9: E3F2B3DD38EE4A87F6F9B77B5196BE61F74101D5D0D5272F8EEA2D3C1371965A +Transacion 10: 252889D738E6359A7D34DA06C61F825313BD6DB00161D1A7ED3692E895EBB545 +Transacion 11: 63B54B162A7115D16ECC97D304993785BB0585A1BD53C24A861B7D2692C6B5F3 +Transacion 12: E1437992533EEA32784AE5CD2AA3B655B4023D2CC23D154BAAADC93FB7FBFCBA +Transacion 13: 0354A724AF498ACB80DF9142F100E5FE1428309327DC2728C0997785997BBAB2 +Transacion 14: 38476DF82697A98B415802D37D34C15FEB6A1E19EAE5A733F739D48335D7890F +Transacion 15: F3639BE5B1177A21598AAABCCAC919381B9715D00D13E9744B3C57F19DF35DA1 +Transacion 16: F47AA32D864FEB22F17E046FD44C0958462A4AA5B47B6E8B36EC0229BD4E332F +Transacion 17: 63898138C43B38C01B0940C3988CFA95AC78B6C53CB04C3AF9B1EC62EC016E5F +Transacion 18: F9D27109D07A1482192886505A5AD356774E575336AEE5766002520E15443981 +Transacion 19: FADF1E4F4BC5E18D5486E80F6861B14FFABECA1F91061A1364BF47C2CFB136B1 +Transacion 20: 8EF1FDBBD43CD52A85B3F219182164393C72E14E7D371599A4CAC3B8E6F08231 +Transacion 21: 0C449A4923A306883D6DF6B005523BA7B3EA0A575CB285F782CE26DF51B0ADC6 +Transacion 22: CCA520E80023A0CEB3CBBB7B647F866E8FC7FD627F916B4549E65986A06D3FD9 +Transacion 23: 8557C7118BC5C3C952FDE43F0056B5BD3901123A8EC805268765D5349E6740E1 +Transacion 24: 560E22884260B6421D73B23F803BC5493A64D1CB8D04516B501C7B7873ECEFFF +Transacion 25: 0284ADDC20DA18B93C762094AE369FB65CF206AEF66EEB77387A51906D5E1E16 +Transacion 26: D6E0031E30443B61C12670937998A2F91F1F6D51445D61054B8DAC3C2C407EBC +Block: 402 +Transacion 0: 57F707DB2C7C4429E5C97AE81C32E923426A2908A3FEBE51FC9B4F4114C735D7 +Transacion 1: A12FEB03072F6A6E285AE321D281252C1F0E6E0793EC0374AB4950159007EADD +Transacion 2: 9B3FC1BFB5848C8DE86A731BAD35EE81EA4306BABC1937AE6DB548DF7D4BDDBA +Transacion 3: FBE5294B5385A716165C9DFDB1775918A99BEFBAD0417930985DD9C87FBF34D9 +Transacion 4: 760FF5C22245795691FD1643662F55DEDE45473FB2BC2ACDC5C4089C3AF1C469 +Transacion 5: FBE8E5EB3E3624955160FAF7174E2D21C1391E0AE6F50609D7B4367AEA1CC2C9 +Transacion 6: 1E6619B55B40E54E9E59287753EE1D8F44FB3AAF3969B6E99901CC61B4463A3F +Transacion 7: A85001E3B9C55DC71B7326298E01FF46EC9838D8DCEA68F0845856B940FAD036 +Transacion 8: 562E8C325CADABAFBBFFDF3A9989CED2F5318463A5B9719C3DC4AFFFF2A9FC4D +Block: 403 +Transacion 0: 6140D0FDFA767DAB82B9EEE930305EF058B9AB4FEEC0C8B78D3884387E37BE5C +Block: 404 +Transacion 0: E01622E1F3B2E1E99140A5738BE1759FB8653F68B9B0F94F6769A4A69BAD1317 +Transacion 1: E6DDFE780E85BDA4EE79B1D118074F8378DFA68378137D1E29B27DB94CF26231 +Transacion 2: 312A5482D7ADEB582E31DEE8C28BF1008B803D665C82834524E3DFFF1267F1DC +Transacion 3: 1B69B43EEC780F491D55707C37F28D4019A764046ED70C2314D71444A9D5B714 +Transacion 4: E00F4D4FFC3F97AA8397AB55F9042B59885ADB91770EFED93B52832B2801C888 +Transacion 5: A87FE6378BE30A4E1EED78C65017FC8C3FAD65B3D5EA06E88AC30F157D5D5916 +Block: 405 +Transacion 0: A7B74FA49643B6503E5D5ABA47A0984A996C47E0BFFF2307911F0B847446AB67 +Transacion 1: 3CB2A7EAF51C0CA9809C7A4E4017C48E0E1CBA4BF0C95BC9A13FAFCA9C62832B +Transacion 2: 7092DE5D3C8E2BACFAD9706ADED2BCF6A7F56675FA40B42C1C18B46E4D363585 +Transacion 3: B92B2AC3CF40BAC2DE944E938BC3FBBC141BEFEEB19D7AC6ACE2FDD28F563E81 +Transacion 4: 8A354968D7B703167D79E02C8F27DDFF4DAEFC6694CD6050BDA4B0FD89A786FF +Transacion 5: 7DD2AB651779FC13766E1041C28E0F76D4E739ED33BE7A83D496DD9AD974F196 +Transacion 6: A20011493A82E7EBFC8A13E9F4B31B9C21092BAB1674E21854662CBDE888FE00 +Transacion 7: 67ABFB78B7C70BC1390BAE543A5CC8FD93ABDEA82343283307FA69ADD0FEDAAA +Transacion 8: 15748D09E43E2FBC6940C95AA8A77FDE82D27F7CE5A3B600564C606FCFBEC3FA +Transacion 9: 587368B85A026F51DB6967C26E0C1193DEF7320293A6061E07BE30A46AD67559 +Transacion 10: 7EF287E1CF1422C43FD7A10A6CF34A56A5686B743263226E353BE83B3D971BCC +Transacion 11: 8C405B78EFB6BF9BE62CCE6B897A2A0C89CC41D83DC164560E0BCA5A28067EB7 +Transacion 12: 78DA3B5FE00FE94804BC8104CDE134FAC0C2DB8B58B953D61BDE4844AFDD19B0 +Transacion 13: 644E36F29F4166A0BD8DDF25232646953FB21EB5CFBE3DCF845FB40DE17E4E91 +Transacion 14: DC6F7949E46EC006FDF46C84F81499C427E567EC4BE05EF5E720CB5EC540C895 \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.pb.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.pb.go new file mode 100755 index 00000000..0db9ed1b --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.pb.go @@ -0,0 +1,197 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// source: dah.proto + +/* +Package util is a generated protocol buffer package. + +It is generated from these files: + dah.proto + +It has these top-level messages: + TX +*/ +package util + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type TX struct { + Version uint32 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + LockTime uint32 `protobuf:"varint,2,opt,name=lockTime" json:"lockTime,omitempty"` + Txin []*TX_TXIN `protobuf:"bytes,3,rep,name=txin" json:"txin,omitempty"` + Txout []*TX_TXOUT `protobuf:"bytes,4,rep,name=txout" json:"txout,omitempty"` + Blocks [][]byte `protobuf:"bytes,5,rep,name=blocks,proto3" json:"blocks,omitempty"` + Fee uint64 `protobuf:"varint,6,opt,name=fee" json:"fee,omitempty"` +} + +func (m *TX) Reset() { *m = TX{} } +func (m *TX) String() string { return proto.CompactTextString(m) } +func (*TX) ProtoMessage() {} +func (*TX) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *TX) GetVersion() uint32 { + if m != nil { + return m.Version + } + return 0 +} + +func (m *TX) GetLockTime() uint32 { + if m != nil { + return m.LockTime + } + return 0 +} + +func (m *TX) GetTxin() []*TX_TXIN { + if m != nil { + return m.Txin + } + return nil +} + +func (m *TX) GetTxout() []*TX_TXOUT { + if m != nil { + return m.Txout + } + return nil +} + +func (m *TX) GetBlocks() [][]byte { + if m != nil { + return m.Blocks + } + return nil +} + +func (m *TX) GetFee() uint64 { + if m != nil { + return m.Fee + } + return 0 +} + +type TX_TXIN struct { + Ix uint32 `protobuf:"varint,1,opt,name=ix" json:"ix,omitempty"` + SourceHash []byte `protobuf:"bytes,2,opt,name=sourceHash,proto3" json:"sourceHash,omitempty"` + Script []byte `protobuf:"bytes,3,opt,name=script,proto3" json:"script,omitempty"` + Sequence uint32 `protobuf:"varint,4,opt,name=sequence" json:"sequence,omitempty"` +} + +func (m *TX_TXIN) Reset() { *m = TX_TXIN{} } +func (m *TX_TXIN) String() string { return proto.CompactTextString(m) } +func (*TX_TXIN) ProtoMessage() {} +func (*TX_TXIN) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 0} } + +func (m *TX_TXIN) GetIx() uint32 { + if m != nil { + return m.Ix + } + return 0 +} + +func (m *TX_TXIN) GetSourceHash() []byte { + if m != nil { + return m.SourceHash + } + return nil +} + +func (m *TX_TXIN) GetScript() []byte { + if m != nil { + return m.Script + } + return nil +} + +func (m *TX_TXIN) GetSequence() uint32 { + if m != nil { + return m.Sequence + } + return 0 +} + +type TX_TXOUT struct { + Value uint64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` + Script []byte `protobuf:"bytes,2,opt,name=script,proto3" json:"script,omitempty"` + Color []byte `protobuf:"bytes,3,opt,name=color,proto3" json:"color,omitempty"` + Quantity uint64 `protobuf:"varint,4,opt,name=quantity" json:"quantity,omitempty"` +} + +func (m *TX_TXOUT) Reset() { *m = TX_TXOUT{} } +func (m *TX_TXOUT) String() string { return proto.CompactTextString(m) } +func (*TX_TXOUT) ProtoMessage() {} +func (*TX_TXOUT) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0, 1} } + +func (m *TX_TXOUT) GetValue() uint64 { + if m != nil { + return m.Value + } + return 0 +} + +func (m *TX_TXOUT) GetScript() []byte { + if m != nil { + return m.Script + } + return nil +} + +func (m *TX_TXOUT) GetColor() []byte { + if m != nil { + return m.Color + } + return nil +} + +func (m *TX_TXOUT) GetQuantity() uint64 { + if m != nil { + return m.Quantity + } + return 0 +} + +func init() { + proto.RegisterType((*TX)(nil), "util.TX") + proto.RegisterType((*TX_TXIN)(nil), "util.TX.TXIN") + proto.RegisterType((*TX_TXOUT)(nil), "util.TX.TXOUT") +} + +func init() { proto.RegisterFile("dah.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 329 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x91, 0xc1, 0x4b, 0xc3, 0x30, + 0x18, 0xc5, 0x59, 0x9b, 0x4e, 0x8d, 0xdb, 0x90, 0x30, 0x24, 0xec, 0x20, 0x55, 0x3c, 0xf4, 0xd4, + 0x82, 0x9e, 0x45, 0xf0, 0xa4, 0x17, 0x85, 0x50, 0x61, 0x78, 0x6b, 0xb3, 0x6f, 0x6d, 0xb4, 0x6b, + 0xba, 0x34, 0x19, 0xdd, 0xd5, 0xbf, 0x5c, 0x92, 0x76, 0x63, 0x5e, 0x42, 0x7e, 0x79, 0x1f, 0xef, + 0xbd, 0x8f, 0xe0, 0x8b, 0x55, 0x56, 0xc6, 0x8d, 0x92, 0x5a, 0x12, 0x64, 0xb4, 0xa8, 0xee, 0x7e, + 0x7d, 0xec, 0xa5, 0x4b, 0x42, 0xf1, 0xd9, 0x0e, 0x54, 0x2b, 0x64, 0x4d, 0x47, 0xe1, 0x28, 0x9a, + 0xb2, 0x03, 0x92, 0x05, 0x3e, 0xaf, 0x24, 0xff, 0x49, 0xc5, 0x06, 0xa8, 0xe7, 0xa4, 0x23, 0x93, + 0x5b, 0x8c, 0x74, 0x27, 0x6a, 0xea, 0x87, 0x7e, 0x74, 0xf9, 0x30, 0x8d, 0xad, 0x63, 0x9c, 0x2e, + 0xe3, 0x74, 0xf9, 0xf6, 0xce, 0x9c, 0x44, 0xee, 0x71, 0xa0, 0x3b, 0x69, 0x34, 0x45, 0x6e, 0x66, + 0x76, 0x32, 0xf3, 0xf1, 0x99, 0xb2, 0x5e, 0x24, 0xd7, 0x78, 0x9c, 0x5b, 0xd7, 0x96, 0x06, 0xa1, + 0x1f, 0x4d, 0xd8, 0x40, 0xe4, 0x0a, 0xfb, 0x6b, 0x00, 0x3a, 0x0e, 0x47, 0x11, 0x62, 0xf6, 0xba, + 0xf8, 0xc6, 0xc8, 0xba, 0x93, 0x19, 0xf6, 0x44, 0x37, 0x74, 0xf5, 0x44, 0x47, 0x6e, 0x30, 0x6e, + 0xa5, 0x51, 0x1c, 0x5e, 0xb3, 0xb6, 0x74, 0x45, 0x27, 0xec, 0xe4, 0xc5, 0x26, 0xb4, 0x5c, 0x89, + 0x46, 0x53, 0xdf, 0x69, 0x03, 0xd9, 0xf5, 0x5a, 0xd8, 0x1a, 0xa8, 0x39, 0x50, 0xd4, 0xaf, 0x77, + 0xe0, 0x45, 0x81, 0x03, 0xd7, 0x92, 0xcc, 0x71, 0xb0, 0xcb, 0x2a, 0x03, 0x2e, 0x0f, 0xb1, 0x1e, + 0x4e, 0x2c, 0xbd, 0x7f, 0x96, 0x73, 0x1c, 0x70, 0x59, 0x49, 0x35, 0x24, 0xf5, 0x60, 0x83, 0xb6, + 0x26, 0xab, 0xb5, 0xd0, 0x7b, 0x17, 0x84, 0xd8, 0x91, 0x5f, 0x9e, 0xbf, 0x9e, 0x0a, 0xa1, 0x4b, + 0x93, 0xc7, 0x5c, 0x6e, 0x92, 0x72, 0xdf, 0x80, 0xaa, 0x60, 0x55, 0x80, 0x4a, 0xd6, 0x59, 0xae, + 0x04, 0x4f, 0xa0, 0xcb, 0x36, 0x4d, 0x05, 0x6d, 0xc2, 0xcb, 0x4c, 0xd4, 0x5c, 0xae, 0x20, 0x29, + 0x64, 0x62, 0x74, 0x67, 0x0f, 0x51, 0xe5, 0x63, 0xf7, 0xa5, 0x8f, 0x7f, 0x01, 0x00, 0x00, 0xff, + 0xff, 0xbb, 0x8b, 0x8c, 0x33, 0xdf, 0x01, 0x00, 0x00, +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.proto b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.proto new file mode 100755 index 00000000..a87236e8 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/dah.proto @@ -0,0 +1,43 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +syntax = "proto3"; + +option go_package = "github.com/hyperledger/fabric/examples/chaincode/go/utxo/util" ; + +package util; + +message TX { + uint32 version = 1; + uint32 lockTime = 2; + message TXIN { + uint32 ix = 1; + bytes sourceHash = 2; + bytes script = 3; + uint32 sequence = 4; + } + repeated TXIN txin = 3; + + message TXOUT { + uint64 value = 1; + bytes script = 2; + bytes color = 3; + uint64 quantity = 4; + } + repeated TXOUT txout = 4; + repeated bytes blocks = 5; + uint64 fee = 6; +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/store.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/store.go new file mode 100755 index 00000000..a4142fab --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/store.go @@ -0,0 +1,72 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +// Store interface describes the storage used by this chaincode. The interface +// was created so either the state database store can be used or a in memory +// store can be used for unit testing. +type Store interface { + GetState(Key) (*TX_TXOUT, bool, error) + PutState(Key, *TX_TXOUT) error + DelState(Key) error + GetTran(string) ([]byte, bool, error) + PutTran(string, []byte) error +} + +// InMemoryStore used for unit testing +type InMemoryStore struct { + Map map[Key]*TX_TXOUT + TranMap map[string][]byte +} + +// MakeInMemoryStore creates a new in memory store +func MakeInMemoryStore() Store { + ims := &InMemoryStore{} + ims.Map = make(map[Key]*TX_TXOUT) + ims.TranMap = make(map[string][]byte) + return ims +} + +// GetState returns the transaction for the given key +func (ims *InMemoryStore) GetState(key Key) (*TX_TXOUT, bool, error) { + value, ok := ims.Map[key] + return value, ok, nil +} + +// DelState deletes the given key and corresponding transactions +func (ims *InMemoryStore) DelState(key Key) error { + delete(ims.Map, key) + return nil +} + +// PutState saves the key and transaction in memory +func (ims *InMemoryStore) PutState(key Key, value *TX_TXOUT) error { + ims.Map[key] = value + return nil +} + +// GetTran returns the transaction for the given hash +func (ims *InMemoryStore) GetTran(key string) ([]byte, bool, error) { + value, ok := ims.TranMap[key] + return value, ok, nil +} + +// PutTran saves the hash and transaction in memory +func (ims *InMemoryStore) PutTran(key string, value []byte) error { + ims.TranMap[key] = value + return nil +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/util.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/util.go new file mode 100755 index 00000000..d9094c37 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/util.go @@ -0,0 +1,104 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "bytes" + "encoding/binary" +) + +func decodeInt32(input []byte) (int32, []byte, error) { + var myint32 int32 + buf1 := bytes.NewBuffer(input[0:4]) + binary.Read(buf1, binary.LittleEndian, &myint32) + return myint32, input, nil +} + +// ReadVarInt reads an int that is formatted in the Bitcoin style +// variable int format +func ReadVarInt(buffer *bytes.Buffer) uint64 { + var finalResult uint64 + + var variableLenInt uint8 + binary.Read(buffer, binary.LittleEndian, &variableLenInt) + if variableLenInt < 253 { + finalResult = uint64(variableLenInt) + } else if variableLenInt == 253 { + var result uint16 + binary.Read(buffer, binary.LittleEndian, &result) + finalResult = uint64(result) + } else if variableLenInt == 254 { + var result uint32 + binary.Read(buffer, binary.LittleEndian, &result) + finalResult = uint64(result) + } else if variableLenInt == 255 { + var result uint64 + binary.Read(buffer, binary.LittleEndian, &result) + finalResult = result + } + + return finalResult +} + +// ParseUTXOBytes parses a bitcoin style transaction +func ParseUTXOBytes(txAsUTXOBytes []byte) *TX { + buffer := bytes.NewBuffer(txAsUTXOBytes) + var version int32 + binary.Read(buffer, binary.LittleEndian, &version) + + inputCount := ReadVarInt(buffer) + + newTX := &TX{} + + for i := 0; i < int(inputCount); i++ { + newTXIN := &TX_TXIN{} + + newTXIN.SourceHash = buffer.Next(32) + + binary.Read(buffer, binary.LittleEndian, &newTXIN.Ix) + + // Parse the script length and script bytes + scriptLength := ReadVarInt(buffer) + newTXIN.Script = buffer.Next(int(scriptLength)) + + // Appears to not be used currently + binary.Read(buffer, binary.LittleEndian, &newTXIN.Sequence) + + newTX.Txin = append(newTX.Txin, newTXIN) + + } + + // Now the outputs + outputCount := ReadVarInt(buffer) + + for i := 0; i < int(outputCount); i++ { + newTXOUT := &TX_TXOUT{} + + binary.Read(buffer, binary.LittleEndian, &newTXOUT.Value) + + // Parse the script length and script bytes + scriptLength := ReadVarInt(buffer) + newTXOUT.Script = buffer.Next(int(scriptLength)) + + newTX.Txout = append(newTX.Txout, newTXOUT) + + } + + binary.Read(buffer, binary.LittleEndian, &newTX.LockTime) + + return newTX +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo.go new file mode 100755 index 00000000..06e95601 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo.go @@ -0,0 +1,144 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "crypto/sha256" + "encoding/hex" + "fmt" + "math" + + "github.com/hyperledger/fabric/examples/chaincode/go/utxo/consensus" +) + +// UTXO includes the storage for the chaincode API or an in memory +// store for testing +type UTXO struct { + Store Store +} + +// MakeUTXO constructs a new UTXO with the given store +func MakeUTXO(store Store) *UTXO { + utxo := &UTXO{} + utxo.Store = store + return utxo +} + +// Key represents the key for a transaction in storage. It has both a +// hash and index +type Key struct { + TxHashAsHex string + TxIndex uint32 +} + +// GetTransactionHash returns the Bitcoin hash (double sha256) of +// the given transaction +func (u *UTXO) GetTransactionHash(txData []byte) [32]byte { + firstHash := sha256.Sum256(txData) + txHash := sha256.Sum256(firstHash[:]) + return txHash +} + +// IsCoinbase returns true if this is a coinbase transaction, false otherwise +func (u *UTXO) IsCoinbase(index uint32) bool { + return index == math.MaxUint32 +} + +var mandatoryFlags = consensus.Verify_flags_p2sh + +var standardFlags = mandatoryFlags | + consensus.Verify_flags_dersig | + consensus.Verify_flags_strictenc | + consensus.Verify_flags_minimaldata | + consensus.Verify_flags_nulldummy | + consensus.Verify_flags_discourage_upgradable_nops | + consensus.Verify_flags_cleanstack | + consensus.Verify_flags_checklocktimeverify | + consensus.Verify_flags_low_s + +// ExecResult is the result of processing a transaction +type ExecResult struct { + SumCurrentOutputs uint64 + SumPriorOutputs uint64 + IsCoinbase bool +} + +// Execute processes the given transaction and outputs a result +func (u *UTXO) Execute(txData []byte) (*ExecResult, error) { + newTX := ParseUTXOBytes(txData) + txHash := u.GetTransactionHash(txData) + execResult := &ExecResult{} + // Loop through outputs first + for index, output := range newTX.Txout { + currKey := &Key{TxHashAsHex: hex.EncodeToString(txHash[:]), TxIndex: uint32(index)} + _, ok, err := u.Store.GetState(*currKey) + if err != nil { + return nil, fmt.Errorf("Error getting state from store: %s", err) + } + if ok == true { + // COLLISION + return nil, fmt.Errorf("COLLISION detected for key = %v, with output script length = %d", currKey, len(output.Script)) + } + // Store the output in utxo + u.Store.PutState(*currKey, &TX_TXOUT{Script: output.Script, Value: output.Value}) + execResult.SumCurrentOutputs += output.Value + } + // Now loop over inputs, + for index, input := range newTX.Txin { + prevTxHash := input.SourceHash + prevOutputIx := input.Ix + if u.IsCoinbase(prevOutputIx) { + execResult.IsCoinbase = true + //fmt.Println("COINBASE!!") + } else { + //fmt.Println("NOT COINBASE!!") + // NOT coinbase, need to verify + keyToPrevOutput := &Key{TxHashAsHex: hex.EncodeToString(prevTxHash), TxIndex: prevOutputIx} + value, ok, err := u.Store.GetState(*keyToPrevOutput) + if err != nil { + return nil, fmt.Errorf("Error getting state from store: %s", err) + } + if !ok { + // Previous output not fouund, + return nil, fmt.Errorf("Could not find previous transaction output with key = %v", keyToPrevOutput) + } + // Call Verify_script + txInputIndex := uint(index) + result := consensus.Verify_script(&txData[0], int64(len(txData)), &value.Script[0], int64(len(value.Script)), txInputIndex, uint(standardFlags)) + if result != consensus.Verify_result_eval_true { + result = consensus.Verify_script(&txData[0], int64(len(txData)), &value.Script[0], int64(len(value.Script)), txInputIndex, uint(mandatoryFlags)) + if result != consensus.Verify_result_eval_true { + return nil, fmt.Errorf("Unexpected result from verify_script, expected %d, got %d, perhaps it is %d", consensus.Verify_result_eval_true, result, consensus.Verify_result_invalid_stack_operation) + } + } + // Verified, now remove prior outputs + u.Store.DelState(*keyToPrevOutput) + execResult.SumPriorOutputs += value.Value + } + + hex := hex.EncodeToString(txHash[:]) + fmt.Printf("PUT TRAN %s", hex) + u.Store.PutTran(hex, txData) + } + return execResult, nil +} + +// Query search the storage for a given transaction hash +func (u *UTXO) Query(txHashHex string) pb.Response { + tx, _, err := u.Store.GetTran(txHashHex) + return tx, err +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo_test.go b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo_test.go new file mode 100755 index 00000000..ec979c3d --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/examples/chaincode/go/utxo/util/utxo_test.go @@ -0,0 +1,206 @@ +/* +Copyright IBM Corp. 2016 All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package util + +import ( + "encoding/base64" + "encoding/hex" + "fmt" + "io/ioutil" + "strings" + "sync" + "testing" + + "github.com/golang/protobuf/proto" + "github.com/hyperledger/fabric/examples/chaincode/go/utxo/consensus" +) + +// func TestMain(m *testing.M) { +// // viper.Set("ledger.blockchain.deploy-system-chaincode", "false") +// +// os.Exit(m.Run()) +// } + +const txFileHashes = "./Hashes_for_first_500_transactions_on_testnet3.txt" +const txFile = "./First_500_transactions_base64_encoded_on_testnet3.txt" + +const consensusScriptVerifyTx = "01000000017d01943c40b7f3d8a00a2d62fa1d560bf739a2368c180615b0a7937c0e883e7c000000006b4830450221008f66d188c664a8088893ea4ddd9689024ea5593877753ecc1e9051ed58c15168022037109f0d06e6068b7447966f751de8474641ad2b15ec37f4a9d159b02af68174012103e208f5403383c77d5832a268c9f71480f6e7bfbdfa44904becacfad66163ea31ffffffff01c8af0000000000001976a91458b7a60f11a904feef35a639b6048de8dd4d9f1c88ac00000000" +const consensusScriptVerifyPreviousOutputScript = "76a914c564c740c6900b93afc9f1bdaef0a9d466adf6ee88ac" + +type block struct { + transactions []string +} + +func makeBlock() *block { + //return &block{transactions: make([]string, 0)} + return &block{} +} + +func (b *block) addTxAsBase64String(txAsString string) error { + b.transactions = append(b.transactions, txAsString) + return nil +} + +//getTransactionsAsUTXOBytes returns a readonly channel of the transactions within this block as UTXO []byte +func (b *block) getTransactionsAsUTXOBytes() <-chan []byte { + resChannel := make(chan []byte) + go func() { + defer close(resChannel) + for _, txAsText := range b.transactions { + data, err := base64.StdEncoding.DecodeString(txAsText) + if err != nil { + panic(fmt.Errorf("Could not decode transaction (%s) into bytes use base64 decoding: %s\n", txAsText, err)) + } + resChannel <- data + } + }() + return resChannel +} + +var blocksFromFile []*block +var once sync.Once + +// getBlocks returns the blocks parsed from txFile, but only parses once. +func getBlocks() ([]*block, error) { + var err error + once.Do(func() { + contents, err := ioutil.ReadFile(txFile) + if err != nil { + return + } + lines := strings.Split(string(contents), string('\n')) + var currBlock *block + for _, line := range lines { + if strings.HasPrefix(line, "Block") { + currBlock = makeBlock() + blocksFromFile = append(blocksFromFile, currBlock) + } else { + // Trim out the 'Transacion XX:' part + //currBlock.addTxAsBase64String(strings.Split(line, ": ")[1]) + currBlock.addTxAsBase64String(line) + } + } + }) + + return blocksFromFile, err +} + +func TestVerifyScript_InvalidTranscation(t *testing.T) { + arg1 := []byte("arg1") + arg2 := int64(4) + arg3 := []byte("arg2") + arg4 := int64(4) + arg5 := uint(100) + arg6 := uint(1) + //func Verify_script(arg1 *byte, arg2 int64, arg3 *byte, arg4 int64, arg5 uint, arg6 uint) (_swig_ret LibbitcoinConsensusVerify_result_type) + result := consensus.Verify_script(&arg1[0], arg2, &arg3[0], arg4, arg5, arg6) + t.Log(result) + t.Log(consensus.Verify_result_tx_invalid) + if result != consensus.Verify_result_tx_invalid { + t.Fatalf("Should have failed to verify transaction") + } +} + +func TestParse_GetBlocksFromFile(t *testing.T) { + blocks, err := getBlocks() + if err != nil { + t.Fatalf("Error getting blocks from tx file: %s", err) + } + for index, b := range blocks { + t.Logf("block %d has len transactions = %d", index, len(b.transactions)) + } + t.Logf("Number of blocks = %d from file %s", len(blocks), txFile) +} + +//TestBlocks_GetTransactionsAsUTXOBytes will range over blocks and then transactions in UTXO bytes form. +func TestBlocks_GetTransactionsAsUTXOBytes(t *testing.T) { + blocks, err := getBlocks() + if err != nil { + t.Fatalf("Error getting blocks from tx file: %s", err) + } + // Loop through the blocks and then range over their transactions in UTXO bytes form. + for index, b := range blocks { + t.Logf("block %d has len transactions = %d", index, len(b.transactions)) + for txAsUTXOBytes := range b.getTransactionsAsUTXOBytes() { + //t.Logf("Tx as bytes = %v", txAsUTXOBytes) + _ = len(txAsUTXOBytes) + } + } +} + +func TestParse_UTXOTransactionBytes(t *testing.T) { + blocks, err := getBlocks() + if err != nil { + t.Fatalf("Error getting blocks from tx file: %s", err) + } + utxo := MakeUTXO(MakeInMemoryStore()) + // Loop through the blocks and then range over their transactions in UTXO bytes form. + for index, b := range blocks { + t.Logf("block %d has len transactions = %d", index, len(b.transactions)) + for txAsUTXOBytes := range b.getTransactionsAsUTXOBytes() { + + newTX := ParseUTXOBytes(txAsUTXOBytes) + t.Logf("Block = %d, txInputCount = %d, outputCount=%d", index, len(newTX.Txin), len(newTX.Txout)) + + // Now store the HEX of txHASH + execResult, err := utxo.Execute(txAsUTXOBytes) + if err != nil { + t.Fatalf("Error executing TX: %s", err) + } + if execResult.IsCoinbase == false { + if execResult.SumCurrentOutputs > execResult.SumPriorOutputs { + t.Fatalf("sumOfCurrentOutputs > sumOfPriorOutputs: sumOfCurrentOutputs = %d, sumOfPriorOutputs = %d", execResult.SumCurrentOutputs, execResult.SumPriorOutputs) + } + } + + txHash := utxo.GetTransactionHash(txAsUTXOBytes) + retrievedTx := utxo.Query(hex.EncodeToString(txHash)) + if !proto.Equal(newTX, retrievedTx) { + t.Fatal("Expected TX to be equal. ") + } + } + } + +} + +func TestParse_LibbitconTX(t *testing.T) { + txData, err := hex.DecodeString(consensusScriptVerifyTx) + if err != nil { + t.Fatalf("Error decoding HEX tx from libbitcoin: %s", err) + return + } + + prevTxScript, err := hex.DecodeString(consensusScriptVerifyPreviousOutputScript) + if err != nil { + t.Fatalf("Error decoding HEX tx from libbitcoin: %s", err) + return + } + + t.Logf("TX data from libbitcoin: %v", txData) + + tx := ParseUTXOBytes(txData) + + // Call Verify_script + txInputIndex := uint(0) + result := consensus.Verify_script(&txData[0], int64(len(txData)), &prevTxScript[0], int64(len(prevTxScript)), txInputIndex, uint(consensus.Verify_flags_p2sh)) + if result != consensus.Verify_result_eval_true { + t.Fatalf("Unexpected result from verify_script, expected %d, got %d", consensus.Verify_result_eval_true, result) + } + t.Log(result) + t.Log(consensus.Verify_result_eval_true) + t.Logf("TX from %v", tx) +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/config.json b/hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/config.json new file mode 100755 index 00000000..1fe07a38 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/config.json @@ -0,0 +1,57 @@ +{ + "network-config": { + "org1": { + "name": "peerOrg1", + "mspid": "Org1MSP", + "peer1": { + "requests": "grpcs://peer0.org1.example.com:7051", + "events": "grpcs://peer0.org1.example.com:7053", + "server-hostname": "peer0.org1.example.com", + "tls_cacerts": "/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" + }, + "peer2": { + "requests": "grpcs://peer1.org1.example.com:7051", + "events": "grpcs://peer1.org1.example.com:7053", + "server-hostname": "peer1.org1.example.com", + "tls_cacerts": "/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" + }, + "admin": { + "key": "/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", + "cert": "/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" + } + }, + "org2": { + "name": "peerOrg2", + "mspid": "Org2MSP", + "peer1": { + "requests": "grpcs://peer0.org2.example.com:7051", + "events": "grpcs://peer0.org2.example.com:7053", + "server-hostname": "peer0.org2.example.com", + "tls_cacerts": "/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" + }, + "peer2": { + "requests": "grpcs://peer1.org2.example.com:7051", + "events": "grpcs://peer1.org2.example.com:7053", + "server-hostname": "peer1.org2.example.com", + "tls_cacerts": "/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" + }, + "admin": { + "key": "/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore", + "cert": "/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts" + } + } + }, + "host":"explorer", + "port":"8080", + "channel": "businesschannel", + "GOPATH":"/opt/gopath", + "keyValueStore":"/tmp/fabric-client-kvs", + "eventWaitTime":"30000", + "mysql":{ + "host":"mysql", + "port":"3306", + "database":"fabricexplorer", + "username":"root", + "passwd":"root" + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/fabricexplorer.sql b/hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/fabricexplorer.sql new file mode 100755 index 00000000..557abb4c --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/explorer-artifacts/fabricexplorer.sql @@ -0,0 +1,115 @@ +/* + Navicat MySQL Data Transfer + + Source Server : 172.16.10.162 + Source Server Type : MySQL + Source Server Version : 50635 + Source Host : 172.16.10.162 + Source Database : fabricexplorer + + Target Server Type : MySQL + Target Server Version : 50635 + File Encoding : utf-8 + + Date: 07/07/2017 10:14:31 AM +*/ + +DROP DATABASE IF EXISTS `fabricexplorer`; + +CREATE DATABASE fabricexplorer; + +use fabricexplorer; +SET NAMES utf8; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for `blocks` +-- ---------------------------- +DROP TABLE IF EXISTS `blocks`; +CREATE TABLE `blocks` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `blocknum` int(11) DEFAULT NULL, + `datahash` varchar(256) DEFAULT NULL, + `prehash` varchar(256) DEFAULT NULL, + `channelname` varchar(128) DEFAULT NULL, + `txcount` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='blocks'; + +-- ---------------------------- +-- Table structure for `chaincodes` +-- ---------------------------- +DROP TABLE IF EXISTS `chaincodes`; +CREATE TABLE `chaincodes` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + `version` varchar(255) DEFAULT NULL, + `path` varchar(255) DEFAULT NULL, + `channelname` varchar(255) DEFAULT NULL, + `txcount` int(11) DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT; + +-- ---------------------------- +-- Table structure for `channel` +-- ---------------------------- +DROP TABLE IF EXISTS `channel`; +CREATE TABLE `channel` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `name` varchar(64) DEFAULT NULL, + `blocks` int(11) DEFAULT NULL, + `trans` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='channel'; + +-- ---------------------------- +-- Table structure for `peer` +-- ---------------------------- +DROP TABLE IF EXISTS `peer`; +CREATE TABLE `peer` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `org` int(11) DEFAULT NULL, + `name` varchar(64) DEFAULT NULL, + `mspid` varchar(64) DEFAULT NULL, + `requests` varchar(64) DEFAULT NULL, + `events` varchar(64) DEFAULT NULL, + `server_hostname` varchar(64) DEFAULT NULL, + `createdt` datetime DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='peer'; + +-- ---------------------------- +-- Table structure for `peer_ref_channel` +-- ---------------------------- +DROP TABLE IF EXISTS `peer_ref_channel`; +CREATE TABLE `peer_ref_channel` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `peerid` int(11) DEFAULT NULL, + `channelid` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT=''; + +-- ---------------------------- +-- Table structure for `transaction` +-- ---------------------------- +DROP TABLE IF EXISTS `transaction`; +CREATE TABLE `transaction` ( + `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', + `channelname` varchar(64) DEFAULT NULL, + `blockid` int(11) DEFAULT NULL, + `txhash` varchar(256) DEFAULT NULL, + `createdt` datetime DEFAULT NULL, + `chaincodename` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='transtaion'; + +-- ---------------------------- +-- Table structure for `write_lock` +-- ---------------------------- +DROP TABLE IF EXISTS `write_lock`; +CREATE TABLE `write_lock` ( + `write_lock` int(1) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`write_lock`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/fabric-kafka-4.yaml b/hyperledger_fabric/fabric-ca/fabric-1.2/fabric-kafka-4.yaml new file mode 100644 index 00000000..6a90e90a --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/fabric-kafka-4.yaml @@ -0,0 +1,425 @@ +# +# Copyright O Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# https://github.com/yeasy/docker-compose-files/tree/master/hyperledger +# This compose file will start a Hyperledger Fabric 1.0 MVE, including +# * 1 ca +# * 1 orderer +# * 4 peers in 2 orgs +# * cli for testing + +version: '3.2' + +services: + ca.org1.example.com: + image: "hyperledger/fabric-ca:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_ca_org1 + environment: + - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server + - FABRIC_CA_SERVER_CA_NAME=ca_peerOrg1 + - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/640931c23ef3b5256db282a6f5a0a54b809467eed33bd1e4a02a88db80332ee8_sk + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/640931c23ef3b5256db282a6f5a0a54b809467eed33bd1e4a02a88db80332ee8_sk + ports: + - ${CA_ORG1_ECAP_PORT}:7054 + volumes: + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config + command: sh -c 'fabric-ca-server start -b admin:adminpw -d' + + ca.org2.example.com: + image: "hyperledger/fabric-ca:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_ca_org2 + environment: + - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server + - FABRIC_CA_SERVER_CA_NAME=ca_peerOrg2 + - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/af8f87f16f62161a8ca7e84f9c7041d59f0330d9387316603986fe732e9e5f8a_sk + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem + - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/af8f87f16f62161a8ca7e84f9c7041d59f0330d9387316603986fe732e9e5f8a_sk + ports: + - ${CA_ORG2_ECAP_PORT}:7054 + volumes: + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config + command: sh -c 'fabric-ca-server start -b admin:adminpw -d' + + orderer.example.com: + image: "hyperledger/fabric-orderer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_orderer + restart: always + environment: + - ORDERER_GENERAL_LOGLEVEL=DEBUG + - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 + - ORDERER_GENERAL_GENESISMETHOD=file + - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block + - ORDERER_GENERAL_LOCALMSPID=OrdererMSP + - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp + - ORDERER_GENERAL_TLS_ENABLED=true + - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] + ports: + - ${ORDERER_PORT}:7050 + volumes: + - ${COMPOSE_PROJECT_PATH}/kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ${COMPOSE_PROJECT_PATH}/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp + - ${COMPOSE_PROJECT_PATH}/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls + external_links: + - ${COMPOSE_PROJECT_NAME}_peer0.org1.example.com:peer0.org1.example.com + - ${COMPOSE_PROJECT_NAME}_peer0.org2.example.com:peer0.org2.example.com + - ${COMPOSE_PROJECT_NAME}_peer1.org1.example.com:peer1.org1.example.com + - ${COMPOSE_PROJECT_NAME}_peer1.org2.example.com:peer1.org2.example.com + command: orderer + + peer0.org1.example.com: + image: "hyperledger/fabric-peer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_peer0_org1 + restart: always + depends_on: + - orderer.example.com + environment: + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + ports: + - ${PEER0_ORG1_GRPC_PORT}:7051 + - ${PEER0_ORG1_EVENT_PORT}:7053 + volumes: # docker.sock is mapped as the default CORE_VM_ENDPOINT + - /var/run/docker.sock:/var/run/docker.sock + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls + command: peer node start + + peer1.org1.example.com: + image: "hyperledger/fabric-peer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_peer1_org1 + restart: always + ports: + - ${PEER1_ORG1_GRPC_PORT}:7051 + - ${PEER1_ORG1_EVENT_PORT}:7053 + depends_on: + - orderer.example.com + environment: + - CORE_PEER_ID=peer1.org1.example.com + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls + command: peer node start + + peer0.org2.example.com: + image: "hyperledger/fabric-peer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_peer0_org2 + restart: always + depends_on: + - orderer.example.com + ports: + - ${PEER0_ORG2_GRPC_PORT}:7051 + - ${PEER0_ORG2_EVENT_PORT}:7053 + environment: + - CORE_PEER_ID=peer0.org2.example.com + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls + command: peer node start + + peer1.org2.example.com: + image: "hyperledger/fabric-peer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_peer1_org2 + restart: always + ports: + - ${PEER1_ORG2_GRPC_PORT}:7051 + - ${PEER1_ORG2_EVENT_PORT}:7053 + depends_on: + - orderer.example.com + environment: + - CORE_PEER_ID=peer1.org2.example.com + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp + - ${COMPOSE_PROJECT_PATH}/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls + command: peer node start + + cli: # client node + image: "hyperledger/fabric-tools:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_cli + hostname: cli + restart: always + tty: true + environment: + #- GOPATH=/opt/gopath + - CORE_LOGGING_LEVEL=DEBUG + - CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message} + - CORE_PEER_TLS_ENABLED=true # to enable TLS, change to true + - ORDERER_CA=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem + depends_on: + - orderer.example.com + - peer0.org1.example.com + - peer1.org1.example.com + - peer0.org2.example.com + - peer1.org2.example.com + working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer + volumes: + - ${COMPOSE_PROJECT_PATH}/scripts:/tmp/scripts + - ${COMPOSE_PROJECT_PATH}/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml + - ${COMPOSE_PROJECT_PATH}/crypto-config:/etc/hyperledger/fabric/crypto-config + - ${COMPOSE_PROJECT_PATH}/kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml + - ${COMPOSE_PROJECT_PATH}/kafka/channel-artifacts:/tmp/channel-artifacts + - ${COMPOSE_PROJECT_PATH}/examples:/opt/gopath/src/examples + command: bash -c 'sleep 15; cd /tmp; source scripts/func.sh; bash scripts/test_channel_create.sh; bash scripts/test_channel_join.sh; bash scripts/test_cc_install.sh; while true; do sleep 20180101; done' + + explorer: + image: yeasy/blockchain-explorer:0.1.0-preview + container_name: ${COMPOSE_PROJECT_NAME}_explorer + hostname: explorer + restart: always + volumes: + - ${COMPOSE_PROJECT_PATH}/explorer-artifacts/config.json:/blockchain-explorer/config.json + - ${COMPOSE_PROJECT_PATH}/crypto-config:/blockchain-explorer/first-network/crypto-config + ports: + - "${EXPLORER_PORT}:8080" + depends_on: + - mysql + - orderer.example.com + - peer0.org1.example.com + - peer1.org1.example.com + - peer0.org2.example.com + - peer1.org2.example.com + links: + - orderer.example.com + - peer0.org1.example.com + - peer1.org1.example.com + - peer0.org2.example.com + - peer1.org2.example.com + command: bash -c 'sleep 30; node main.js' + + mysql: # mysql service + image: mysql:5.7 + container_name: ${COMPOSE_PROJECT_NAME}_mysql + hostname: mysql + restart: always + environment: + - MYSQL_ROOT_PASSWORD=root + - MYSQL_DATABASE=fabricexplorer + - STARTUP_SQL=/fabricexplorer.sql + volumes: + - ${COMPOSE_PROJECT_PATH}/explorer-artifacts/fabricexplorer.sql:/docker-entrypoint-initdb.d/fabricexplorer.sql + expose: + - "3306" + command: mysqld + + kafka0: + # official repo doesn't have latest tag, however, kafka changes version recently + #image: yeasy/hyperledger-fabric-kafka:0.10.2.0 + image: "hyperledger/fabric-kafka:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_kafka0 + hostname: kafka0 + environment: + - KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false + - KAFKA_LOG_RETENTION_MS=-1 + - KAFKA_BROKER_ID=0 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + expose: + - '9092' + + kafka1: + # official repo doesn't have latest tag, however, kafka changes version recently + #image: yeasy/hyperledger-fabric-kafka:0.10.2.0 + image: "hyperledger/fabric-kafka:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_kafka1 + hostname: kafka1 + environment: + - KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false + - KAFKA_LOG_RETENTION_MS=-1 + - KAFKA_BROKER_ID=1 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + expose: + - '9092' + + kafka2: + # official repo doesn't have latest tag, however, kafka changes version recently + #image: yeasy/hyperledger-fabric-kafka:0.10.2.0 + image: "hyperledger/fabric-kafka:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_kafka2 + hostname: kafka2 + environment: + - KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false + - KAFKA_LOG_RETENTION_MS=-1 + - KAFKA_BROKER_ID=2 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + expose: + - '9092' + + kafka3: + # official repo doesn't have latest tag, however, kafka changes version recently + #image: yeasy/hyperledger-fabric-kafka:0.10.2.0 + image: "hyperledger/fabric-kafka:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_kafka3 + hostname: kafka3 + environment: + - KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B + - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false + - KAFKA_LOG_RETENTION_MS=-1 + - KAFKA_BROKER_ID=3 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + depends_on: + - zookeeper0 + - zookeeper1 + - zookeeper2 + expose: + - '9092' + + zookeeper0: + image: "hyperledger/fabric-zookeeper:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_zookeeper0 + hostname: zookeeper0 + environment: + - ZOO_MY_ID=1 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + expose: + - '2181' + - '2888' + - '3888' + + zookeeper1: + image: "hyperledger/fabric-zookeeper:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_zookeeper1 + hostname: zookeeper1 + environment: + - ZOO_MY_ID=2 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + expose: + - '2181' + - '2888' + - '3888' + + zookeeper2: + image: "hyperledger/fabric-zookeeper:1.2.0" + restart: always + tty: true + container_name: ${COMPOSE_PROJECT_NAME}_zookeeper2 + hostname: zookeeper2 + environment: + - ZOO_MY_ID=3 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + expose: + - '2181' + - '2888' + - '3888' + +networks: + default: + external: + name: ${CLUSTER_NETWORK} \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/fabric-solo-4.yaml b/hyperledger_fabric/fabric-ca/fabric-1.2/fabric-solo-4.yaml new file mode 100644 index 00000000..fb5c88f0 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/fabric-solo-4.yaml @@ -0,0 +1,394 @@ +# +# Copyright O Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# +# https://github.com/yeasy/docker-compose-files/tree/master/hyperledger +# This compose file will start a Hyperledger Fabric 1.0 MVE, including +# * 1 ca +# * 1 orderer +# * 4 peers in 2 orgs +# * cli for testing + +version: '3.2' + +services: + + ca.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_ca_orderer + image: "hyperledger/fabric-ca:1.2.0" + command: /bin/bash -c '/scripts/start-root-ca.sh 2>&1 | tee /data/logs/ca.orderer.example.com.log' + environment: + - FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_CSR_CN=ca.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.example.com + - FABRIC_CA_SERVER_DEBUG=true + - BOOTSTRAP_USER_PASS=admin:adminpw + - TARGET=/data/crypto-config/ordererOrganizations/example.com/ca + - TLSTARGET=/data/crypto-config/ordererOrganizations/example.com/tlsca + - TARGET_CERTFILE=/data/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem + - FABRIC_ORGS=orderer org1 org2 + volumes: + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + + ca.org1.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_ca_org1 + image: "hyperledger/fabric-ca:1.2.0" + command: /bin/bash -c '/scripts/start-root-ca.sh 2>&1 | tee /data/logs/ca.org1.example.com.log' + environment: + - FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_CSR_CN=ca.org1.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.org1.example.com + - FABRIC_CA_SERVER_DEBUG=true + - BOOTSTRAP_USER_PASS=admin:adminpw + - TARGET=/data/crypto-config/peerOrganizations/org1.example.com/ca + - TLSTARGET=/data/crypto-config/peerOrganizations/org1.example.com/tlsca + - TARGET_CERTFILE=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - FABRIC_ORGS=orderer org1 org2 + volumes: + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + + ca.org2.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_ca_org2 + image: "hyperledger/fabric-ca:1.2.0" + command: /bin/bash -c '/scripts/start-root-ca.sh 2>&1 | tee /data/logs/ca.org2.example.com.log' + environment: + - FABRIC_CA_SERVER_HOME=/etc/hyperledger/fabric-ca + - FABRIC_CA_SERVER_TLS_ENABLED=true + - FABRIC_CA_SERVER_CSR_CN=ca.org2.example.com + - FABRIC_CA_SERVER_CSR_HOSTS=ca.org2.example.com + - FABRIC_CA_SERVER_DEBUG=true + - BOOTSTRAP_USER_PASS=admin:adminpw + - TARGET=/data/crypto-config/peerOrganizations/org2.example.com/ca + - TLSTARGET=/data/crypto-config/peerOrganizations/org2.example.com/tlsca + - TARGET_CERTFILE=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + - FABRIC_ORGS=orderer org1 org2 + volumes: + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + + setup: + container_name: ${COMPOSE_PROJECT_NAME}_setup + image: "hyperledger/fabric-ca-tools:1.2.0" + command: /bin/bash -c '/scripts/setup-fabric.sh 2>&1 | tee /data/logs/setup.log; sleep 99999' + environment: + - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME} + volumes: + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + depends_on: + - ca.example.com + - ca.org1.example.com + - ca.org2.example.com + + orderer.example.com: + image: "hyperledger/fabric-ca-orderer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_orderer + restart: always + environment: + - FABRIC_CA_CLIENT_HOME=/var/hyperledger/orderer + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem + - ENROLLMENT_URL=https://orderer.example.com:orderer.example.compw@ca.example.com:7054 + - ORDERER_HOME=/var/hyperledger/orderer + - ORDERER_HOST=orderer.example.com + + - ORDERER_GENERAL_LOGLEVEL=DEBUG + - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 + - ORDERER_GENERAL_GENESISMETHOD=file + - ORDERER_GENERAL_GENESISFILE=/data/genesis.block + - ORDERER_GENERAL_LOCALMSPID=OrdererMSP + - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp + - ORDERER_GENERAL_TLS_ENABLED=true + - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key + - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt + - ORDERER_GENERAL_TLS_ROOTCAS=[/data/crypto-config/ordererOrganizations/example.com/ca/ca.example.com-cert.pem] + - ORDERER_DEBUG_BROADCASTTRACEDIR=data/logs + - ORDERER=orderer + - DOMAIN=example.com + ports: + - ${ORDERER_PORT}:7050 + volumes: + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + external_links: + - ${COMPOSE_PROJECT_NAME}_peer0.org1.example.com:peer0.org1.example.com + - ${COMPOSE_PROJECT_NAME}_peer0.org2.example.com:peer0.org2.example.com + - ${COMPOSE_PROJECT_NAME}_peer1.org1.example.com:peer1.org1.example.com + - ${COMPOSE_PROJECT_NAME}_peer1.org2.example.com:peer1.org2.example.com + depends_on: + - setup + command: /bin/bash -c '/scripts/start-orderer.sh 2>&1 | tee /data/logs/orderer.example.com.log' + + peer0.org1.example.com: + image: "hyperledger/fabric-ca-peer:1.2.0" + container_name: ${COMPOSE_PROJECT_NAME}_peer0_org1 + #restart: always + depends_on: + - orderer.example.com + environment: + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - FABRIC_CA_CLIENT_HOME=/etc/hyperledger/fabric + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - ENROLLMENT_URL=https://peer0.org1.example.com:peer0.org1.example.compw@ca.org1.example.com:7054 + - PEER_NAME=peer0.org1.example.com + - PEER_HOME=/etc/hyperledger/fabric + - PEER_HOST=peer0.org1.example.com + - PEER_NAME_PASS=peer0.org1.example.com:peer0.org1.example.compw + + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/msp + - CORE_VM_ENDPOINT=unix:///var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - ORG=org1 + - PEER=peer0 + - DOMAIN=org1.example.com + working_dir: /etc/hyperledger/fabric + ports: + - ${PEER0_ORG1_GRPC_PORT}:7051 + - ${PEER0_ORG1_EVENT_PORT}:7053 + volumes: # docker.sock is mapped as the default CORE_VM_ENDPOINT + - /var/run/docker.sock:/var/run/docker.sock + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer0.org1.example.com.log' + + peer1.org1.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer1_org1 + image: "hyperledger/fabric-ca-peer:1.2.0" + #restart: always + ports: + - ${PEER1_ORG1_GRPC_PORT}:7051 + - ${PEER1_ORG1_EVENT_PORT}:7053 + depends_on: + - orderer.example.com + environment: + - FABRIC_CA_CLIENT_HOME=/etc/hyperledger/fabric + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + - ENROLLMENT_URL=https://peer1.org1.example.com:peer1.org1.example.compw@ca.org1.example.com:7054 + - PEER_NAME=peer1.org1.example.com + - PEER_HOME=/etc/hyperledger/fabric + - PEER_HOST=peer1.org1.example.com + - PEER_NAME_PASS=peer1.org1.example.com:peer1.org1.example.compw + - CORE_PEER_ID=peer1.org1.example.com + - CORE_PEER_LOCALMSPID=Org1MSP + - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/msp + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_ENDPOINT=unix:///var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem + + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + - ORG=org1 + - PEER=peer1 + - DOMAIN=org1.example.com + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 + working_dir: /etc/hyperledger/fabric + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer1.org1.example.com.log' + + + peer0.org2.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer0_org2 + image: "hyperledger/fabric-ca-peer:1.2.0" + #restart: always + depends_on: + - orderer.example.com + ports: + - ${PEER0_ORG2_GRPC_PORT}:7051 + - ${PEER0_ORG2_EVENT_PORT}:7053 + environment: + - FABRIC_CA_CLIENT_HOME=/etc/hyperledger/fabric + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + - ENROLLMENT_URL=https://peer0.org2.example.com:peer0.org2.example.compw@ca.org2.example.com:7054 + - PEER_NAME=peer0.org2.example.com + - PEER_HOME=/etc/hyperledger/fabric + - PEER_HOST=peer0.org2.example.com + - PEER_NAME_PASS=peer0.org2.example.com:peer0.org2.example.compw + - CORE_PEER_ID=peer0.org2.example.com + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/msp + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + # https://docs.docker.com/compose/networking/ + - CORE_VM_ENDPOINT=unix:///var/run/docker.sock + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + - ORG=org2 + - PEER=peer0 + - DOMAIN=org2.example.com + working_dir: /etc/hyperledger/fabric + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer0.org2.example.com.log' + + peer1.org2.example.com: + container_name: ${COMPOSE_PROJECT_NAME}_peer1_org2 + image: "hyperledger/fabric-ca-peer:1.2.0" + #restart: always + ports: + - ${PEER1_ORG2_GRPC_PORT}:7051 + - ${PEER1_ORG2_EVENT_PORT}:7053 + depends_on: + - orderer.example.com + environment: + - FABRIC_CA_CLIENT_HOME=/etc/hyperledger/fabric + - FABRIC_CA_CLIENT_TLS_CERTFILES=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + - ENROLLMENT_URL=https://peer1.org2.example.com:peer1.org2.example.compw@ca.org2.example.com:7054 + - PEER_NAME=peer1.org2.example.com + - PEER_HOME=/etc/hyperledger/fabric + - PEER_HOST=peer1.org2.example.com + - PEER_NAME_PASS=peer1.org2.example.com:peer1.org2.example.compw + - CORE_PEER_ID=peer1.org2.example.com + - CORE_PEER_LOCALMSPID=Org2MSP + - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 + - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/msp + - CORE_VM_ENDPOINT=unix:///var/run/docker.sock + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_default + - CORE_LOGGING_LEVEL=DEBUG + - CORE_PEER_GOSSIP_USELEADERELECTION=true + - CORE_PEER_GOSSIP_ORGLEADER=false + # The following setting skips the gossip handshake since we are + # are not doing mutual TLS + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true + - CORE_PEER_TLS_ENABLED=true + - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt + - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key + - CORE_PEER_TLS_ROOTCERT_FILE=/data/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem + + - CORE_VM_DOCKER_HOSTCONFIG_MEMORY=268435456 #256M + - ORG=org2 + - PEER=peer1 + - DOMAIN=org2.example.com + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 + working_dir: /etc/hyperledger/fabric + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /opt/cello/scripts:/scripts + - /opt/cello/fabric-1.2:/data + command: /bin/bash -c '/scripts/start-peer.sh 2>&1 | tee /data/logs/peer1.org2.example.com.log' + +# cli: # client node +# image: "hyperledger/fabric-tools:1.2.0" +# container_name: ${COMPOSE_PROJECT_NAME}_cli +# hostname: cli +# restart: always +# tty: true +# environment: +# #- GOPATH=/opt/gopath +# - CORE_LOGGING_LEVEL=DEBUG +# - CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message} +# - CORE_PEER_TLS_ENABLED=true # to enable TLS, change to true +# - ORDERER_CA=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem +# depends_on: +# - orderer.example.com +# - peer0.org1.example.com +# - peer1.org1.example.com +# - peer0.org2.example.com +# - peer1.org2.example.com +# working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer +# volumes: +# - ${COMPOSE_PROJECT_PATH}/scripts:/tmp/scripts +# - ${COMPOSE_PROJECT_PATH}/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml +# - ${COMPOSE_PROJECT_PATH}/crypto-config:/etc/hyperledger/fabric/crypto-config +# - ${COMPOSE_PROJECT_PATH}/solo/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml +# - ${COMPOSE_PROJECT_PATH}/solo/channel-artifacts:/tmp/channel-artifacts +# - ${COMPOSE_PROJECT_PATH}/examples:/opt/gopath/src/examples +# command: bash -c 'sleep 15; cd /tmp; source scripts/func.sh; bash scripts/test_channel_create.sh; bash scripts/test_channel_join.sh; bash scripts/test_cc_install.sh; while true; do sleep 20180101; done' + + explorer: + image: yeasy/blockchain-explorer:0.1.0-preview + container_name: ${COMPOSE_PROJECT_NAME}_explorer + hostname: explorer + restart: always + volumes: + - ${COMPOSE_PROJECT_PATH}/explorer-artifacts/config.json:/blockchain-explorer/config.json + - ${COMPOSE_PROJECT_PATH}/crypto-config:/blockchain-explorer/first-network/crypto-config + ports: + - "${EXPLORER_PORT}:8080" + depends_on: + - mysql + - orderer.example.com + - peer0.org1.example.com + - peer1.org1.example.com + - peer0.org2.example.com + - peer1.org2.example.com + links: + - orderer.example.com + - peer0.org1.example.com + - peer1.org1.example.com + - peer0.org2.example.com + - peer1.org2.example.com + command: bash -c 'sleep 30; node main.js' + + mysql: # mysql service + image: mysql:5.7 + container_name: ${COMPOSE_PROJECT_NAME}_mysql + hostname: mysql + restart: always + environment: + - MYSQL_ROOT_PASSWORD=root + - MYSQL_DATABASE=fabricexplorer + - STARTUP_SQL=/fabricexplorer.sql + volumes: + - ${COMPOSE_PROJECT_PATH}/explorer-artifacts/fabricexplorer.sql:/docker-entrypoint-initdb.d/fabricexplorer.sql + expose: + - "3306" + command: mysqld \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/README.md b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/README.md new file mode 100755 index 00000000..a3c7c97f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/README.md @@ -0,0 +1,8 @@ +## Start a network base on kafka + +### Quick testing + +```bash +$ HLF_MODE=kafka make +``` +When the fabric-network fully started, it takes about 30~60s to finish all the test. diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSP.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSP.json new file mode 100755 index 00000000..ab0f8910 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSP.json @@ -0,0 +1,130 @@ +{ + "groups": {}, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSPanchors.tx b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org1MSPanchors.tx new file mode 100755 index 0000000000000000000000000000000000000000..9bd052065e04e945f39fc57fa6da1085d82fdeff GIT binary patch literal 296 zcmd;D%ETqgCCtI3#Gh1JoSBzeT%4Sdn3tEDBh<~r)xpGtAsj9g%Ej$iP>_?EoLG{X zpC{zT!6;_?EoLG{X zpC{zT!6;IPHg}H literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org3MSP.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org3MSP.json new file mode 100755 index 00000000..dc3b5fae --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/Org3MSP.json @@ -0,0 +1,119 @@ +{ + "groups": {}, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel.tx b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel.tx new file mode 100755 index 0000000000000000000000000000000000000000..5833b84ff0e3d8fba86ca1747a911a1185ff1ba3 GIT binary patch literal 358 zcmd;j%)}+jCC$Mk#m4dS{HB|%O8iNs#hH1j#l^`PiFtXcIYI}Sxb`t|VF+6bX>xHp z78K-UCMT9;=I04X32}3=`xm7f`UVFGF+e#+V2%_Y7ngH>UU7a=NoHxT5QEfPMxkSj zsM@zNaxmgCL4}LQIk6xyDKjUtBr~;GNJNN>i-U_L%rM>vXdatmN^WLev62!Odw5Z1 zNorBCkhl;p2eS|-TmVT8RJD+V5Fbzp7Z;Q-01O0#IYFt3DJbSZ1z>8lplYR*Q2Zt$ QB*Y~UoS0jXlZx;$0L#Q*o&W#< literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel.tx.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel.tx.json new file mode 100755 index 00000000..e69de29b diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block new file mode 100755 index 0000000000000000000000000000000000000000..1e82fd56c28eebacb30f89172d15eae49b78f355 GIT binary patch literal 15759 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 J8{D@1_rE=uH&p-t literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block.json new file mode 100755 index 00000000..7738b7c1 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_0.block.json @@ -0,0 +1,797 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "1" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "0" + }, + "Org2MSP": { + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "", + "values": { + "Consortium": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "0" + }, + "Org2MSP": { + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "", + "values": { + "Consortium": { + "mod_policy": "", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQCVKVppO7ekp5Q5yUQykSByhP6b6TqkQMcMJAexti11JgIgIzmsKUkq8xPhe7UHekI4fvRZ0rQdT1FOY1gGSkYvzJw=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "xOvQtySGjVvLpNOieyR40XZt0E92uCAi" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:15.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "shP0XyNOUVOirJqabbY1yUz3JQxSXTr1" + } + } + }, + "signature": "MEUCIQCUAY9WuoiEUhUC9st+vjysmP4fG4D2EARJKfEqc3RGZwIgPM+H8DrTN6qmfAaMCE3Gkq3i40F8IJRBiwjEhbk9Nbg=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:15.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "EfOiV7Ft0U0L+ND6IRwThnd93568sToE" + } + } + }, + "signature": "MEQCIB3EHzs+wNC3Gi2SpUkYWgewCCd35GCS2oT/ig1t+t7lAiAG50CayyQTBxU6EfpxyRYenuxhRvGm34ib3dHUSwo25w==" + } + ] + }, + "header": { + "data_hash": "wxwSc9Qvy1ZPYIKkZpa2Zp2ehlracpl82bPwWiPQBFg=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block new file mode 100755 index 0000000000000000000000000000000000000000..5ad0a3b989b943a32fd74510b09e8aa94930f3b8 GIT binary patch literal 17593 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 Ci>bo^ literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block.json new file mode 100755 index 00000000..f919a7b2 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_1.block.json @@ -0,0 +1,793 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "2" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEQCIHAAKP7//D/UEtdpEhurKAtuyH+XjLshNgI1LSf5kKtJAiBaioMIdMJk7qwALtMp7yGEh8UV1VWUSdZAR3WNijJpgw==", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "M3EOQxKhGEYu17mLV7PbDapOP8LI8sNZ" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:20.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "bFmRmBw1QffftVHakFbF6Kt4DPjuLw4f" + } + } + }, + "signature": "MEUCIQCx0p+m7/AKT2Qaocom5iehL+PPqXo0G8ltPbH7jrF8LAIgfM1QAZ1wpHOaICJl04EtaBxuyT/KjofnxxSklIFUHlE=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:20.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "KeA+jFvClPMj8G28rfSasDj9HnG6Zm28" + } + } + }, + "signature": "MEQCID6xwRJeUAs/hTKyGJK5HlStMruzwgUMvzswwfWKY3ITAiB2pYr3InsF1nuLGQTIVmtakx4KAo1cG9UK0w0zAWlH8Q==" + } + ] + }, + "header": { + "data_hash": "agDJc39epwrw7OUr/UT5lWLNKE3y30mzJ+RCPdhSfT0=", + "number": "1", + "previous_hash": "s8/yuozRRNoVxc6b0tbVpBaoSkCXV4sSSpWv0IVZfdU=" + }, + "metadata": { + "metadata": [ + "EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIY/BMxv/4TOw508sYpMkmjM8y8/M/3Ixd1EkcwRQIhAP+0rmmT8TSecvm2zTkFuJh+NwIgfIyYxlGX4wdNU3SXAiAB7ZIVKX4N0qcyzb1ucp2xnnR6C3wHyjC2LP/F98Re9w==", + "CgIIARL5BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGESwa1a5b13sbg7BVsAUUxp2Xjc+PKxPzxJHMEUCIQCf3/Wl7e+BBir7XJDGVRG9TJ3sURAoOTZAl/Tc0yPN/AIgBPSXtEtgwTdX+zoJO5YtzYxekBCrBqXz3iDLqr2obT4=", + "", + "CgIIAQ==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block new file mode 100755 index 0000000000000000000000000000000000000000..1b8b5cb10e58bf174e9dc65a75e78087ed1b8228 GIT binary patch literal 17659 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 X=U(?xM)}AsU-~z&2Y8RMEiL>XnWw}j literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block.json new file mode 100755 index 00000000..f22461eb --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_2.block.json @@ -0,0 +1,805 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "3" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org2MSP": { + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQCNcPDA7prK1HNwoGGx8IkS5s88lI7Cc3Fmxg5x4yByyAIgBX4UUsRuJgxlvxt22rnfxzBTK1G/IUqltDSuZ5euT9g=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "8dH9a3nLFT6OD6ns3YSYmWyF3UPr8GiZ" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:22.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "/TigWMhcc4rHNtWaaQgFzk7yEJH0RUeA" + } + } + }, + "signature": "MEUCIQC4s44pgBbL4YSPW2j/pupXw4c+6jzETJ7VBVkRitbnAwIgdbX1AElgM1Of1YvMrb6q1KRVnKkirzoBFjq3cmdC/+I=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:22.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "bU/jHoq4PQypvWKu/O4o9/Vzlr0Z+YgC" + } + } + }, + "signature": "MEUCIQDbnt91mgb6QkpW7dgzkDwN+x5zH03Z/7wRreaDvMXYSgIgD4OidfQnqlzWWiq2HgVVjXAQD86ZBqKrN1eTLqprAFU=" + } + ] + }, + "header": { + "data_hash": "CAOufL2QWMsdl8trVm8jO5w4uCcgtxQrhLAAM8Lo6UY=", + "number": "2", + "previous_hash": "t2+pfOOZ50/wkv9f6HqbnCRrhIWP4rjSERK8ylvKQnM=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYgGdHEFeosq26W2mtjvmU36cIhpBIvdhvEkYwRAIgOiswx9wQqcf1grHrKkT60T+wH+cJXHVphv79lpnayaoCIEpkmY3EsoVLQmGt3OetDgagD/8Pe5pHZxukuD0tErdA", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGNR1lzqeb7iTyJ0fJ0d+p/u7zz8jna/abBJGMEQCIBwodZ0n7Zj16FoCb8CSjkHMq+2GEkp0RqzKKkuEnHmsAiAazW6j89g6IYhd/+fxE3TbZitJD1+o6R09QElhq5fJ4A==", + "", + "CgIIAg==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_3.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_3.block new file mode 100755 index 0000000000000000000000000000000000000000..8364f92892d9db0c1dcb04c5fb2d2df9d6a861d1 GIT binary patch literal 5399 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 literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_4.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_4.block.json new file mode 100755 index 00000000..3e25a1a9 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_4.block.json @@ -0,0 +1,104 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "7TRqffbpVA1fyxMAP0wtANfTIFb3Of+k" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcyTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLVENDQWMrZ0F3SUJBZ0lSQU4xcS9aYVcyd0k1STd6K3lRZVFVKzR3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCcU1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFTk1Bc0dBMVVFQ3hNRWNHVmxjakVmTUIwR0ExVUVBeE1XY0dWbGNqQXViM0puCk1pNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCSmlHVWlIckpMeTIKR2pkNXJQbS96MWF6UEJ6T1o5OHpJVUxOR3dpYmlwazVoQnFqZEVnWENvRnhkUXU0djNzVGt6cll5RURoS254VQp2dWZ2SlhkeEpnU2pUVEJMTUE0R0ExVWREd0VCL3dRRUF3SUhnREFNQmdOVkhSTUJBZjhFQWpBQU1Dc0dBMVVkCkl3UWtNQ0tBSUsrUGgvRnZZaFlhaktmb1Q1eHdRZFdmQXpEWk9ITVdZRG1HL25NdW5sK0tNQW9HQ0NxR1NNNDkKQkFNQ0EwZ0FNRVVDSVFEZEVnQ0FxKzFzUWVZbWpSN21haHNZN1RGRjFuR3VwaXZKZjdDbVBYNG4wQUlnQmgrZgpISzhoMU1kejQwc1pLdEt3Vkk3RlZpVDdsbzYzbFVOdWRZdGNHYUE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEQCID8yXBu12LRlnhE8zrGNGv7ZXbAwR/ujyBGdIwLfUYnYAiBsTudkiNdIuR+l4hw4Hm4KveOp3IuwO0RZUatTXa0uBg==" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "lscc", + "path": "", + "version": "1.2.0" + }, + "response": { + "message": "", + "payload": "CgVleHAwMhIDMS4wGgRlc2NjIgR2c2NjKigSDBIKCAESAggAEgIIARoLEgkKB09yZzFNU1AaCxIJCgdPcmcyTVNQMkQKIKHVcu1JbD6syM0Qw+LruCE2WdL5x12oXEl44rzaqt03EiCspBd4qNsaveuBzl13p5mBgwZmADW4S4f0OnOZOAYsHjogCMpnXDmouuJjGEelIfyS4Slp/hIr1KnfCnB88QWehzBCLBIMEgoIARICCAASAggBGg0SCwoHT3JnMU1TUBABGg0SCwoHT3JnMk1TUBAB", + "status": 200 + }, + "results": "Eh0KBWV4cDAyEhQaCAoBYRoDMTAwGggKAWIaAzIwMBL3AQoEbHNjYxLuAQoHCgVleHAwMhriAQoFZXhwMDIa2AEKBWV4cDAyEgMxLjAaBGVzY2MiBHZzY2MqKBIMEgoIARICCAASAggBGgsSCQoHT3JnMU1TUBoLEgkKB09yZzJNU1AyRAogodVy7UlsPqzIzRDD4uu4ITZZ0vnHXahcSXjivNqq3TcSIKykF3io2xq964HOXXenmYGDBmYANbhLh/Q6c5k4BiweOiAIymdcOai64mMYR6Uh/JLhKWn+EivUqd8KcHzxBZ6HMEIsEgwSCggBEgIIABICCAEaDRILCgdPcmcxTVNQEAEaDRILCgdPcmcyTVNQEAE=" + }, + "proposal_hash": "EP3/US9D6oyX1G43KFbpThpqIVhQ13TAowEpOxrSOE0=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "lscc", + "path": "", + "version": "" + }, + "input": { + "args": [ + "ZGVwbG95", + "YnVzaW5lc3NjaGFubmVs", + "CigIARIMEgVleHAwMhoDMS4wGhYKBGluaXQKAWEKAzEwMAoBYgoDMjAw", + "EgwSCggBEgIIABICCAEaCxIJCgdPcmcxTVNQGgsSCQoHT3JnMk1TUA==", + "ZXNjYw==", + "dnNjYw==" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgYSBGxzY2M=", + "timestamp": "2018-06-22T14:00:54.088632600Z", + "tx_id": "127a7e05dda94bd363a9ed2ebcf570367190c93adf1f3a7870e8af8e087df84c", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "7TRqffbpVA1fyxMAP0wtANfTIFb3Of+k" + } + } + }, + "signature": "MEUCIQDXRK9CRMskDxeCSc8doTKRnAxVZTIXzTJYGOYYdL9zGQIgfd1kHFXaQM8HRytLhrcpWCB4Edl7tWXVAjHig3/+37I=" + } + ] + }, + "header": { + "data_hash": "Jytjzr2WWBoyqpXvrry9ijPUkL8xg6eLx6a8DymHFQk=", + "number": "4", + "previous_hash": "9LipauiCDsFyZKvwgdDw13hCLgkgB/OEdbxGPAGMjXI=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYsxPiW85wb3Pg8m63O7ILtx5lVO/Rjfd4EkYwRAIgFjIjgx7V2gWylUJiX1F9fYFZfTok9pQPQ1jPU//mVOwCID0IkbggqBFGOEJvv1YJ4CbQN0pprhx3XpgCSbmra1gL", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGDzXdAFQcVyoNAXl0imacDuZYiq1dx3rORJGMEQCICjefz+U6kSrBHYInEIDF8hW7INpy7togTDz3Qun3pH1AiBxAIDaWpSKAHX/J1hGPyEqKeKVm3G2GdD8lKDLqWIRjA==", + "", + "CgIIBg==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block new file mode 100755 index 0000000000000000000000000000000000000000..478d66b32a4a0af675f92e7d4a5cd546b5c6c87e GIT binary patch literal 4860 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 Y*)80oF@-$BszFW7iICIA2c literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block.json new file mode 100755 index 00000000..7e598f34 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_5.block.json @@ -0,0 +1,101 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "ksvGZr6wXR7OAXQAhQmLRE5pqMka/WJn" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcxTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLRENDQWM2Z0F3SUJBZ0lRTVNaNENHWjZPMy9FMHF4bmpldUFOekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamRhRncweU9EQTJNVGt3TXpJeU1qZGEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1DNXZjbWN4CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNOFNoVGowNy9saWEKRUtpR2gxcFdSdG5Ga0RLUG13OWFiVm13OURpcm83OEN6enlZNENzNTNGRDJjWWlKQmZuSWlrWXFxYUFtekR0NgpudnNtUHpIMTBLTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FnWkFreHdqN3p0U1Z0c29LbTlhQ2xTNENVWis3VE85SGtvQ3FJMjRBekx1Z3dDZ1lJS29aSXpqMEUKQXdJRFNBQXdSUUloQU55UEc5UElaN3lnVGtrNmZ5NUh3eldyTmdTSVZVWk9uVUxtOFQxYXJSaXlBaUF1TnllNQp4bko2VThOSi84N3hXbGhqWFpaUGI3ekxIeHFZYU5uWVVJbWdhQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEUCIQCUxq6QpEb+ms0gHdMMeLa+T5y6thVGhfMynEyQV+YkOgIgNjWyWndO6VRDHX728BZLBYGe7FS7jiqrkk2g/2NCYU0=" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "1.0" + }, + "response": { + "message": "", + "status": 200 + }, + "results": "Ei4KBWV4cDAyEiUKBwoBYRICCAMKBwoBYhICCAMaBwoBYRoCOTAaCAoBYhoDMjEwEhUKBGxzY2MSDQoLCgVleHAwMhICCAM=" + }, + "proposal_hash": "1x3F8F8yAVizl0tGcyDgXQNNvU/dyAlcjewpWuiU/Tw=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "" + }, + "input": { + "args": [ + "aW52b2tl", + "YQ==", + "Yg==", + "MTA=" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgcSBWV4cDAy", + "timestamp": "2018-06-22T14:01:40.370584500Z", + "tx_id": "8b0cba0fa5138077b1a5f14d495d89eb1181b28920b025db568e534975fb3a7c", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "ksvGZr6wXR7OAXQAhQmLRE5pqMka/WJn" + } + } + }, + "signature": "MEQCIFmAXjAL6/Lfp2dlIVxFpDPbn7t7t3zXoVi28o4i2HttAiBbyxB8tpRD2rNnD0HcshGzY2emMQGbK3rhEaAKeD2EJA==" + } + ] + }, + "header": { + "data_hash": "QQk6F5uCQ3omOH96wszBI/j1ntnTReYTbHmN+02k0Fc=", + "number": "5", + "previous_hash": "joBqNh7Dlv0KqDcd6s7Ne40ButDlvwcqcur9cgpxJMI=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIY+moWasAWrgwuLl6ZObyRCviZcYc7X7iZEkYwRAIgCO60XEAuoYk7Sq+H/dteO7tG8dk4G744CKnnD0MuhbICICTzs5r3rOqF5k4zlZjCBvJmxDOWY4lYN+svgKXdUwzR", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGFA9vcQgsBUwbIG8toPbzXU0b+5SigaFURJGMEQCIBL8nQZ4XLGdY34bd6hnnZn4OmohTcBxOfrjgn+3X3OYAiBVTdjGgN7HhP+HFcUPnL0wqLXeVBJOl7oyQYt+GDHfvw==", + "", + "CgIICA==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block new file mode 100755 index 0000000000000000000000000000000000000000..e6671ea17a22203752c298c81c1e2c0fa38984b2 GIT binary patch literal 4869 zcmeH~Yp@$-8OPh4_MGsRn*mD=GZ=0IG}5!#Y;M&edrPuO-p$!$bJ=)o+1=!1v$<`O zlf1h-sD&9oMWEw2j8vInP(cJsVW=_%2LW}gVn3*z+ET?TgJ4k@M+<^8x;dA&B65>Y zPV;H!*=OI(`^@{>-+w{eJ?Zh4Hf&v6v}e1oA6mbE#MPk96ER)y8EHEwf;&xR8_FBis8y!fKc#oAR^a- zL_krivK+u_N)5*&p=u<8D`7dJ5TVFiBp9j6(W)Gl!!bF$@f6RLXLZdqFx<0$66~G? zQ`vqUhxr-Lj>*f%KZ;FoypLvcA{XaqQe+pZ0CF6iwrQHICh8>OD6-Dw$V{gl4q&lF z*wjh739c)+TdQoi92oiFA|K zltino1XDw~#F}xPEG*trMW*Q7YfuTGw&OzyZ`l$aH4`FPUTo-!Y$9e=Y;IU7YnoD~ z29at)MpY5;`+ zq6LX53POTKsbaxqMd-|IyfvDFX#tN9EX9IW zFP|+?eWEc`q`oB0^hByqNVih+YCTmaXl^(M=6PnW%Z|Ep1;WnscpkC?#MGU6xJC2}v~GR+U98HH`!sk|atai2+WdPSFD5x@5gi_><96tP$6G(C}+Bog_sC zDp3aVO+qy*^{k}$RV!R86UPq~SUOcq-dQmxa2lDe^3pIT=6hKS3$%?^zQon6V784R zL`}2)p_cX=B@VGe=U6q!A`p#YS?&d?LM)RG>eH=GAykZ~%puZ{9LQz}L&|0{e7x-! zHf;h6r=R7S|0Ke*?oe{==2`z0UtPWF_D{Wb*mz<4)we#ZyKl8U+s*(todHhrwE*Ht zzE1M>KJ&HH4K4)dgAcn`9b%`K%jkT?u@|x&OTWlOULT z{PE`-!N)FmR6lghb7xcDmw)%#-sUa!7oYabf`n%SSkmIfV9Hs-<8rSaUnt`X@3`W1 zMKQ12sdy)F9P@k-tZEHZ)pHtHv;3sX@%M!L$15*5bxE<_iNFTTbL|xP&Iz9V*4ulQ zaXhPrmpv=UISWN$)@U$typ}hEJ(y5yBAKS@^`6$$vonJ8&ebV<>?ZJD<+SW3aDtpF zkWv@rq(Q-va|bp;ty&^JuO`e^rp=EOkyRnpUFacAC`vdx1aIC**5U{=vkZwlenrrB zT&rucQ?nLoV)IxHz(m)iZ8EiJZ%HIuMG@v8Vi%RjvB+SglA}sT=t{e#!JLHRTswf&zwUM?Q|UGc3xXN~vg_=vdaQEY|WNN8GCAM1^*R&^;MlQZ!T;jev0{Of+>SezC;35vn`(v#oyEH1S3C%(znuFJU@!s?+H~!$Ld$-g%ddH35 zIB>J~bEkvXCq1uDf^ScPZIb|G`_)>%)*mP6Yu=V@W=yt{T_!t6rl*-fMvrBhEiDDJ zd^Jm=aN2V!iZ8`a7KL;vzeqhej{Q5Q8OH0!U{J35EdG2UI_4Zr3iuL_eUDxWHy~C^^z&!jh|ag z4mrV?qr&Qa@SSk>7gDpdGq!#+V=E?;HEu$$zR<5=oNR*-Sq^y^W2FCccw0V?#~bK4{mq)wwP!7FFE_u z-@Eset);`8y>~yGNX75)?~Cp`G5qd(v7b@}E`|Mg#Yow{q)RZr!fZ0-N%!N&b);4E}med5mVKc+tF11rEPhe7Z! Ds#G!; literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block.json new file mode 100755 index 00000000..194154a2 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_6.block.json @@ -0,0 +1,101 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "3EgWXlwrPpwFPZ19+uFw6Zp8lrhqCJZ6" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcyTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLRENDQWM2Z0F3SUJBZ0lRYVJ5dzhNT3BpRGFGZVN4M3FNR2NlVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1TNXZjbWN5CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVkMHdNRXA2cUtoeU0KeFpWZFNtOEZuSUh2VDlnQ3dyVjhzVEhqc0Z4YURWc1FvMGF3T3lETDBabUxiMCtVenpjS2xNQy9EZjBxU3MzTQp3VHJ2Y3FuU1FxTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FncjQrSDhXOWlGaHFNcCtoUG5IQkIxWjhETU5rNGN4WmdPWWIrY3k2ZVg0b3dDZ1lJS29aSXpqMEUKQXdJRFNBQXdSUUloQU5BTnNVSWZsSEZSUTR5KzZ4Tmt4bkR1RVRGK25HNVk0cHZ2ZWxmcHQ0cDlBaUI4NjE2RApqVnp5U3B6Z0VUeldYOWowTVpFcERoR1ZkTmhueTZwbk8zcFZUdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEUCIQDnsTplzifYhnT18OZfok+4EzMCmoLvXzadf+kouHZiegIgXtnBC4C66XWuXJq7CMxCGFb4dBPgYps9kDc9ro6Uw7c=" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "1.0" + }, + "response": { + "message": "", + "status": 200 + }, + "results": "Ei4KBWV4cDAyEiUKBwoBYRICCAUKBwoBYhICCAUaBwoBYRoCODAaCAoBYhoDMjIwEhUKBGxzY2MSDQoLCgVleHAwMhICCAM=" + }, + "proposal_hash": "NBv/hl0KM1LBwehpM78ivGrcgeYUQhrw4vrOa49n7Ns=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "" + }, + "input": { + "args": [ + "aW52b2tl", + "YQ==", + "Yg==", + "MTA=" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgcSBWV4cDAy", + "timestamp": "2018-06-22T14:02:07.106060300Z", + "tx_id": "25db06c02bf14b2617ae341bcdaa10ebe2275d772b6a7b457f737da8da6a69a6", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "3EgWXlwrPpwFPZ19+uFw6Zp8lrhqCJZ6" + } + } + }, + "signature": "MEUCIQCwyuNFJAcpLrRL1++7JDlw4QMQNaSpHslKsCBKd78gZAIgP5kjNGhvoCUSAhPsC9qFkqtL94vE9gi6WW72oIul2Y4=" + } + ] + }, + "header": { + "data_hash": "ZUW73NrZOLoN1VRScCpqxlw7stXVLYD8TyoImD0HSRo=", + "number": "6", + "previous_hash": "Vy6AFlZ6XG/73CrXOu0hr0HchygucIrytdTer6MWKhs=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYJJmFFCusd1wY60mOdQdJpipgzRhPOFRuEkYwRAIgaFmQ2yMKjcnOQdOdvD6nZqbCQbAbA7KwSijm7rFOspoCIF94ECsnFH69qwmAV+FeGqfkR0pGoCvVONXcB6yN6DL3", + "CgIIAhL5BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGLXqFkVcQM5uGQ08phFZLaksHlJMMVvkIBJHMEUCIQDCMWFExUNkj4HrNUASNxJubutfhQA5y3xcY1x39tKaGgIgdA7d9LUMtQRgzFLDbNeo2mmvd3MRWS0pZwOiwL9jvCA=", + "", + "CgIICg==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block new file mode 100755 index 0000000000000000000000000000000000000000..cb55811a50338dc189bfc569e14eca2c757d8df6 GIT binary patch literal 24945 zcmeHv3$)`_dG6#SnVIZlCWD4dCWl96CQw>TVp)D?@u=RG^{{2jmhC2hB+Ih=lKhmd zCM1+VS^~WdTqqD)5)w*);a)C~riG@^1+12~cTFinfzl?WrKR-JtkR@yxGha3``G6& zo;l~t5Yn|;pS5Pr(bnF2*!$oA_kI8WZ$Rze2OZ1&H2GUd|C-uwyWjrir|x~Aar?>7 zyy^IB-thQ?Kc)T2w?8@I){m{d@%ryQ|7|xtkYxVx36pGp_Od4q{K8|WK6CHC|JBhL ziXOcgde0{>0`K(xeen|)f&aS~Ja7L+>wEYA{m*^!>zAImQXTfqj^6KUb*0nMThK@M zf?wJTK&DsKdwP%0XQ9{cz25)9NSYCj;bcx?COf&0tPOvK-tfGpto%+y+c~eH}$2Il!Y$8Vwaltj^=bB0nZwG=~{N z(Yum_H-)-Nx7unrJyc|JOf}HL?3^YMMem%6(Lifc!!pux%Sd8O5omta!IE&K7%9sk zN2Lqi`Q(7lX$~cpiJ~YHq!VqF^U;=0Qv;yU;}+KzMyiDBlmm}51d8wt#^GIN!Z+%Q z*EX59NzFwYPZ?v}MbrMx0EU(&v{jV&9Pf~`J20eU6J>d9SK7&m+HTePT-l+}>D^PL z6Ozhu#K?8hb+s+nKtqHPpK~1A*m%6LFw)w&mewv#xb_*ZK{XxHDW^6*NE{W*4A?jz zP*Ed910}nITr}ahF}LJ4(MhC@)OzVgQg3Dpx-#f>uwg&Umt01Pqb1T2SR7*`} z&Un;d!!4v8j9LzdH55d5rATBHb^Ow?u46YKy27#iI+xNv6sr@SQ#E$ID<#W zdely~?LctihGIlN(};`=xMW811dK2+n`#7lveGG=WiXx4q(CfBa_H#(J1Xz}*iAQ~ zmp(b-YQsNz+21|>>F?|j!?!{Ibn+tb;CTNf(EVfREl0t=4a0$MKMFni+=U%wdIogr zx$6%c1{eD#_1?qK-G`xHJiIvXH-3CaJL4LjomJ(zor$^TV1SgZR6y!xq7Kp=uv)`v zpe$w>-FmZ;$$B##ZD2Mp_8oxFCMHcf>0-epCEhb=-|ldXXGMhSD{{q~b5Xl2kur~o zGn*XqLII(M3|X0gvK(zFC843ZWP!(++2A_QRZ8``TEhC3e6*n=@R)MZ;>-qliD(P; z`2+?FL&PE_LLwtPQTFT$bv;{~WGKsPWBj&pMq0E@mx%ca0WNfjn6D7vLYIj73IS9J ztMC|4W0NkO=OanfAZZ-m_}d{W#*u;;!foA~NGs6~VM`(h}Mqp*hZq=+*pf+Sp1 zs@1RwLPoq78fdjxbr6(-c9>(r6)}u!#k_3uJqe&D>PoiF)0WyqQyHbk#Snq2#bkC= zz<9ZrPnJY6kq%X}g=$lL#VfWk%o9JjbZWKRI44~4ofEz=8Z?4ZIdd%9f|bd}-DWsH z3e=_lQbtp3klZtCG;{+kZ`d?X7O18ww}v9Uvt#o867byp!ZDfgx}YFrO&Ga>4#5~A zBZrz3E*2Trl}w10Vagylp`xea#VXD;l!RkhfPnQO9T38NOG#FuC4{Sx?59Fy;tz-}B9hm^%25>JvmD%S#3uq*VnP`a0{G87C5u`h@XWe|=={?v|6M3_2}$=n`tC_i9_wUFK_jVH1cOLHXZ5;k+D|8-R2*#&EshbQJ}h=SFW zFa>PDM{M)u_`Coc?Mwk1m`&pg2W-GcY%{60FE%Ar9pu^uJsCv==NHK7lCG2;Vg}q=9tL+XqfC0fqJ5{77E zI6grrtlY_POg2-(hm9!Oqn&~_9FqpjwCGM+g~Lu62-S8JanD$F4S_)kj6zKkMPQjJ zS_8?oBY4+yS4=&h8Hv59r55;+2Qh%2LQ+^D)-D)*oT14WlTF7E#f;bL(Mmbr5IC_c zcaoj9qE(P=xGuqtogh=i_%_D0z89^w%})PB80^dGibsI@&`&}y+NI%P?i2 z)$^vSLsvnU?+1r&zx}hJqqpCFY~FYMh2V;5AIWU%)^GqFgf0PVNPltuT5uSjQNNtt zAM{LZU|O9%w13gzMc@itu@%*9nFCYrL(hc(*bgo#hF%kb_AGh{;0ji$H5II9HT{p^ zl~4p+-t=4G8zx1xaPK+vPJh^!CbkYe2igZNonCO>=fnxH zZ~lp24IS8jF?89YVbSNM;7Y7zY0aY2GOLRJZqPaVo>+VtN1=n><-q*-(Awg9-aY42 zV{x60hIya)*8_d%W^g%b+bvU@-T2)%?_Y!7f0fS>jIfXR-+9&glN*fSyN97~9)=!0 zym|7}jw`w7ddNoaZm#6nG@mSGDc*$@Cj~4I*?@m@r^!Z??nqV_h)L~j$6D^0L6FriW5zOwPjglM=z^O)DMp_w=OSx5{ zCeTKxsO1%EQmaRhaGjoVh22mE&mEqdD=bk3qNgZaF~&+%$Wrna6IMe&=O_WCxK^ml z*fmayc4#qZMfsu670yZ($f^*^qEa;vhk2GHz<3lcp+bkPsBt?Ti?FIfW^?2K#gny! zM-?J{Ia|pEVv?R3BW@lM27SJhV44XxHO8cBZwQc%3X_=#zY|w@=Z+Rd``AcZaD^P2 zu8D;%kJO`WcH9YYA=*%>DEVK&qM~Q9sHksI>N9OoH6DX!ILL8iQO*q%If|akV8D*# znwki#QZ1mN$|PPNN1GO>C!$K1%~wmsSR?`PRI)G=qhLhXK{5?l0E9f@8d5ntWW zQ1U*h)&q0bBUUj@%}HWh)Xh<1EZ7~sGV!$7GnFXh8CRlqvtDn`z%eiTNZiwb&b4Om zP5}nKEX=3M3kmpq6<~0t1Uw@YO^5Q4w5^u=JhRBn!$aAu+iHJ*acA{Eo^xhe(HqR8-QnZ~F> zH7%lZ)*;Pw<$|a8dQ!5B+B1d{Aw9Lg2>0{xqFNdWxoQV!_PEiuGu>?3ov4i6XXALP z-b;u{8=**UX_+SSo+h0WnL5g8uvU~4fM}=tm?v4)D||T9pSTKLMw|U^hv7$DD;-QT zy-^W0F#?BatKAy~It?P-4>pL%q&SijlK>cmlx!e^=Vex;^DWD%ZZB8OA>s*mfmERv zLtZ?_1Ere`<8mL!ZeYa4h|nC2LN9?{;0?HD%YXyW<%_IX^nI6{e<@V$x(0$*z{jW*JU-Jh0ze zjt)H=Fm=YrcL7tEI-U)thR@{?kE>!(XJ^BQGOD)mSO6`8xPXyWKZM^ zc8$yj0Nre}&2BVmjH#jSg)eM68Of9f=?PXtNY5K*OK>@8HHl72z(gTC$dBuGkL(4? z78S5Eojy=fm5R->)j*x!&KsZj@Q&V>ol1BMm?~19K%bbTDmhJWwi}sdF4eR{XNoHu zWa$}=11)>srP)O;*wUOVfhqV~>bN`4>pNb+Z)kZlI(hz5o)^m648Bf1ub6O%S$xcM z8IP@!speevPEJ6@U0x7&mhwc3(z8Wnq>Mql)Qx5FTu$X$Zki{$ zy*d*tr6sLUN;TZFqr{rAqAH>(Hr7}2C6QqzPwW;9s#1{=F&0pPoTvJ!Y)`fdams>W zC+{vxd051As=kPtgEyQi<9M1~&wnM5%JXEJKurV3nz)q0v!hHXEh7`7tA;GL$QkKe zCqCfgu%0(qtDzbMKa6dGbYL1?+#=a^xJJR{x>UU$DKvFMPCA8RI3GvL8r!TQnBWDG za93_iaLtR$Qm6_NynyQt-OZGgd{wU*OrGp!DTj@b`D)s*cx+N^jKla~8_DiMpsQ~@ zwT1EI&}<_-aZ$9>FX5@DhS+{zeE<_A?O>}tbw zge}ly*$a9Sh*nV8VaW^Co~fS9-I6Czn292AR4G=3iFzSvr#t0ggt1zgc&cA;yX{aH zaq=~ViOLRR6qBtH7aN+@Zl^YM2RU*~BR$k)fZY;#ooZHTny)3RGEGgi?c7r3QwKcM z`KNoq3h-^}k}JTs0(?I*;Dh#REmQ9d*1xtguC1c~%D7g>^`jftCAO~j<|@j1%!|l% zw7S*HdaZq5N&(LUNBl1E4OY(x-Jp+^w%yWi(5&{MyW;b4yOUCUxn%2zd2sUF;>!<> z*p0&D57<oxE8^_oXE^qPl`Lmxg4eQ>7NOi%y8j_gwO0kYm+XuDd^ zZ413%-KsdjiXCfFQ7eNiCrnL4aX)5uX`VY4_rvURspI*u%M^dXx~?zlF0;$rlCHa) z)w?D87m(v=vWu_jE_d8U)16DYpwu=-4jy#bekjZ(HG^s;7^>B+cxm2~MwFB=qD!O$ zojyDWVD)^t3&%TrBqFpbrX1GG1P4$pTT&Eoi!AUwcZlHLH?~e<~puY58&az6tg@!3n}7bo-QL^lD!;-`Hjek9~dF93Ra;*w%Wu-UVXrYSy71` zC%Y+o0<56YPzWZ#)A0yD_a%t@J=M z(nbVlhBYt{h?+%?tXd)B2_)O+DxNJ>5qJX5B8mQN*0Pha_$iovrtoG2gslqYVNS|- zGZQ%EdAz*L=#y}!4Lc4NBm=`b8?a@@A%|Ycg^3n{WEV?HH;fgM92;%~Tb)9*NTtU^ zr|u}B3>UG>8IBXEc3}Ge$c5-NeyDM)Uc*~j$n+#w1}20Gj}Vxrg&@uU6uoB2F1FKa zmOAgsh!^6cm}OHOk;y=JNNZuA<4?B(Uoz|@eCsb`bAZP60vbkVND1ssjD1A012 zgsh6x3*kv5JgyL!DMv{!dluu(z$i_{x%!x}>r{tH^FzAfj0Lt@pJm2xm+f+4dQF-& z#uHkKTX73GuG6mvoU&R^g(cNnTFO{9L~*rIp&~2caCBL(*+`7XOVx5Xk^=>kX<-J; zHPhvgnc_lLf0)Z;b+5oDCyK$UREU~YFVt9J$w@R2L8DlN3n@sU!i>$VN$ z7f*IQxMrFsPbdQ=rS$7&$H)(QLv1kZ>Chps_~B{q=gRp4d$aX1REUme^iGYD=B49J7|c+bffRz@hw9 zsoQK_Jls!!LmRJvwhYUw$*8v>2-*)eYNY1<{xd#j=yxOF-@@PtzX;zeDmYgW{+IWH zU*Ef#W3|c%*%896GD21vA$}z=fR0-K=bNXcKe+GCz@Exq-Fo!kBR3rQ&ey8p-wr`< zxE}oS)nIAI3llPaxK5|!5vK#2*0;7eoC@gP;rgL7YNGa>SkwwZdro-CnDe~L>A^e> zuxI^UN1%5c`Qe+r@yMzu$lvUPUlj#yWVNh{f>uRAXW!jsIbrOXEwft{1+9vL=KDHb zs8YWw3cBFn@v11OQ2p;*6to-h!mk@YU-7~pvmm|aU3oN@2!1?}cyaaj?E@>;dwzS+ zt?D3Fbr2i7FnSx*Jze_z-@N0N!{E&~eQ5ozyMFE3JNtKh^qy01hiI5wJHF?Qe@WbV z%Sku==&!utXaBG$a6EL|o|j#6t9;`jP0% zmFuFvcX9E9kNn0x|MY>Ez}Sn9oV<2+oo3_9?t$mOFLv#RB7Y4%d9C@S55MY$@So|Y zN6&fkoB#NcpTBJF82d+^haUX$H{RmD_PMYB#8dQFu73@C&vkn1(LcQAPU_(4cYI}I z#dtd(KK_bV|HH`}KljS-M7ohD{=9EI^!*14fA)%}51#zaTOYo1?bvm-8?XMoo4)(A zx0g;m=XB)F)t~yG_dR_o`|_VS{jQh4yB3)efeh}TjOuPzCL^r zf9PLcOh5e(ws8M%eeR*pUHrneWBOk|{>oE_F1zmT@!g}}c@2GS?+Z8m&cjvZw%6YL zn|~{RBFBKI_kuNVr}vcwt~Os^ZN7fC&DY)3EqA>2({KNmzyIpvuX^B*KP>&yZ{GSI z=hi)=nFU^RN7K0bDgEe^Z~Ez5?i>E<$0CnCaQ8?4;?p;F;OzT5fBXxtT|1^^Z+S2A rb?L^!#e0~ye(-at_kS^am2jW&nb^f||F-ey3npL>@HWNVfBAm^YOAEG literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block.json new file mode 100755 index 00000000..ce3c6071 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_7.block.json @@ -0,0 +1,1057 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org3MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "2" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "4" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "1" + }, + "Org2MSP": { + "mod_policy": "", + "version": "1" + } + }, + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "1" + }, + "Org2MSP": { + "mod_policy": "", + "version": "1" + }, + "Org3MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "", + "version": "0" + } + }, + "version": "2" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQCF4kSHfKx6St6dg3vMVk5MTRJ/ACwEfVc6EApYhuj5ZgIgMYYW24oA3rWHWawdYrcX0bgFNVFreptjJVGYK3CLyqg=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "CP9YxOaVfBMKilypGouLph+Hc4Stm8+T" + } + }, + { + "signature": "MEUCIQD6Fiylv/asHpLidG1lDslhVVhb/BIQDBbP0bfF2Dj9OQIgUF5XfsR9P3+gZOtrG2whjH/b7hLgxe74TQcBx4U0qXw=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "mplE2LcPZ3cAb9UN5CJKfLvzUQejJJly" + } + }, + { + "signature": "MEQCIF4JXLb9aN9mbIyWAmdUs73JfrDk5GhKMcrq2dQ3pKAyAiACi9SLtYMIQUisdJtZ1SM1yANWp724m/WlJzBCJBasHw==", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "9p2PF11LcMSteVmCWxzUCqPx5p8iz6gz" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:02:21.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "b7Hh1FTLoYcrAFrjfRgOvS4N6dhkM74x" + } + } + }, + "signature": "MEQCIGtq03oNHJ82H6k05RL0H2nRqj8uM9xl1HYR9OHyq4gJAiBL0G61qNPbjHpgFIGz+EfVLV9LmyNlbN7MGYdGDtSV1Q==" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:02:21.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "CIRanLBcXEEF9HZMZnXQLOruu+kAUTN/" + } + } + }, + "signature": "MEUCIQCTTTMhPV7wrDrDPuk0cTTz3XNntfmkVdw9/w6s6Y23DwIgI2Y6F8hc7HuAWM8R1DSKZCmUof/PUDwm1Jg8JxaSY1M=" + } + ] + }, + "header": { + "data_hash": "AoUt8RySXKQ5SfLzaUVtwAnzDYnfz7+g/uMYNkFBGF0=", + "number": "7", + "previous_hash": "T0BFvDJzGWa+eufhuqCkaoCsv4YhX4PuqClj1ue0eUw=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIY/hX4KBbfcOx+7h9TD6t6xPHXXfmgfEEsEkYwRAIgOThshD8YPMDfAk2ALWh1JE0Q9yVH//BwTqO8w7XDAx4CIGXl7j7PEAkjkXiRdsFfRx9yxVzBt2Rhf2BduehXs1JJ", + "CgIIBxL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGHpIfISNu5P37dfuP6TSqlSQuX2ad30AdhJGMEQCIBmEa2eR+GUY9IZAfKF1nrA036SRq+C7Om4wUKJu0olgAiBhUHycRNlUOlUDAEmNp8NIoslQFU6hZ782A5PnZ94deQ==", + "", + "CgIICw==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block new file mode 100755 index 0000000000000000000000000000000000000000..cb55811a50338dc189bfc569e14eca2c757d8df6 GIT binary patch literal 24945 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 literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block.json new file mode 100755 index 00000000..f22461eb --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/businesschannel_config.block.json @@ -0,0 +1,805 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "3" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org2MSP": { + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQCNcPDA7prK1HNwoGGx8IkS5s88lI7Cc3Fmxg5x4yByyAIgBX4UUsRuJgxlvxt22rnfxzBTK1G/IUqltDSuZ5euT9g=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "8dH9a3nLFT6OD6ns3YSYmWyF3UPr8GiZ" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:22.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "/TigWMhcc4rHNtWaaQgFzk7yEJH0RUeA" + } + } + }, + "signature": "MEUCIQC4s44pgBbL4YSPW2j/pupXw4c+6jzETJ7VBVkRitbnAwIgdbX1AElgM1Of1YvMrb6q1KRVnKkirzoBFjq3cmdC/+I=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:22.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "bU/jHoq4PQypvWKu/O4o9/Vzlr0Z+YgC" + } + } + }, + "signature": "MEUCIQDbnt91mgb6QkpW7dgzkDwN+x5zH03Z/7wRreaDvMXYSgIgD4OidfQnqlzWWiq2HgVVjXAQD86ZBqKrN1eTLqprAFU=" + } + ] + }, + "header": { + "data_hash": "CAOufL2QWMsdl8trVm8jO5w4uCcgtxQrhLAAM8Lo6UY=", + "number": "2", + "previous_hash": "t2+pfOOZ50/wkv9f6HqbnCRrhIWP4rjSERK8ylvKQnM=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYgGdHEFeosq26W2mtjvmU36cIhpBIvdhvEkYwRAIgOiswx9wQqcf1grHrKkT60T+wH+cJXHVphv79lpnayaoCIEpkmY3EsoVLQmGt3OetDgagD/8Pe5pHZxukuD0tErdA", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGNR1lzqeb7iTyJ0fJ0d+p/u7zz8jna/abBJGMEQCIBwodZ0n7Zj16FoCb8CSjkHMq+2GEkp0RqzKKkuEnHmsAiAazW6j89g6IYhd/+fxE3TbZitJD1+o6R09QElhq5fJ4A==", + "", + "CgIIAg==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.json new file mode 100755 index 00000000..fa892693 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.json @@ -0,0 +1,201 @@ +{ + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "1" + }, + "Org2MSP": { + "mod_policy": "", + "version": "1" + } + }, + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "1" + }, + "Org2MSP": { + "mod_policy": "", + "version": "1" + }, + "Org3MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "", + "version": "0" + } + }, + "version": "2" + } + }, + "mod_policy": "", + "version": "0" + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.pb b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/config_delta.pb new file mode 100755 index 0000000000000000000000000000000000000000..2006a3572b2851e116a79cb18375f7b59a93c29e GIT binary patch literal 2967 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 TNF7_BWM|ab>pcR`?f?A`E1+r` literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.block.json new file mode 100755 index 00000000..a597c409 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.block.json @@ -0,0 +1,635 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Consortiums": { + "groups": { + "SampleConsortium": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "values": { + "ChannelCreationPolicy": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Admins" + } + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "policies": { + "Admins": { + "mod_policy": "/Channel/Orderer/Admins", + "policy": { + "type": 1, + "value": { + "rule": { + "n_out_of": { + "n": 0 + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "version": "0" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "0" + } + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T07:40:25.000Z", + "tx_id": "e6014a90c21ac81f5ab2d68d8757da4c1603220e54d01a9fb1878317e18fb12f", + "type": 1, + "version": 1 + }, + "signature_header": { + "nonce": "/Mbvp9XfJdJzmeRb6k3c0KTWrOai2vZc" + } + } + } + } + ] + }, + "header": { + "data_hash": "I6R2ExgJwE3Y+rG2VgQFsDpUDwiT2DSOtXz/g3xXsz8=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.updated.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/orderer.genesis.updated.block new file mode 100755 index 0000000000000000000000000000000000000000..b7d24e6c86a5d25c5ff0c1ee081d5c817332fbe8 GIT binary patch literal 12728 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 literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block new file mode 100755 index 0000000000000000000000000000000000000000..88447fd532cc3f317bdb40c9f79936b9bc89e49f GIT binary patch literal 12728 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 TNF7_BWM|ab>pcR`?f?A`E1+r` literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block.json new file mode 100755 index 00000000..a597c409 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_0.block.json @@ -0,0 +1,635 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Consortiums": { + "groups": { + "SampleConsortium": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "values": { + "ChannelCreationPolicy": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Admins" + } + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "policies": { + "Admins": { + "mod_policy": "/Channel/Orderer/Admins", + "policy": { + "type": 1, + "value": { + "rule": { + "n_out_of": { + "n": 0 + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "version": "0" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "0" + } + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T07:40:25.000Z", + "tx_id": "e6014a90c21ac81f5ab2d68d8757da4c1603220e54d01a9fb1878317e18fb12f", + "type": 1, + "version": 1 + }, + "signature_header": { + "nonce": "/Mbvp9XfJdJzmeRb6k3c0KTWrOai2vZc" + } + } + } + } + ] + }, + "header": { + "data_hash": "I6R2ExgJwE3Y+rG2VgQFsDpUDwiT2DSOtXz/g3xXsz8=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block new file mode 100755 index 0000000000000000000000000000000000000000..0f32ae870f73236779fb30a60a42bd07ade485b7 GIT binary patch literal 18510 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 H7PkI3nPu8> literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block.json new file mode 100755 index 00000000..e1eb84b7 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_1.block.json @@ -0,0 +1,820 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "1" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "0" + }, + "Org2MSP": { + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "", + "values": { + "Consortium": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "0" + }, + "Org2MSP": { + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "", + "values": { + "Consortium": { + "mod_policy": "", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQCVKVppO7ekp5Q5yUQykSByhP6b6TqkQMcMJAexti11JgIgIzmsKUkq8xPhe7UHekI4fvRZ0rQdT1FOY1gGSkYvzJw=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "xOvQtySGjVvLpNOieyR40XZt0E92uCAi" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:15.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "shP0XyNOUVOirJqabbY1yUz3JQxSXTr1" + } + } + }, + "signature": "MEUCIQCUAY9WuoiEUhUC9st+vjysmP4fG4D2EARJKfEqc3RGZwIgPM+H8DrTN6qmfAaMCE3Gkq3i40F8IJRBiwjEhbk9Nbg=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T14:00:15.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "EfOiV7Ft0U0L+ND6IRwThnd93568sToE" + } + } + }, + "signature": "MEQCIB3EHzs+wNC3Gi2SpUkYWgewCCd35GCS2oT/ig1t+t7lAiAG50CayyQTBxU6EfpxyRYenuxhRvGm34ib3dHUSwo25w==" + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T14:00:15.000Z", + "tx_id": "", + "type": 4, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "xeCRCjaJnliBr1SDaMZFlmwyRAXrG/uq" + } + } + }, + "signature": "MEUCIQD9ZwijF6HiEHy9xih2hnOI7nvBjB4EP548M8FkdC5qdwIgEYWH0rU/XHKmrNv0Fec5kdRXKew4o7kwa+GXE47v3dg=" + } + ] + }, + "header": { + "data_hash": "qN8JGZGu7fg5KuRft5sC+/aVB6jNP3zYjokA7rP/Pf4=", + "number": "1", + "previous_hash": "bPjRz8ffppqmXdWNBoiB+MAX+wws45sG3iXPM6Ml0Bg=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYpn/dcFNYZFx3RCv4Z3d747jWnqmnmGDYEkYwRAIgM1vv8SseZtG2/rw4BDJNZbjfNU8ABI4nu/c/DCqeWXQCICsxWvNPezd8ACmb/jo8p2NjfXRzS7s1L2jkMQznM75x", + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYD+AsIRSSj/wRuK1i3hDadyNwFcgM3ftlEkYwRAIgFBFU4y7SiNmbhCKRQXi6rFmjCWrsJu6K5lq7nuAyl4gCICJzfBis+IwdytXkWpYs56SXjxyuVWh2uMAeiCJiOVPu", + "", + "CgIIAQ==" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block new file mode 100755 index 0000000000000000000000000000000000000000..88447fd532cc3f317bdb40c9f79936b9bc89e49f GIT binary patch literal 12728 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 TNF7_BWM|ab>pcR`?f?A`E1+r` literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block.json new file mode 100755 index 00000000..a597c409 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/testchainid_config.block.json @@ -0,0 +1,635 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Consortiums": { + "groups": { + "SampleConsortium": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "values": { + "ChannelCreationPolicy": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Admins" + } + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "policies": { + "Admins": { + "mod_policy": "/Channel/Orderer/Admins", + "policy": { + "type": 1, + "value": { + "rule": { + "n_out_of": { + "n": 0 + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "version": "0" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "0" + } + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T07:40:25.000Z", + "tx_id": "e6014a90c21ac81f5ab2d68d8757da4c1603220e54d01a9fb1878317e18fb12f", + "type": 1, + "version": 1 + }, + "signature_header": { + "nonce": "/Mbvp9XfJdJzmeRb6k3c0KTWrOai2vZc" + } + } + } + } + ] + }, + "header": { + "data_hash": "I6R2ExgJwE3Y+rG2VgQFsDpUDwiT2DSOtXz/g3xXsz8=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.json b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.json new file mode 100755 index 00000000..e4c43449 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.json @@ -0,0 +1,758 @@ +{ + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org3MSP": { + "groups": {}, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "kafka" + }, + "version": "0" + }, + "KafkaBrokers": { + "mod_policy": "Admins", + "value": { + "brokers": [ + "kafka0:9092", + "kafka1:9092", + "kafka2:9092", + "kafka3:9092" + ] + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "3" +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.pb b/hyperledger_fabric/fabric-ca/fabric-1.2/kafka/channel-artifacts/updated_config.pb new file mode 100755 index 0000000000000000000000000000000000000000..b457e62785b32f2df5274b9d41f1489fc5a03052 GIT binary patch literal 15400 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 /dev/null)" ]; then # not exist + # docker pull ${IMG} + #else + # echo "${IMG} already exist locally" + #fi + docker pull ${IMG} +} + +echo "Downloading images from DockerHub... need a while" + +# TODO: we may need some checking on pulling result? +echo "=== Pulling fabric images ${FABRIC_IMG_TAG} from yeasy repo... ===" +for IMG in base peer orderer ca; do + HLF_IMG=yeasy/hyperledger-fabric-${IMG}:$FABRIC_IMG_TAG + pull_image $HLF_IMG +done + +pull_image yeasy/hyperledger-fabric:$FABRIC_IMG_TAG +pull_image yeasy/blockchain-explorer:0.1.0-preview # TODO: wait for official images + + +echo "=== Pulling base images ${BASE_IMG_TAG} from fabric repo... ===" +for IMG in baseimage baseos couchdb kafka zookeeper; do + HLF_IMG=hyperledger/fabric-${IMG}:$ARCH-$BASE_IMG_TAG + pull_image $HLF_IMG +done + +# Only useful for debugging +# docker pull yeasy/hyperledger-fabric + +echo "=== Pulling fabric images ${FABRIC_IMG_TAG} from fabric repo... ===" +for IMG in peer tools orderer ca ccenv couchdb kafka zookeeper; do + HLF_IMG=hyperledger/fabric-${IMG}:$ARCH-$FABRIC_IMG_TAG + pull_image $HLF_IMG +done + +#pull_image hyperledger/fabric-ccenv:x86_64-1.1.0 # no latest tag for ccenv +#docker tag hyperledger/fabric-ccenv:x86_64-1.1.0 hyperledger/fabric-ccenv:$ARCH-$PROJECT_VERSION + +echo "Image pulling done, now can startup the network using docker-compose..." + +exit 0 \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_cleanup.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_cleanup.sh new file mode 100755 index 00000000..c9ec1766 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_cleanup.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +# This script will remove all containers and hyperledger related images + +echo "Clean up all containers..." +docker rm -f `docker ps -qa` + +echo "Clean up all chaincode images..." +docker rmi -f $(docker images |grep 'dev-peer'|awk '{print $3}') + +echo "Clean up all hyperledger related images..." +docker rmi -f $(docker images |grep 'hyperledger'|awk '{print $3}') + +echo "Clean up dangling images..." +docker rmi $(docker images -q -f dangling=true) + +echo "Env cleanup done!" \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_setup.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_setup.sh new file mode 100755 index 00000000..2e9fdf37 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/env_setup.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# Install docker on Ubuntu/Debian system + +install_docker() { + echo "Install Docker..." + wget -qO- https://get.docker.com/ | sh + sudo service docker stop + #nohup sudo docker daemon --api-cors-header="*" -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock& + echo "Docker Installation Done" +} + +install_docker_compose() { + echo "Install Docker-Compose..." + command -v "curl" >/dev/null 2>&1 || sudo apt-get update && apt-get install curl -y + curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose + sudo chmod +x /usr/local/bin/docker-compose + docker-compose --version + echo "Docker-Compose Installation Done" +} + +command -v "docker" >/dev/null 2>&1 && echo "Docker already installed" || install_docker + +command -v "docker-compose" >/dev/null 2>&1 && echo "Docker-Compose already installed" || install_docker_compose + +command -v "jq" >/dev/null 2>&1 && echo "jq already installed" || sudo apt-get install jq \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/func.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/func.sh new file mode 100755 index 00000000..66b517c6 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/func.sh @@ -0,0 +1,623 @@ +#!/usr/bin/env bash + +echo_r () { + [ $# -ne 1 ] && return 0 + echo -e "\033[31m$1\033[0m" +} +echo_g () { + [ $# -ne 1 ] && return 0 + echo -e "\033[32m$1\033[0m" +} +echo_y () { + [ $# -ne 1 ] && return 0 + echo -e "\033[33m$1\033[0m" +} +echo_b () { + [ $# -ne 1 ] && return 0 + echo -e "\033[34m$1\033[0m" +} + +# Define those global variables +if [ -f ./variables.sh ]; then + source ./variables.sh +elif [ -f scripts/variables.sh ]; then + source scripts/variables.sh +else + echo_r "Cannot find the variables.sh files, pls check" + exit 1 +fi + +# Verify $1 is not 0, then output error msg $2 and exit +verifyResult () { + if [ $1 -ne 0 ] ; then + echo "$2" + echo_r "=== ERROR !!! FAILED to execute End-2-End Scenario ===" + exit 1 + fi +} + +# set env to use orderOrg's identity +setOrdererEnvs () { + export CORE_PEER_LOCALMSPID="OrdererMSP" + export CORE_PEER_MSPCONFIGPATH=${ORDERER_ADMIN_MSP} + export CORE_PEER_TLS_ROOTCERT_FILE=${ORDERER_TLS_ROOTCERT} + #t="\${ORG${org}_PEER${peer}_URL}" && CORE_PEER_ADDRESS=`eval echo $t` +} + +# Set global env variables for fabric cli, after setting: +# client is the admin as given org +# TLS root cert is configured to given peer's +# remote peer address is configured to given peer's +# CORE_PEER_LOCALMSPID=Org1MSP +# CORE_PEER_ADDRESS=peer0.org1.example.com:7051 +# CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp +# CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt +# Usage: setEnvs org peer +setEnvs () { + local org=$1 # 1 or 2 + local peer=$2 # 0 or 1 + [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1 + + local t="" + export CORE_PEER_LOCALMSPID="Org${org}MSP" + #CORE_PEER_MSPCONFIGPATH=\$${ORG${org}_ADMIN_MSP} + t="\${ORG${org}_PEER${peer}_URL}" && export CORE_PEER_ADDRESS=`eval echo $t` + t="\${ORG${org}_ADMIN_MSP}" && export CORE_PEER_MSPCONFIGPATH=`eval echo $t` + t="\${ORG${org}_PEER${peer}_TLS_ROOTCERT}" && export CORE_PEER_TLS_ROOTCERT_FILE=`eval echo $t` + + #env |grep CORE +} + +checkOSNAvailability() { + #Use orderer's MSP for fetching system channel config block + export CORE_PEER_LOCALMSPID="OrdererMSP" + export CORE_PEER_TLS_ROOTCERT_FILE=${ORDERER_TLS_CA} + export CORE_PEER_MSPCONFIGPATH=${ORDERER_MSP} + + local rc=1 + local starttime=$(date +%s) + + # continue to poll + # we either get a successful response, or reach TIMEOUT + while test "$(($(date +%s)-starttime))" -lt "$TIMEOUT" -a $rc -ne 0 + do + sleep 3 + echo "Attempting to fetch system channel ...$(($(date +%s)-starttime)) secs" + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then + peer channel fetch 0 -o ${ORDERER_URL} -c "testchainid" >&log.txt + else + peer channel fetch 0 -o ${ORDERER_URL} -c "testchainid" --tls --cafile ${ORDERER_TLS_CA} >&log.txt + fi + test $? -eq 0 && VALUE=$(cat log.txt | awk '/Received block/ {print $NF}') + test "$VALUE" = "0" && let rc=0 + done + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "Ordering Service is not available, Please try again ..." + echo "=== Ordering Service is up and running === " + echo +} + +# Internal func called by channelCreate +channelCreateAction(){ + local channel=$1 + local channel_tx=$2 + if [ -z "$CORE_PEER_TLS_ENABLED" ] || [ "$CORE_PEER_TLS_ENABLED" = "false" ]; then + peer channel create \ + -o ${ORDERER_URL} \ + -c ${channel} \ + -f ${CHANNEL_ARTIFACTS}/${channel_tx} \ + --timeout "${TIMEOUT}s" \ + >&log.txt + else + peer channel create \ + -o ${ORDERER_URL} \ + -c ${channel} \ + -f ${CHANNEL_ARTIFACTS}/${channel_tx} \ + --timeout "${TIMEOUT}s" \ + --tls \ + --cafile ${ORDERER_TLS_CA} \ + >&log.txt + fi + return $? +} + +# Use peer0/org1 to create a channel +# channelCreate APP_CHANNEL APP_CHANNEL.tx org peer +channelCreate() { + local channel=$1 + local tx=$2 + local org=$3 + local peer=$4 + + [ -z $channel ] && [ -z $tx ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1 + + echo "=== Create Channel ${channel} by org $org/peer $peer === " + setEnvs $org $peer + local rc=1 + local counter=0 + while [ ${counter} -lt ${MAX_RETRY} -a ${rc} -ne 0 ]; do + channelCreateAction "${channel}" "${tx}" + rc=$? + let counter=${counter}+1 + #COUNTER=` expr $COUNTER + 1` + [ $rc -ne 0 ] && echo "Failed to create channel $channel, retry after 3s" && sleep 3 + done + [ $rc -ne 0 ] && cat log.txt + verifyResult ${rc} "Channel ${channel} creation failed" + echo "=== Channel ${channel} is created. === " +} + +# called by channelJoinWithRetry +channelJoinAction () { + local channel=$1 + peer channel join \ + -b ${channel}.block \ + >&log.txt +} + +## Sometimes Join takes time hence RETRY atleast for 5 times +channelJoinWithRetry () { + local channel=$1 + local peer=$2 + local counter=0 + channelJoinAction ${channel} + local rc=$? + while [ ${counter} -lt ${MAX_RETRY} -a ${rc} -ne 0 ]; do + echo "peer${peer} failed to join channel ${channel}, retry after 2s" + sleep 2 + channelJoinAction ${channel} + rc=$? + let counter=${counter}+1 + done + [ $rc -ne 0 ] && cat log.txt + verifyResult ${rc} "After $MAX_RETRY attempts, peer${peer} failed to Join the Channel" +} + +# Join given (by default all) peers into the channel +# channelJoin channel org peer +channelJoin () { + local channel=$1 + local org=$2 + local peer=$3 + [ -z $channel ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1 + + echo "=== Join org $org/peer $peer into channel ${channel} === " + setEnvs $org $peer + channelJoinWithRetry ${channel} $peer + echo "=== org $org/peer $peer joined into channel ${channel} === " +} + +getShasum () { + [ ! $# -eq 1 ] && exit 1 + shasum ${1} | awk '{print $1}' +} + +# List the channel that the peer joined +# E.g., for peer 0 at org 1, will do +# channelList 1 0 +channelList () { + local org=$1 + local peer=$2 + echo "=== List the channels that org${org}/peer${peer} joined === " + + setEnvs $org $peer + + peer channel list >&log.txt + rc=$? + [ $rc -ne 0 ] && cat log.txt + if [ $rc -ne 0 ]; then + echo "=== Failed to list the channels that org${org}/peer${peer} joined === " + else + echo "=== Done to list the channels that org${org}/peer${peer} joined === " + fi +} + +# Get the info of specific channel, including {height, currentBlockHash, previousBlockHash}. +# E.g., for peer 0 at org 1, get info of business channel will do +# channelGetInfo businesschannel 1 0 +channelGetInfo () { + local channel=$1 + local org=$2 + local peer=$3 + echo "=== Get channel info of ${channel} with id of org${org}/peer${peer} === " + + setEnvs $org $peer + + peer channel getinfo -c ${channel} >&log.txt + rc=$? + [ $rc -ne 0 ] && cat log.txt + if [ $rc -ne 0 ]; then + echo "=== Fail to get channel info of ${channel} with id of org${org}/peer${peer} === " + else + echo "=== Done to get channel info of ${channel} with id of org${org}/peer${peer} === " + fi +} + +# Fetch all blocks for a channel +# Usage: channelFetchAll channel org peer +channelFetchAll () { + local channel=$1 + local org=$2 + local peer=$3 + + echo "=== Fetch all block for channel $channel === " + + local block_file=/tmp/${channel}_newest.block + channelFetch ${channel} $org $peer "newest" ${block_file} + [ $? -ne 0 ] && exit 1 + newest_block_shasum=$(getShasum ${block_file}) + echo "fetch newest block ${block_file} with shasum=${newest_block_shasum}" + + block_file=${CHANNEL_ARTIFACTS}/${channel}_config.block + channelFetch ${channel} $org $peer "config" ${block_file} + [ $? -ne 0 ] && exit 1 + echo "fetch config block ${block_file}" + + for i in $(seq 0 16); do # we at most fetch 16 blocks + block_file=${CHANNEL_ARTIFACTS}/${channel}_${i}.block + channelFetch ${channel} $org $peer $i ${block_file} + [ $? -ne 0 ] && exit 1 + [ -f $block_file ] || break + echo "fetch block $i and saved into ${block_file}" + block_shasum=$(getShasum ${block_file}) + [ ${block_shasum} = ${newest_block_shasum} ] && { echo "Block $i is the last one for channel $channel"; break; } + done +} + +# Fetch some block from a given channel: channel, peer, blockNum +channelFetch () { + local channel=$1 + local org=$2 + local peer=$3 + local num=$4 + local block_file=$5 + echo "=== Fetch block $num of channel $channel === " + + #setEnvs $org $peer + setOrdererEnvs # system channel required id from ordererOrg + # while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful), + # lets supply it directly as we know it using the "-o" option + if [ -z "${CORE_PEER_TLS_ENABLED}" ] || [ "${CORE_PEER_TLS_ENABLED}" = "false" ]; then + peer channel fetch $num ${block_file} \ + -o ${ORDERER_URL} \ + -c ${channel} \ + >&log.txt + else + peer channel fetch $num ${block_file} \ + -o ${ORDERER_URL} \ + -c ${channel} \ + --tls \ + --cafile ${ORDERER_TLS_CA} \ + >&log.txt + fi + if [ $? -ne 0 ]; then + cat log.txt + echo_r "Fetch block $num of channel $channel failed" + return 1 + else + echo "=== Fetch block $num of channel $channel OK === " + return 0 + fi +} + +# Sign a channel config tx +# Usage: channelSignConfigTx channel org peer transaction +channelSignConfigTx () { + local channel=$1 + local org=$2 + local peer=$3 + local tx=$4 + [ -z $channel ] && [ -z $tx ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1 + echo "=== Sign channel config tx $tx for channel $channel by org $org/peer $peer === " + [ -f ${CHANNEL_ARTIFACTS}/${tx} ] || { echo_r "${tx} not exist"; exit 1; } + + setEnvs $org $peer + + peer channel signconfigtx -f ${CHANNEL_ARTIFACTS}/${tx} >&log.txt + rc=$? + [ $rc -ne 0 ] && cat log.txt + if [ $rc -ne 0 ]; then + echo_r "Sign channel config tx for channel $channel by org $org/peer $peer failed" + else + echo "=== Sign channel config tx channel $channel by org $org/peer $peer is successful === " + fi +} + +# Update a channel config +# Usage: channelUpdate channel org peer transaction_file +channelUpdate() { + local channel=$1 + local org=$2 + local peer=$3 + local tx=$4 + [ -z $channel ] && [ -z $tx ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1 + + setEnvs $org $peer + echo "=== Update config on channel ${channel} === " + [ -f ${CHANNEL_ARTIFACTS}/${tx} ] || { echo_r "${tx} not exist"; exit 1; } + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then + peer channel update \ + -o ${ORDERER_URL} \ + -c ${channel} \ + -f ${CHANNEL_ARTIFACTS}/${tx} \ + >&log.txt + else + peer channel update \ + -o ${ORDERER_URL} \ + -c ${channel} \ + -f ${CHANNEL_ARTIFACTS}/${tx} \ + --tls \ + --cafile ${ORDERER_TLS_CA} \ + >&log.txt + fi + rc=$? + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "peer channel update failed" + echo "=== Channel ${channel} is updated. === " + sleep 2 +} + +# Install chaincode on specified peer node +# chaincodeInstall peer cc_name version path +chaincodeInstall () { + local org=$1 + local peer=$2 + local name=$3 + local version=$4 + local path=$5 + [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $version ] && [ -z $path ] && echo_r "input param invalid" && exit -1 + echo "=== Install Chaincode $name:$version ($path) on org ${org}/peer $peer === " + setEnvs $org $peer + peer chaincode install \ + -n ${name} \ + -v $version \ + -p ${path} \ + >&log.txt + rc=$? + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "Chaincode installation on remote org ${org}/peer$peer has Failed" + echo "=== Chaincode is installed on remote peer$peer === " +} + +# Instantiate chaincode on specifized peer node +# chaincodeInstantiate channel org peer name version args +chaincodeInstantiate () { + local channel=$1 + local org=$2 + local peer=$3 + local name=$4 + local version=$5 + local args=$6 + [ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $version ] && [ -z $args ] && echo_r "input param invalid" && exit -1 + setEnvs $org $peer + echo "=== chaincodeInstantiate for channel ${channel} on org $org/peer $peer ====" + # while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful), + # lets supply it directly as we know it using the "-o" option + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then + peer chaincode instantiate \ + -o ${ORDERER_URL} \ + -C ${channel} \ + -n ${name} \ + -v ${version} \ + -c ${args} \ + -P "OR ('Org1MSP.member','Org2MSP.member')" \ + >&log.txt + else + peer chaincode instantiate \ + -o ${ORDERER_URL} \ + -C ${channel} \ + -n ${name} \ + -v ${version} \ + -c ${args} \ + -P "OR ('Org1MSP.member','Org2MSP.member')" \ + --tls \ + --cafile ${ORDERER_TLS_CA} \ + >&log.txt + fi + rc=$? + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "ChaincodeInstantiation on org $org/peer$peer in channel ${channel} failed" + echo "=== Chaincode Instantiated in channel ${channel} by peer$peer ===" +} + + +# Usage: chaincodeInvoke channel org peer name args +chaincodeInvoke () { + local channel=$1 + local org=$2 + local peer=$3 + local name=$4 + local args=$5 + [ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $args ] && echo_r "input param invalid" && exit -1 + echo "=== Invoke transaction on peer$peer in channel ${channel} === " + setEnvs $org $peer + # while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful), + # lets supply it directly as we know it using the "-o" option + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then + peer chaincode invoke \ + -o ${ORDERER_URL} \ + -C ${channel} \ + -n ${name} \ + -c ${args} \ + >&log.txt + else + peer chaincode invoke \ + -o ${ORDERER_URL} \ + -C ${channel} \ + -n ${name} \ + -c ${args} \ + --tls \ + --cafile ${ORDERER_TLS_CA} \ + >&log.txt + fi + rc=$? + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "Invoke execution on peer$peer failed " + echo "=== Invoke transaction on peer$peer in channel ${channel} is successful === " +} + +# query channel peer name args expected_result +chaincodeQuery () { + local channel=$1 + local org=$2 + local peer=$3 + local name=$4 + local args=$5 + [ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $args ] && echo_r "input param invalid" && exit -1 + [ $# -gt 5 ] && local expected_result=$6 + echo "=== Querying on org $org/peer $peer in channel ${channel}... === " + local rc=1 + local starttime=$(date +%s) + + setEnvs $org $peer + # we either get a successful response, or reach TIMEOUT + while [ "$(($(date +%s)-starttime))" -lt "$TIMEOUT" -a $rc -ne 0 ]; do + echo "Attempting to Query org ${org}/peer ${peer} ...$(($(date +%s)-starttime)) secs" + peer chaincode query \ + -C "${channel}" \ + -n "${name}" \ + -c "${args}" \ + >&log.txt + rc=$? + if [ $# -gt 5 ]; then # need to check the result + test $? -eq 0 && VALUE=$(cat log.txt | awk 'END {print $NF}') + if [ "$VALUE" = "${expected_result}" ]; then + let rc=0 + else + let rc=1 + echo_b "$VALUE != ${expected_result}, will retry" + fi + fi + if [ $rc -ne 0 ]; then + cat log.txt + sleep 2 + fi + done + + # rc==0, or timeout + if [ $rc -eq 0 ]; then + echo "=== Query on peer$peer in channel ${channel} is successful === " + else + echo_r "=== Query result on peer$peer is INVALID, run `make stop clean` to clean ===" + exit 1 + fi +} + + +# Start chaincode with dev mode +# TODO: use variables instead of hard-coded value +chaincodeStartDev () { + local peer=$1 + local version=$2 + [ -z $peer ] && [ -z $version ] && echo_r "input param invalid" && exit -1 + setEnvs 1 0 + CORE_CHAINCODE_LOGLEVEL=debug \ + CORE_PEER_ADDRESS=peer${peer}.org1.example.com:7052 \ + CORE_CHAINCODE_ID_NAME=${CC_02_NAME}:${version} \ + nohup ./scripts/chaincode_example02 > chaincode_dev.log & + rc=$? + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "Chaincode start in dev mode has Failed" + echo "=== Chaincode started in dev mode === " +} + +# chaincodeUpgrade channel peer name version args +chaincodeUpgrade () { + local channel=$1 + local org=$2 + local peer=$3 + local name=$4 + local version=$5 + local args=$6 + [ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $version ] && [ -z $args ] && echo_r "input param invalid" && exit -1 + echo "=== Upgrade chaincode to version $version on org ${org}/peer $peer in channel ${channel} === " + + setEnvs $org $peer + # while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful), + # lets supply it directly as we know it using the "-o" option + if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then + peer chaincode upgrade \ + -o ${ORDERER_URL} \ + -C ${channel} \ + -n ${name} \ + -v ${version} \ + -c ${args} \ + >&log.txt + else + peer chaincode upgrade \ + -o ${ORDERER_URL} \ + -C ${channel} \ + -n ${name} \ + -v ${version} \ + -c ${args} \ + --tls \ + --cafile ${ORDERER_TLS_CA} \ + >&log.txt + fi + rc=$? + [ $rc -ne 0 ] && cat log.txt + verifyResult $rc "Upgrade execution on peer$peer failed " + echo "=== Upgrade transaction on peer$peer in channel ${channel} is successful === " +} + +# configtxlator encode json to pb +# Usage: configtxlatorEncode msgType input output +configtxlatorEncode() { + local msgType=$1 + local input=$2 + local output=$3 + + echo "Encode $input --> $output using type $msgType" + curl -sX POST \ + --data-binary @${input} \ + ${CTL_ENCODE_URL}/${msgType} \ + >${output} +} + +# configtxlator decode pb to json +# Usage: configtxlatorEncode msgType input output +configtxlatorDecode() { + local msgType=$1 + local input=$2 + local output=$3 + + echo "Config Decode $input --> $output using type $msgType" + if [ ! -f $input ]; then + echo_r "input file not found" + exit 1 + fi + + curl -sX POST \ + --data-binary @"${input}" \ + "${CTL_DECODE_URL}/${msgType}" \ + > "${output}" +} + +# compute diff between two pb +# Usage: configtxlatorCompare channel origin updated output +configtxlatorCompare() { + local channel=$1 + local origin=$2 + local updated=$3 + local output=$4 + + echo "Config Compare $origin vs $updated > ${output} in channel $channel" + if [ ! -f $origin ] || [ ! -f $updated ]; then + echo_r "input file not found" + exit 1 + fi + + curl -sX POST \ + -F channel="${channel}" \ + -F "original=@${origin}" \ + -F "updated=@${updated}" \ + "${CTL_COMPARE_URL}" \ + > "${output}" + + [ $? -eq 0 ] || echo_r "Failed to compute config update" +} + +# Run cmd inside the config generator container +gen_con_exec() { + docker exec -it $GEN_CONTAINER "$@" +} \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_channelArtifacts.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_channelArtifacts.sh new file mode 100755 index 00000000..731284d7 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_channelArtifacts.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash + +# Use ${FABRIC_CFG_PATH}/configtx.yaml to generate following materials, +# and put under /tmp/$CHANNEL_ARTIFACTS: +# system channel genesis block +# new app channel tx +# update anchor peer tx + +cd /tmp # we use /tmp as the base working path + +# Define those global variables +if [ -f ./variables.sh ]; then + source ./variables.sh +elif [ -f scripts/variables.sh ]; then + source scripts/variables.sh +else + echo "Cannot find the variables.sh files, pls check" + exit 1 +fi + +if [ "$(ls -A ${CHANNEL_ARTIFACTS})" ]; then + echo "channel artifacts data existed, can clean it by 'make clean_config'" + exit 0 + # rm -rf ${CRYPTO_CONFIG_PATH}/* +fi + +cd ${CHANNEL_ARTIFACTS} # all generated materials will be put under /tmp/$CHANNEL_ARTIFACTS + +echo "Generate genesis block for system channel using configtx.yaml" +configtxgen \ + -configPath ${FABRIC_CFG_PATH} \ + -channelID ${SYS_CHANNEL} \ + -profile ${ORDERER_GENESIS_PROFILE} \ + -outputBlock ${ORDERER_GENESIS} + +echo "Create the new app channel tx using configtx.yaml" +configtxgen \ + -configPath ${FABRIC_CFG_PATH} \ + -profile ${APP_CHANNEL_PROFILE} \ + -channelID ${APP_CHANNEL} \ + -outputCreateChannelTx ${APP_CHANNEL_TX} \ +configtxgen \ + -inspectChannelCreateTx ${APP_CHANNEL_TX} > ${APP_CHANNEL_TX}.json + +echo "Create the anchor peer configuration tx for org1 and org2" +configtxgen \ + -configPath ${FABRIC_CFG_PATH} \ + -profile ${APP_CHANNEL_PROFILE} \ + -channelID ${APP_CHANNEL} \ + -asOrg ${ORG1MSP} \ + -outputAnchorPeersUpdate ${UPDATE_ANCHOR_ORG1_TX} +configtxgen \ + -configPath ${FABRIC_CFG_PATH} \ + -profile ${APP_CHANNEL_PROFILE} \ + -channelID ${APP_CHANNEL} \ + -asOrg ${ORG2MSP} \ + -outputAnchorPeersUpdate ${UPDATE_ANCHOR_ORG2_TX} + +echo "Output the json for org1, org2 and org3" +configtxgen \ + -configPath ${FABRIC_CFG_PATH} \ + -printOrg ${ORG1MSP} >${ORG1MSP}.json +configtxgen \ + -configPath ${FABRIC_CFG_PATH} \ + -printOrg ${ORG2MSP} >${ORG2MSP}.json +configtxgen \ + -configPath /tmp/org3/ \ + -printOrg ${ORG3MSP} >${ORG3MSP}.json diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_config.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_config.sh new file mode 100755 index 00000000..18c2bb60 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_config.sh @@ -0,0 +1,67 @@ +#! /bin/bash +# Generating +# * crypto-config/* +# * channel-artifacts +# * orderer.genesis.block +# * channel.tx +# * Org1MSPanchors.tx +# * Org2MSPanchors.tx + +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +else + echo "Cannot find the func.sh files, pls check" + exit 1 +fi + +[ $# -ne 1 ] && echo_r "[Usage] $0 solo|kafka" && exit 1 || MODE=$1 + +echo_b "Generating artifacts for ${MODE}" + +echo_b "Clean existing container $GEN_CONTAINER" +[ "$(docker ps -a | grep $GEN_CONTAINER)" ] && docker rm -f $GEN_CONTAINER + +echo_b "Make sure crypto-config dir exists already" +if [ ! -d ${CRYPTO_CONFIG} ]; then # already exist, no need to re-gen crypto + echo_g "${CRYPTO_CONFIG} not exists, generating it." + mkdir -p ${CRYPTO_CONFIG} + + docker run \ + --rm -it \ + --name ${GEN_CONTAINER} \ + -e "CONFIGTX_LOGGING_LEVEL=DEBUG" \ + -e "CONFIGTX_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}" \ + -v $PWD/scripts/variables.sh:/tmp/variables.sh \ + -v $PWD/crypto-config.yaml:/tmp/crypto-config.yaml \ + -v $PWD/${CRYPTO_CONFIG}:${FABRIC_CFG_PATH}/${CRYPTO_CONFIG} \ + -v $PWD/scripts/gen_cryptoArtifacts.sh:/tmp/gen_cryptoArtifacts.sh \ + -v $PWD/org3:/tmp/org3 \ + ${GEN_IMG} bash -c 'bash /tmp/gen_cryptoArtifacts.sh' +else + echo_b "${CRYPTO_CONFIG} exists, ignore." +fi + +echo_b "Make sure channel-artifacts dir exists already" +if [ ! -d ${MODE}/${CHANNEL_ARTIFACTS} ]; then + echo_g "${CHANNEL_ARTIFACTS} not exists, generating it." + mkdir -p ${MODE}/${CHANNEL_ARTIFACTS} + + docker run \ + --rm -it \ + --name ${GEN_CONTAINER} \ + -e "CONFIGTX_LOGGING_LEVEL=DEBUG" \ + -e "CONFIGTX_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}" \ + -v $PWD/scripts/variables.sh:/tmp/variables.sh \ + -v $PWD/${CRYPTO_CONFIG}:${FABRIC_CFG_PATH}/${CRYPTO_CONFIG} \ + -v $PWD/${MODE}/configtx.yaml:${FABRIC_CFG_PATH}/configtx.yaml \ + -v $PWD/${MODE}/${CHANNEL_ARTIFACTS}:/tmp/${CHANNEL_ARTIFACTS} \ + -v $PWD/scripts/gen_channelArtifacts.sh:/tmp/gen_channelArtifacts.sh \ + -v $PWD/org3:/tmp/org3 \ + ${GEN_IMG} bash -c 'bash /tmp/gen_channelArtifacts.sh' + +else + echo_b "${CHANNEL_ARTIFACTS} exists, ignore." +fi + diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_cryptoArtifacts.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_cryptoArtifacts.sh new file mode 100755 index 00000000..6458fbdb --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/gen_cryptoArtifacts.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# use /tmp/crypto-config.yaml to generate /tmp/config-config + +cd /tmp # we use /tmp as the base working path + +# Define those global variables +if [ -f ./variables.sh ]; then + source ./variables.sh +elif [ -f scripts/variables.sh ]; then + source scripts/variables.sh +else + echo "Cannot find the variables.sh files, pls check" + exit 1 +fi + +# The crypto-config will be used by channel artifacts generation later +CRYPTO_CONFIG_PATH=${FABRIC_CFG_PATH}/${CRYPTO_CONFIG} + +#if [ -d ${CFG_PATH}/${CRYPTO_CONFIG} ]; then +if [ "$(ls -A ${CRYPTO_CONFIG_PATH})" ]; then + echo "crypto-config data existed, can clean it by 'make clean_config'" + exit 0 + # rm -rf ${CRYPTO_CONFIG_PATH}/* +fi + +echo "Generating crypto-config for org1 and org2..." + +cryptogen generate \ + --config=crypto-config.yaml \ + --output ${CRYPTO_CONFIG_PATH} + +if [ $? -ne 0 ]; then + echo_r "Failed to generate certificates for org1 and org2..." + exit 1 +fi + +echo "Generating crypto-config for org3..." +cryptogen generate \ + --config=org3/crypto-config.yaml \ + --output org3/${CRYPTO_CONFIG} + +if [ $? -ne 0 ]; then + echo_r "Failed to generate certificates for org3..." + exit 1 +fi + +echo "Generated crypto-config and saved to ${CRYPTO_CONFIG_PATH}." diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/init_chaincode_dev.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/init_chaincode_dev.sh new file mode 100755 index 00000000..c7c52df6 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/init_chaincode_dev.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +# This script will build and start and test chaincode in DEV mode + +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +else + echo "Cannot find the func.sh files, pls check" + exit 1 +fi + +echo +echo " ============================================== " +echo " ==========initialize businesschannel========== " +echo " ============================================== " +echo + +echo_b "Channel name: "${APP_CHANNEL} + +## Create channel +echo_b "Creating channel..." +channelCreate ${APP_CHANNEL} ${APP_CHANNEL_TX} + +sleep 1 + +## Join all the peers to the channel +echo_b "Having peer0 join the channel..." +channelJoin ${APP_CHANNEL} 0 + +sleep 1 + +## Set the anchor peers for each org in the channel +#echo_b "Updating anchor peers for peer0/org1... no use for only single channel" +#updateAnchorPeers 0 + +# We suppose the binary is there, otherwise, run `go build` under the chaincode path +chaincodeStartDev 0 1.0 +sleep 1 + +## Install chaincode on all peers +echo_b "Installing chaincode on peer0..." +chaincodeInstall 0 1.0 + +sleep 1 + +# Instantiate chaincode on all peers +# Instantiate can only be executed once on any node +echo_b "Instantiating chaincode on the channel..." +chaincodeInstantiate 0 + +sleep 1 + +echo +echo_g "===================== All GOOD, initialization completed ===================== " +echo + +echo +echo " _____ _ _ ____ " +echo "| ____| | \ | | | _ \ " +echo "| _| | \| | | | | |" +echo "| |___ | |\ | | |_| |" +echo "|_____| |_| \_| |____/ " +echo + +exit 0 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/initialize_peer0.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/initialize_peer0.sh new file mode 100755 index 00000000..00d6392e --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/initialize_peer0.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +echo_b " ========== Network initialization start ========== " + +## Create channel +echo_b "Creating channel ${APP_CHANNEL} with ${APP_CHANNEL_TX}..." +channelCreate ${APP_CHANNEL} ${APP_CHANNEL_TX} + +sleep 1 + +## Join all the peers to the channel +echo_b "Having peer0 join the channel..." +channelJoin ${APP_CHANNEL} 0 + +## Set the anchor peers for each org in the channel +echo_b "Updating anchor peers for peer0/org1... no use for only single channel" +channelUpdate ${APP_CHANNEL} 1 0 Org1MSPanchors.tx + +## Install chaincode on all peers +CC_NAME=${CC_02_NAME} +CC_PATH=${CC_02_PATH} +echo_b "Installing chaincode ${CC_NAME} on peer0..." +chaincodeInstall 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH} + +# Instantiate chaincode on all peers +# Instantiate can only be executed once on any node +echo_b "Instantiating chaincode on the channel..." +chaincodeInstantiate ${APP_CHANNEL} 0 + +echo_g "=============== All GOOD, network initialization done =============== " +echo + +exit 0 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_install.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_install.sh new file mode 100755 index 00000000..d8be8b8e --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_install.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Install chaincode on all peers +CC_NAME=${CC_NAME:-$CC_02_NAME} +CC_PATH=${CC_PATH:-$CC_02_PATH} + +echo_b "=== Installing chaincode ${CC_NAME} on all 4 peers... ===" + +for org in "${ORGS[@]}" +do + for peer in "${PEERS[@]}" + do + chaincodeInstall $org $peer ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH} + done +done + +echo_g "=== Install chaincode done ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_instantiate.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_instantiate.sh new file mode 100755 index 00000000..71b3d34c --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_instantiate.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +CC_NAME=${CC_NAME:-$CC_02_NAME} +CC_INIT_ARGS=${CC_INIT_ARGS:-$CC_02_INIT_ARGS} + +# Instantiate chaincode in the channel, executed once on any node is enough +# (once for each channel is enough, we make it concurrent here) +echo_b "=== Instantiating chaincode on channel ${APP_CHANNEL}... ===" + +chaincodeInstantiate "${APP_CHANNEL}" 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_INIT_ARGS} +chaincodeInstantiate "${APP_CHANNEL}" 2 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_INIT_ARGS} + +echo_g "=== Instantiate chaincode on channel ${APP_CHANNEL} done ===" + +echo \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_invoke_query.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_invoke_query.sh new file mode 100755 index 00000000..d0e39ebe --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_invoke_query.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +CC_NAME=${CC_NAME:-$CC_02_NAME} +CC_INVOKE_ARGS=${CC_INVOKE_ARGS:-$CC_02_INVOKE_ARGS} +CC_QUERY_ARGS=${CC_QUERY_ARGS:-$CC_02_QUERY_ARGS} + +#Query on chaincode on Peer0/Org1 +echo_g "=== Testing Chaincode invoke/query ===" + +echo_b "Querying chaincode ${CC_NAME} on peer org2/peer0..." +chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_QUERY_ARGS} 100 + +#Invoke on chaincode on Peer0/Org1 +echo_b "Sending invoke transaction (transfer 10) representing org1/peer0..." +chaincodeInvoke ${APP_CHANNEL} 1 0 ${CC_NAME} ${CC_INVOKE_ARGS} + +#Query on chaincode on Peer1/Org2, check if the result is 90 +echo_b "Querying chaincode on peer 1 and 3..." +chaincodeQuery ${APP_CHANNEL} 1 1 ${CC_NAME} ${CC_QUERY_ARGS} 90 +chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_QUERY_ARGS} 90 + +#Invoke on chaincode on Peer1/Org2 +echo_b "Sending invoke transaction on org2/peer3..." +chaincodeInvoke ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_INVOKE_ARGS} + +#Query on chaincode on Peer1/Org2, check if the result is 80 +echo_b "Querying chaincode on all 4peers..." +chaincodeQuery ${APP_CHANNEL} 1 0 ${CC_NAME} ${CC_QUERY_ARGS} 80 +chaincodeQuery ${APP_CHANNEL} 2 0 ${CC_NAME} ${CC_QUERY_ARGS} 80 + +echo_g "=== Chaincode invoke/query completed ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_peer0.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_peer0.sh new file mode 100755 index 00000000..3bf21027 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_peer0.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +CC_NAME=${CC_NAME:-$CC_02_NAME} +CC_INVOKE_ARGS=${CC_INVOKE_ARGS:-$CC_02_INVOKE_ARGS} +CC_QUERY_ARGS=${CC_QUERY_ARGS:-$CC_02_QUERY_ARGS} + +echo_b "Channel name: "${APP_CHANNEL} + +echo_b "Query the existing value of a" +chaincodeQuery ${APP_CHANNEL} 0 ${CC_NAME} ${CC_QUERY_ARGS} 100 + +sleep 1 + +echo_b "Invoke a transaction to transfer 10 from a to b" +chaincodeInvoke ${APP_CHANNEL} 0 ${CC_NAME} ${CC_INVOKE_ARGS} + +sleep 1 + +echo_b "Check if the result of a is 90" +chaincodeQuery ${APP_CHANNEL} 0 ${CC_NAME} ${CC_QUERY_ARGS} 90 + +echo +echo_g "All GOOD, MVE Test completed" +echo +exit 0 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_upgrade.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_upgrade.sh new file mode 100755 index 00000000..0a61bdb1 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_cc_upgrade.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +CC_NAME=${CC_NAME:-$CC_02_NAME} +CC_PATH=${CC_PATH:-$CC_02_PATH} +CC_UPGRADE_ARGS=${CC_UPGRADE_ARGS:-$CC_02_UPGRADE_ARGS} +CC_QUERY_ARGS=${CC_QUERY_ARGS:-$CC_02_QUERY_ARGS} + +#Upgrade to new version +echo_b "=== Upgrade chaincode ${CC_NAME} to new version... ===" + +chaincodeInstall 1 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}" +chaincodeInstall 1 1 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}" +chaincodeInstall 2 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}" +chaincodeInstall 2 1 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}" + +# Upgrade on one peer of the channel will update all +chaincodeUpgrade ${APP_CHANNEL} 1 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_UPGRADE_ARGS}" + +# Query new value, should refresh through all peers in the channel +chaincodeQuery ${APP_CHANNEL} 1 0 "${CC_NAME}" "${CC_QUERY_ARGS}" 100 +chaincodeQuery ${APP_CHANNEL} 2 1 "${CC_NAME}" "${CC_QUERY_ARGS}" 100 + +echo_g "=== chaincode ${CC_NAME} Upgrade completed ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_create.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_create.sh new file mode 100755 index 00000000..4027e979 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_create.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Create channel +echo_b "=== Creating channel ${APP_CHANNEL} with ${APP_CHANNEL_TX}... ===" + +channelCreate "${APP_CHANNEL}" "${APP_CHANNEL_TX}" 1 0 + +echo_g "=== Created channel ${APP_CHANNEL} with ${APP_CHANNEL_TX} ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_getinfo.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_getinfo.sh new file mode 100755 index 00000000..d1b92255 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_getinfo.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Join all the peers to the channel +echo_b "=== Getting info of channel ${APP_CHANNEL}... ===" + +for org in "${ORGS[@]}" +do + for peer in "${PEERS[@]}" + do + channelGetInfo ${APP_CHANNEL} $org $peer + done +done + +echo_g "=== Get info of channel ${APP_CHANNEL} Complete ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_join.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_join.sh new file mode 100755 index 00000000..e7b78bec --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_join.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Join all the peers to the channel +echo_b "=== Join peers ${PEERS} from org ${ORGS} into ${APP_CHANNEL}... ===" + +for org in "${ORGS[@]}" +do + for peer in "${PEERS[@]}" + do + channelJoin ${APP_CHANNEL} $org $peer + done +done + +echo_g "=== Join peers ${PEERS} from org ${ORGS} into ${APP_CHANNEL} Complete ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_list.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_list.sh new file mode 100755 index 00000000..a7197351 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_list.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Create channel +echo_b "=== Listing joined channels... ===" + +for org in "${ORGS[@]}" +do + for peer in "${PEERS[@]}" + do + channelList $org $peer + done +done + +echo_g "=== Done listign joined channels ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_update.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_update.sh new file mode 100755 index 00000000..15cbeec5 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_channel_update.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Join all the peers to the channel +echo_b "=== Updating config of channel ${APP_CHANNEL}... ===" + +echo_b "Sign the channel update tx by Org1/Peer0 and Org2/Peer0" +channelSignConfigTx ${APP_CHANNEL} "1" "0" "${CFG_DELTA_ENV_PB}" +channelSignConfigTx ${APP_CHANNEL} "2" "0" "${CFG_DELTA_ENV_PB}" + +channelUpdate ${APP_CHANNEL} "1" "0" ${CFG_DELTA_ENV_PB} + +newest_block_file1=/tmp/${APP_CHANNEL}_newest1.block +channelFetch ${APP_CHANNEL} "1" "0" "newest" ${newest_block_file1} +[ -f ${newest_block_file1} ] || exit 1 + +newest_block_file2=/tmp/${APP_CHANNEL}_newest2.block +channelFetch ${APP_CHANNEL} "3" "0" "newest" ${newest_block_file2} +[ -f ${newest_block_file2} ] || exit 1 + +if [ $(getShasum ${newest_block_file1}) = $(getShasum ${newest_block_file2}) ]; then + echo_g "Block matched, new org joined channel successfully" +else + echo_r "Block not matched, new org joined channel failed" + exit 1 +fi + +# Now new org is valid to join the channel +# channelJoin ${APP_CHANNEL} "3" "0" + +echo_g "=== Updated config of channel ${APP_CHANNEL}... ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_config_update.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_config_update.sh new file mode 100755 index 00000000..237cc587 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_config_update.sh @@ -0,0 +1,82 @@ +#!/bin/bash +# Demo to use configtxlator to add some new organization +# Usage: +# Configtxlator APIs: + # Json -> ProtoBuf: http://$SERVER:$PORT/protolator/encode/ + # ProtoBuf -> Json: http://$SERVER:$PORT/protolator/decode/ + # Compute Update: http://$SERVER:$PORT/configtxlator/compute/update-from-configs +# could be: common.Block, common.Envelope, common.ConfigEnvelope, common.ConfigUpdateEnvelope, common.Config, common.ConfigUpdate +# More details about configtxlator, see http://hlf.readthedocs.io/en/latest/configtxlator.html + +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +[ $# -ne 1 ] && echo_r "Usage: bash test_configtxlator solo|kafka" && exit 1 + +MODE=$1 + +pushd $MODE/${CHANNEL_ARTIFACTS} + +# Must run `make gen_config` to generate config files first + +echo_b "Clean potential existing container $CTL_CONTAINER" +[ "$(docker ps -a | grep $CTL_CONTAINER)" ] && docker rm -f $CTL_CONTAINER + +echo_b "Start configtxlator service in background (listen on port 7059)" +docker run \ + -d -it \ + --name ${CTL_CONTAINER} \ + -p 127.0.0.1:7059:7059 \ + ${CTL_IMG} \ + configtxlator start --port=7059 +sleep 1 + +# clean env and exit +clean_exit() { + echo_b "Stop configtxlator service" + docker rm -f $CTL_CONTAINER + exit 0 +} + +BLOCK_FILE=${APP_CHANNEL}_config.block +if [ ! -f ${BLOCK_FILE} ]; then + echo_r "${BLOCK_FILE} not exist" + clean_exit +fi + +echo_b "Decode latest config block ${BLOCK_FILE} into json..." +configtxlatorDecode "common.Block" ${BLOCK_FILE} ${BLOCK_FILE}.json +[ $? -ne 0 ] && { echo_r "Decode ${BLOCK_FILE} failed"; clean_exit; } + +echo_b "Parse config data from block payload and encode into pb..." +[ -f ${ORIGINAL_CFG_JSON} ] || jq "$PAYLOAD_CFG_PATH" ${BLOCK_FILE}.json > ${ORIGINAL_CFG_JSON} +jq . ${ORIGINAL_CFG_JSON} > /dev/null +[ $? -ne 0 ] && { echo_r "${ORIGINAL_CFG_JSON} is invalid"; clean_exit; } +configtxlatorEncode "common.Config" ${ORIGINAL_CFG_JSON} ${ORIGINAL_CFG_PB} + +echo_b "Update the config with new org, and encode into pb" +[ -f ${UPDATED_CFG_JSON} ] || jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' ${ORIGINAL_CFG_JSON} ./Org3MSP.json >& ${UPDATED_CFG_JSON} +jq . ${UPDATED_CFG_JSON} > /dev/null +[ $? -ne 0 ] && { echo_r "${UPDATED_CFG_JSON} is invalid"; clean_exit; } +configtxlatorEncode "common.Config" ${UPDATED_CFG_JSON} ${UPDATED_CFG_PB} + +echo_b "Calculate the config delta between pb files" +configtxlatorCompare ${APP_CHANNEL} ${ORIGINAL_CFG_PB} ${UPDATED_CFG_PB} ${CFG_DELTA_PB} + +echo_b "Decode the config delta pb into json" +[ -f ${CFG_DELTA_JSON} ] || configtxlatorDecode "common.ConfigUpdate" ${CFG_DELTA_PB} ${CFG_DELTA_JSON} +jq . ${CFG_DELTA_JSON} > /dev/null +[ $? -ne 0 ] && { echo_r "${CFG_DELTA_JSON} is invalid"; clean_exit; } + +echo_b "Wrap the config update as envelope" +[ -f ${CFG_DELTA_ENV_JSON} ] || echo '{"payload":{"header":{"channel_header":{"channel_id":"'"$APP_CHANNEL"'", "type":2}},"data":{"config_update":'$(cat ${CFG_DELTA_JSON})'}}}' | jq . > ${CFG_DELTA_ENV_JSON} + +echo_b "Encode the config update envelope into pb" +configtxlatorEncode "common.Envelope" ${CFG_DELTA_ENV_JSON} ${CFG_DELTA_ENV_PB} + +echo_g "Test configtxlator for $MODE Passed, now ready for peer to send the update transaction" + +clean_exit \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_configtxlator.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_configtxlator.sh new file mode 100755 index 00000000..9e8ae760 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_configtxlator.sh @@ -0,0 +1,62 @@ +#!/bin/bash +# Demo to use configtxlator to modify orderer config +# Usage: bash test_configtxlator solo|kafka +# Configtxlator APIs: + # Json -> ProtoBuf: http://$SERVER:$PORT/protolator/encode/ + # ProtoBuf -> Json: http://$SERVER:$PORT/protolator/decode/ + # Compute Update: http://$SERVER:$PORT/configtxlator/compute/update-from-configs +# could be: common.Block, common.Envelope, common.ConfigEnvelope, common.ConfigUpdateEnvelope, common.Config, common.ConfigUpdate +# More details about configtxlator, see http://hlf.readthedocs.io/en/latest/configtxlator.html + +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +[ $# -ne 1 ] && echo_r "Usage: bash test_configtxlator solo|kafka" && exit 1 + +MODE=$1 + +pushd $MODE/${CHANNEL_ARTIFACTS} + +# Must run `make gen_config` to generate config files first + + +echo_b "Clean potential existing container $CTL_CONTAINER" +[ "$(docker ps -a | grep $CTL_CONTAINER)" ] && docker rm -f $CTL_CONTAINER + +echo_b "Start configtxlator service in background (listen on port 7059)" +docker run \ + -d -it \ + --name ${CTL_CONTAINER} \ + -p 127.0.0.1:7059:7059 \ + ${CTL_IMG} \ + configtxlator start --port=7059 + +sleep 1 + +echo_b "Convert all config block files into json" +for BLOCK_FILE in *.block; do + [ -f ${BLOCK_FILE}.json ] || configtxlatorDecode "common.Block" ${BLOCK_FILE} ${BLOCK_FILE}.json + decode_result=$? + #echo_b "Parse payload..." + #[ ${decode_result} -eq 0 ] && jq "$PAYLOAD_PATH" ${BLOCK_FILE}.json > ${BLOCK_FILE}_payload.json +done + +echo_b "Update the content of orderer genesis file" +if [ -f ${ORDERER_GENESIS} ]; then + echo_b "Checking existing Orderer.BatchSize.max_message_count in the genesis json" + jq "$MAX_BATCH_SIZE_PATH" ${ORDERER_GENESIS_JSON} + + echo_b "Creating new genesis json with updated Orderer.BatchSize.max_message_count" + jq "$MAX_BATCH_SIZE_PATH=20" ${ORDERER_GENESIS_JSON} > ${ORDERER_GENESIS_UPDATED_JSON} + + echo_b "Re-Encoding the orderer genesis json to block" + configtxlatorEncode "common.Block" ${ORDERER_GENESIS_UPDATED_JSON} ${ORDERER_GENESIS_UPDATED_BLOCK} +fi + +echo_b "Stop configtxlator service" +docker rm -f $CTL_CONTAINER + +echo_g "Test configtxlator for $MODE Passed" diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_fetch_blocks.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_fetch_blocks.sh new file mode 100755 index 00000000..1826b3d4 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_fetch_blocks.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +# This script will fetch blocks for testing. + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +org=1 +peer=0 + +echo_b "=== Fetching blocks of channel ${APP_CHANNEL} and ${SYS_CHANNEL} ===" + +channelFetchAll ${APP_CHANNEL} $org $peer + +channelFetchAll ${SYS_CHANNEL} $org $peer + +echo_g "=== Fetched Blocks from channels done! ===" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_lscc.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_lscc.sh new file mode 100755 index 00000000..f2c2752f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_lscc.sh @@ -0,0 +1,67 @@ +#!/usr/bin/env bash + +# This script will run some lscc queries for testing. + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +echo_b "LSCC testing" + +org=1 +peer=0 + +# invoke required following params + #-o orderer.example.com:7050 \ + #--tls "true" \ + #--cafile ${ORDERER_TLS_CA} \ + +CC_NAME=${CC_02_NAME} + +echo_b "LSCC Get id" +chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getid","'${APP_CHANNEL}'", "'${CC_NAME}'"]}' + +echo_b "LSCC Get cc ChaincodeDeploymentSpec" +chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getdepspec","'${APP_CHANNEL}'", "'${CC_NAME}'"]}' + +echo_b "LSCC Get cc bytes" +chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getccdata","'${APP_CHANNEL}'", "'${CC_NAME}'"]}' + +echo_b "LSCC Get all chaincodes installed on the peer" +chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getinstalledchaincodes"]}' + +echo_b "LSCC Get all chaincodes instantiated on the channel" +chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getchaincodes"]}' + + +#peer chaincode query \ +# -C "${APP_CHANNEL}" \ +# -n lscc \ +# -c '{"Args":["getid","'${APP_CHANNEL}'", "'$CC_NAME'"]}' + +#peer chaincode query \ +# -C "${APP_CHANNEL}" \ +# -n lscc \ +# -c '{"Args":["getdepspec","'${APP_CHANNEL}'", "'$CC_NAME'"]}' + +#peer chaincode query \ +# -C "${APP_CHANNEL}" \ +# -n lscc \ +# -c '{"Args":["getccdata","'${APP_CHANNEL}'", "'$CC_NAME'"]}' + +#peer chaincode query \ +# -C "${APP_CHANNEL}" \ +# -n lscc \ +# -c '{"Args":["getinstalledchaincodes"]}' + +#peer chaincode query \ +# -C "${APP_CHANNEL}" \ +# -n lscc \ +# -c '{"Args":["getchaincodes"]}' + +echo_g "LSCC testing done!" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_qscc.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_qscc.sh new file mode 100755 index 00000000..e6afe664 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_qscc.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash + +# This script will run some qscc queries for testing. + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +echo_b "QSCC testing" + +org=1 +peer=0 + +echo_b "QSCC GetChainInfo" +chaincodeQuery ${APP_CHANNEL} $org $peer qscc '{"Args":["GetChainInfo","'${APP_CHANNEL}'"]}' + +echo_b "QSCC GetBlockByNumber 2" +chaincodeQuery ${APP_CHANNEL} $org $peer qscc '{"Args":["GetBlockByNumber","'${APP_CHANNEL}'","2"]}' + +#peer chaincode query \ +# -C "" \ +# -n qscc \ +# -c '{"Args":["GetChainInfo","'${APP_CHANNEL}'"]}' + +#peer chaincode query \ +# -C "" \ +# -n qscc \ +# -c '{"Args":["GetBlockByNumber","'${APP_CHANNEL}'","2"]}' + +echo_g "QSCC testing done!" + +echo diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_update_anchors.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_update_anchors.sh new file mode 100755 index 00000000..dd4dc1c8 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/test_update_anchors.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +## Set the anchor peers for each org in the channel +echo_b "=== Updating anchor peers to peer0 for org1... ===" +channelUpdate ${APP_CHANNEL} 1 0 Org1MSPanchors.tx + +echo_b "=== Updating anchor peers to peer0 for org2... ===" +channelUpdate ${APP_CHANNEL} 2 0 Org2MSPanchors.tx + +echo_b "=== Updated anchor peers ===" + +echo \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/variables.sh b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/variables.sh new file mode 100755 index 00000000..bcf50c1b --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/scripts/variables.sh @@ -0,0 +1,117 @@ +#!/usr/bin/env bash +# Before running `make`, config this files +# Define some global variables for usage. Will be included by func.sh. + +# Name of app channel, need to align with the gen_artifacts.sh +SYS_CHANNEL="testchainid" +APP_CHANNEL="businesschannel" + +# Client cmd execute timeout and retry times +TIMEOUT="60" +MAX_RETRY=5 + +# Organization and peers +ORGS=( 1 2 ) +PEERS=( 0 1 ) +#: "${ORGS:=( 1 2 )}" +#: "${PEERS:=( 0 1 )}" + +# MSP related paths +ORDERER_TLS_CA=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem +ORDERER_MSP=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp + +ORDERER_TLS_ROOTCERT=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt +ORG1_PEER0_TLS_ROOTCERT=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt +ORG1_PEER1_TLS_ROOTCERT=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt +ORG2_PEER0_TLS_ROOTCERT=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt +ORG2_PEER1_TLS_ROOTCERT=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt + +ORDERER_ADMIN_MSP=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp +ORG1_ADMIN_MSP=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp +ORG2_ADMIN_MSP=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp +ORG1MSP=Org1MSP +ORG2MSP=Org2MSP +ORG3MSP=Org3MSP + +# Node URLS +ORDERER_URL="orderer.example.com:7050" +ORG1_PEER0_URL="peer0.org1.example.com:7051" +ORG1_PEER1_URL="peer1.org1.example.com:7051" +ORG2_PEER0_URL="peer0.org2.example.com:7051" +ORG2_PEER1_URL="peer1.org2.example.com:7051" + +# Chaincode exp02 related +CC_02_NAME="exp02" +CC_02_PATH="examples/chaincode/go/chaincode_example02" +CC_02_INIT_ARGS='{"Args":["init","a","100","b","200"]}' +CC_02_UPGRADE_ARGS='{"Args":["upgrade","a","100","b","200"]}' +CC_02_INVOKE_ARGS='{"Args":["invoke","a","b","10"]}' +CC_02_QUERY_ARGS='{"Args":["query","a"]}' + +# Chaincode map related +CC_MAP_NAME="map" +CC_MAP_PATH="examples/chaincode/go/map" +CC_MAP_INIT_ARGS='{"Args":["init",""]}' +CC_MAP_UPGRADE_ARGS='{"Args":["upgrade",""]}' +CC_MAP_INVOKE_ARGS='{"Args":["invoke","put","key","value"]}' +CC_MAP_QUERY_ARGS='{"Args":["get","key"]}' + +# unique chaincode params +CC_NAME=${CC_02_NAME} +CC_PATH=${CC_02_PATH} +CC_INIT_ARGS=${CC_02_INIT_ARGS} +CC_INIT_VERSION=1.0 +CC_UPGRADE_ARGS=${CC_02_UPGRADE_ARGS} +CC_UPGRADE_VERSION=1.1 +CC_INVOKE_ARGS=${CC_02_INVOKE_ARGS} +CC_QUERY_ARGS=${CC_02_QUERY_ARGS} + +# Generate configs +GEN_IMG=yeasy/hyperledger-fabric:1.2.0 # working dir is `/go/src/github.com/hyperledger/fabric` +GEN_CONTAINER=generator +FABRIC_CFG_PATH=/etc/hyperledger/fabric +CHANNEL_ARTIFACTS=channel-artifacts +CRYPTO_CONFIG=crypto-config +ORDERER_GENESIS=orderer.genesis.block +ORDERER_GENESIS_PROFILE=TwoOrgsOrdererGenesis +APP_CHANNEL_PROFILE=TwoOrgsChannel +APP_CHANNEL_TX=${APP_CHANNEL}.tx +UPDATE_ANCHOR_ORG1_TX=Org1MSPanchors.tx +UPDATE_ANCHOR_ORG2_TX=Org2MSPanchors.tx + +# CONFIGTXLATOR +CTL_IMG=yeasy/hyperledger-fabric:1.2.0 +CTL_CONTAINER=configtxlator +CTL_BASE_URL=http://127.0.0.1:7059 +CTL_ENCODE_URL=${CTL_BASE_URL}/protolator/encode +CTL_DECODE_URL=${CTL_BASE_URL}/protolator/decode +CTL_COMPARE_URL=${CTL_BASE_URL}/configtxlator/compute/update-from-configs + +ORDERER_GENESIS_JSON=${ORDERER_GENESIS}.json +ORDERER_GENESIS_PAYLOAD_JSON=${ORDERER_GENESIS}_payload.json +ORDERER_GENESIS_UPDATED_BLOCK=orderer.genesis.updated.block +ORDERER_GENESIS_UPDATED_JSON=${ORDERER_GENESIS_UPDATED_BLOCK}.json +PAYLOAD_PATH=".data.data[0].payload" +PAYLOAD_CFG_PATH=".data.data[0].payload.data.config" +MAX_BATCH_SIZE_PATH=".data.data[0].payload.data.config.channel_group.groups.Orderer.values.BatchSize.value.max_message_count" + +# channel update config +ORIGINAL_CFG_JSON=original_config.json +ORIGINAL_CFG_PB=original_config.pb +UPDATED_CFG_JSON=updated_config.json +UPDATED_CFG_PB=updated_config.pb +CFG_DELTA_JSON=config_delta.json +CFG_DELTA_PB=config_delta.pb +CFG_DELTA_ENV_JSON=config_delta_env.json +CFG_DELTA_ENV_PB=config_delta_env.pb + +#ARCH=x86_64 +ARCH=amd64 + +# for the base images, including baseimage, baseos, couchdb, kafka, zookeeper +BASE_IMG_TAG=0.4.10 + +# For fabric images, including peer, orderer, ca +FABRIC_IMG_TAG=1.2.0 + +PROJECT_VERSION=1.2.0 \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/README.md b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/README.md new file mode 100755 index 00000000..b2cd950c --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/README.md @@ -0,0 +1,7 @@ +## Start a network base on solo + +### Quick testing +```bash +$ HLF_MODE=solo make +``` +When the fabric-network fully started, it takes about 30~60s to finish all the test. diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSP.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSP.json new file mode 100755 index 00000000..ab0f8910 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSP.json @@ -0,0 +1,130 @@ +{ + "groups": {}, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSPanchors.tx b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org1MSPanchors.tx new file mode 100755 index 0000000000000000000000000000000000000000..9bd052065e04e945f39fc57fa6da1085d82fdeff GIT binary patch literal 296 zcmd;D%ETqgCCtI3#Gh1JoSBzeT%4Sdn3tEDBh<~r)xpGtAsj9g%Ej$iP>_?EoLG{X zpC{zT!6;_?EoLG{X zpC{zT!6;IPHg}H literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org3MSP.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org3MSP.json new file mode 100755 index 00000000..dc3b5fae --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/Org3MSP.json @@ -0,0 +1,119 @@ +{ + "groups": {}, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel.tx b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel.tx new file mode 100755 index 0000000000000000000000000000000000000000..5907a25402aecfbae2303558ce33a5ebee0fe62b GIT binary patch literal 358 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 literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_1.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_1.block.json new file mode 100755 index 00000000..83560d8f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_1.block.json @@ -0,0 +1,781 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "2" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQCc4ZKuLcsxIu9K20zNTgXwFhyQjefSUkgt11GATeSZiwIgO9AKATJFJqfleWeNco1ZJNR2ZiqWPbug550mLJUX9j4=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "f2cPHnhKks9awzvWS2SjUJIlUYj7YrZS" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T03:28:40.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "tN3eCNWfbaUPvruv55ACwYDk8EPh4rvw" + } + } + }, + "signature": "MEQCIBFxzte/lVwmUGT3+pE85oeO1ecAGS5yNBqiyfmXfD6VAiAYhBd+7AZ5o1U0IOWeoA/gJza8v+8w1ZS07ErITvnk2g==" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T03:28:40.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "8cOzTmtWtvKL1quiSXEnTGRNk2pUodvl" + } + } + }, + "signature": "MEQCIGXpheAByFVDIXbW/OvRrv7CdaiAEej2TXFKeG6rU83JAiAKD2GeIbvD9F+XqzhcpAVU2ez5NDDUzajn2IBxrDCGMw==" + } + ] + }, + "header": { + "data_hash": "+d0Bb3b8Mv3QAGE++f5MBReW1/lRzHMcT2HT2NRnqU0=", + "number": "1", + "previous_hash": "N+hxWM50bfJDVmrCb/MLKU2Oijcy8EAxZYSkAK/z000=" + }, + "metadata": { + "metadata": [ + "EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYzjNP03uIiVIBgehHWchska/UgZz8g4zvEkcwRQIhAJz/Y1eut92V4gDbtujpYhbks0xISHbLYJt/tvNWBSMeAiAlLjHPlEpsNvQu4RHJMOk3hQ7v9ZpBYsdapaeIdUSmqg==", + "CgIIARL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGJYRFLKrqTVqDrVJAgwCfl+IOUmEXtACmRJGMEQCIG235KT+Go24iLgC6VdB5jXKRwmZRjkShvX4Q6mWxFKxAiBnP+vIvE5HYIF6zObgtQ9krd4VYWafPXbXFJhcBJMaDw==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block new file mode 100755 index 0000000000000000000000000000000000000000..cad9df1468b4df4d85f71967dccc370b33c9bd78 GIT binary patch literal 17573 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 Y{owH*ee3g2JaNv^uYTvVU=P^yKl3iC)Bpeg literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block.json new file mode 100755 index 00000000..3321883e --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_2.block.json @@ -0,0 +1,793 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "3" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org2MSP": { + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "Admins", + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEUCIQD6bSv5X2lY2X/J3m2gGigUDesPr3twxQEad/lY9Y0DmgIgSvMzm8L2U29qjKmqEuuAx27OL+7psuhd4h7cNHW5Iv0=", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "1ePHZvTe8hYqml9Ruk2bQc46Lku5YrPt" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T03:28:43.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "JX5Oc8TxxmfUejozF+HhciIbzmENMOA9" + } + } + }, + "signature": "MEUCIQCQkH5kID7OVB/rUSViTiIAgmzCAQE2FaAmflvHT6C29wIgTwFG9i7sESCFmgEk241w4dg7lvG6T4kM40zUVVooGk4=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T03:28:43.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "3zDy5K/5ib2KLDJAXZK2IBUgJsv6qrOQ" + } + } + }, + "signature": "MEQCIAdi15xrFZrGhJqjjN+x8SXsq/Bt46b6oNtX7WmWd7zFAiBdLAn91IyXD2p1cggTI5NTz/agsDjsA/zw+peW4H5bCQ==" + } + ] + }, + "header": { + "data_hash": "iCIvtmu0wf7/ieM8nGrkHYUOriSOAI0Feu4Tc71VVAg=", + "number": "2", + "previous_hash": "8+9dLrUCGpA9RuEevvReME/l7IxS0eBxxOPwc+aCwaE=" + }, + "metadata": { + "metadata": [ + "EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYLI2qofZmFeoYr9UMWl2UewDFF+YZ1NmVEkcwRQIhAOspz9S7gc1uxZB4I/BFJDw2WJtDk5D3m/KyjLKNlp00AiBTeCt1+iG1jWEUGKT8gOp4qtUTOX/4bsLr8pV2E/hkbg==", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGHrNxC/DdWZJpfcKCiqHXNziz9pquGOSlxJGMEQCIH0ncEP0DN4xwDiiwgNDGCsyuuU/lkmlAwSNXQp+bIjTAiAnRO0fbsIw2wOlxtFWEWZlI4+RYwb7ee0znGUrJ+puDA==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block new file mode 100755 index 0000000000000000000000000000000000000000..62c3dcca24123664ca7bc803cd7c1ba931af243e GIT binary patch literal 5396 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 literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block.json new file mode 100755 index 00000000..81c57c11 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_3.block.json @@ -0,0 +1,104 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "M1MZF6Ke0MJyIQ5uLfXfx4UO2nOt13ib" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcxTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLRENDQWM2Z0F3SUJBZ0lRTVNaNENHWjZPMy9FMHF4bmpldUFOekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamRhRncweU9EQTJNVGt3TXpJeU1qZGEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1DNXZjbWN4CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNOFNoVGowNy9saWEKRUtpR2gxcFdSdG5Ga0RLUG13OWFiVm13OURpcm83OEN6enlZNENzNTNGRDJjWWlKQmZuSWlrWXFxYUFtekR0NgpudnNtUHpIMTBLTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FnWkFreHdqN3p0U1Z0c29LbTlhQ2xTNENVWis3VE85SGtvQ3FJMjRBekx1Z3dDZ1lJS29aSXpqMEUKQXdJRFNBQXdSUUloQU55UEc5UElaN3lnVGtrNmZ5NUh3eldyTmdTSVZVWk9uVUxtOFQxYXJSaXlBaUF1TnllNQp4bko2VThOSi84N3hXbGhqWFpaUGI3ekxIeHFZYU5uWVVJbWdhQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEUCIQC13G6lTKvaCH5YTvlpAe3RS+FQ9LlkOLVjsUREvvgSJwIgOOq/gX9zljOWL9TVwBEN9iWsP39dDFQuDiXKrYpKSI8=" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "lscc", + "path": "", + "version": "1.2.0" + }, + "response": { + "message": "", + "payload": "CgVleHAwMhIDMS4wGgRlc2NjIgR2c2NjKigSDBIKCAESAggAEgIIARoLEgkKB09yZzFNU1AaCxIJCgdPcmcyTVNQMkQKIKHVcu1JbD6syM0Qw+LruCE2WdL5x12oXEl44rzaqt03EiCspBd4qNsaveuBzl13p5mBgwZmADW4S4f0OnOZOAYsHjogCMpnXDmouuJjGEelIfyS4Slp/hIr1KnfCnB88QWehzBCLBIMEgoIARICCAASAggBGg0SCwoHT3JnMU1TUBABGg0SCwoHT3JnMk1TUBAB", + "status": 200 + }, + "results": "Eh0KBWV4cDAyEhQaCAoBYRoDMTAwGggKAWIaAzIwMBL3AQoEbHNjYxLuAQoHCgVleHAwMhriAQoFZXhwMDIa2AEKBWV4cDAyEgMxLjAaBGVzY2MiBHZzY2MqKBIMEgoIARICCAASAggBGgsSCQoHT3JnMU1TUBoLEgkKB09yZzJNU1AyRAogodVy7UlsPqzIzRDD4uu4ITZZ0vnHXahcSXjivNqq3TcSIKykF3io2xq964HOXXenmYGDBmYANbhLh/Q6c5k4BiweOiAIymdcOai64mMYR6Uh/JLhKWn+EivUqd8KcHzxBZ6HMEIsEgwSCggBEgIIABICCAEaDRILCgdPcmcxTVNQEAEaDRILCgdPcmcyTVNQEAE=" + }, + "proposal_hash": "W09lBdURWxIUOI7xlnY3X7mkWPPaa0TMQhKS98Wvz8s=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "lscc", + "path": "", + "version": "" + }, + "input": { + "args": [ + "ZGVwbG95", + "YnVzaW5lc3NjaGFubmVs", + "CigIARIMEgVleHAwMhoDMS4wGhYKBGluaXQKAWEKAzEwMAoBYgoDMjAw", + "EgwSCggBEgIIABICCAEaCxIJCgdPcmcxTVNQGgsSCQoHT3JnMk1TUA==", + "ZXNjYw==", + "dnNjYw==" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgYSBGxzY2M=", + "timestamp": "2018-06-22T03:28:47.474592182Z", + "tx_id": "db4594fb5e31360385bff88253db5c8ae5237813883b8457a61bd30394ccde39", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "M1MZF6Ke0MJyIQ5uLfXfx4UO2nOt13ib" + } + } + }, + "signature": "MEQCIDlCQ4bWbCa6kAQnxy9cQCbuTvoipLim7I0zIp89+EwzAiA2ObIL0xwnJOIMwayJPeAq5RfTrLa+7kWszHwFBPl9+Q==" + } + ] + }, + "header": { + "data_hash": "b4qaewEDqxplZZUhvwvekR5t20G4NugnozM9/XFozcU=", + "number": "3", + "previous_hash": "P5aX6KjNE1lmkTDuUrnAibot4QM7bbo9DX6BSnko2go=" + }, + "metadata": { + "metadata": [ + "EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYMsbCArkpUycoPUbzek0oG7vIT98EnIt0EkcwRQIhAJIttL2YFRsTnpBj1h5vuD5mH4St1wx37w9gvPXROu3/AiApcuyUQdlQdXaOHZvjAVYIBk3iwQOrRV0gmn0FkozAyQ==", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGE9gFi2BNl7mm5A6x+j6RmFSUf8ZQGhlhhJGMEQCIArzBMPOTf2MreCEl2rNlvIQBfZ86YN4fOMLnGKebq5CAiA+2vtuKaCevHMDIGQJdXvDTjuziBoeH+2ZjTyOSzsqVg==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block new file mode 100755 index 0000000000000000000000000000000000000000..8623ecb299dfa64a6451be16fed8babff70eb54a GIT binary patch literal 5405 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 A761SM literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block.json new file mode 100755 index 00000000..b25e6af0 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_4.block.json @@ -0,0 +1,104 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "J9RbhoCIPuvFbNVtDc0oUdZVurcZ7JXp" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcyTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLVENDQWMrZ0F3SUJBZ0lSQU4xcS9aYVcyd0k1STd6K3lRZVFVKzR3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCcU1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFTk1Bc0dBMVVFQ3hNRWNHVmxjakVmTUIwR0ExVUVBeE1XY0dWbGNqQXViM0puCk1pNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUFCSmlHVWlIckpMeTIKR2pkNXJQbS96MWF6UEJ6T1o5OHpJVUxOR3dpYmlwazVoQnFqZEVnWENvRnhkUXU0djNzVGt6cll5RURoS254VQp2dWZ2SlhkeEpnU2pUVEJMTUE0R0ExVWREd0VCL3dRRUF3SUhnREFNQmdOVkhSTUJBZjhFQWpBQU1Dc0dBMVVkCkl3UWtNQ0tBSUsrUGgvRnZZaFlhaktmb1Q1eHdRZFdmQXpEWk9ITVdZRG1HL25NdW5sK0tNQW9HQ0NxR1NNNDkKQkFNQ0EwZ0FNRVVDSVFEZEVnQ0FxKzFzUWVZbWpSN21haHNZN1RGRjFuR3VwaXZKZjdDbVBYNG4wQUlnQmgrZgpISzhoMU1kejQwc1pLdEt3Vkk3RlZpVDdsbzYzbFVOdWRZdGNHYUE9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEUCIQDYbjTPy2xkjt77BYNz2enbw6kRn3T7gDGRxFXjn1fFMAIgaUQXmbms4CGrXkUZfjI/gtcMysyEcMAnWxsouB5VCxQ=" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "lscc", + "path": "", + "version": "1.2.0" + }, + "response": { + "message": "", + "payload": "CgVleHAwMhIDMS4wGgRlc2NjIgR2c2NjKigSDBIKCAESAggAEgIIARoLEgkKB09yZzFNU1AaCxIJCgdPcmcyTVNQMkQKIKHVcu1JbD6syM0Qw+LruCE2WdL5x12oXEl44rzaqt03EiCspBd4qNsaveuBzl13p5mBgwZmADW4S4f0OnOZOAYsHjogCMpnXDmouuJjGEelIfyS4Slp/hIr1KnfCnB88QWehzBCLBIMEgoIARICCAASAggBGg0SCwoHT3JnMU1TUBABGg0SCwoHT3JnMk1TUBAB", + "status": 200 + }, + "results": "Eh0KBWV4cDAyEhQaCAoBYRoDMTAwGggKAWIaAzIwMBL3AQoEbHNjYxLuAQoHCgVleHAwMhriAQoFZXhwMDIa2AEKBWV4cDAyEgMxLjAaBGVzY2MiBHZzY2MqKBIMEgoIARICCAASAggBGgsSCQoHT3JnMU1TUBoLEgkKB09yZzJNU1AyRAogodVy7UlsPqzIzRDD4uu4ITZZ0vnHXahcSXjivNqq3TcSIKykF3io2xq964HOXXenmYGDBmYANbhLh/Q6c5k4BiweOiAIymdcOai64mMYR6Uh/JLhKWn+EivUqd8KcHzxBZ6HMEIsEgwSCggBEgIIABICCAEaDRILCgdPcmcxTVNQEAEaDRILCgdPcmcyTVNQEAE=" + }, + "proposal_hash": "qhQKBa1yziFB/KgRHJXKpvoIZq8Vez6cUEmNK33aJUQ=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "lscc", + "path": "", + "version": "" + }, + "input": { + "args": [ + "ZGVwbG95", + "YnVzaW5lc3NjaGFubmVs", + "CigIARIMEgVleHAwMhoDMS4wGhYKBGluaXQKAWEKAzEwMAoBYgoDMjAw", + "EgwSCggBEgIIABICCAEaCxIJCgdPcmcxTVNQGgsSCQoHT3JnMk1TUA==", + "ZXNjYw==", + "dnNjYw==" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgYSBGxzY2M=", + "timestamp": "2018-06-22T03:29:02.399949482Z", + "tx_id": "1930e6297ea985898b7d46a459ccfb6cac1b4d1c3ccf3fddc950a2f264a8114d", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "J9RbhoCIPuvFbNVtDc0oUdZVurcZ7JXp" + } + } + }, + "signature": "MEUCIQCAGruUEcYpVmi/Iyr8DJQxducwoZvDY+fwAArjKodUqwIgRW8F68C22xOt27UOZRJS8hXkKDErwGfs4oPmMf1WMys=" + } + ] + }, + "header": { + "data_hash": "n+PyB8FGOFiYNo8dQmGrdOkzkxFPx/1YUpcRHvfFZgs=", + "number": "4", + "previous_hash": "gmOkyWIybO88Mp7oRGeobzKfvEu+Q8GW0fN+QQqzE3k=" + }, + "metadata": { + "metadata": [ + "EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYGfqsQdiFWz5djqlGZdboVELEBb02k2cHEkcwRQIhAJD1GCLJnwXNk8W7BZLpZy1ldswvuMCy1Tdc9oVK82wwAiANSOARhIgBhoBfZ9BbL7iTCjVyexFX7UAtTTDmhWVgLA==", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGBYYkxnLVe2MzabOKWI/wZCVnpH4ILgfNBJGMEQCIF1PYTxMACT4NdwLNd8H5VpFAIQ48OgKk2KmIpR3vz92AiAZnXhADV/KHH7EJZamUtW3LVzbrqYdk3foeVs7VnKVtg==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block new file mode 100755 index 0000000000000000000000000000000000000000..7656b0da9af5b2ec3acc9fc9ee0efb5bd0e87123 GIT binary patch literal 4857 zcmeH~YmD5~700u?WOum`Ql>njZA%tP6kuuAGdoXO9@nq2$79df<9WGAt?lu8#-8`= z%=NfX0VN5PibqvSgvzUkq)@d&v`SKuLZPCd2nb1_5a0t)Xi-&AQc5XRAoc7dp-`Z- z;uDHLSXbwsd+p8tjv+&Xgmi-|qO{qNqr?k`v0GxGY6@A~^QOIxj# z`jgMS@a)v|z3aN$uYKx{6E^Sv;SIjrahtyO)iLR(+jo59@%Ec9?>OPkoxY7HgWFFA z&zuB)Hv#ICV^haYzJ1eQ_bmO~hJA0{JaXD{t=p;8jZQ}|tM$53J?nx{35#i1%pb!H zEfkv%hhkbu3rE#hFj@+$Asy4_LlI2Zf_gZjNBpWW@1KjrRDUcsABpH;|2aqdCVWc` zr-=o8yT`%iaWIi;n|?l%_T4r9mBEEmaaNcnC`o2%mVh#~7zI4b5}ZX4utb;;u{bnY zkuJNHXrECe-LPv`%9a?r>31QAn`WzQTdA}tlF-6kUhE)1h($6dig5}ha#@#>dGA5c zpQQ+#=fnWrQS(YquZ5aLnacCHxHyM9ypRphU6xY%pqLL?YC*6xmr{6KA1*HQqBfVP z^O;c9h|>#t+^HsOLQj(^oyQxCInd$dVu0#`4^M;!jW8!g!T@ivh4y2bc^`B}iB?3EU=RhDi5P{zN{|H(Q#& z!R3->LaIj=_y}fXOs-*RCdqfh4 z5w?!7^=Yzo_ayi-I2Ej%9679FQ$8?WsrMST0Y+3XqJdFA=DT7NTrvWtud2^qY(0HZ zc$NG1vcFxr2JY`a^v24w4(ONP=f7sdqpwW(E(CGk8gNh!SAhv{3*YGE*kGUy22+E` z)MyNwn)D)5V*zjP6Twl{j;{NbfnyG>9Au77J~DFJu?MAfYRta|^IbOazv?UL>8l<- ztgn1V2@-K7oSK`Zu$EJ|j4l*D3;J665PdDFp1w9dZGFWMfffbW(^m;8`COluqKFx4 zE=f7cFh+zt@1Z*&S<3~Bc|X$P*={iqTkzBuQK-mp4TW_rjDTX1Jvb(zsFR`zDL$Gh z%N7=ytyWY(ag})4-^@!3b=oGmbPdH+E$7|IO1lw>60X}X28m8+jwSukj? zwpuEzx#U6^)O(#;+GYG0CkQ;%L8Q5;qv@fJdVb0@AP>>N*_0?m;j>62cnA?UC{w~L zfD$l!=+cx6WO;2pUa>FKtd+Mdky3y&@DX$*03E%sZjro(ueuF=7VAt{Gm1n*B;`)E? z_|}>O;xAwG(HJ>8jmqpT_=U#LRcGav9m;bLZ@=`$%^19I^$%8Dy|%>MfA8pY=c%Js z?asY2$L)LOzVn;UuRT7QqL(kth@X#Kb;WAI; za=b&iP#T&;QzmSo?3u=zXKlM`o^oglW`}dSOy<0~3LXb~jrN+k>J|f0hbCcWn9z`k zzz3RL(h+@#3>3182Te72&sBeNLFZ}nFw5ZoG0Xq%mBFG}mJo^$Xz>0jC`a&sm8yCz z*Z(BUf)7I5T986fqO37=ha42QXw7OL*p}YNLUk9Sq zqzb&;({pVmL*PZs@eDB$a*R+jR%_18_FaFN?4+z<&%_FqV1~p3EXFa`OgpdEi*~4Rqf~p(idAQxy=mVKNB4h)KdC>l$2TPTI%eBTc`gnI|=k$vDR`bo{qjzpJzy9>?*RN+^+ci3E-FV;{!2Ae(bJv^i er2N+r53ZLVJg@AWzU+;Se|jT&$uVFFSn@AxdrEHr literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block.json new file mode 100755 index 00000000..5d31e0c1 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_5.block.json @@ -0,0 +1,101 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "GrX75QmjSNCLcWSuXNhJAwtHxW807Zxy" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcxTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLRENDQWM2Z0F3SUJBZ0lRTVNaNENHWjZPMy9FMHF4bmpldUFOekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamRhRncweU9EQTJNVGt3TXpJeU1qZGEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1DNXZjbWN4CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVNOFNoVGowNy9saWEKRUtpR2gxcFdSdG5Ga0RLUG13OWFiVm13OURpcm83OEN6enlZNENzNTNGRDJjWWlKQmZuSWlrWXFxYUFtekR0NgpudnNtUHpIMTBLTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FnWkFreHdqN3p0U1Z0c29LbTlhQ2xTNENVWis3VE85SGtvQ3FJMjRBekx1Z3dDZ1lJS29aSXpqMEUKQXdJRFNBQXdSUUloQU55UEc5UElaN3lnVGtrNmZ5NUh3eldyTmdTSVZVWk9uVUxtOFQxYXJSaXlBaUF1TnllNQp4bko2VThOSi84N3hXbGhqWFpaUGI3ekxIeHFZYU5uWVVJbWdhQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEUCIQDqqJnDhN2vYFdGh/VoHBhnDe7VsuyXW0hNvfbzTt+VHQIgZ1GLkDHepPNDvvkMo8amnI+XB7Wp1Uk4/Tdy0fInM/Y=" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "1.0" + }, + "response": { + "message": "", + "status": 200 + }, + "results": "Ei4KBWV4cDAyEiUKBwoBYRICCAMKBwoBYhICCAMaBwoBYRoCOTAaCAoBYhoDMjEwEhUKBGxzY2MSDQoLCgVleHAwMhICCAM=" + }, + "proposal_hash": "NMCGGrEgcxjknnyodVWiLaQ+311Qx9w3XgRSsoUJxLE=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "" + }, + "input": { + "args": [ + "aW52b2tl", + "YQ==", + "Yg==", + "MTA=" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgcSBWV4cDAy", + "timestamp": "2018-06-22T03:29:30.053009429Z", + "tx_id": "96804900aeddfec59ab4d7519fa5afc6435588cc45bea2c9780cf7d5b800dc15", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "GrX75QmjSNCLcWSuXNhJAwtHxW807Zxy" + } + } + }, + "signature": "MEUCIQC1K6AmV6cb+BBmG57NO7EDHxctjtVdz3xWD0WM97pPuQIgbJU8Il5zOOjuVLLFEYY1jSFF8j5NvsdujCX3DjoTnLY=" + } + ] + }, + "header": { + "data_hash": "nz36N4gXp5bS9CyweP3xN+QjZq2HbCRVmOtJ2w/+I7Q=", + "number": "5", + "previous_hash": "r7YEl2UseysoM4uTQzxPiN4t7igSK++exNF4FGfK6iw=" + }, + "metadata": { + "metadata": [ + "EvcGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYu/qHW3ebznC4QqaFqYHdIc0WAzilxv9dEkUwQwIfLR4aVyndj0b0OQlx5bGnAvlQ6H1Oe8f7jMI9dqbKWgIgMHNEgsvxUAXfrJjre9aEhMOlJtEZaJ5TyZRFOx8hqQo=", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGJCAe9cY8mA5uyIqQxMDifj1uuO69I6QchJGMEQCIEEsXWOsP9q5hbhb7S8zXKO9IEIMWUVPQfBPTdaRvBDqAiAzYhjYGVquySBUzmHW3gv0wCjg1WakL4e9kjsHZTU6uQ==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block new file mode 100755 index 0000000000000000000000000000000000000000..8a1ec733c1a55c905ebb104f160d12724861e9f1 GIT binary patch literal 4865 zcmeH~eT>`W9mm^Txw}44+NEqAH+8*&U{cdH&g&&NPQ!0WoaAxNiSyzN7`Ed};v|lf zT=LlN*aj4hZH0BED+MvsRijM2bOWhK>(;RwL#$a*HhwU$YyZ`AKN%tKbm;3=zr5r4#$DSUdhm{$uRF5+vX|d%u5kWz4Y+F! zIQAKEcm!ypLt|%+Zol>TpU+rz*Ul@Sa-6qP>UOG{(&@+*QPY(AhKoZ1#pewxB_&w$ z%cY5c5(tZ71(W0nzgG%}Wyx2q)w=NXEj zV_xUu!{ER$7)iCuUYMD7?i>DM|3}bKh8-vAG|xmB66fjpDu4__CM=S~OVKip7y>Ud zX*{Vlf*vd!4H_y=7GTH7hTTdNk!68NG>eR-Vzk|hWQ$G$h}WXHCrc9*Nak|Tpe;O2 zl-ZoU5>M9HiWIFkBwxHM=4m6M;@QDHnWu90y($p}awF0eymd?PhKwkW7X}SYo{omi zqQ!KJg-SS?Nsph{lMh*7vW=z%=#Wh)@rc+W-@tH>Yf47R^I@X8o;^1Wa(=NJq>UdvYV73p|~N1UJ~W0a=js zM!F1LG=+RX6$`8?S@bl-vBARzj0#>uFXjUnOovcx@Fx^S6p3Qgqf0fSXU{-3lZ~8T z$a|0!&D!$_&%#Iz(MX6bOq|5I6Vs<~PNujrP8Vn++=}TYXu3sJq!<^BPWWLrsRt_V zs2?|GlO0nsq1no$vP9co?Mgyh5T;u^kND%6F5iVWd(;g>Tjz=Bbsm{j)XXl5=fwc-KY{IhnOZ_Zu?!aP(ECZ zR9aAXRi?EVL3oNG3bHl7Y!u5WL2}7vP$~FN9xAYKs;G>;Vwz(rc%sA#-87$RrA*Az z(Ce8zqnN%_14D>#)2?nM;nMRAqPzC7s^U4o>$!s1@)6l^GT~F*buAmnMdC&mRgmaO zCH=aPN+#Jz!^KTaf%(%IJ#N4G*)a}n@4qx-m)N==yuiLCW;JgGxotwad7B2uJ_7YCV z=o$SBsedunuZ%fD*x0CD85{C?G3TejvU*3Boh!hZi%&Xife(%TZs~bvEhu(u$g>G^ zUNr*lJH@kie6VLJ+p}_T(X*VGHc<$s^eQDrl#JnP!Kke8c!DUGTa}ucn&#|xu1Z*a zH-V2Ur$sk`Q{+^HgglT_1#-5WHCPSQm1tyEjvDo3gY8K?EkmL?--8>F7rb;Aymuq6 zL=a}ADBNrN6+z2(ty&T7nmJ$NYbR;|MwGc$kKW9w?EakxmJDTa~uZ zrAEC1(*la%^G=S@$iv%P@R!qCydpJNUG}m)$YF@I=5yw$j-`#_pq2^P z;+9Q2DtvUumM{cqJ=jWAObCo(u9RtnA{rCx@!>Lw+PP4NkExxAAyT;x*Th7WGN~k1 zY$PSjm9;E6QHP|Pn!#F`jt>IFw|jC+%WxmVv34Yp=zRF~!>E-e}m{Ccma)MxZrzaGY`L@4M9Qb5gFW=6NlG;ie#VHJZ#TBj<} zT#2n{W>D8sK0U{y_jha*qaEv)JX{~X<=N(K?#CZ4I%7}oV;+4)pZe0~m-f${OYfK* zdGd9~c=4h2^2*Eq5Pxm?CC~o-#od3*yuJD6uatIlhOYW@=k5#dxzIUS=;`k%$In0J zS0}gnCbYxXA7T#7K0gu(-HsmK$X-x=VUJ^6fctiho&U&V2lk}gt0(aLH~w;~_QSaO zXt}%h?a9mTUpuztZ1C2w^NnF}_b}Kt3_z+~Qrb$ppP;Y&K(eVm*-~ne>@=QmQ=Oz5 zPS)y`I83pn6oFFw$*{ASphfekh`Y?(<@2ArzX1<3d0TsxK_2>~;jBtr%a zC7_2Jy31`^Hol#d>hG1YLe-z4FfW58Vydg17d4?Oyl*IOuXyvBUtMucnmy~1hK0 z{nPaSoxr!AI(ul#&#U9r2c?&u-=wUbQ8!;rj*nkGAn@D`6Hl&bAG!7k@92YD4;={} zc;S}yUp;!x)b(?}So57r*B*0>Yt6Nv+g^Wr$6pUK$vvfC|LuWYn>MW2aQWm0_6LXd MT)cBHSOS*(3uFvC%K!iX literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block.json new file mode 100755 index 00000000..27b25fde --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_6.block.json @@ -0,0 +1,101 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "actions": [ + { + "header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "z+AlpPDqtqGg/X6Xxit9oQE9T2iuMsPs" + }, + "payload": { + "action": { + "endorsements": [ + { + "endorser": "CgdPcmcyTVNQEqoGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLRENDQWM2Z0F3SUJBZ0lRYVJ5dzhNT3BpRGFGZVN4M3FNR2NlVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUdveEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVEwd0N3WURWUVFMRXdSd1pXVnlNUjh3SFFZRFZRUURFeFp3WldWeU1TNXZjbWN5CkxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVkMHdNRXA2cUtoeU0KeFpWZFNtOEZuSUh2VDlnQ3dyVjhzVEhqc0Z4YURWc1FvMGF3T3lETDBabUxiMCtVenpjS2xNQy9EZjBxU3MzTQp3VHJ2Y3FuU1FxTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUFNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqCkJDUXdJb0FncjQrSDhXOWlGaHFNcCtoUG5IQkIxWjhETU5rNGN4WmdPWWIrY3k2ZVg0b3dDZ1lJS29aSXpqMEUKQXdJRFNBQXdSUUloQU5BTnNVSWZsSEZSUTR5KzZ4Tmt4bkR1RVRGK25HNVk0cHZ2ZWxmcHQ0cDlBaUI4NjE2RApqVnp5U3B6Z0VUeldYOWowTVpFcERoR1ZkTmhueTZwbk8zcFZUdz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "signature": "MEQCIBQ/KGH1iNMrfRcGiDXCmUGeVd8P9sgbDuiVAV6Yxc1iAiB4UP9XmYyKv19AipyYd/2G0aystf6BmIBp2BsDt5+7kA==" + } + ], + "proposal_response_payload": { + "extension": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "1.0" + }, + "response": { + "message": "", + "status": 200 + }, + "results": "Ei4KBWV4cDAyEiUKBwoBYRICCAUKBwoBYhICCAUaBwoBYRoCODAaCAoBYhoDMjIwEhUKBGxzY2MSDQoLCgVleHAwMhICCAM=" + }, + "proposal_hash": "qVG/Mk6kIVmXBvW+YWSeNrbUXh6a8vsIhP1jaTYSYzw=" + } + }, + "chaincode_proposal_payload": { + "input": { + "chaincode_spec": { + "chaincode_id": { + "name": "exp02", + "path": "", + "version": "" + }, + "input": { + "args": [ + "aW52b2tl", + "YQ==", + "Yg==", + "MTA=" + ] + }, + "timeout": 0, + "type": "GOLANG" + } + } + } + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "extension": "EgcSBWV4cDAy", + "timestamp": "2018-06-22T03:29:47.027571880Z", + "tx_id": "ac57322579c0823888cd124cf058daabae34c0a154fa6ec00692922a1aa911b1", + "type": 3, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "Org2MSP" + }, + "nonce": "z+AlpPDqtqGg/X6Xxit9oQE9T2iuMsPs" + } + } + }, + "signature": "MEQCIDm4surGyLraBXx6S2SGMzQrPUpNG5oF8SJQJnPCxNIdAiBrf9v7yT38RTwQrdXP6MXYH0Nkd/EQSCnIpx8rwclmWA==" + } + ] + }, + "header": { + "data_hash": "iFNtdcPs77nKID6Rz2CXpSdSpXG//m51Lg+YpoePSHc=", + "number": "6", + "previous_hash": "XZqCwQUFOD4zbSza37MXr5Z14B4e+V0Yf7OthBK8XSk=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYpQCl5YQ6w96m+nRkFRBFaydv2JrsY+z5EkYwRAIgVAwmhhLg8wvKSm7JBzM2AqpWjmt5qD10y/EJ1VrEn7ECIGoAgre8u4+fc42HX+lIekBfjMJvQs8rG3kRdt/rjhcB", + "CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFLL0RzTGo5TGtsaEpNT05kT0J3T1Rvd0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFcXRSNTh3ejZ6WHprQXk0bTJmckpqOWVrUFVlYXRybkJ1czNNWHpJYTdBWEV3TktDClBXYUV3WFJueHZqSzNsMm0vNW93TEJqYTJlelQ0NHYzdytwQW9hTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnVVFIdmhjVGtjNU1Pd003TU1VaUVTUTFOelpWTQp5Kys3aTZIT0tMV3FISlF3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYkxuaWRoSk02NU9qK3F1bGpKY3p5THljClFqcEVYTVR2Y1ZySFNDQlkweG9DSUM1eGU1cDltcCsveXoxNkRzT2o0dmcwWGk0U0QwMkkwS0hqK3JXYW5ZaVkKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGPg1xrr3gLj1As3q/PZ1yZInloNHMKXMvxJGMEQCIGwydSbnZ536QyIPPSYysQOCyaMb8srdCaFZUPp5xHRbAiBisBiQjGy1mFi+311zXKHkqEga3ULCC0//mpwyAV/1ww==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_7.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/businesschannel_7.block new file mode 100755 index 0000000000000000000000000000000000000000..61ca8d7a1f8bad0c3c3953da17a02c5475147f1d GIT binary patch literal 24861 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 TRKHusZy#&f|4B*wIQl;U-zb2X literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.json new file mode 100755 index 00000000..78ad259a --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.json @@ -0,0 +1,213 @@ +{ + "payload": { + "header": { + "channel_header": { + "channel_id": "businesschannel", + "type": 2 + } + }, + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "1" + }, + "Org2MSP": { + "mod_policy": "", + "version": "1" + } + }, + "mod_policy": "", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "", + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "", + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "1" + }, + "Org2MSP": { + "mod_policy": "", + "version": "1" + }, + "Org3MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "", + "version": "0" + }, + "Readers": { + "mod_policy": "", + "version": "0" + }, + "Writers": { + "mod_policy": "", + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "", + "version": "0" + } + }, + "version": "2" + } + }, + "mod_policy": "", + "version": "0" + } + } + } + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.pb b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/config_delta_env.pb new file mode 100755 index 0000000000000000000000000000000000000000..ccb8ef41ba4a687b26a6790638a11a29af9eb36e GIT binary patch literal 5802 zcmeI0d#vPC9mjVsaChnQSY~B`1@*dwM|RNZyyu3Xp1wQn=}aFpot8k-c4pe?yq|q2 zCZHrnC4v#e5Fp~lS0XVnLd0lLLsVkoV@(jE;36i(_=gySE|Oqp<~~+-*dP-cnyyI%6g*F_i$TdxxUVZE=oqRo)wZj0zsPw$qI=%5U*CDPliCkY@r%GNx|EK zW73_jnJ!KZmGmhWRF?NFg{VgNS{RL3U23YOI-!;-__P9Q%YeQ@((8d9vQxe0IA#qS z>vGmLQ>f1nz*xpWg-i(!!go&^=rN8ZK*jb1mkl5R1L(3Db>8RB`^fBOAELV07>Z*L z7d4_PiZtmJtCf&cV6Dk*Bpl6s)2S=Xou zt{IYL2+-wVAJSUNALwcpg;K#|mME?MKo+~7 z6o?ZQ5xeyJM_)?aY`y1epTq8aFZlHZcie;?`R&i2-gzMQ{8h*oEyLZOUUnnp+SK!K4b0Ns6d0;Pc9&QW_v(;%$T8(jR$3X;H1@&&LH^1J4 z?2;Nry)oKosH4_o(KvAL{@C67|MO+H@87+0>bJ!nx_I$1>G{XpbMb+{??cX-U;brZ z?C8GOv-`Gh{^GQ(5a+CD47XWPF2eO%NiC;GWvbS#iVcBfwMa|<16IH@WyJ}BZ;BP+ z+sz6cV%Cxs4iqC+_F$0hG-zsK(SC>T3Nuq7Er|6OF$nOXqNT{`$pf+IVUWgxAuYqq zITE%3^LEC$0>%fiAV`^#YhW5 zkiZ4eZXPeh!g^vG;v6_$7|5nF&RiIFB#a8qibT*%cUp)pRWuj&VA34(*g%T((96>* zwoaNwb6sZ3iq#@VB5T*E8Q=7B-DHtR<#;NQ*YPCNG+cxqR)*fpASI}?97^^Kh@L9T zVizE1%M3`xR_DLjT=A*X3Po1tsVBZE6tRw3rlg2@vC*0pd|}XodO#6?!)$x#wB1r! zj4X?brRJLpd8^)T)7l}&dAl>=_4W?*p<1W?5P4%}g9hcHeu)67$f9~MjO?oG7*Sua z=u_H@K4jhr8O_H-P+S^dO#z*%0ww5?OIOK~-hj~5$ZbZR*z9&3C}|!A7Pgi_NH3{q zYQ~m&MaS$411lxWpw#xL$iGFtmm_^F^0!uaf)m}atwPU&-O+_Haa@(`nD)IldCFnr$XGVg;u=OEAp|&UUjR;F|-4lch0l z2}Z}%>3*x`cw;e9tZ8kZO_u^gXhI4-iEX93o0$eFiXsbvMq^Z^UKD{x%;zql%F^Rj zJTT8&As8&wCuT_27VY#{&R5OaOpxk5#2WZ+cTgIZi(z20gE5!K8D~@w*9R$ziI)T*ilgySQ85z9i~g;AT($Vw8z693uk<%m?*NNSrxP}0!Qh7cQlLlT%tHm zxI`wX&eTE>M3j84r=SBHzVcvl%VAyFN^Jttw#S>cJDZF zek}5wQN=j7hsz^3q@1u-2pCM%z{x}OSMh4 zGZmu(AJIed^{(Ah6`)|YwE=M!+XgzsFi*e%5Gkrrt{OALNAk5{u8d2P$#=pcB!(l0 zP1K5tRjDyuIf zzhcn5{ek|KK61rp#mci!u3US|IpMiCwPQ3&uDox@Yp-0iW0v0ao^#qic&PZ`*#{2q zT-!t4^!!)Pa`nk=y<18vYrWYM$39cJ@TZ>wyUEw?e&*%TeeA9G9eHv1;FCXVAHDjn z2V!5|g}ie%wK&9jQ}yOMXH)N-O>Lak#x8xXah641+Pvj|~%pQID z!%u9e^zdVQFMQWUKU}-}SmW{M?aq}u{`oKdE5CdB#r4AyKW#=$2Q%)qCb%?9VX@C05q3W9P>Ibm-t?zZAco`{thN z;p@-;!^gh8|3>*%`^e3Ao%h`@uB=^m{W0y1wV&+2Gxf)j_xZn$UwwG=!jVUcAOH0I L?)P4~rF7`u|Gp}h literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block new file mode 100755 index 0000000000000000000000000000000000000000..c803a93ba1c9e8a7327116359afd64b008c8de6a GIT binary patch literal 12647 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 bD^581Y6U0pCvNbw?2I~oyeHsu`|tk&c!X0S literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block.json new file mode 100755 index 00000000..b201d2a8 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.block.json @@ -0,0 +1,623 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Consortiums": { + "groups": { + "SampleConsortium": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "values": { + "ChannelCreationPolicy": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Admins" + } + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "policies": { + "Admins": { + "mod_policy": "/Channel/Orderer/Admins", + "policy": { + "type": 1, + "value": { + "rule": { + "n_out_of": { + "n": 0 + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "version": "0" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "0" + } + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T03:27:29.000Z", + "tx_id": "1c28acff98b8516b885a19470f38442de8dd2e6692e953c7a25c668960543e7a", + "type": 1, + "version": 1 + }, + "signature_header": { + "nonce": "l4KVdPr44GTPRGzTMVEQ9E6JTzW5AYBD" + } + } + } + } + ] + }, + "header": { + "data_hash": "gncBL+kD08pI0fRE07oZ7aJ7+6dasYY6Y+JYGa+w7T8=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.updated.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/orderer.genesis.updated.block new file mode 100755 index 0000000000000000000000000000000000000000..3777b1ee59f9dc8b8a35d0b76dfa7f85df3acf3f GIT binary patch literal 12647 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 bD^581Y6U0pCvNbw?2I~oyeHsu`|tk&c!X0S literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_0.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_0.block.json new file mode 100755 index 00000000..b201d2a8 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_0.block.json @@ -0,0 +1,623 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Consortiums": { + "groups": { + "SampleConsortium": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "values": { + "ChannelCreationPolicy": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Admins" + } + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "policies": { + "Admins": { + "mod_policy": "/Channel/Orderer/Admins", + "policy": { + "type": 1, + "value": { + "rule": { + "n_out_of": { + "n": 0 + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "version": "0" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "0" + } + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T03:27:29.000Z", + "tx_id": "1c28acff98b8516b885a19470f38442de8dd2e6692e953c7a25c668960543e7a", + "type": 1, + "version": 1 + }, + "signature_header": { + "nonce": "l4KVdPr44GTPRGzTMVEQ9E6JTzW5AYBD" + } + } + } + } + ] + }, + "header": { + "data_hash": "gncBL+kD08pI0fRE07oZ7aJ7+6dasYY6Y+JYGa+w7T8=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block new file mode 100755 index 0000000000000000000000000000000000000000..9fad578955f7dfa35f6a057288cd696464aa2b10 GIT binary patch literal 18426 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 Z%zJ)z-PTt=vHt`8^1V-<1~z~V{{xc>*98Co literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block.json new file mode 100755 index 00000000..a8370088 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_1.block.json @@ -0,0 +1,808 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "1" + }, + "last_update": { + "payload": { + "data": { + "config_update": { + "channel_id": "businesschannel", + "read_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "0" + }, + "Org2MSP": { + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "", + "values": { + "Consortium": { + "mod_policy": "", + "version": "0" + } + }, + "version": "0" + }, + "write_set": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "", + "version": "0" + }, + "Org2MSP": { + "mod_policy": "", + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + } + }, + "mod_policy": "", + "values": { + "Consortium": { + "mod_policy": "", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "signatures": [ + { + "signature": "MEQCIElS1Da0d9ZxoficwiWTBMrzYasvMDwGzYMGngD2hInJAiA6bATC78MgiMW2nFZwBxbwlQUm6XYfPL13fvujNorKmw==", + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "MDyu/ocV35EAQkQASnLH1GlqobT8ujpA" + } + } + ] + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T03:28:37.000Z", + "tx_id": "", + "type": 2, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "mspid": "Org1MSP" + }, + "nonce": "65GHq/+CxWV5gLujzuBZ7YSGgcQopm3Y" + } + } + }, + "signature": "MEUCIQDtmCyk8n5F52jn1xHMHozudm2cWvrWza/1qtEYVzu6HAIgJYO+Pn1xEnuMhIYoeZgjRuZbU+XbrKEbdIBU0ilKuk0=" + } + }, + "header": { + "channel_header": { + "channel_id": "businesschannel", + "epoch": "0", + "timestamp": "2018-06-22T03:28:37.000Z", + "tx_id": "", + "type": 1, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "9BURt/uaNVZqS9uc5UMJwlKYUuxGSgE0" + } + } + }, + "signature": "MEQCIFwGveJc7OcXZgdwGU8crN2/E9FKhkaI+qnFk1EInvVlAiBmvmwVkHWoaGvRE62mjs0PU93XLo6TByeQzOlyLU6AHQ==" + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T03:28:37.000Z", + "tx_id": "", + "type": 4, + "version": 0 + }, + "signature_header": { + "creator": { + "id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "mspid": "OrdererMSP" + }, + "nonce": "4ZFRLsLdFlc2iRBc0cqHPc1ypZvPi5nz" + } + } + }, + "signature": "MEUCIQD3faIJhxzRiPPH+NyovS2gTLhJ6sYyGRrsmdMiLnsIWQIgBzUXSwJNCzveXo3cWkOeZuBlO9TskxjmFG+GPqzVkH8=" + } + ] + }, + "header": { + "data_hash": "QmwnCYR63jZ5rchSha1BQWEpIxBikuEkfxhk/0YOW6Y=", + "number": "1", + "previous_hash": "w+k6lAERZtNq41/kJ4N9XcTP1hAvjWzuqoYVubpJaaU=" + }, + "metadata": { + "metadata": [ + "EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYdQsigHFxbGeclGq6Kn5mZxj9RAyL7R8TEkYwRAIgct6SFk5slNEXMZinktJs8bBJpWTHzRB7tn5k5oqgb/cCIE6ywQQKQtF/F3VBZLeZ8p3z7G+Tss8HzutUjR2kZuJU", + "EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQUsvRHNMajlMa2xoSk1PTmRPQndPVG93Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVxdFI1OHd6NnpYemtBeTRtMmZySmo5ZWtQVWVhdHJuQnVzM01YeklhN0FYRXdOS0MKUFdhRXdYUm54dmpLM2wybS81b3dMQmphMmV6VDQ0djN3K3BBb2FOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWdVUUh2aGNUa2M1TU93TTdNTVVpRVNRMU56WlZNCnkrKzdpNkhPS0xXcUhKUXdDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdiTG5pZGhKTTY1T2orcXVsakpjenlMeWMKUWpwRVhNVHZjVnJIU0NCWTB4b0NJQzV4ZTVwOW1wKy95ejE2RHNPajR2ZzBYaTRTRDAySTBLSGorcldhbllpWQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYAdnIpaELHUSJ/6FPHTPpx4qV9aSltO+zEkcwRQIhALR4Q1n4ZzOBMuZh+mD+EvIkGnsItsZ56b5wAdeM7XxbAiB69fw4Qa2UyXhNr7BX16Msgm4OYycfgmydeABJUWKNng==", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block new file mode 100755 index 0000000000000000000000000000000000000000..c803a93ba1c9e8a7327116359afd64b008c8de6a GIT binary patch literal 12647 zcmeHOO^oYUR-W#D^Sb8t&pf$%)ZGOP{fb|8)Dy>v^E1+jx&C+JYsZNl$6ktB;JZKg{Mk#fyNDg%3Z_B- zov#-hqG~yVL9J?6$wJw#R!OT+D^>78v05q-eYe{06K=U&BitHUbSf4>I^}Y;R>sLv z(XCk6DfZ@Xe&aXd|M>TR?0>|JKQ5>bekA{@LjLh{@6p%?7I@#nzHMQD@&@^`&L7Yi={CX@+8zHXSjp-8S1g zV+@jU)E(=VXRTO+12w8a1-(44O~*J%DW0*Il7-QvW+|P#9k0p(H7*rqsX|r=Jt#vn z9Z1!X8pZe|7?#Fp89~C9B*i(zN(`g$Knri?CFx8?6 z@u59}f?^G%G9hz=ve8)S6f)-RT31!8^+La?_ebj2z6N#(U}feqD$f4v^SjAwKtpR8 zXl(ij8d!o{D_EDswr+?gX|9mst%)ikPRxnY!U20UZuGyBYLW66h<4VTw42aCgb))pY+-DtYBoL3sMjMzoOc)MfWgsPCI zVCMTgH^V@}gDqgrK|mu2lSZ;L98$EJh#~ZJRap6sHgZU$B&dRr9YJW;8!2pWSNm!HWCr%<2Q`yz(}MqSA2 z(27aYACG(|1I$XA>y=T@Msh2x5WF?rbhWNDZp$KP&)K3t+5uOyj|FWYt-uV>(nIJQU%M z6qU#{ge}yaqJmdjb;Fz>EhvuwW`XM99XjEbXdJZaTveoFJ9W^aGtz83ZcRLXvm$e0 zQbVH|8mihXAjE)1wb3W0X<(lfy$L9 zy0@T3o-K>bdYQ0-%D^XkW_u`0s%cDX(~0Huh-T5(@Fc3TLZ@;Km`?A*{v?<#&Pw3? z74{DH_Q`YDk7Fm;{p|PiC!afgfW3N=wQU*a`Kls#vE^DB`&(c?k9|2aKfSQ*RqW-9 z%PuZ5=0W_a7QJ(R#nUf?mnkbFxmqxB!)1)UiroXx6N|%}pZ+9xjrOhS)E&1nGCU8Q zI0&Z;?Br_#!n9ol(ac2YqY1ZR|<5ho_0X&x4n?`wZuC zu$(Ng-{!IJbKpVSnnYvw(FFFV9QJQ#TcYn3wzU19&rbjR;hxri?;-ZVL+t&Bk0w95 z(H*y#jGnl&NA9?8b!tI_(4u~q9htb0p=2=+FS%nUeb(-n*I;+=97B!eYnxuW_g5F( z)mmVnb|8JHBQ;A5rsy#qpSfoTQQ^)8Wd2#(`sS+*Z|3`efQEo^0Z^QSqnD%7Ce~It&Y8^RZu3FK@w%wqkmEnO%U&1jzSmNobMK<6pke3i` zD&dy!f0FNe8Q<4wQDx$Ky*5{o9u3%b4)CK%V>Ba4Z_O>;EV+yLT1heE`i2@1tSWlV zE^g+-5i=EJN|l>&d+kSacAhgsE*C1(1+au(FKRUUIUik1_`h`{q8dAb^N8?sS^84l z2)&l$jwVB8)DlKf;qlOOehQyymi(!X;o%g5tB>LBi4Hh0ou?%_S)#vZI!B_TRug8= zk|Z|i4YPE6Y){p-ki!1CGeF$vkQCH5;3|i3Gtp5w&TV$Am9++y?yTITTP<4}r**{4 z=DwKk)-^}(3d7V)tn#Sbu~jHE$_uOARmFyur2?|Y^?C-OmUA{R+T22D&W%v7a3PK- z?esFyp-M1ewgj(*Yx|5rOfp6@-);#AZN%0Y7gWu0YdijQRv6XDK$F z8WRm4gtW*(8&r`@y9qy2x>mdI4m`2V&YE1(D6{Q;-3t-5=?vFJI=+U`T*?mq=0@k?YQnstFEWJSZzagZ)?*(B8P9V7;`}V$Ma6D&XQD~=B{4eK-!6!?O7p00%=7^UJ zKTVD(pq(22>~h4`DB-rM@m369Q&}b1*&GVLkE*Ll!tVuh2C(a$pntXD6Dmm;3rV0m z@m2|)PaBIuQK~r}H?E4@c-C7ioXwDAHHw)r_1tuU$2rPxn=`yJMWvEF?gd8CH5my& zr>IXyOPv=Hl~^j?)Zt<@lLv^yuc##PlS4JNuBsw}CJ!i1@7L8ViQKE@=SifVm4mX< zYzm|8!xhvLn^n2Ic_}AUjatC@GZf|g=2W0E-KSS&kUT0m>z=2WcFx(9-EQfU)_1Hh zS(PS5;%r(bwHymmx9Q&&1jq~2-%Y=Y9%R0)`G=pk;>kXfK53XOvu4 zynAV1$!DQqio2T2Ei}wahF58rr7JYd(pJMtZWRIv-R#v+LZnr>DmtEIpLbL&4-Wpnrm_vM}gqBi7`gy(t*RizN z*c-H&wH2M3mx85j&P}s9(##E;7V~ zU1mKa0qg)R>U6DHkg#3VCssj`N|C8ZlFUtV*Y_kmjq0-PQMjnO zpwKAT=2WRv_A{E~N}apMmOfDQL3Ss4ka` zZ=<@1?7VGE*bf!nOPQOIjjGJ`Wq$|a5z<=i^S6vCc1FVHojxb87jV32IqAwZ!Z zx2kg$$zL;(&rQWTTJpnWEjRl9zWe98V!+d>F7<}D-tbx_tb`y*lZBs4OxqWVnw_~8 zlWGB2IN`93v6FZEn8wu&0P=?ob|MWiCsxE(hAKVeX z8@e9=x+8pdgzt8Q@2I$Z{|;C;wiVq0>n@YJZ6@`Y+HxE1WGiQUTJ2=J<|xqIO47Nw z;-I#iejR-2ym^S8ySo;eW;hO9U;0__K(H2mF!kWr3$tb`e}ZA#``@=r9v;={yWp)| z&k$q9*7<^VJYPETa=vSMI{EMH>x)No5j;5GFYNc{?qZSkPm$Oucr)Dp2f$a{^{#X1 bD^581Y6U0pCvNbw?2I~oyeHsu`|tk&c!X0S literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block.json new file mode 100755 index 00000000..b201d2a8 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/testchainid_config.block.json @@ -0,0 +1,623 @@ +{ + "data": { + "data": [ + { + "payload": { + "data": { + "config": { + "channel_group": { + "groups": { + "Consortiums": { + "groups": { + "SampleConsortium": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "values": { + "ChannelCreationPolicy": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Admins" + } + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "/Channel/Orderer/Admins", + "policies": { + "Admins": { + "mod_policy": "/Channel/Orderer/Admins", + "policy": { + "type": 1, + "value": { + "rule": { + "n_out_of": { + "n": 0 + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "version": "0" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "0" + } + }, + "header": { + "channel_header": { + "channel_id": "testchainid", + "epoch": "0", + "timestamp": "2018-06-22T03:27:29.000Z", + "tx_id": "1c28acff98b8516b885a19470f38442de8dd2e6692e953c7a25c668960543e7a", + "type": 1, + "version": 1 + }, + "signature_header": { + "nonce": "l4KVdPr44GTPRGzTMVEQ9E6JTzW5AYBD" + } + } + } + } + ] + }, + "header": { + "data_hash": "gncBL+kD08pI0fRE07oZ7aJ7+6dasYY6Y+JYGa+w7T8=", + "number": "0" + }, + "metadata": { + "metadata": [ + "", + "", + "", + "" + ] + } +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.json b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.json new file mode 100755 index 00000000..654555bc --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.json @@ -0,0 +1,746 @@ +{ + "channel_group": { + "groups": { + "Application": { + "groups": { + "Org1MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org1MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org1.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLakNDQWRDZ0F3SUJBZ0lRRmh6aTh5SFpSY2VrbWpPa1JIa3AxekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NUzVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUd3eEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVE4d0RRWURWUVFMRXdaamJHbGxiblF4SHpBZEJnTlZCQU1NRmtGa2JXbHVRRzl5Clp6RXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3Foa2pPUFFNQkJ3TkNBQVFGRmVQVmF2YXgKN1hxNlBDUlJiTGx6Sk1EcXJoSS9YSlRjVVhIanpZd2E2azZWYlFBSEs2c2FTWFFJS1R4U0tOZ0ZaWlcyUTYrYgpXU0ZzSFByV29VN0ZvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3REFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WCkhTTUVKREFpZ0NCa0NUSENQdk8xSlcyeWdxYjFvS1ZMZ0pSbjd0TTcwZVNnS29qYmdETXU2REFLQmdncWhrak8KUFFRREFnTklBREJGQWlFQW5MalV6THFGaGg0VWtlZ1c5d1VWM1M3QVljS2tkMkJOemlpQ3pXbVQwZm9DSUZBYgo4TU5DZXdHcU9YYVNkZWZnSVNFcVBGd0s2RVNkSmdvTUJ5Vmp4M0N0Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org1MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUphVjlpSzJUcGRYRWtZMEgyekFzcm93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakkzV2hjTk1qZ3dOakU1TURNeU1qSTMKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkFqTGIvV0x1V0xyMEtLV2czVi9rbmF0ekhKemQ5ZkRmc0Rsc3h6ZzhUcTJnY1Z6SVhUQ09QdE1PM3lmMGRFQgoxdDR3cjBXaWI3V1RlYVFVZUVNVVNrK2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSUdRSk1jSSs4N1VsYmJLQ3B2V2cKcFV1QWxHZnUwenZSNUtBcWlOdUFNeTdvTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEdEpKOXJRTVVwZkVTKwpHa21La3E1NWd4RnVlRFRFcEc5NE9ZdEp5QmYyRVFJZ1BYMFkvb2tEbkhOQlFOUHRTeGhwckVyK1lvRitvT25zCmFIWlpwS0tkK2hNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTakNDQWZDZ0F3SUJBZ0lSQVBqM3Z6YzYydDJFN01EWUxPM3FsdGd3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpFdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJM1doY05Namd3TmpFNU1ETXkKTWpJM1dqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCR1RWaUlJOHFJT3doRnVXSEg3NCt1WlhMUlJoSkFKTHdGQms5blRpNXdKSFIyWmNpaFc4MmZoZQpyUkQwYmdaTXA3MmR2SCtxYkMyYm5jd2xwZTFLSFZxalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJREN4c0JpSTgzRGYKelp4MDlTdGRGM3pjdUo0S1VHRVlRUThEMmNVYUt1WEZNQW9HQ0NxR1NNNDlCQU1DQTBnQU1FVUNJUUNBY2k4Vgp3YlQ2VjBEaFU5cEpuWXU0SW9sTzdIc1V6cW0xcTJ3U2ZhSTVXd0lnVjlsdkw2dWlkcW5mdXp0UkV4RzJyQWlJCnBsUU1lRmtkR0dNZjlkV0dGeWM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org2MSP": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org2MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "AnchorPeers": { + "mod_policy": "Admins", + "value": { + "anchor_peers": [ + { + "host": "peer0.org2.example.com", + "port": 7051 + } + ] + }, + "version": "0" + }, + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNLekNDQWRHZ0F3SUJBZ0lSQUxubTYxMDlHNnhqQUNYTXN4VTkvZW93Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCc01Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFUE1BMEdBMVVFQ3hNR1kyeHBaVzUwTVI4d0hRWURWUVFEREJaQlpHMXBia0J2CmNtY3lMbVY0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFWEV4OXFIcHkKby9hamFESStNRzc0TXVMcDVoL0c0QXh0THN5YnlNeXFTT1VCcjRpdWJZcllZUHFUQlVVS2xKdGNnSmc0Q0l1Zgp0TkRmb0V2b2ZVNHpMcU5OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEClZSMGpCQ1F3SW9BZ3I0K0g4VzlpRmhxTXAraFBuSEJCMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkkKemowRUF3SURTQUF3UlFJaEFLZE5ZdVJUU3FPeTAxbXBsU1dJZXkzT20wd3dCL0UrdWhLK3BXSXdFdUZqQWlBVgpUcFZYYXEzQlU5TEszai9sblU1VkZKeHV3aHdhMU9MNHBZT0xMTkZtK1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "fabric_node_ous": { + "client_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "client" + }, + "enable": true, + "peer_ou_identifier": { + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "organizational_unit_identifier": "peer" + } + }, + "name": "Org2MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRakNDQWVtZ0F3SUJBZ0lRY3J6bU5yL2hvWncvWnA2bEY1b08yVEFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhPREEyTWpJd016SXlNamhhRncweU9EQTJNVGt3TXpJeU1qaGEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKWG1ndndDL3pLczEzTDljZ0ZsOElGbHFac3NjeWo1RVRCRHFESituczB0K0JoU1lxMDduTTQ0TmxaaVczZVlETApBYzNVbmt1VUdJTUJ3YVEwUFVBc2txTmZNRjB3RGdZRFZSMFBBUUgvQkFRREFnR21NQThHQTFVZEpRUUlNQVlHCkJGVWRKUUF3RHdZRFZSMFRBUUgvQkFVd0F3RUIvekFwQmdOVkhRNEVJZ1FncjQrSDhXOWlGaHFNcCtoUG5IQkIKMVo4RE1OazRjeFpnT1liK2N5NmVYNG93Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnYTdQQjUwZWR4Y1pFS1p6YwpLNk40aXBZYllwbHdzMk5nTDdRN3c2cGFzRTBDSUJiK2MyQVBOcGZtNmtwVU9MT0drV0grZXQySEdKYm56VEtkCjNldDYwbUJjCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWZDZ0F3SUJBZ0lSQU1vYzFpdWVESTBETlpNMkRCeVp6Mmt3Q2dZSUtvWkl6ajBFQXdJd2RqRUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIekFkQmdOVkJBTVRGblJzCmMyTmhMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd05qSXlNRE15TWpJNFdoY05Namd3TmpFNU1ETXkKTWpJNFdqQjJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRQpCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHCkExVUVBeE1XZEd4elkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDkKQXdFSEEwSUFCSUVyU1dudGljMjFpZVA5ZXBvR1RMd3FBcWFMK3djTHArZUo1RDFvWlRyMUM5MjN4WkRCaVc1RQpEUUJNaSt2SkY3TGh4RHBoRm5JSk11R2p3eE5LZGhpalh6QmRNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WCkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUVJSktneHlHVDdvN28Kd3p3c2grd1liaEgzVGJHMXBZQlAxRkxmdlVaV2EzMzVNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQ1hkWTM0UgpVaUlsQmcwTGtKWTFpSEwxb3N1Uk9QZW1WeVJRUS9kVFU1aWRBaUJaS0V5NSs0QTVCNEwxYTJVWkl4aVBiRDVHCk8vdndEbWJvdDh5TE1VRkg2QT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "1" + }, + "Org3MSP": { + "groups": {}, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "Org3MSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUpmUVVxTTJoNW1LeG4rTDFHZ2JGNUV3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk1V2hjTk1qZ3dOakU1TURNeU1qSTUKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkZ5TkthZFVBMVp5N2h4NWtvTGU4NWFxS1NkWFY2NDgKQ0g5VXZRTkpSb0kxbXM4WjQydWE4VHEwS2l5WkQ4Y0NVdUFwdE1JcWpQK0Ixems3SHlKekxDQ2pUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSURyYWFMVjZLVEYxCm9hU29JM2IxZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFEeWYzbGkKWlJVWWpNbk0xYnNMQnBSYmFFbjdHV0I5RWJKYjlTSVBUY2lFclFJZ1hGdkxmdzZtMUpMMFMrMi83WkMxSGZhagpMcVVxd3ZhRVJNWklLMEVuYU0wPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "Org3MSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNRekNDQWVxZ0F3SUJBZ0lSQVBKTTlYT1dQM3JQRlhtVlFlTklJWXN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpNdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaek11WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TmpJeU1ETXlNakk0V2hjTk1qZ3dOakU1TURNeU1qSTQKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NeTVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk15NWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkdwYWpVZ1JSZldtc2NhNjdHZEtiMnNNL25kOEtPVDV3SWxja0FZMTV5ZTRIVzJCcHJBalhXMyswSGo3VzJsTwpSSHpkTmZOR2cxVmNTYUZ5Zmg0MjNoR2pYekJkTUE0R0ExVWREd0VCL3dRRUF3SUJwakFQQmdOVkhTVUVDREFHCkJnUlZIU1VBTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSURyYWFMVjZLVEYxb2FTb0kzYjEKZUxGTkFGTGwxWUlwZkxUNW5HUS9vNU11TUFvR0NDcUdTTTQ5QkFNQ0EwY0FNRVFDSUVkTjFQQVRkUzAzTUtFRAp4djNYQU5uS1piN3BKNjRLYmFFUFJFdEFDOWY4QWlBNHNXUFpSKzZUZUh4MnpTMk50c01uOElrOHpIeEJUZHJ1CjJuYjBFTzRNa1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNTVENDQWUrZ0F3SUJBZ0lRZEJjYlJUUTdRZWl2OHhOcG5NWnlGREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTXk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTXk1bGVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXkKTWpoYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN6TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN6TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVOQjFWNmNaSk1aR2RoN1U2Q1BrcXJGMHV1bmhMS0xVK1Zia0g2cklOaG12L0hmdENJbTVRQUxmcApLU1JzTGNOYWxiWkdvaVhod3NRL0pYWWt4STNPeWFOZk1GMHdEZ1lEVlIwUEFRSC9CQVFEQWdHbU1BOEdBMVVkCkpRUUlNQVlHQkZVZEpRQXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWczc1M3VmJYdk5SZG4KY3B4am1wT3FQSnp5Yklwc0s3Q0hocjhROXAyRkVMRXdDZ1lJS29aSXpqMEVBd0lEU0FBd1JRSWhBTGMwY1ZXOApEbUpzQmZCeWhaTTNPc3l6YUdZQWtzcW5JTXZMbEovSklydlZBaUJEQzBHb21ydituakRKcy9qRDR5VnZXOHkrCnQxYVArNENTV0tRR1Nsb3dkUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_2": {} + } + }, + "version": "0" + } + }, + "version": "1" + }, + "Orderer": { + "groups": { + "OrdererOrg": { + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "ADMIN" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 1, + "value": { + "identities": [ + { + "principal": { + "msp_identifier": "OrdererMSP", + "role": "MEMBER" + }, + "principal_classification": "ROLE" + } + ], + "rule": { + "n_out_of": { + "n": 1, + "rules": [ + { + "signed_by": 0 + } + ] + } + }, + "version": 0 + } + }, + "version": "0" + } + }, + "values": { + "MSP": { + "mod_policy": "Admins", + "value": { + "config": { + "admins": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNDVENDQWJDZ0F3SUJBZ0lRQTRBRlJpeFFwTm9PUDd6azNTditoVEFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dWakVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4R2pBWUJnTlZCQU1NRVVGa2JXbHVRR1Y0WVcxd2JHVXVZMjl0TUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJCnpqMERBUWNEUWdBRWk3aE5hMkVmTnZ6K25ESWdRSVcxa3lMNjR4aGFPMUtXMEZnRExOWmVIN1ZkQ0lqYTh3b28KRDBldUcrTjNNbGE5WjVYZ0ljVi9vSlhmeFNLUGVDTi9PS05OTUVzd0RnWURWUjBQQVFIL0JBUURBZ2VBTUF3RwpBMVVkRXdFQi93UUNNQUF3S3dZRFZSMGpCQ1F3SW9BZ1VRSHZoY1RrYzVNT3dNN01NVWlFU1ExTnpaVk15Kys3Cmk2SE9LTFdxSEpRd0NnWUlLb1pJemowRUF3SURSd0F3UkFJZ0wyWVEvMjc5RU1BV2YrRi9xTnNjMUpySmRJRjAKRFFzTlFqYXQ1NWhsa2hjQ0lBdkxyVTdrWmJNTlJvNzJHYW55WFRYTGxTTklGYnJFM08zRVR1OGdnYitWCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K" + ], + "crypto_config": { + "identity_identifier_hash_function": "SHA256", + "signature_hash_family": "SHA2" + }, + "name": "OrdererMSP", + "root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNMakNDQWRXZ0F3SUJBZ0lRUmt0dDJZb0grVHFPNXcya3RLY2pvakFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFl5TWpBek1qSXlPRm9YRFRJNE1EWXhPVEF6TWpJeU9Gb3dhVEVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdGNHeGxMbU52CmJUQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcW5rRGViU1lTVURXZndscFhsVWFnYXZFV0YKOUJLQmlaL0dUbmwwNUJPZ1dzbjUxa205YU9WL2J0djZpQmw0MXF6TzU3MlVpNkFZemZMOG9Ca3QwbWlqWHpCZApNQTRHQTFVZER3RUIvd1FFQXdJQnBqQVBCZ05WSFNVRUNEQUdCZ1JWSFNVQU1BOEdBMVVkRXdFQi93UUZNQU1CCkFmOHdLUVlEVlIwT0JDSUVJRkVCNzRYRTVIT1REc0RPekRGSWhFa05UYzJWVE12dnU0dWh6aWkxcWh5VU1Bb0cKQ0NxR1NNNDlCQU1DQTBjQU1FUUNJQTIyOHppVGZmQnkyRTRrbTl0Y2Y2ZHQvVC9wM0xJM1pRM0NjVlNXcE1yVApBaUF6VHBwTUdvYmtBSE9hZkw2Mk5GZjZXS3ZVQk1XclM5WFFROEoxZFBVZGtRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=" + ], + "tls_root_certs": [ + "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNOakNDQWR5Z0F3SUJBZ0lSQU10S3VmMWVsWHh5V1Q2SkxFQXpEcEl3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB4T0RBMk1qSXdNekl5TWpoYUZ3MHlPREEyTVRrd016SXlNamhhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSTVhuTTFnOXZYbytITHNCZzIKWTFCVjBWQ3dGdU1saVJKRjhJQ3RiemNNc1ZrVGJidFJtZ0d5djUrb3c5TWtxTWpRVHFpMjYvWjc1Z0RXOU84cQo0cFpCbzE4d1hUQU9CZ05WSFE4QkFmOEVCQU1DQWFZd0R3WURWUjBsQkFnd0JnWUVWUjBsQURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDQ3kyRkJZbk9MSVBPWEN1ajVBckd3VWN1eEVnMElsR25KYjAzd1kKTmRtNTJ6QUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUEyMFdJVm90VHpwNENxS1FZSWhTT3ZRcjVvYlVNdnhGegplSDJIQis2bVVnc0NJR0U2SVBKNjJhaTdmaDVaWVNqTkxRWVduOW5tYWNaMlAzaFQwd3A4RUhWNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==" + ] + }, + "type": 0 + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "BlockValidation": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BatchSize": { + "mod_policy": "Admins", + "value": { + "absolute_max_bytes": 103809024, + "max_message_count": 10, + "preferred_max_bytes": 524288 + }, + "version": "0" + }, + "BatchTimeout": { + "mod_policy": "Admins", + "value": { + "timeout": "2s" + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "ChannelRestrictions": { + "mod_policy": "Admins", + "version": "0" + }, + "ConsensusType": { + "mod_policy": "Admins", + "value": { + "type": "solo" + }, + "version": "0" + } + }, + "version": "0" + } + }, + "mod_policy": "Admins", + "policies": { + "Admins": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "MAJORITY", + "sub_policy": "Admins" + } + }, + "version": "0" + }, + "Readers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Readers" + } + }, + "version": "0" + }, + "Writers": { + "mod_policy": "Admins", + "policy": { + "type": 3, + "value": { + "rule": "ANY", + "sub_policy": "Writers" + } + }, + "version": "0" + } + }, + "values": { + "BlockDataHashingStructure": { + "mod_policy": "Admins", + "value": { + "width": 4294967295 + }, + "version": "0" + }, + "Capabilities": { + "mod_policy": "Admins", + "value": { + "capabilities": { + "V1_1": {} + } + }, + "version": "0" + }, + "Consortium": { + "mod_policy": "Admins", + "value": { + "name": "SampleConsortium" + }, + "version": "0" + }, + "HashingAlgorithm": { + "mod_policy": "Admins", + "value": { + "name": "SHA256" + }, + "version": "0" + }, + "OrdererAddresses": { + "mod_policy": "/Channel/Orderer/Admins", + "value": { + "addresses": [ + "orderer.example.com:7050" + ] + }, + "version": "0" + } + }, + "version": "0" + }, + "sequence": "3" +} diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.pb b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/channel-artifacts/updated_config.pb new file mode 100755 index 0000000000000000000000000000000000000000..ca4855b768aa2155ffb01691ead1aebf1da76615 GIT binary patch literal 15319 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 V4+4J9=lA%kUjDcBE>0`p{{Zpca~%Kx literal 0 HcmV?d00001 diff --git a/hyperledger_fabric/fabric-ca/fabric-1.2/solo/configtx.yaml b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/configtx.yaml new file mode 100755 index 00000000..e55efb05 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/fabric-1.2/solo/configtx.yaml @@ -0,0 +1,204 @@ +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +--- +################################################################################ +# +# Section: Organizations +# +# - This section defines the different organizational identities which will +# be referenced later in the configuration. +# +################################################################################ +Organizations: + + # SampleOrg defines an MSP using the sampleconfig. It should never be used + # in production but may be used as a template for other definitions + - &OrdererOrg + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: OrdererOrg + + # ID to load the MSP definition as + ID: OrdererMSP + + # MSPDir is the filesystem path which contains the MSP configuration + MSPDir: crypto-config/ordererOrganizations/example.com/msp + + - &Org1 + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: Org1MSP + + # ID to load the MSP definition as + ID: Org1MSP + + MSPDir: crypto-config/peerOrganizations/org1.example.com/msp + + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: peer0.org1.example.com + Port: 7051 + + - &Org2 + # DefaultOrg defines the organization which is used in the sampleconfig + # of the fabric.git development environment + Name: Org2MSP + + # ID to load the MSP definition as + ID: Org2MSP + + MSPDir: crypto-config/peerOrganizations/org2.example.com/msp + + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: peer0.org2.example.com + Port: 7051 + +################################################################################ +# +# SECTION: Capabilities +# +# - This section defines the capabilities of fabric network. This is a new +# concept as of v1.1.0 and should not be utilized in mixed networks with +# v1.0.x peers and orderers. Capabilities define features which must be +# present in a fabric binary for that binary to safely participate in the +# fabric network. For instance, if a new MSP type is added, newer binaries +# might recognize and validate the signatures from this type, while older +# binaries without this support would be unable to validate those +# transactions. This could lead to different versions of the fabric binaries +# having different world states. Instead, defining a capability for a channel +# informs those binaries without this capability that they must cease +# processing transactions until they have been upgraded. For v1.0.x if any +# capabilities are defined (including a map with all capabilities turned off) +# then the v1.0.x peer will deliberately crash. +# +################################################################################ +Capabilities: + # Channel capabilities apply to both the orderers and the peers and must be + # supported by both. Set the value of the capability to true to require it. + Global: &ChannelCapabilities + # V1.1 for Global is a catchall flag for behavior which has been + # determined to be desired for all orderers and peers running v1.0.x, + # but the modification of which would cause incompatibilities. Users + # should leave this flag set to true. + V1_1: true + + # Orderer capabilities apply only to the orderers, and may be safely + # manipulated without concern for upgrading peers. Set the value of the + # capability to true to require it. + Orderer: &OrdererCapabilities + # V1.1 for Order is a catchall flag for behavior which has been + # determined to be desired for all orderers running v1.0.x, but the + # modification of which would cause incompatibilities. Users should + # leave this flag set to true. + V1_1: true + + # Application capabilities apply only to the peer network, and may be safely + # manipulated without concern for upgrading orderers. Set the value of the + # capability to true to require it. + Application: &ApplicationCapabilities + # V1.2 for Application is a catchall flag for behavior which has been + # determined to be desired for all peers running v1.0.x, but the + # modification of which would cause incompatibilities. Users should + # leave this flag set to true. + V1_2: true + +################################################################################ +# +# SECTION: Application +# +# - This section defines the values to encode into a config transaction or +# genesis block for application related parameters +# +################################################################################ +Application: &ApplicationDefaults + + # Organizations is the list of orgs which are defined as participants on + # the application side of the network + Organizations: + +################################################################################ +# +# SECTION: Orderer +# +# - This section defines the values to encode into a config transaction or +# genesis block for orderer related parameters +# +################################################################################ +Orderer: &OrdererDefaults + + # Orderer Type: The orderer implementation to start + # Available types are "solo" and "kafka" + OrdererType: solo + + Addresses: + - orderer.example.com:7050 + + # Batch Timeout: The amount of time to wait before creating a batch + BatchTimeout: 2s + + # Batch Size: Controls the number of messages batched into a block + BatchSize: + + # Max Message Count: The maximum number of messages to permit in a batch + MaxMessageCount: 10 + + # Absolute Max Bytes: The absolute maximum number of bytes allowed for + # the serialized messages in a batch. + AbsoluteMaxBytes: 99 MB + + # Preferred Max Bytes: The preferred maximum number of bytes allowed for + # the serialized messages in a batch. A message larger than the preferred + # max bytes will result in a batch larger than preferred max bytes. + PreferredMaxBytes: 512 KB + + Kafka: + # Brokers: A list of Kafka brokers to which the orderer connects + # NOTE: Use IP:port notation + Brokers: + - 127.0.0.1:9092 + + # Organizations is the list of orgs which are defined as participants on + # the orderer side of the network + Organizations: + +################################################################################ +# +# Profile +# +# - Different configuration profiles may be encoded here to be specified +# as parameters to the configtxgen tool +# +################################################################################ +Profiles: + + TwoOrgsOrdererGenesis: + Capabilities: + <<: *ChannelCapabilities + Orderer: + <<: *OrdererDefaults + Organizations: + - *OrdererOrg + Capabilities: + <<: *OrdererCapabilities + Consortiums: + SampleConsortium: + Organizations: + - *Org1 + - *Org2 + TwoOrgsChannel: + Consortium: SampleConsortium + Application: + <<: *ApplicationDefaults + Organizations: + - *Org1 + - *Org2 + Capabilities: + <<: *ApplicationCapabilities diff --git a/hyperledger_fabric/fabric-ca/scripts/env.sh b/hyperledger_fabric/fabric-ca/scripts/env.sh new file mode 100755 index 00000000..a126103f --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/env.sh @@ -0,0 +1,453 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +# +# The following variables describe the topology and may be modified to provide +# different organization names or the number of peers in each peer organization. +# + +# Name of the docker-compose network +NETWORK=fabric-ca + +# Names of the orderer organizations +ORDERER_ORGS="orderer" + +# Names of the peer organizations +PEER_ORGS="org1 org2" + +# Number of peers in each peer organization +NUM_PEERS=2 + +# +# The remainder of this file contains variables which typically would not be changed. +# + +# All org names +ORGS="$ORDERER_ORGS $PEER_ORGS" + +# Set to true to populate the "admincerts" folder of MSPs +ADMINCERTS=true + +# Number of orderer nodes +NUM_ORDERERS=1 + +# The volume mount to share data between containers +#DATA=data/${COMPOSE_PROJECT_NAME} +DATA=data +CRYPTO=${DATA}/crypto-config +CRYPTO_ORDERER=${CRYPTO}/ordererOrganizations +CRYPTO_PEER=${CRYPTO}/peerOrganizations + +# The path to the genesis block +GENESIS_BLOCK_FILE=/$DATA/genesis.block + +# The path to a channel transaction +CHANNEL_TX_FILE=/$DATA/channel.tx + +# Name of test channel +CHANNEL_NAME=mychannel + +# Query timeout in seconds +QUERY_TIMEOUT=15 + +# Setup timeout in seconds (for setup container to complete) +SETUP_TIMEOUT=120 + +# Log directory +LOGDIR=$DATA/logs +LOGPATH=/$LOGDIR + +# Name of a the file to create when setup is successful +SETUP_SUCCESS_FILE=${LOGDIR}/setup.successful +# The setup container's log file +SETUP_LOGFILE=${LOGDIR}/setup.log + +# The run container's log file +RUN_LOGFILE=${LOGDIR}/run.log +# The run container's summary log file +RUN_SUMFILE=${LOGDIR}/run.sum +RUN_SUMPATH=/${RUN_SUMFILE} +# Run success and failure files +RUN_SUCCESS_FILE=${LOGDIR}/run.success +RUN_FAIL_FILE=${LOGDIR}/run.fail + +# Affiliation is not used to limit users in this sample, so just put +# all identities in the same affiliation. +export FABRIC_CA_CLIENT_ID_AFFILIATION=org1 + +# Set to true to enable use of intermediate CAs +USE_INTERMEDIATE_CA=false + + +# Config block file path +CONFIG_BLOCK_FILE=/tmp/config_block.pb + +# Update config block payload file path +CONFIG_UPDATE_ENVELOPE_FILE=/tmp/config_update_as_envelope.pb + + +function initOrdererOrgVars { + if [ $# -ne 1 ]; then + echo "Usage: initOrdererOrgVars " + exit 1 + fi + ORG=$1 + ORG_CONTAINER_NAME=${ORG//./-} + DOMAIN=example.com + ROOT_CA_HOST=ca.${DOMAIN} + ROOT_CA_NAME=ca.${DOMAIN} + ROOT_CA_LOGFILE=$LOGDIR/${ROOT_CA_NAME}.log + + # Root CA admin identity + ROOT_CA_ADMIN_USER=admin + ROOT_CA_ADMIN_PASS=${ROOT_CA_ADMIN_USER}pw + ROOT_CA_ADMIN_USER_PASS=${ROOT_CA_ADMIN_USER}:${ROOT_CA_ADMIN_PASS} + + # Admin identity for the org + ADMIN_NAME=admin-${ORG} + ADMIN_PASS=${ADMIN_NAME}pw + # Typical user identity for the org + USER_NAME=user-${ORG} + USER_PASS=${USER_NAME}pw + + + ORG_DIR=${CRYPTO_ORDERER}/${DOMAIN} + ROOT_CA_CERTFILE=/${ORG_DIR}/ca/${ROOT_CA_HOST}-cert.pem + ANCHOR_TX_FILE=/${CRYPTO_ORDERER}/${DOMAIN}/anchors.tx + ORG_MSP_ID=${ORG}MSP + ORG_MSP_DIR=/${ORG_DIR}/msp + ORG_ADMIN_CERT_FILENAME=Admin@${DOMAIN}-cert.pem + ORG_ADMIN_CERT=${ORG_MSP_DIR}/admincerts/${ORG_ADMIN_CERT_FILENAME} + ORG_ADMIN_HOME=/${ORG_DIR}/users/Admin@${DOMAIN} + + CA_NAME=$ROOT_CA_NAME + CA_HOST=$ROOT_CA_HOST + TLSCA_HOST=tls${CA_HOST} + CA_CHAINFILE=$ROOT_CA_CERTFILE + CA_ADMIN_USER_PASS=$ROOT_CA_ADMIN_USER_PASS + CA_LOGFILE=$ROOT_CA_LOGFILE + + #ORDERER_ADMIN_CERT=${ORG_MSP_DIR}/admincerts/Admin@example.com-cert.pem + #ORDERER_ADMIN_CERT_FILE=Admin@example.com-cert.pem + +} + + + +function initPeerOrgVars { + if [ $# -ne 1 ]; then + echo "Usage: initPeerOrgVars " + exit 1 + fi + ORG=$1 + ORG_CONTAINER_NAME=${ORG//./-} + DOMAIN=${ORG}.example.com + + ROOT_CA_HOST=ca.${DOMAIN} + ROOT_CA_NAME=ca.${DOMAIN} + ROOT_CA_LOGFILE=$LOGDIR/${ROOT_CA_NAME}.log + + # Root CA admin identity + ROOT_CA_ADMIN_USER=admin + ROOT_CA_ADMIN_PASS=${ROOT_CA_ADMIN_USER}pw + ROOT_CA_ADMIN_USER_PASS=${ROOT_CA_ADMIN_USER}:${ROOT_CA_ADMIN_PASS} + + # Admin identity for the org + ADMIN_NAME=admin-${ORG} + ADMIN_PASS=${ADMIN_NAME}pw + # Typical user identity for the org + USER_NAME=user-${ORG} + USER_PASS=${USER_NAME}pw + + ORG_DIR=${CRYPTO_PEER}/${DOMAIN} + ROOT_CA_CERTFILE=/${ORG_DIR}/ca/${ROOT_CA_HOST}-cert.pem + ANCHOR_TX_FILE=/${ORG_DIR}/anchors.tx + ORG_MSP_ID=${ORG}MSP + ORG_MSP_DIR=/${ORG_DIR}/msp + ORG_ADMIN_CERT_FILENAME=Admin@${DOMAIN}-cert.pem + ORG_ADMIN_CERT=${ORG_MSP_DIR}/admincerts/${ORG_ADMIN_CERT_FILENAME} + ORG_ADMIN_HOME=/${ORG_DIR}/users/Admin@${DOMAIN} + + ORG_USER1_CERT_FILENAME=USER1@${DOMAIN}-cert.pem + ORG_USER1_HOME=/${ORG_DIR}/users/USER1@${DOMAIN} + ORG_USER1_CERT_FILENAME=USER1@${DOMAIN}-cert.pem + + CA_NAME=$ROOT_CA_NAME + CA_HOST=$ROOT_CA_HOST + TLSCA_HOST=tls${CA_HOST} + CA_CHAINFILE=$ROOT_CA_CERTFILE + CA_ADMIN_USER_PASS=$ROOT_CA_ADMIN_USER_PASS + CA_LOGFILE=$ROOT_CA_LOGFILE + +} + + +function initOrdererVars { + if [ $# -ne 1 ]; then + echo "Usage: initOrdererVars " + exit 1 + fi + initOrdererOrgVars $1 + DOMAIN=example.com + ORDERER_HOST=${ORG}.${DOMAIN} + ORDERER_NAME=${ORG}.${DOMAIN} + ORDERER_PASS=${ORDERER_NAME}pw + ORDERER_NAME_PASS=${ORDERER_NAME}:${ORDERER_PASS} + ORDERER_LOGFILE=$LOGDIR/${ORDERER_NAME}.log + MYHOME=/var/hyperledger/orderer + + export FABRIC_CA_CLIENT=$MYHOME + export ORDERER_GENERAL_LOGLEVEL=debug + export ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 + export ORDERER_GENERAL_GENESISMETHOD=file + export ORDERER_GENERAL_GENESISFILE=$GENESIS_BLOCK_FILE + export ORDERER_GENERAL_LOCALMSPID=$ORG_MSP_ID + export ORDERER_GENERAL_LOCALMSPDIR=$MYHOME/msp + # enabled TLS + export ORDERER_GENERAL_TLS_ENABLED=true + TLSDIR=$MYHOME/tls + export ORDERER_GENERAL_TLS_PRIVATEKEY=$TLSDIR/server.key + export ORDERER_GENERAL_TLS_CERTIFICATE=$TLSDIR/server.crt + export ORDERER_GENERAL_TLS_ROOTCAS=[$CA_CHAINFILE] +} + + +# initPeerVars +function initPeerVars { + if [ $# -ne 2 ]; then + echo "Usage: initPeerVars : $*" + exit 1 + fi + initPeerOrgVars $1 + NUM=$2 + + PEER_HOST=peer${NUM}.${DOMAIN} + PEER_NAME=peer${NUM}.${DOMAIN} + PEER_PASS=${PEER_NAME}pw + PEER_NAME_PASS=${PEER_NAME}:${PEER_PASS} + PEER_LOGFILE=$LOGDIR/${PEER_NAME}.log + MYHOME=/etc/hyperledger/fabric + TLSDIR=$MYHOME/tls + + export FABRIC_CA_CLIENT=$MYHOME + export CORE_PEER_ID=$PEER_HOST + export CORE_PEER_ADDRESS=$PEER_HOST:7051 + export CORE_PEER_LOCALMSPID=$ORG_MSP_ID + export CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock + # the following setting starts chaincode containers on the same + # bridge network as the peers + # https://docs.docker.com/compose/networking/ + #export CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_${NETWORK} + export CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=net_${NETWORK} + # export CORE_LOGGING_LEVEL=ERROR + export CORE_LOGGING_LEVEL=DEBUG + export CORE_PEER_TLS_ENABLED=true + export CORE_PEER_TLS_CLIENTAUTHREQUIRED=true + export CORE_PEER_TLS_ROOTCERT_FILE=$CA_CHAINFILE + export CORE_PEER_TLS_CLIENTCERT_FILE=/$DATA/orgs/${ORG}/peer${NUM}/tls/server.crt + export CORE_PEER_TLS_CLIENTKEY_FILE=/$DATA/orgs/${ORG}/peer${NUM}/tls/server.key + export CORE_PEER_PROFILE_ENABLED=true + # gossip variables + export CORE_PEER_GOSSIP_USELEADERELECTION=true + export CORE_PEER_GOSSIP_ORGLEADER=false + export CORE_PEER_GOSSIP_EXTERNALENDPOINT=$PEER_HOST:7051 + if [ $NUM -gt 1 ]; then + # Point the non-anchor peers to the anchor peer, which is always the 1st peer + export CORE_PEER_GOSSIP_BOOTSTRAP=peer0.${ORG}.example.com:7051 + fi + export ORDERER_CONN_ARGS="$ORDERER_PORT_ARGS --keyfile $CORE_PEER_TLS_CLIENTKEY_FILE --certfile $CORE_PEER_TLS_CLIENTCERT_FILE" +} + +function genClientTLSCert { + if [ $# -ne 3 ]; then + echo "Usage: genClientTLSCert : $*" + exit 1 + fi + + HOST_NAME=$1 + CERT_FILE=$2 + KEY_FILE=$3 + + # Get a client cert + fabric-ca-client enroll -d --enrollment.profile tls -u $ENROLLMENT_URL -M /tmp/tls --csr.hosts $HOST_NAME + + mkdir /$DATA/tls || true + cp /tmp/tls/signcerts/* $CERT_FILE + cp /tmp/tls/keystore/* $KEY_FILE + rm -rf /tmp/tls +} + +# Switch to the current org's admin identity. Enroll if not previously enrolled. +function switchToAdminIdentity { + if [ ! -d $ORG_ADMIN_HOME ]; then + dowait "$CA_NAME to start" 60 $CA_LOGFILE $CA_CHAINFILE + log "Enrolling admin '$ADMIN_NAME' with $CA_HOST ..." + export FABRIC_CA_CLIENT_HOME=$ORG_ADMIN_HOME + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client enroll -d -u https://$ADMIN_NAME:$ADMIN_PASS@$CA_HOST:7054 + mv $ORG_ADMIN_HOME/msp/cacerts/* $ORG_ADMIN_HOME/msp/cacerts/${CA_HOST}-cert.pem #rename cacert + mv $ORG_ADMIN_HOME/msp/signcerts/* $ORG_ADMIN_HOME/msp/signcerts/$ORG_ADMIN_CERT_FILENAME #rename signcert + # If admincerts are required in the MSP, copy the cert there now and to my local MSP also + if [ $ADMINCERTS ]; then + mkdir -p $(dirname "${ORG_ADMIN_CERT}") + + cp $ORG_ADMIN_HOME/msp/signcerts/* $ORG_ADMIN_CERT #ORG_MSP_DIR/admincerts + mkdir $ORG_ADMIN_HOME/msp/admincerts + cp $ORG_ADMIN_HOME/msp/signcerts/* $ORG_ADMIN_HOME/msp/admincerts + fi + finishMSPSetup $ORG_ADMIN_HOME/msp + + fi + export CORE_PEER_MSPCONFIGPATH=$ORG_ADMIN_HOME/msp +} + +# Switch to the current org's user identity. Enroll if not previously enrolled. +function switchToUserIdentity { + export FABRIC_CA_CLIENT_HOME=$ORG_USER1_HOME + export CORE_PEER_MSPCONFIGPATH=$FABRIC_CA_CLIENT_HOME/msp + if [ ! -d $FABRIC_CA_CLIENT_HOME ]; then + dowait "$CA_NAME to start" 60 $CA_LOGFILE $CA_CHAINFILE + log "Enrolling user for organization $ORG with home directory $FABRIC_CA_CLIENT_HOME ..." + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client enroll -d -u https://$USER_NAME:$USER_PASS@$CA_HOST:7054 + mv $CORE_PEER_MSPCONFIGPATH/cacerts/* $CORE_PEER_MSPCONFIGPATH/cacerts/${CA_HOST}-cert.pem #rename cacert + mv $CORE_PEER_MSPCONFIGPATH/signcerts/* $CORE_PEER_MSPCONFIGPATH/signcerts/$ORG_USER1_CERT_FILENAME #rename signcert + # Set up admincerts directory if required + if [ $ADMINCERTS ]; then + ACDIR=$CORE_PEER_MSPCONFIGPATH/admincerts + mkdir -p $ACDIR + cp $ORG_ADMIN_HOME/msp/signcerts/* $ACDIR + fi + #mkdir -p /${DATA}/orgs/$ORG/user + #cp -r $CORE_PEER_MSPCONFIGPATH /${DATA}/orgs/$ORG/user + fi +} + +# Revokes the fabric user +function revokeFabricUserAndGenerateCRL { + switchToAdminIdentity + export FABRIC_CA_CLIENT_HOME=$ORG_ADMIN_HOME + logr "Revoking the user '$USER_NAME' of the organization '$ORG' with Fabric CA Client home directory set to $FABRIC_CA_CLIENT_HOME and generating CRL ..." + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client revoke -d --revoke.name $USER_NAME --gencrl +} + +# Generates a CRL that contains serial numbers of all revoked enrollment certificates. +# The generated CRL is placed in the crls folder of the admin's MSP +function generateCRL { + switchToAdminIdentity + export FABRIC_CA_CLIENT_HOME=$ORG_ADMIN_HOME + logr "Generating CRL for the organization '$ORG' with Fabric CA Client home directory set to $FABRIC_CA_CLIENT_HOME ..." + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client gencrl -d +} + +# Copy the org's admin cert into some target MSP directory +# This is only required if ADMINCERTS is enabled. +function copyAdminCert { + if [ $# -ne 1 ]; then + fatal "Usage: copyAdminCert " + fi + if $ADMINCERTS; then + dstDir=$1/admincerts + mkdir -p $dstDir + dowait "$ORG administator to enroll" 60 $SETUP_LOGFILE $ORG_ADMIN_CERT + cp $ORG_ADMIN_CERT $dstDir + fi +} + +# Create the TLS directories of the MSP folder if they don't exist. +# The fabric-ca-client should do this. +function finishMSPSetup { + if [ $# -ne 1 ]; then + fatal "Usage: finishMSPSetup " + fi + if [ ! -d $1/tlscacerts ]; then + mkdir $1/tlscacerts + cp $1/cacerts/* $1/tlscacerts + #mv $1/tlscacerts/* $1/tlscacerts/${TLSCA_HOST}-cert.pem + fi +} + +function awaitSetup { + dowait "the 'setup' container to finish registering identities, creating the genesis block and other artifacts" $SETUP_TIMEOUT $SETUP_LOGFILE /$SETUP_SUCCESS_FILE +} + +# Wait for one or more files to exist +# Usage: dowait [ ...] +function dowait { + if [ $# -lt 4 ]; then + fatal "Usage: dowait: $*" + fi + local what=$1 + local secs=$2 + local logFile=$3 + shift 3 + local logit=true + local starttime=$(date +%s) + for file in $*; do + until [ -f $file ]; do + if [ "$logit" = true ]; then + log -n "Waiting for $what ..." + logit=false + fi + sleep 1 + if [ "$(($(date +%s)-starttime))" -gt "$secs" ]; then + echo "" + fatal "Failed waiting for $what ($file not found); see $logFile" + fi + echo -n "." + done + done + echo "" +} + +# Wait for a process to begin to listen on a particular host and port +# Usage: waitPort +function waitPort { + set +e + local what=$1 + local secs=$2 + local logFile=$3 + local host=$4 + local port=$5 + nc -z $host $port > /dev/null 2>&1 + if [ $? -ne 0 ]; then + log -n "Waiting for $what ..." + local starttime=$(date +%s) + while true; do + sleep 1 + nc -z $host $port > /dev/null 2>&1 + if [ $? -eq 0 ]; then + break + fi + if [ "$(($(date +%s)-starttime))" -gt "$secs" ]; then + fatal "Failed waiting for $what; see $logFile" + fi + echo -n "." + done + echo "" + fi + set -e +} + + +# log a message +function log { + if [ "$1" = "-n" ]; then + shift + echo -n "##### `date '+%Y-%m-%d %H:%M:%S'` $*" + else + echo "##### `date '+%Y-%m-%d %H:%M:%S'` $*" + fi +} + +# fatal a message +function fatal { + log "FATAL: $*" + exit 1 +} diff --git a/hyperledger_fabric/fabric-ca/scripts/run-fabric.sh b/hyperledger_fabric/fabric-ca/scripts/run-fabric.sh new file mode 100755 index 00000000..c4dc3e54 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/run-fabric.sh @@ -0,0 +1,291 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +set -e + +source $(dirname "$0")/env.sh + +function main { + + done=false + + # Wait for setup to complete and then wait another 10 seconds for the orderer and peers to start + awaitSetup + sleep 10 + + trap finish EXIT + + mkdir -p $LOGPATH + logr "The docker 'run' container has started" + + # Set ORDERER_PORT_ARGS to the args needed to communicate with the 1st orderer + IFS=', ' read -r -a OORGS <<< "$ORDERER_ORGS" + initOrdererVars ${OORGS[0]} + export ORDERER_PORT_ARGS="-o $ORDERER_HOST:7050 --tls --cafile $CA_CHAINFILE --clientauth" + + # Convert PEER_ORGS to an array named PORGS + IFS=', ' read -r -a PORGS <<< "$PEER_ORGS" + + # Create the channel + createChannel + + # All peers join the channel + for ORG in $PEER_ORGS; do + local COUNT=1 + while [[ "$COUNT" -le $NUM_PEERS ]]; do + initPeerVars $ORG $((COUNT-1)) + joinChannel + COUNT=$((COUNT+1)) + done + done + + # Update the anchor peers + for ORG in $PEER_ORGS; do + initPeerVars $ORG 0 + switchToAdminIdentity + logr "Updating anchor peers for $PEER_HOST ..." + peer channel update -c $CHANNEL_NAME -f $ANCHOR_TX_FILE $ORDERER_CONN_ARGS + done + + # Install chaincode on the 1st peer in each org + for ORG in $PEER_ORGS; do + initPeerVars $ORG 0 + installChaincode + done + + # Instantiate chaincode on the 1st peer of the 2nd org + makePolicy + initPeerVars ${PORGS[1]} 0 + switchToAdminIdentity + logr "Instantiating chaincode on $PEER_HOST ..." + peer chaincode instantiate -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "$POLICY" $ORDERER_CONN_ARGS + + # Query chaincode from the 1st peer of the 1st org + initPeerVars ${PORGS[0]} 0 + switchToUserIdentity + chaincodeQuery 100 + + # Invoke chaincode on the 1st peer of the 1st org + initPeerVars ${PORGS[0]} 0 + switchToUserIdentity + logr "Sending invoke transaction to $PEER_HOST ..." + peer chaincode invoke -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' $ORDERER_CONN_ARGS + + ## Install chaincode on 2nd peer of 2nd org + initPeerVars ${PORGS[1]} 1 + installChaincode + + # Query chaincode on 2nd peer of 2nd org + sleep 10 + initPeerVars ${PORGS[1]} 1 + switchToUserIdentity + chaincodeQuery 90 + + initPeerVars ${PORGS[0]} 0 + switchToUserIdentity + + # Revoke the user and generate CRL using admin's credentials + revokeFabricUserAndGenerateCRL + + # Fetch config block + fetchConfigBlock + + # Create config update envelope with CRL and update the config block of the channel + createConfigUpdatePayloadWithCRL + updateConfigBlock + + # querying the chaincode should fail as the user is revoked + switchToUserIdentity + queryAsRevokedUser + if [ "$?" -ne 0 ]; then + logr "The revoked user $USER_NAME should have failed to query the chaincode in the channel '$CHANNEL_NAME'" + exit 1 + fi + logr "Congratulations! The tests ran successfully." + + done=true +} + +# Enroll as a peer admin and create the channel +function createChannel { + initPeerVars ${PORGS[0]} 0 + switchToAdminIdentity + logr "Creating channel '$CHANNEL_NAME' on $ORDERER_HOST ..." + peer channel create --logging-level=DEBUG -c $CHANNEL_NAME -f $CHANNEL_TX_FILE $ORDERER_CONN_ARGS +} + +# Enroll as a fabric admin and join the channel +function joinChannel { + switchToAdminIdentity + set +e + local COUNT=1 + MAX_RETRY=10 + while true; do + logr "Peer $PEER_HOST is attempting to join channel '$CHANNEL_NAME' (attempt #${COUNT}) ..." + peer channel join -b $CHANNEL_NAME.block + if [ $? -eq 0 ]; then + set -e + logr "Peer $PEER_HOST successfully joined channel '$CHANNEL_NAME'" + return + fi + if [ $COUNT -gt $MAX_RETRY ]; then + fatalr "Peer $PEER_HOST failed to join channel '$CHANNEL_NAME' in $MAX_RETRY retries" + fi + COUNT=$((COUNT+1)) + sleep 1 + done +} + +function chaincodeQuery { + if [ $# -ne 1 ]; then + fatalr "Usage: chaincodeQuery " + fi + set +e + logr "Querying chaincode in the channel '$CHANNEL_NAME' on the peer '$PEER_HOST' ..." + local rc=1 + local starttime=$(date +%s) + # Continue to poll until we get a successful response or reach QUERY_TIMEOUT + while test "$(($(date +%s)-starttime))" -lt "$QUERY_TIMEOUT"; do + sleep 1 + peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >& log.txt + VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') + if [ $? -eq 0 -a "$VALUE" = "$1" ]; then + logr "Query of channel '$CHANNEL_NAME' on peer '$PEER_HOST' was successful" + set -e + return 0 + else + # removed the string "Query Result" from peer chaincode query command result, as a result, have to support both options until the change is merged. + VALUE=$(cat log.txt | egrep '^[0-9]+$') + if [ $? -eq 0 -a "$VALUE" = "$1" ]; then + logr "Query of channel '$CHANNEL_NAME' on peer '$PEER_HOST' was successful" + set -e + return 0 + fi + fi + echo -n "." + done + cat log.txt + cat log.txt >> $RUN_SUMFILE + fatalr "Failed to query channel '$CHANNEL_NAME' on peer '$PEER_HOST'; expected value was $1 and found $VALUE" +} + +function queryAsRevokedUser { + set +e + logr "Querying the chaincode in the channel '$CHANNEL_NAME' on the peer '$PEER_HOST' as revoked user '$USER_NAME' ..." + local starttime=$(date +%s) + # Continue to poll until we get an expected response or reach QUERY_TIMEOUT + while test "$(($(date +%s)-starttime))" -lt "$QUERY_TIMEOUT"; do + sleep 1 + peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >& log.txt + if [ $? -ne 0 ]; then + err=$(cat log.txt | grep "access denied") + if [ "$err" != "" ]; then + logr "Expected error occurred when the revoked user '$USER_NAME' queried the chaincode in the channel '$CHANNEL_NAME'" + set -e + return 0 + fi + fi + echo -n "." + done + set -e + cat log.txt + cat log.txt >> $RUN_SUMFILE + return 1 +} + +function makePolicy { + POLICY="OR(" + local COUNT=0 + for ORG in $PEER_ORGS; do + if [ $COUNT -ne 0 ]; then + POLICY="${POLICY}," + fi + initOrgVars $ORG + POLICY="${POLICY}'${ORG_MSP_ID}.member'" + COUNT=$((COUNT+1)) + done + POLICY="${POLICY})" + log "policy: $POLICY" +} + +function installChaincode { + switchToAdminIdentity + logr "Installing chaincode on $PEER_HOST ..." + peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go +} + +function fetchConfigBlock { + logr "Fetching the configuration block of the channel '$CHANNEL_NAME'" + peer channel fetch config $CONFIG_BLOCK_FILE -c $CHANNEL_NAME $ORDERER_CONN_ARGS +} + +function updateConfigBlock { + logr "Updating the configuration block of the channel '$CHANNEL_NAME'" + peer channel update -f $CONFIG_UPDATE_ENVELOPE_FILE -c $CHANNEL_NAME $ORDERER_CONN_ARGS +} + +function createConfigUpdatePayloadWithCRL { + logr "Creating config update payload with the generated CRL for the organization '$ORG'" + # Start the configtxlator + configtxlator start & + configtxlator_pid=$! + log "configtxlator_pid:$configtxlator_pid" + logr "Sleeping 5 seconds for configtxlator to start..." + sleep 5 + + pushd /tmp + + CTLURL=http://127.0.0.1:7059 + # Convert the config block protobuf to JSON + curl -X POST --data-binary @$CONFIG_BLOCK_FILE $CTLURL/protolator/decode/common.Block > config_block.json + # Extract the config from the config block + jq .data.data[0].payload.data.config config_block.json > config.json + + # Update crl in the config json + CRL=$(cat $CORE_PEER_MSPCONFIGPATH/crls/crl*.pem | base64 | tr -d '\n') + cat config.json | jq --arg org "$ORG" --arg crl "$CRL" '.channel_group.groups.Application.groups[$org].values.MSP.value.config.revocation_list = [$crl]' > updated_config.json + + # Create the config diff protobuf + curl -X POST --data-binary @config.json $CTLURL/protolator/encode/common.Config > config.pb + curl -X POST --data-binary @updated_config.json $CTLURL/protolator/encode/common.Config > updated_config.pb + curl -X POST -F original=@config.pb -F updated=@updated_config.pb $CTLURL/configtxlator/compute/update-from-configs -F channel=$CHANNEL_NAME > config_update.pb + + # Convert the config diff protobuf to JSON + curl -X POST --data-binary @config_update.pb $CTLURL/protolator/decode/common.ConfigUpdate > config_update.json + + # Create envelope protobuf container config diff to be used in the "peer channel update" command to update the channel configuration block + echo '{"payload":{"header":{"channel_header":{"channel_id":"'"${CHANNEL_NAME}"'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' > config_update_as_envelope.json + curl -X POST --data-binary @config_update_as_envelope.json $CTLURL/protolator/encode/common.Envelope > $CONFIG_UPDATE_ENVELOPE_FILE + + # Stop configtxlator + kill $configtxlator_pid + + popd +} + +function finish { + if [ "$done" = true ]; then + logr "See $RUN_LOGFILE for more details" + touch /$RUN_SUCCESS_FILE + else + logr "Tests did not complete successfully; see $RUN_LOGFILE for more details" + touch /$RUN_FAIL_FILE + exit 1 + fi +} + +function logr { + log $* + log $* >> $RUN_SUMPATH +} + +function fatalr { + logr "FATAL: $*" + exit 1 +} + +main diff --git a/hyperledger_fabric/fabric-ca/scripts/setup-fabric.sh b/hyperledger_fabric/fabric-ca/scripts/setup-fabric.sh new file mode 100755 index 00000000..0444ee07 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/setup-fabric.sh @@ -0,0 +1,289 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +# +# This script does the following: +# 1) registers orderer and peer identities with intermediate fabric-ca-servers +# 2) Builds the channel artifacts (e.g. genesis block, etc) +# + +function main { + log "Beginning building channel artifacts ..." + registerIdentities + enrollIdentities + #makeConfigTxYaml + generateChannelArtifacts + log "Finished building channel artifacts" + touch /$SETUP_SUCCESS_FILE +} + +# Enroll the CA administrator +function enrollCAAdmin { + waitPort "$CA_NAME to start" 90 $CA_LOGFILE $CA_HOST 7054 + log "Enrolling with $CA_NAME as bootstrap identity ..." + export FABRIC_CA_CLIENT_HOME=$HOME/cas/$CA_NAME + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client enroll -d -u https://admin:adminpw@$CA_HOST:7054 +} + +function registerIdentities { + log "Registering identities ..." + registerOrdererIdentities + registerPeerIdentities +} + +function enrollIdentities { + log "Registering identities ..." + enrollOrdererIdentities + enrollPeerIdentities +} + +# Register any identities associated with the orderer +function registerOrdererIdentities { + initOrdererOrgVars $ORDERER_ORGS + enrollCAAdmin + initOrdererVars $ORDERER_ORGS + log "Registering $ORDERER_NAME with $CA_NAME" + fabric-ca-client register -d --id.name $ORDERER_NAME --id.secret $ORDERER_PASS --id.type orderer + log "Registering admin identity with $CA_NAME" + # The admin identity has the "admin" attribute which is added to ECert by default + fabric-ca-client register -d --id.name $ADMIN_NAME --id.secret $ADMIN_PASS --id.attrs "admin=true:ecert" +} + +# Register any identities associated with a peer +function registerPeerIdentities { + for ORG in $PEER_ORGS; do + initPeerOrgVars $ORG + enrollCAAdmin + local COUNT=1 + while [[ "$COUNT" -le $NUM_PEERS ]]; do + initPeerVars $ORG $((COUNT-1)) + log "Registering $PEER_NAME with $CA_NAME" + fabric-ca-client register -d --id.name $PEER_NAME --id.secret $PEER_PASS --id.type peer + COUNT=$((COUNT+1)) + done + log "Registering admin identity with $CA_NAME" + # The admin identity has the "admin" attribute which is added to ECert by default + fabric-ca-client register -d --id.name $ADMIN_NAME --id.secret $ADMIN_PASS --id.attrs "hf.Registrar.Roles=client,hf.Registrar.Attributes=*,hf.Revoker=true,hf.GenCRL=true,admin=true:ecert,abac.init=true:ecert" + log "Registering user identity with $CA_NAME" + fabric-ca-client register -d --id.name $USER_NAME --id.secret $USER_PASS + done +} + +function enrollOrdererIdentities { + log "Getting CA certificates ..." + for ORG in $ORDERER_ORGS; do + initOrdererOrgVars $ORG + log "Getting CA certs for organization $ORG and storing in $ORG_MSP_DIR" + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client getcacert -d -u https://$CA_HOST:7054 -M $ORG_MSP_DIR + mv $ORG_MSP_DIR/cacerts/* $ORG_MSP_DIR/cacerts/${CA_HOST}-cert.pem + finishMSPSetup $ORG_MSP_DIR + # If ADMINCERTS is true, we need to enroll the admin now to populate the admincerts directory + if [ $ADMINCERTS ]; then + switchToAdminIdentity + fi + done +} + +function enrollPeerIdentities { + log "Getting CA certificates ..." + for ORG in $PEER_ORGS; do + initPeerOrgVars $ORG + log "Getting CA certs for organization $ORG and storing in $ORG_MSP_DIR" + export FABRIC_CA_CLIENT_TLS_CERTFILES=$CA_CHAINFILE + fabric-ca-client getcacert -d -u https://$CA_HOST:7054 -M $ORG_MSP_DIR + mv $ORG_MSP_DIR/cacerts/* $ORG_MSP_DIR/cacerts/${CA_HOST}-cert.pem + finishMSPSetup $ORG_MSP_DIR + # If ADMINCERTS is true, we need to enroll the admin now to populate the admincerts directory + if [ $ADMINCERTS ]; then + switchToAdminIdentity + switchToUserIdentity + fi + done +} + +# printOrg +function printOrg { + echo " + - &$ORG_CONTAINER_NAME + + Name: $ORG + + # ID to load the MSP definition as + ID: $ORG_MSP_ID + + # MSPDir is the filesystem path which contains the MSP configuration + MSPDir: $ORG_MSP_DIR" +} + +# printOrdererOrg +function printOrdererOrg { + initOrdererOrgVars $1 + printOrg +} + +# printPeerOrg +function printPeerOrg { + initPeerVars $1 $2 + printOrg + echo " + AnchorPeers: + # AnchorPeers defines the location of peers which can be used + # for cross org gossip communication. Note, this value is only + # encoded in the genesis block in the Application section context + - Host: $PEER_HOST + Port: 7051" +} + +function makeConfigTxYaml { + { + echo " +################################################################################ +# +# Section: Organizations +# +# - This section defines the different organizational identities which will +# be referenced later in the configuration. +# +################################################################################ +Organizations:" + + for ORG in $ORDERER_ORGS; do + printOrdererOrg $ORG + done + + for ORG in $PEER_ORGS; do + printPeerOrg $ORG 1 + done + + echo " +################################################################################ +# +# SECTION: Application +# +# This section defines the values to encode into a config transaction or +# genesis block for application related parameters +# +################################################################################ +Application: &ApplicationDefaults + + # Organizations is the list of orgs which are defined as participants on + # the application side of the network + Organizations: +" + echo " +################################################################################ +# +# Profile +# +# - Different configuration profiles may be encoded here to be specified +# as parameters to the configtxgen tool +# +################################################################################ +Profiles: + + OrgsOrdererGenesis: + Orderer: + # Orderer Type: The orderer implementation to start + # Available types are \"solo\" and \"kafka\" + OrdererType: solo + Addresses:" + + for ORG in $ORDERER_ORGS; do + local COUNT=1 + while [[ "$COUNT" -le $NUM_ORDERERS ]]; do + initOrdererVars $ORG + echo " - $ORDERER_HOST:7050" + COUNT=$((COUNT+1)) + done + done + + echo " + # Batch Timeout: The amount of time to wait before creating a batch + BatchTimeout: 2s + + # Batch Size: Controls the number of messages batched into a block + BatchSize: + + # Max Message Count: The maximum number of messages to permit in a batch + MaxMessageCount: 10 + + # Absolute Max Bytes: The absolute maximum number of bytes allowed for + # the serialized messages in a batch. + AbsoluteMaxBytes: 99 MB + + # Preferred Max Bytes: The preferred maximum number of bytes allowed for + # the serialized messages in a batch. A message larger than the preferred + # max bytes will result in a batch larger than preferred max bytes. + PreferredMaxBytes: 512 KB + + Kafka: + # Brokers: A list of Kafka brokers to which the orderer connects + # NOTE: Use IP:port notation + Brokers: + - 127.0.0.1:9092 + + # Organizations is the list of orgs which are defined as participants on + # the orderer side of the network + Organizations:" + + for ORG in $ORDERER_ORGS; do + initOrdererOrgVars $ORG + echo " - *${ORG_CONTAINER_NAME}" + done + + echo " + Consortiums: + + SampleConsortium: + + Organizations:" + + for ORG in $PEER_ORGS; do + initPeerOrgVars $ORG + echo " - *${ORG_CONTAINER_NAME}" + done + + echo " + OrgsChannel: + Consortium: SampleConsortium + Application: + <<: *ApplicationDefaults + Organizations:" + + for ORG in $PEER_ORGS; do + initPeerOrgVars $ORG + echo " - *${ORG_CONTAINER_NAME}" + done + + } > /etc/hyperledger/fabric/configtx.yaml + # Copy it to the data directory to make debugging easier + cp /etc/hyperledger/fabric/configtx.yaml /$DATA +} + +function generateChannelArtifacts() { + which configtxgen + if [ "$?" -ne 0 ]; then + fatal "configtxgen tool not found. exiting" + fi + + log "Generating orderer genesis block at $GENESIS_BLOCK_FILE" + # Note: For some unknown reason (at least for now) the block file can't be + # named orderer.genesis.block or the orderer will fail to launch! + configtxgen -configPath /data -profile TwoOrgsOrdererGenesis -outputBlock $GENESIS_BLOCK_FILE + if [ "$?" -ne 0 ]; then + fatal "Failed to generate orderer genesis block" + fi +} + +set -e + +SDIR=$(dirname "$0") +source $SDIR/env.sh + +main diff --git a/hyperledger_fabric/fabric-ca/scripts/start-intermediate-ca.sh b/hyperledger_fabric/fabric-ca/scripts/start-intermediate-ca.sh new file mode 100755 index 00000000..01bf14b9 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/start-intermediate-ca.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +source $(dirname "$0")/env.sh +initOrgVars $ORG + +set -e + +# Wait for the root CA to start +waitPort "root CA to start" 60 $ROOT_CA_LOGFILE $ROOT_CA_HOST 7054 + +# Initialize the intermediate CA +fabric-ca-server init -b $BOOTSTRAP_USER_PASS -u $PARENT_URL + +# Copy the intermediate CA's certificate chain to the data directory to be used by others +cp $FABRIC_CA_SERVER_HOME/ca-chain.pem $TARGET_CHAINFILE + +# Add the custom orgs +for o in $FABRIC_ORGS; do + aff=$aff"\n $o: []" +done +aff="${aff#\\n }" +sed -i "/affiliations:/a \\ $aff" \ + $FABRIC_CA_SERVER_HOME/fabric-ca-server-config.yaml + +# Start the intermediate CA +fabric-ca-server start diff --git a/hyperledger_fabric/fabric-ca/scripts/start-orderer.sh b/hyperledger_fabric/fabric-ca/scripts/start-orderer.sh new file mode 100755 index 00000000..c2ca4f26 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/start-orderer.sh @@ -0,0 +1,49 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +source $(dirname "$0")/env.sh + +# Wait for setup to complete sucessfully +awaitSetup +set -e + + +# Enroll to get orderer's TLS cert (using the "tls" profile) +fabric-ca-client enroll -d --enrollment.profile tls -u $ENROLLMENT_URL -M /tmp/tls --csr.hosts $ORDERER_HOST + +# Copy the TLS key and cert to the appropriate place +TLSDIR=$ORDERER_HOME/tls +mkdir -p $TLSDIR +cp /tmp/tls/keystore/* $ORDERER_GENERAL_TLS_PRIVATEKEY +cp /tmp/tls/signcerts/* $ORDERER_GENERAL_TLS_CERTIFICATE +DATA_DIR=/${CRYPTO_ORDERER}/${DOMAIN}/orderers/${ORDERER}.${DOMAIN} +DATA_TLSDIR=/${DATA_DIR}/tls +mkdir -p ${DATA_TLSDIR} +cp $ORDERER_GENERAL_TLS_PRIVATEKEY ${DATA_TLSDIR}/server.key +cp $ORDERER_GENERAL_TLS_CERTIFICATE ${DATA_TLSDIR}/server.crt +cp $FABRIC_CA_CLIENT_TLS_CERTFILES ${DATA_TLSDIR}/ca.crt +rm -rf /tmp/tls + +# Enroll again to get the orderer's enrollment certificate (default profile) +fabric-ca-client enroll -d -u $ENROLLMENT_URL -M $ORDERER_GENERAL_LOCALMSPDIR +mv $ORDERER_GENERAL_LOCALMSPDIR/cacerts/* $ORDERER_GENERAL_LOCALMSPDIR/cacerts/ca.${DOMAIN}-cert.pem #rename cacert +#v $ORDERER_GENERAL_LOCALMSPDIR/signcerts/* $ORDERER_GENERAL_LOCALMSPDIR/signcerts/${ORDERER}.${DOMAIN}-cert.pem #rename signcert + +# Finish setting up the local MSP for the orderer +finishMSPSetup $ORDERER_GENERAL_LOCALMSPDIR + +ORG_ADMIN_CERT=/${CRYPTO_ORDERER}/${DOMAIN}/msp/admincerts/Admin@${DOMAIN}-cert.pem +copyAdminCert $ORDERER_GENERAL_LOCALMSPDIR +cp -r $ORDERER_GENERAL_LOCALMSPDIR ${DATA_DIR} + + +# Wait for the genesis block to be created +dowait "genesis block to be created" 60 $SETUP_LOGFILE $ORDERER_GENERAL_GENESISFILE + +# Start the orderer +env | grep ORDERER +orderer diff --git a/hyperledger_fabric/fabric-ca/scripts/start-peer.sh b/hyperledger_fabric/fabric-ca/scripts/start-peer.sh new file mode 100755 index 00000000..a60b85ac --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/start-peer.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +set -e + +source $(dirname "$0")/env.sh + +awaitSetup + +# Although a peer may use the same TLS key and certificate file for both inbound and outbound TLS, +# we generate a different key and certificate for inbound and outbound TLS simply to show that it is permissible + +# Generate server TLS cert and key pair for the peer +fabric-ca-client enroll -d --enrollment.profile tls -u $ENROLLMENT_URL -M /tmp/tls --csr.hosts $PEER_HOST +rm -rf $PEER_HOME +# Copy the TLS key and cert to the appropriate place +TLSDIR=$PEER_HOME/tls +mkdir -p $TLSDIR +cp /tmp/tls/signcerts/* $CORE_PEER_TLS_CERT_FILE +cp /tmp/tls/keystore/* $CORE_PEER_TLS_KEY_FILE +DATA_DIR=/${CRYPTO_PEER}/${DOMAIN}/peers/${PEER}.${DOMAIN} +DATA_TLSDIR=/${DATA_DIR}/tls +mkdir -p ${DATA_TLSDIR} +cp $CORE_PEER_TLS_KEY_FILE ${DATA_TLSDIR}/server.key +cp $CORE_PEER_TLS_CERT_FILE ${DATA_TLSDIR}/server.crt +cp $FABRIC_CA_CLIENT_TLS_CERTFILES ${DATA_TLSDIR}/ca.crt +rm -rf /tmp/tls + + +# Enroll the peer to get an enrollment certificate and set up the core's local MSP directory + +mkdir -p ${CORE_PEER_MSPCONFIGPATH} + +fabric-ca-client enroll -d -u $ENROLLMENT_URL -M $CORE_PEER_MSPCONFIGPATH +mv ${CORE_PEER_MSPCONFIGPATH}/cacerts/* ${CORE_PEER_MSPCONFIGPATH}/cacerts/ca.${DOMAIN}-cert.pem #rename cacert +#mv ${CORE_PEER_MSPCONFIGPATH}/signcerts/* ${CORE_PEER_MSPCONFIGPATH}/signcerts/${PEER}.${DOMAIN}-cert.pem #rename signcert + +finishMSPSetup $CORE_PEER_MSPCONFIGPATH + +ORG_ADMIN_CERT=/${CRYPTO_PEER}/${DOMAIN}/msp/admincerts/Admin@${DOMAIN}-cert.pem +copyAdminCert $CORE_PEER_MSPCONFIGPATH + +cp -r ${CORE_PEER_MSPCONFIGPATH} ${DATA_DIR} + +# Start the peer +log "Starting peer '$CORE_PEER_ID' with MSP at '$CORE_PEER_MSPCONFIGPATH'" +env | grep CORE +peer node start \ No newline at end of file diff --git a/hyperledger_fabric/fabric-ca/scripts/start-root-ca.sh b/hyperledger_fabric/fabric-ca/scripts/start-root-ca.sh new file mode 100755 index 00000000..c81c8920 --- /dev/null +++ b/hyperledger_fabric/fabric-ca/scripts/start-root-ca.sh @@ -0,0 +1,26 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +set -e + +# Initialize the root CA +fabric-ca-server init -b $BOOTSTRAP_USER_PASS + +# Copy the root CA's signing certificate to the data directory to be used by others +mkdir -p $TARGET +cp $FABRIC_CA_SERVER_HOME/ca-cert.pem $TARGET_CERTFILE +cp -r $TARGET $TLSTARGET +# Add the custom orgs +for o in $FABRIC_ORGS; do + aff=$aff"\n $o: []" +done +aff="${aff#\\n }" +sed -i "/affiliations:/a \\ $aff" \ + $FABRIC_CA_SERVER_HOME/fabric-ca-server-config.yaml + +# Start the root CA +fabric-ca-server start