Support fabric 1.0.1 now
parent
a4721ede17
commit
2d9d25f5eb
|
@ -0,0 +1,24 @@
|
||||||
|
# yeasy/hyperledger-fabric-peer:dev
|
||||||
|
# Dockerfile for developing Hyperledger peer image. This actually follow
|
||||||
|
# yeasy/hyperledger-fabric-peer image and add local source code to build the
|
||||||
|
# fabric binaries.
|
||||||
|
# Data is stored under /var/hyperledger/db and /var/hyperledger/production
|
||||||
|
|
||||||
|
FROM yeasy/hyperledger-fabric-base:latest
|
||||||
|
LABEL maintainer "Baohua Yang <yeasy.github.com>"
|
||||||
|
|
||||||
|
EXPOSE 7051
|
||||||
|
|
||||||
|
# ENV CORE_PEER_MSPCONFIGPATH $FABRIC_CFG_PATH/msp
|
||||||
|
|
||||||
|
COPY $GOPATH/src/github.com/hyperledger/fabric /go/src/github.com/hyperledger/
|
||||||
|
|
||||||
|
# install fabric peer and copy sampleconfigs
|
||||||
|
RUN cd $FABRIC_ROOT/peer \
|
||||||
|
&& CGO_CFLAGS=" " go install -ldflags "$LD_FLAGS -linkmode external -extldflags '-static -lpthread'" \
|
||||||
|
&& go clean
|
||||||
|
|
||||||
|
# This will start with joining the default chain "testchainid"
|
||||||
|
# Use `peer node start --peer-defaultchain=false` will join no channel by default.
|
||||||
|
# Then need to manually create a chain with `peer channel create -c test_chain`, then join with `peer channel join -b test_chain.block`.
|
||||||
|
CMD ["peer","node","start"]
|
|
@ -0,0 +1,117 @@
|
||||||
|
COMPOSE_FILE="docker-compose-2orgs-4peers.yaml"
|
||||||
|
COMPOSE_DEV_FILE="docker-compose-dev.yaml"
|
||||||
|
|
||||||
|
all:
|
||||||
|
@echo "Please make sure u have setup Docker and pulled images by 'make setup'."
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
@echo "Restarting network..."
|
||||||
|
make restart
|
||||||
|
|
||||||
|
make init
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
make test_cc
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
make lscc
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
make qscc
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
make stop
|
||||||
|
|
||||||
|
dev:
|
||||||
|
@echo "Please make sure u have setup Docker and pulled images by 'make setup'."
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
@echo "Restarting dev network..."
|
||||||
|
make dev_restart
|
||||||
|
|
||||||
|
make dev_init
|
||||||
|
sleep 2
|
||||||
|
|
||||||
|
make test_peer0
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
make lscc
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
make qscc
|
||||||
|
sleep 1
|
||||||
|
|
||||||
|
make dev_stop
|
||||||
|
|
||||||
|
ready:
|
||||||
|
make stop
|
||||||
|
make start
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
make init
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
make test_cc
|
||||||
|
@echo "Now the fabric network is ready to play"
|
||||||
|
@echo "run 'make cli' to enter into the fabric-cli container."
|
||||||
|
@echo "run 'make stop' when done."
|
||||||
|
|
||||||
|
setup: # setup the environment
|
||||||
|
bash scripts/setup_Docker.sh # Install Docker, Docker-Compose
|
||||||
|
bash scripts/download_images.sh # Pull required Docker images
|
||||||
|
|
||||||
|
start: # bootup the fabric network
|
||||||
|
@echo "Start a fabric network with 2-org-4-peer"
|
||||||
|
docker-compose -f ${COMPOSE_FILE} up -d # Start a fabric network
|
||||||
|
|
||||||
|
init: # initialize the fabric network
|
||||||
|
@echo "Install and instantiate cc example02 on the fabric network"
|
||||||
|
docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/initialize_all.sh"
|
||||||
|
|
||||||
|
test_cc: # test chaincode
|
||||||
|
@echo "Invoke and query cc example02 on all peers"
|
||||||
|
docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_cc_all.sh"
|
||||||
|
|
||||||
|
test_peer0: # test single peer
|
||||||
|
@echo "Invoke and query cc example02 on single peer0"
|
||||||
|
docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_cc_peer0.sh"
|
||||||
|
|
||||||
|
qscc: # test qscc quries
|
||||||
|
docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_qscc.sh"
|
||||||
|
|
||||||
|
lscc: # test lscc quries
|
||||||
|
docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_lscc.sh"
|
||||||
|
|
||||||
|
stop: # stop the fabric network
|
||||||
|
@echo "Stop the fabric network"
|
||||||
|
docker-compose -f ${COMPOSE_FILE} down # Stop a fabric network
|
||||||
|
|
||||||
|
restart: stop start
|
||||||
|
|
||||||
|
clean: # clean up environment
|
||||||
|
@echo "Clean all images and containers"
|
||||||
|
bash scripts/clean_env.sh
|
||||||
|
|
||||||
|
cli: # enter the cli container
|
||||||
|
docker exec -it fabric-cli bash
|
||||||
|
|
||||||
|
ps: # show existing docker images
|
||||||
|
docker ps -a
|
||||||
|
|
||||||
|
logs: # show logs
|
||||||
|
docker-compose -f ${COMPOSE_FILE} logs -f --tail 200
|
||||||
|
|
||||||
|
dev_start: # start fabric network for dev
|
||||||
|
@echo "Start a fabric network with 1 peer for dev"
|
||||||
|
docker-compose -f ${COMPOSE_DEV_FILE} up -d
|
||||||
|
|
||||||
|
dev_init: # initialize the fabric network
|
||||||
|
@echo "Install and instantiate cc example02 on the fabric dev network"
|
||||||
|
docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/initialize_peer0.sh"
|
||||||
|
|
||||||
|
dev_stop: # stop the fabric network for dev
|
||||||
|
@echo "Stop the fabric network with 1 peer for dev"
|
||||||
|
docker-compose -f ${COMPOSE_DEV_FILE} down
|
||||||
|
|
||||||
|
dev_restart: dev_stop dev_start
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
# Hyperledger fabric 1.0
|
||||||
|
|
||||||
|
Here we show steps on how to setup a fabric 1.0 network on Linux (e.g., Ubuntu/Debian), and then use it to run chaincode tests.
|
||||||
|
|
||||||
|
If you're not familiar with Docker and Blockchain technology yet, feel free to have a look at 2 books (in CN):
|
||||||
|
|
||||||
|
* [Docker Practice](https://github.com/yeasy/docker_practice)
|
||||||
|
* [Blockchain Guide](https://github.com/yeasy/blockchain_guide)
|
||||||
|
|
||||||
|
|
||||||
|
## Pass-through
|
||||||
|
|
||||||
|
The following command will run the entire process (start a fabric network, create channel, test chaincode and stop it.) pass-through.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ make setup # install docker/compose, and pull required images
|
||||||
|
$ make all
|
||||||
|
```
|
||||||
|
|
||||||
|
tldr :)
|
||||||
|
|
||||||
|
`make all` actually call following command sequentially.
|
||||||
|
|
||||||
|
* `make start`
|
||||||
|
* `make init`
|
||||||
|
* `make test_cc`
|
||||||
|
* `make stop`
|
||||||
|
|
||||||
|
Otherwise, if u wanna know more or run the command manually, then go on reading the following part.
|
||||||
|
|
||||||
|
## Environment Setup
|
||||||
|
|
||||||
|
The following scripts will setup the environment by installing Docker, Docker-Compose and download required docker images.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ make setup # setup environment
|
||||||
|
```
|
||||||
|
|
||||||
|
If you want to setup the environment manually, then have a look at [manually setup](docs/setup.md).
|
||||||
|
|
||||||
|
## Bootup Fabric Network
|
||||||
|
|
||||||
|
Start a 4 peer (belonging to 2 organizations) fabric network.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ make start # Start a fabric network
|
||||||
|
```
|
||||||
|
The script actually uses docker-compose to boot up the fabric network with several containers.
|
||||||
|
|
||||||
|
There will be 7 running containers, include 4 peers, 1 cli, 1 ca and 1 orderer.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
1dc3f2557bdc hyperledger/fabric-tools "bash -c 'while tr..." 25 minutes ago Up 25 minutes fabric-cli
|
||||||
|
5e5f37a0ed3c hyperledger/fabric-peer "peer node start" 25 minutes ago Up 25 minutes 7050/tcp, 7054-7059/tcp, 0.0.0.0:8051->7051/tcp, 0.0.0.0:8052->7052/tcp, 0.0.0.0:8053->7053/tcp peer1.org1.example.com
|
||||||
|
6cce94da6392 hyperledger/fabric-peer "peer node start" 25 minutes ago Up 25 minutes 7050/tcp, 7054-7059/tcp, 0.0.0.0:9051->7051/tcp, 0.0.0.0:9052->7052/tcp, 0.0.0.0:9053->7053/tcp peer0.org2.example.com
|
||||||
|
e36c5e8d56c5 hyperledger/fabric-peer "peer node start" 25 minutes ago Up 25 minutes 7050/tcp, 7054-7059/tcp, 0.0.0.0:7051-7053->7051-7053/tcp peer0.org1.example.com
|
||||||
|
1fdd3d2b6527 hyperledger/fabric-orderer "orderer start" 25 minutes ago Up 25 minutes 0.0.0.0:7050->7050/tcp orderer.example.com
|
||||||
|
8af323340651 hyperledger/fabric-ca "fabric-ca-server ..." 25 minutes ago Up 25 minutes 0.0.0.0:7054->7054/tcp fabric-ca
|
||||||
|
e41d8bca7fe5 hyperledger/fabric-peer "peer node start" 25 minutes ago Up 25 minutes 7050/tcp, 7054-7059/tcp, 0.0.0.0:10051->7051/tcp, 0.0.0.0:10052->7052/tcp, 0.0.0.0:10053->7053/tcp peer1.org2.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### Initialize Fabric network
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make init # Start a fabric network
|
||||||
|
```
|
||||||
|
|
||||||
|
The command actually calls the `./scripts/initialize.sh` script in the `fabric-cli` container to:
|
||||||
|
|
||||||
|
* create a new application channel `businesschannel`
|
||||||
|
* join all peers into the channel
|
||||||
|
* install and instantiate chaincode `example02` for testing
|
||||||
|
|
||||||
|
This script only needs to be executed once.
|
||||||
|
|
||||||
|
You should see result like the following if the initialization is successful.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
==============================================
|
||||||
|
==========initialize businesschannel==========
|
||||||
|
==============================================
|
||||||
|
|
||||||
|
Channel name : businesschannel
|
||||||
|
Creating channel...
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
===================== All GOOD, initialization completed =====================
|
||||||
|
```
|
||||||
|
|
||||||
|
And there will be new chaincode container generated in the system, looks like
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
9971c9fd1971 dev-peer1.org2.example.com-mycc-1.0 "chaincode -peer.a..." 54 seconds ago Up 53 seconds dev-peer1.org2.example.com-mycc-1.0
|
||||||
|
e3092961b81b dev-peer1.org1.example.com-mycc-1.0 "chaincode -peer.a..." About a minute ago Up About a minute dev-peer1.org1.example.com-mycc-1.0
|
||||||
|
57d3555f56e5 dev-peer0.org2.example.com-mycc-1.0 "chaincode -peer.a..." About a minute ago Up About a minute dev-peer0.org2.example.com-mycc-1.0
|
||||||
|
c9974dbc21d9 dev-peer0.org1.example.com-mycc-1.0 "chaincode -peer.a..." 23 minutes ago Up 23 minutes dev-peer0.org1.example.com-mycc-1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Test Chaincode
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make test_cc # test invoke and query with chaincode
|
||||||
|
```
|
||||||
|
|
||||||
|
More details, see [chaincode test](docs/chaincode_test.md).
|
||||||
|
|
||||||
|
|
||||||
|
## Stop the network
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make stop # stop the fabric network
|
||||||
|
```
|
||||||
|
|
||||||
|
## Clean environment
|
||||||
|
|
||||||
|
Clean all related containers and images.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ make clean # clean the environment
|
||||||
|
```
|
||||||
|
|
||||||
|
## More to learn
|
||||||
|
|
||||||
|
Topics | Description
|
||||||
|
-- | --
|
||||||
|
[Detailed Explanation](./docs/detailed_steps.md) | Explain in detail how a 1-peer network start and test.
|
||||||
|
[Fetch blocks](docs/peer_cmds.md) | Fetch blocks using `peer channel fetch` cmd.
|
||||||
|
[Use Events](./docs/events.md) | Get events with block-listener
|
||||||
|
[Artifacts Generation](docs/artifacts_generation.md) | Will explain the usage of `cryptogen` and `configtxgen` to prepare the artifacts for booting the fabric network.
|
||||||
|
[couchDB](docs/couchdb_usage.md) | Use couchDB as the state DB.
|
||||||
|
[kafka](./kafka/README.md) | Use kafka as the orderering backend
|
||||||
|
[configtxlator](docs/configtxlator.md) | Use configtxlator to convert the configurations
|
||||||
|
[WIP] [Some verification tests](docs/verification_test.md) |
|
||||||
|
|
||||||
|
|
||||||
|
## Acknowledgement
|
||||||
|
* [Hyperledger Fabric](https://github.com/hyperledger/fabric/) project.
|
||||||
|
* [Hyperledger Fabric Getting Started](http://hyperledger-fabric.readthedocs.io/en/latest/getting_started.html).
|
|
@ -0,0 +1,28 @@
|
||||||
|
#! /bin/bash
|
||||||
|
|
||||||
|
echo "replace configtx.yaml and crypto-config.yaml"
|
||||||
|
cp ./peer/example2/configtx.yaml ./peer
|
||||||
|
cp ./peer/example2/crypto-config.yaml ./peer
|
||||||
|
|
||||||
|
echo "replace auto-test script "
|
||||||
|
cp ./peer/example2/new-channel-auto-test-5-peers.sh ./peer/scripts
|
||||||
|
|
||||||
|
echo "replace configtx.yaml"
|
||||||
|
cp ./peer/configtx.yaml /etc/hyperledger/fabric
|
||||||
|
|
||||||
|
echo "Generate new certificates"
|
||||||
|
|
||||||
|
cryptogen generate --config=./peer/crypto-config.yaml --output ./peer/crypto
|
||||||
|
|
||||||
|
echo "Generate new certificates"
|
||||||
|
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./peer/channel-artifacts/orderer_genesis.block
|
||||||
|
|
||||||
|
echo "Create the configuration tx"
|
||||||
|
CHANNEL_NAME=newchannel
|
||||||
|
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./peer/channel-artifacts/channel.tx -channelID ${CHANNEL_NAME}
|
||||||
|
|
||||||
|
echo "Define the anchor peer for Org1 on the channel"
|
||||||
|
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./peer/channel-artifacts/Org1MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org1MSP
|
||||||
|
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./peer/channel-artifacts/Org2MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org2MSP
|
||||||
|
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./peer/channel-artifacts/Org3MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org3MSP
|
||||||
|
|
|
@ -0,0 +1,216 @@
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
---
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
- *Org3
|
||||||
|
TwoOrgsChannel:
|
||||||
|
Consortium: SampleConsortium
|
||||||
|
Application:
|
||||||
|
<<: *ApplicationDefaults
|
||||||
|
Organizations:
|
||||||
|
- *Org1
|
||||||
|
- *Org2
|
||||||
|
- *Org3
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
|
||||||
|
# library to use
|
||||||
|
BCCSP:
|
||||||
|
Default: SW
|
||||||
|
SW:
|
||||||
|
Hash: SHA2
|
||||||
|
Security: 256
|
||||||
|
# Location of Key Store. If this is unset, a location will
|
||||||
|
# be chosen using 'MSPDir'/keystore
|
||||||
|
FileKeyStore:
|
||||||
|
KeyStore:
|
||||||
|
|
||||||
|
- &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
|
||||||
|
|
||||||
|
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
|
||||||
|
# library to use
|
||||||
|
BCCSP:
|
||||||
|
Default: SW
|
||||||
|
SW:
|
||||||
|
Hash: SHA2
|
||||||
|
Security: 256
|
||||||
|
# Location of Key Store. If this is unset, a location will
|
||||||
|
# be chosen using 'MSPDir'/keystore
|
||||||
|
FileKeyStore:
|
||||||
|
KeyStore:
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
|
||||||
|
# library to use
|
||||||
|
BCCSP:
|
||||||
|
Default: SW
|
||||||
|
SW:
|
||||||
|
Hash: SHA2
|
||||||
|
Security: 256
|
||||||
|
# Location of Key Store. If this is unset, a location will
|
||||||
|
# be chosen using 'MSPDir'/keystore
|
||||||
|
FileKeyStore:
|
||||||
|
KeyStore:
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
- &Org3
|
||||||
|
# DefaultOrg defines the organization which is used in the sampleconfig
|
||||||
|
# of the fabric.git development environment
|
||||||
|
Name: Org3MSP
|
||||||
|
|
||||||
|
# ID to load the MSP definition as
|
||||||
|
ID: Org3MSP
|
||||||
|
|
||||||
|
MSPDir: crypto-config/peerOrganizations/org3.example.com/msp
|
||||||
|
|
||||||
|
# BCCSP (Blockchain crypto provider): Select which crypto implementation or
|
||||||
|
# library to use
|
||||||
|
BCCSP:
|
||||||
|
Default: SW
|
||||||
|
SW:
|
||||||
|
Hash: SHA2
|
||||||
|
Security: 256
|
||||||
|
# Location of Key Store. If this is unset, a location will
|
||||||
|
# be chosen using 'MSPDir'/keystore
|
||||||
|
FileKeyStore:
|
||||||
|
KeyStore:
|
||||||
|
|
||||||
|
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.org3.example.com
|
||||||
|
Port: 7051
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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:
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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:
|
|
@ -0,0 +1,82 @@
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# "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
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# "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
|
||||||
|
Template:
|
||||||
|
Count: 2
|
||||||
|
Users:
|
||||||
|
Count: 1
|
||||||
|
- Name: Org3
|
||||||
|
Domain: org3.example.com
|
||||||
|
Template:
|
||||||
|
Count: 1
|
||||||
|
Users:
|
||||||
|
Count: 1
|
|
@ -0,0 +1,94 @@
|
||||||
|
# https://github.com/yeasy/docker-compose-files/tree/master/hyperledger
|
||||||
|
# This compose file will start a Hyperledger Fabric 1.0 MVE, including
|
||||||
|
# * ca
|
||||||
|
# * orderer
|
||||||
|
# * peer
|
||||||
|
# * sdk for testing
|
||||||
|
|
||||||
|
version: '2.0'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca:
|
||||||
|
image: hyperledger/fabric-ca
|
||||||
|
container_name: fabric-ca
|
||||||
|
hostname: ca
|
||||||
|
# command: /go/src/github.com/hyperledger/fabric-ca/bin/ca server start -ca testdata/ec.pem -ca-key testdata/ec-key.pem -config testdata/testconfig.json
|
||||||
|
ports:
|
||||||
|
- "7054:7054"
|
||||||
|
command: fabric-ca-server start -b admin:adminpw
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
container_name: orderer.example.com
|
||||||
|
extends:
|
||||||
|
file: peer-base.yml
|
||||||
|
service: orderer.example.com
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yml
|
||||||
|
service: peer0.org1.example.com
|
||||||
|
container_name: peer0.org1.example.com
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yml
|
||||||
|
service: peer1.org1.example.com
|
||||||
|
container_name: peer1.org1.example.com
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yml
|
||||||
|
service: peer0.org2.example.com
|
||||||
|
container_name: peer0.org2.example.com
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yml
|
||||||
|
service: peer1.org2.example.com
|
||||||
|
container_name: peer1.org2.example.com
|
||||||
|
|
||||||
|
peer0.org3.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yml
|
||||||
|
service: peer0.org3.example.com
|
||||||
|
container_name: peer0.org3.example.com
|
||||||
|
|
||||||
|
cli:
|
||||||
|
extends:
|
||||||
|
file: peer.yml
|
||||||
|
service: peer
|
||||||
|
container_name: fabric-cli
|
||||||
|
hostname: cli
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=cli
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
- CORE_PEER_TLS_ENABLED=false # to enable TLS, change to true
|
||||||
|
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
|
||||||
|
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
|
||||||
|
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
|
||||||
|
links:
|
||||||
|
- peer0.org1.example.com
|
||||||
|
- orderer.example.com
|
||||||
|
volumes:
|
||||||
|
#- ./e2e_cli/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples
|
||||||
|
- ./e2e_cli/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
|
||||||
|
- ./e2e_cli/crypto-config:/etc/hyperledger/fabric/crypto-config
|
||||||
|
- ./example2:/opt/gopath/src/github.com/hyperledger/fabric/peer/example2
|
||||||
|
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
|
||||||
|
- ./e2e_cli/channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
|
||||||
|
- ./e2e_cli/configtx.yaml:/opt/gopath/src/github.com/hyperledger/fabric/peer/configtx.yaml
|
||||||
|
- ./e2e_cli/crypto-config.yaml:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto-config.yaml
|
||||||
|
depends_on:
|
||||||
|
- orderer.example.com
|
||||||
|
- peer0.org1.example.com
|
||||||
|
- peer1.org1.example.com
|
||||||
|
- peer0.org2.example.com
|
||||||
|
- peer1.org2.example.com
|
||||||
|
command: bash -c 'while true; do sleep 20170504; done'
|
||||||
|
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
|
@ -0,0 +1,103 @@
|
||||||
|
#!/bin/bash +x
|
||||||
|
#
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
#set -e
|
||||||
|
|
||||||
|
CHANNEL_NAME=$1
|
||||||
|
: ${CHANNEL_NAME:="mychannel"}
|
||||||
|
echo $CHANNEL_NAME
|
||||||
|
|
||||||
|
export FABRIC_ROOT=$PWD/../..
|
||||||
|
export FABRIC_CFG_PATH=$PWD
|
||||||
|
echo
|
||||||
|
|
||||||
|
OS_ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}')
|
||||||
|
|
||||||
|
## Using docker-compose template replace private key file names with constants
|
||||||
|
function replacePrivateKey () {
|
||||||
|
ARCH=`uname -s | grep Darwin`
|
||||||
|
if [ "$ARCH" == "Darwin" ]; then
|
||||||
|
OPTS="-it"
|
||||||
|
else
|
||||||
|
OPTS="-i"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp docker-compose-e2e-template.yaml docker-compose-e2e.yaml
|
||||||
|
|
||||||
|
CURRENT_DIR=$PWD
|
||||||
|
cd crypto-config/peerOrganizations/org1.example.com/ca/
|
||||||
|
PRIV_KEY=$(ls *_sk)
|
||||||
|
cd $CURRENT_DIR
|
||||||
|
sed $OPTS "s/CA1_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml
|
||||||
|
cd crypto-config/peerOrganizations/org2.example.com/ca/
|
||||||
|
PRIV_KEY=$(ls *_sk)
|
||||||
|
cd $CURRENT_DIR
|
||||||
|
sed $OPTS "s/CA2_PRIVATE_KEY/${PRIV_KEY}/g" docker-compose-e2e.yaml
|
||||||
|
}
|
||||||
|
|
||||||
|
## Generates Org certs using cryptogen tool
|
||||||
|
function generateCerts (){
|
||||||
|
CRYPTOGEN=$FABRIC_ROOT/release/$OS_ARCH/bin/cryptogen
|
||||||
|
|
||||||
|
if [ -f "$CRYPTOGEN" ]; then
|
||||||
|
echo "Using cryptogen -> $CRYPTOGEN"
|
||||||
|
else
|
||||||
|
echo "Building cryptogen"
|
||||||
|
make -C $FABRIC_ROOT release
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "##########################################################"
|
||||||
|
echo "##### Generate certificates using cryptogen tool #########"
|
||||||
|
echo "##########################################################"
|
||||||
|
$CRYPTOGEN generate --config=./crypto-config.yaml
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
## Generate orderer genesis block , channel configuration transaction and anchor peer update transactions
|
||||||
|
function generateChannelArtifacts() {
|
||||||
|
|
||||||
|
CONFIGTXGEN=$FABRIC_ROOT/release/$OS_ARCH/bin/configtxgen
|
||||||
|
if [ -f "$CONFIGTXGEN" ]; then
|
||||||
|
echo "Using configtxgen -> $CONFIGTXGEN"
|
||||||
|
else
|
||||||
|
echo "Building configtxgen"
|
||||||
|
make -C $FABRIC_ROOT release
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "##########################################################"
|
||||||
|
echo "######### Generating Orderer Genesis block ##############"
|
||||||
|
echo "##########################################################"
|
||||||
|
# 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 -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "#################################################################"
|
||||||
|
echo "### Generating channel configuration transaction 'channel.tx' ###"
|
||||||
|
echo "#################################################################"
|
||||||
|
$CONFIGTXGEN -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "#################################################################"
|
||||||
|
echo "####### Generating anchor peer update for Org1MSP ##########"
|
||||||
|
echo "#################################################################"
|
||||||
|
$CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "#################################################################"
|
||||||
|
echo "####### Generating anchor peer update for Org2MSP ##########"
|
||||||
|
echo "#################################################################"
|
||||||
|
$CONFIGTXGEN -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
generateCerts
|
||||||
|
replacePrivateKey
|
||||||
|
generateChannelArtifacts
|
||||||
|
|
|
@ -0,0 +1,155 @@
|
||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
image: hyperledger/fabric-orderer
|
||||||
|
container_name: orderer.example.com
|
||||||
|
hostname: orderer.example.com
|
||||||
|
environment:
|
||||||
|
- ORDERER_GENERAL_LOGLEVEL=INFO
|
||||||
|
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
|
||||||
|
- ORDERER_GENERAL_GENESISMETHOD=file
|
||||||
|
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block #Need to be confirm orderer.block
|
||||||
|
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
|
||||||
|
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
|
||||||
|
- ORDERER_GENERAL_LEDGERTYPE=ram
|
||||||
|
- ORDERER_GENERAL_BATCHTIMEOUT=10s
|
||||||
|
- ORDERER_GENERAL_MAXMESSAGECOUNT=10
|
||||||
|
- ORDERER_GENERAL_MAXWINDOWSIZE=1000
|
||||||
|
- ORDERER_GENERAL_LISTENPORT=7050
|
||||||
|
- ORDERER_RAMLEDGER_HISTORY_SIZE=100
|
||||||
|
- ORDERER_GENERAL_TLS_ENABLED=false # to enable TLS, make this 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:
|
||||||
|
- "7050:7050"
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
|
||||||
|
- ./e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
|
||||||
|
- ./e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
|
||||||
|
command: orderer
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer.yml
|
||||||
|
service: peer
|
||||||
|
container_name: peer0.org1.example.com
|
||||||
|
hostname: peer0.org1.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=true
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- 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
|
||||||
|
ports:
|
||||||
|
- 7051:7051
|
||||||
|
- 7053:7053
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
command: peer node start --peer-defaultchain=false
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer.yml
|
||||||
|
service: peer
|
||||||
|
container_name: peer1.org1.example.com
|
||||||
|
hostname: peer1.org1.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer1.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer1.org1.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=true
|
||||||
|
# - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer.example.com:7050
|
||||||
|
- 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
|
||||||
|
ports:
|
||||||
|
- 8051:7051
|
||||||
|
- 8053:7053
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
command: peer node start --peer-defaultchain=false
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer.yml
|
||||||
|
service: peer
|
||||||
|
container_name: peer0.org2.example.com
|
||||||
|
hostname: peer0.org2.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org2.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org2MSP
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=true
|
||||||
|
# - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer.example.com:7050
|
||||||
|
- 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
|
||||||
|
ports:
|
||||||
|
- 9051:7051
|
||||||
|
- 9053:7053
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
command: peer node start --peer-defaultchain=false
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer.yml
|
||||||
|
service: peer
|
||||||
|
container_name: peer1.org2.example.com
|
||||||
|
hostname: peer1.org2.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer1.org2.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org2MSP
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=true
|
||||||
|
# - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer.example.com:7050
|
||||||
|
- 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
|
||||||
|
ports:
|
||||||
|
- 10051:7051
|
||||||
|
- 10053:7053
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
command: peer node start --peer-defaultchain=false
|
||||||
|
|
||||||
|
peer0.org3.example.com:
|
||||||
|
extends:
|
||||||
|
file: peer.yml
|
||||||
|
service: peer
|
||||||
|
container_name: peer0.org3.example.com
|
||||||
|
hostname: peer0.org3.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org3.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org3.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org3.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org3MSP
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=true
|
||||||
|
# - CORE_PEER_COMMITTER_LEDGER_ORDERER=orderer.example.com:7050
|
||||||
|
- 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
|
||||||
|
ports:
|
||||||
|
- 11051:7051
|
||||||
|
- 11053:7053
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
command: peer node start --peer-defaultchain=false
|
|
@ -0,0 +1,247 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo " ____ _____ _ ____ _____ _____ ____ _____ "
|
||||||
|
echo "/ ___| |_ _| / \ | _ \ |_ _| | ____| |___ \ | ____|"
|
||||||
|
echo "\___ \ | | / _ \ | |_) | | | _____ | _| __) | | _| "
|
||||||
|
echo " ___) | | | / ___ \ | _ < | | |_____| | |___ / __/ | |___ "
|
||||||
|
echo "|____/ |_| /_/ \_\ |_| \_\ |_| |_____| |_____| |_____|"
|
||||||
|
echo
|
||||||
|
|
||||||
|
CHANNEL_NAME="$1"
|
||||||
|
: ${CHANNEL_NAME:="testchannel"}
|
||||||
|
: ${TIMEOUT:="60"}
|
||||||
|
COUNTER=1
|
||||||
|
MAX_RETRY=5
|
||||||
|
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem
|
||||||
|
|
||||||
|
echo "Channel name : "$CHANNEL_NAME
|
||||||
|
|
||||||
|
verifyResult () {
|
||||||
|
if [ $1 -ne 0 ] ; then
|
||||||
|
echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!"
|
||||||
|
echo "================== ERROR !!! FAILED to execute End-2-End Scenario =================="
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
setGlobals () {
|
||||||
|
|
||||||
|
if [ $1 -eq 0 -o $1 -eq 1 ] ; then
|
||||||
|
CORE_PEER_LOCALMSPID="Org1MSP"
|
||||||
|
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
|
||||||
|
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
if [ $1 -eq 0 ]; then
|
||||||
|
CORE_PEER_ADDRESS=peer0.org1.example.com:7051
|
||||||
|
else
|
||||||
|
CORE_PEER_ADDRESS=peer1.org1.example.com:7051
|
||||||
|
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
fi
|
||||||
|
elif [ $1 -eq 4 ] ; then
|
||||||
|
CORE_PEER_LOCALMSPID="Org3MSP"
|
||||||
|
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt
|
||||||
|
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp
|
||||||
|
CORE_PEER_ADDRESS=peer0.org3.example.com:7051
|
||||||
|
else
|
||||||
|
CORE_PEER_LOCALMSPID="Org2MSP"
|
||||||
|
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
|
||||||
|
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
|
||||||
|
if [ $1 -eq 2 ]; then
|
||||||
|
CORE_PEER_ADDRESS=peer0.org2.example.com:7051
|
||||||
|
else
|
||||||
|
CORE_PEER_ADDRESS=peer1.org2.example.com:7051
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
env |grep CORE
|
||||||
|
}
|
||||||
|
|
||||||
|
createChannel() {
|
||||||
|
setGlobals 0
|
||||||
|
|
||||||
|
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
|
||||||
|
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./peer/channel-artifacts/channel.tx >&log.txt
|
||||||
|
else
|
||||||
|
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./peer/channel-artifacts/channel.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
|
||||||
|
fi
|
||||||
|
res=$?
|
||||||
|
cat log.txt
|
||||||
|
verifyResult $res "Channel creation failed"
|
||||||
|
echo "===================== Channel \"$CHANNEL_NAME\" is created successfully ===================== "
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
updateAnchorPeers() {
|
||||||
|
PEER=$1
|
||||||
|
setGlobals $PEER
|
||||||
|
|
||||||
|
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
|
||||||
|
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./peer/channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx >&log.txt
|
||||||
|
else
|
||||||
|
peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./peer/channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA >&log.txt
|
||||||
|
fi
|
||||||
|
res=$?
|
||||||
|
cat log.txt
|
||||||
|
verifyResult $res "Anchor peer update failed"
|
||||||
|
echo "===================== Anchor peers for org \"$CORE_PEER_LOCALMSPID\" on \"$CHANNEL_NAME\" is updated successfully ===================== "
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
## Sometimes Join takes time hence RETRY atleast for 5 times
|
||||||
|
joinWithRetry () {
|
||||||
|
peer channel join -b $CHANNEL_NAME.block >&log.txt
|
||||||
|
res=$?
|
||||||
|
cat log.txt
|
||||||
|
if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then
|
||||||
|
COUNTER=` expr $COUNTER + 1`
|
||||||
|
echo "PEER$1 failed to join the channel, Retry after 2 seconds"
|
||||||
|
sleep 2
|
||||||
|
joinWithRetry $1
|
||||||
|
else
|
||||||
|
COUNTER=1
|
||||||
|
fi
|
||||||
|
verifyResult $res "After $MAX_RETRY attempts, PEER$ch has failed to Join the Channel"
|
||||||
|
}
|
||||||
|
|
||||||
|
joinChannel () {
|
||||||
|
for ch in 0 1 2 3 4; do
|
||||||
|
setGlobals $ch
|
||||||
|
joinWithRetry $ch
|
||||||
|
echo "===================== PEER$ch joined on the channel \"$CHANNEL_NAME\" ===================== "
|
||||||
|
sleep 2
|
||||||
|
echo
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
installChaincode () {
|
||||||
|
PEER=$1
|
||||||
|
setGlobals $PEER
|
||||||
|
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 >&log.txt
|
||||||
|
res=$?
|
||||||
|
cat log.txt
|
||||||
|
verifyResult $res "Chaincode installation on remote peer PEER$PEER has Failed"
|
||||||
|
echo "===================== Chaincode is installed on remote peer PEER$PEER ===================== "
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
instantiateChaincode () {
|
||||||
|
PEER=$1
|
||||||
|
setGlobals $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.example.com:7050 -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" >&log.txt
|
||||||
|
else
|
||||||
|
peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" >&log.txt
|
||||||
|
fi
|
||||||
|
res=$?
|
||||||
|
cat log.txt
|
||||||
|
verifyResult $res "Chaincode instantiation on PEER$PEER on channel '$CHANNEL_NAME' failed"
|
||||||
|
echo "===================== Chaincode Instantiation on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
chaincodeQuery () {
|
||||||
|
PEER=$1
|
||||||
|
echo "===================== Querying on PEER$PEER on channel '$CHANNEL_NAME'... ===================== "
|
||||||
|
setGlobals $PEER
|
||||||
|
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 Query PEER$PEER ...$(($(date +%s)-starttime)) secs"
|
||||||
|
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt
|
||||||
|
test $? -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}')
|
||||||
|
test "$VALUE" = "$2" && let rc=0
|
||||||
|
done
|
||||||
|
echo
|
||||||
|
cat log.txt
|
||||||
|
if test $rc -eq 0 ; then
|
||||||
|
echo "===================== Query on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
|
||||||
|
else
|
||||||
|
echo "!!!!!!!!!!!!!!! Query result on PEER$PEER is INVALID !!!!!!!!!!!!!!!!"
|
||||||
|
echo "================== ERROR !!! FAILED to execute End-2-End Scenario =================="
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
chaincodeInvoke () {
|
||||||
|
PEER=$1
|
||||||
|
setGlobals $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.example.com:7050 -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt
|
||||||
|
else
|
||||||
|
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}' >&log.txt
|
||||||
|
fi
|
||||||
|
res=$?
|
||||||
|
cat log.txt
|
||||||
|
verifyResult $res "Invoke execution on PEER$PEER failed "
|
||||||
|
echo "===================== Invoke transaction on PEER$PEER on channel '$CHANNEL_NAME' is successful ===================== "
|
||||||
|
echo
|
||||||
|
}
|
||||||
|
|
||||||
|
## Create channel
|
||||||
|
echo "Creating channel..."
|
||||||
|
createChannel
|
||||||
|
|
||||||
|
## Join all the peers to the channel
|
||||||
|
echo "Having all peers join the channel..."
|
||||||
|
joinChannel
|
||||||
|
|
||||||
|
## Set the anchor peers for each org in the channel
|
||||||
|
echo "Updating anchor peers using peer0/org1(peer0) for org1..."
|
||||||
|
updateAnchorPeers 0
|
||||||
|
echo "Updating anchor peers using peer0/org2(peer2) for org2..."
|
||||||
|
updateAnchorPeers 2
|
||||||
|
|
||||||
|
updateAnchorPeers 4
|
||||||
|
|
||||||
|
## Install chaincode on Peer0/Org1 and Peer0/Org2
|
||||||
|
echo "Installing chaincode on peer0/org1..."
|
||||||
|
installChaincode 0
|
||||||
|
echo "Install chaincode on peer0/org2.."
|
||||||
|
installChaincode 2
|
||||||
|
echo "Install chaincode on peer0/org3.."
|
||||||
|
installChaincode 4
|
||||||
|
|
||||||
|
#Instantiate chaincode on Peer0/Org2
|
||||||
|
echo "Instantiating chaincode on peer0/org2..."
|
||||||
|
instantiateChaincode 2
|
||||||
|
|
||||||
|
#Query on chaincode on Peer0/Org1
|
||||||
|
echo "Querying chaincode on peer0/org1..."
|
||||||
|
chaincodeQuery 0 100
|
||||||
|
|
||||||
|
#Invoke on chaincode on Peer0/Org1
|
||||||
|
echo "Sending invoke transaction on peer0/org1..."
|
||||||
|
chaincodeInvoke 0
|
||||||
|
|
||||||
|
## Install chaincode on Peer1/Org2
|
||||||
|
echo "Installing chaincode on peer1/org2..."
|
||||||
|
installChaincode 3
|
||||||
|
|
||||||
|
#Query on chaincode on Peer0/Org3, check if the result is 90
|
||||||
|
echo "Querying chaincode on org2/peer1..."
|
||||||
|
chaincodeQuery 4 90
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "===================== All GOOD, End-2-End execution completed ===================== "
|
||||||
|
echo
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo " _____ _ _ ____ _____ ____ _____ "
|
||||||
|
echo "| ____| | \ | | | _ \ | ____| |___ \ | ____|"
|
||||||
|
echo "| _| | \| | | | | | _____ | _| __) | | _| "
|
||||||
|
echo "| |___ | |\ | | |_| | |_____| | |___ / __/ | |___ "
|
||||||
|
echo "|_____| |_| \_| |____/ |_____| |_____| |_____|"
|
||||||
|
echo
|
||||||
|
|
||||||
|
exit 0
|
|
@ -0,0 +1,133 @@
|
||||||
|
# This is the default base file to config env and command
|
||||||
|
# Notice that chaincode is executed inside docker in default net mode
|
||||||
|
# https://github.com/yeasy/docker-compose-files
|
||||||
|
|
||||||
|
# Depends on the hyperledger/fabric-peer image.
|
||||||
|
|
||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca-base:
|
||||||
|
#image: hyperledger/fabric-ca
|
||||||
|
image: yeasy/hyperledger-fabric-ca:1.0.1
|
||||||
|
#image: hyperledger/fabric-ca:x86_64-1.0.1
|
||||||
|
environment:
|
||||||
|
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
|
||||||
|
- FABRIC_CA_SERVER_TLS_ENABLED=true
|
||||||
|
|
||||||
|
orderer-base:
|
||||||
|
image: yeasy/hyperledger-fabric-orderer:1.0.1
|
||||||
|
#image: hyperledger/fabric-orderer:x86_64-1.0.1
|
||||||
|
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_LEDGERTYPE=file
|
||||||
|
- ORDERER_GENERAL_BATCHTIMEOUT=2s
|
||||||
|
- ORDERER_GENERAL_MAXMESSAGECOUNT=10
|
||||||
|
- ORDERER_GENERAL_MAXWINDOWSIZE=1000
|
||||||
|
- ORDERER_GENERAL_LISTENPORT=7050
|
||||||
|
#- ORDERER_RAMLEDGER_HISTORY_SIZE=100 #only useful when use ram ledger
|
||||||
|
# enabled TLS
|
||||||
|
- 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]
|
||||||
|
expose:
|
||||||
|
- "7050" #
|
||||||
|
command: orderer start
|
||||||
|
|
||||||
|
peer-base:
|
||||||
|
image: yeasy/hyperledger-fabric-peer:1.0.1
|
||||||
|
#image: hyperledger/fabric-peer:x86_64-1.0.1
|
||||||
|
environment:
|
||||||
|
#- CORE_PEER_ID=peer0
|
||||||
|
- CORE_PEER_ADDRESSAUTODETECT=false
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=101_default # uncomment this to use specific network
|
||||||
|
#- CORE_PEER_NETWORKID=dev
|
||||||
|
- CORE_PEER_GOSSIP_USELEADERELECTION=true
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=false # this node is the group leader, default to false
|
||||||
|
- CORE_PEER_PROFILE_ENABLED=false
|
||||||
|
- 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
|
||||||
|
expose:
|
||||||
|
- "7050" # Rest
|
||||||
|
- "7051" # Grpc
|
||||||
|
- "7052" # Peer CLI
|
||||||
|
- "7053" # Peer Event
|
||||||
|
- "7054" # eCAP
|
||||||
|
- "7055" # eCAA
|
||||||
|
- "7056" # tCAP
|
||||||
|
- "7057" # eCAA
|
||||||
|
- "7058" # tlsCAP
|
||||||
|
- "7059" # tlsCAA
|
||||||
|
volumes: # docker.sock is mapped as the default CORE_VM_ENDPOINT
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
#volumes:
|
||||||
|
# - /var/run/:/host/var/run/
|
||||||
|
command: peer node start
|
||||||
|
|
||||||
|
peer-base-dev:
|
||||||
|
image: yeasy/hyperledger-fabric:1.0.1
|
||||||
|
environment:
|
||||||
|
#- CORE_PEER_ID=peer0
|
||||||
|
- CORE_PEER_ADDRESSAUTODETECT=false
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=101_default # uncomment this to use specific network
|
||||||
|
#- CORE_PEER_NETWORKID=dev
|
||||||
|
- CORE_PEER_GOSSIP_USELEADERELECTION=true
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=false # this node is the group leader, default to false
|
||||||
|
- CORE_PEER_PROFILE_ENABLED=false
|
||||||
|
- 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
|
||||||
|
expose:
|
||||||
|
- "7050" # Rest
|
||||||
|
- "7051" # Grpc
|
||||||
|
- "7052" # Peer CLI
|
||||||
|
- "7053" # Peer Event
|
||||||
|
- "7054" # eCAP
|
||||||
|
- "7055" # eCAA
|
||||||
|
- "7056" # tCAP
|
||||||
|
- "7057" # eCAA
|
||||||
|
- "7058" # tlsCAP
|
||||||
|
- "7059" # tlsCAA
|
||||||
|
volumes: # docker.sock is mapped as the default CORE_VM_ENDPOINT
|
||||||
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
#volumes:
|
||||||
|
# - /var/run/:/host/var/run/
|
||||||
|
command: bash -c 'bash /tmp/peer_build.sh; peer node start'
|
||||||
|
|
||||||
|
cli-base:
|
||||||
|
image: yeasy/hyperledger-fabric:1.0.1
|
||||||
|
#image: hyperledger/fabric-tools:x86_64-1.0.1
|
||||||
|
tty: true
|
||||||
|
environment:
|
||||||
|
#- GOPATH=/opt/gopath
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_PEER_TLS_ENABLED=true # to enable TLS, change to true
|
||||||
|
- ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
|
||||||
|
- CHANNEL_NAME:="businesschannel"
|
||||||
|
volumes:
|
||||||
|
#- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
|
||||||
|
- ./scripts:/tmp/scripts
|
||||||
|
- ./e2e_cli/channel-artifacts:/tmp/channel-artifacts
|
||||||
|
- ./e2e_cli/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
|
||||||
|
- ./e2e_cli/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml
|
||||||
|
- ./e2e_cli/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
|
||||||
|
- ./e2e_cli/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples
|
||||||
|
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
|
||||||
|
command: bash -c 'while true; do sleep 20170504; done'
|
||||||
|
|
||||||
|
couchdb-base:
|
||||||
|
#container_name: couchdb0
|
||||||
|
image: hyperledger/fabric-couchdb:x86-64-1.0.1
|
||||||
|
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
|
||||||
|
# for example map it to utilize Fauxton User Interface in dev environments.
|
|
@ -0,0 +1,34 @@
|
||||||
|
# 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
|
||||||
|
# * 1 peers in 1 orgs
|
||||||
|
# * cli for testing
|
||||||
|
|
||||||
|
version: '2.0'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: ca
|
||||||
|
|
||||||
|
cli:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: cli
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: orderer.example.com
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer0.org1.example.com
|
||||||
|
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
|
@ -0,0 +1,63 @@
|
||||||
|
|
||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
couchdb0:
|
||||||
|
container_name: couchdb0
|
||||||
|
image: hyperledger/fabric-couchdb:x86_64-1.0.0-beta
|
||||||
|
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
|
||||||
|
# for example map it to utilize Fauxton User Interface in dev environments.
|
||||||
|
ports:
|
||||||
|
- "5984:5984"
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
environment:
|
||||||
|
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
|
||||||
|
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
|
||||||
|
depends_on:
|
||||||
|
- couchdb0
|
||||||
|
|
||||||
|
couchdb1:
|
||||||
|
container_name: couchdb1
|
||||||
|
image: hyperledger/fabric-couchdb:x86_64-1.0.0-beta
|
||||||
|
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
|
||||||
|
# for example map it to utilize Fauxton User Interface in dev environments.
|
||||||
|
ports:
|
||||||
|
- "6984:5984"
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
environment:
|
||||||
|
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
|
||||||
|
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984
|
||||||
|
depends_on:
|
||||||
|
- couchdb1
|
||||||
|
|
||||||
|
couchdb2:
|
||||||
|
container_name: couchdb2
|
||||||
|
image: hyperledger/fabric-couchdb:x86_64-1.0.0-beta
|
||||||
|
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
|
||||||
|
# for example map it to utilize Fauxton User Interface in dev environments.
|
||||||
|
ports:
|
||||||
|
- "7984:5984"
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
environment:
|
||||||
|
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
|
||||||
|
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984
|
||||||
|
depends_on:
|
||||||
|
- couchdb2
|
||||||
|
|
||||||
|
couchdb3:
|
||||||
|
container_name: couchdb3
|
||||||
|
image: hyperledger/fabric-couchdb:x86_64-1.0.0-beta
|
||||||
|
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service,
|
||||||
|
# for example map it to utilize Fauxton User Interface in dev environments.
|
||||||
|
ports:
|
||||||
|
- "8984:5984"
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
environment:
|
||||||
|
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
|
||||||
|
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984
|
||||||
|
depends_on:
|
||||||
|
- couchdb3
|
|
@ -0,0 +1,127 @@
|
||||||
|
# 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: '2.0'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca:
|
||||||
|
image: yeasy/hyperledger-fabric-ca:1.0.1
|
||||||
|
container_name: fabric-ca
|
||||||
|
hostname: ca
|
||||||
|
# command: /go/src/github.com/hyperledger/fabric-ca/bin/ca server start -ca testdata/ec.pem -ca-key testdata/ec-key.pem -config testdata/testconfig.json
|
||||||
|
ports:
|
||||||
|
- "7054:7054"
|
||||||
|
command: fabric-ca-server start -b admin:adminpw
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: orderer.example.com
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer0.org1.example.com
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer1.org1.example.com
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer0.org2.example.com
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer1.org2.example.com
|
||||||
|
|
||||||
|
cli:
|
||||||
|
container_name: fabric-cli
|
||||||
|
hostname: fabric-cli
|
||||||
|
image: yeasy/hyperledger-fabric:1.0.1
|
||||||
|
tty: true
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=fabric-cli
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- CORE_PEER_TLS_ENABLED=false # event-listener doesn't support TLS
|
||||||
|
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
|
||||||
|
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
|
||||||
|
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
|
||||||
|
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
volumes:
|
||||||
|
#- ./e2e_cli/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples
|
||||||
|
- ./e2e_cli/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
|
||||||
|
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
|
||||||
|
- ./e2e_cli/channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
|
||||||
|
- ./e2e_cli/crypto-config:/etc/hyperledger/fabric/crypto-config
|
||||||
|
- ./e2e_cli/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
|
||||||
|
- ./e2e_cli/crypto-config.yaml:/etc/hyperledger/fabric/peer/crypto-config.yaml
|
||||||
|
depends_on:
|
||||||
|
- 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
|
||||||
|
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
|
||||||
|
command: bash -c 'while true; do sleep 20170504; done'
|
||||||
|
|
||||||
|
event-listener:
|
||||||
|
container_name: fabric-event-listener
|
||||||
|
hostname: fabric-event-listener
|
||||||
|
image: yeasy/hyperledger-fabric:1.0.1
|
||||||
|
tty: true
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=fabric-event-listener
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- CORE_PEER_TLS_ENABLED=false # event-listener doesn't support TLS
|
||||||
|
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
|
||||||
|
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
|
||||||
|
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
|
||||||
|
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
volumes:
|
||||||
|
#- ./e2e_cli/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples
|
||||||
|
- ./e2e_cli/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
|
||||||
|
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
|
||||||
|
- ./e2e_cli/channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
|
||||||
|
- ./e2e_cli/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
|
||||||
|
- ./e2e_cli/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml
|
||||||
|
depends_on:
|
||||||
|
- 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
|
||||||
|
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
|
||||||
|
command: bash -c 'block-listener -events-address=peer0.org1.example.com:7053 -events-mspdir=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/ -events-mspid=Org1MSP'
|
||||||
|
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
|
@ -0,0 +1,56 @@
|
||||||
|
# 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: '2.0'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: ca.org1.example.com
|
||||||
|
|
||||||
|
ca.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: ca.org2.example.com
|
||||||
|
|
||||||
|
cli:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: cli
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: orderer.example.com
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer0.org1.example.com
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer1.org1.example.com
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer0.org2.example.com
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: docker-compose-base.yaml
|
||||||
|
service: peer1.org2.example.com
|
||||||
|
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
|
@ -0,0 +1,168 @@
|
||||||
|
# Base compose files for:
|
||||||
|
|
||||||
|
# ca
|
||||||
|
# orderer.example.com
|
||||||
|
# cli
|
||||||
|
# peer0.org1.example.com
|
||||||
|
# peer1.org1.example.com
|
||||||
|
# peer0.org2.example.com
|
||||||
|
# peer1.org2.example.com
|
||||||
|
|
||||||
|
|
||||||
|
version: '2' # v3 does not support 'extends' yet
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca.org1.example.com:
|
||||||
|
#image: yeasy/hyperledger-fabric-ca:1.0.1
|
||||||
|
#image: hyperledger/fabric-ca:x86_64-1.0.1
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: ca-base
|
||||||
|
container_name: ca.org1.example.com
|
||||||
|
hostname: ca.org1.example.com
|
||||||
|
environment:
|
||||||
|
- FABRIC_CA_SERVER_CA_NAME=ca-org1
|
||||||
|
- 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/c843d3f021118963ce5d340e95286e8869bb7bd051454cd4166aa2887a2ad451_sk
|
||||||
|
ports:
|
||||||
|
- "7054:7054"
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
|
||||||
|
command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/c843d3f021118963ce5d340e95286e8869bb7bd051454cd4166aa2887a2ad451_sk -b admin:adminpw -d'
|
||||||
|
|
||||||
|
ca.org2.example.com:
|
||||||
|
#image: yeasy/hyperledger-fabric-ca:1.0.1
|
||||||
|
#image: hyperledger/fabric-ca:x86_64-1.0.1
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: ca-base
|
||||||
|
container_name: ca.org2.example.com
|
||||||
|
hostname: ca.org2.example.com
|
||||||
|
environment:
|
||||||
|
- FABRIC_CA_SERVER_CA_NAME=ca-org2
|
||||||
|
- 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/1ee551a8753171c0377366e96a1d7ec01afddb868c9483cc501b6f8ac7ae752f_sk
|
||||||
|
ports:
|
||||||
|
- "8054:7054"
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
|
||||||
|
command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/1ee551a8753171c0377366e96a1d7ec01afddb868c9483cc501b6f8ac7ae752f_sk -b admin:adminpw -d'
|
||||||
|
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: orderer-base
|
||||||
|
container_name: orderer.example.com
|
||||||
|
hostname: orderer.example.com
|
||||||
|
ports:
|
||||||
|
- "7050:7050"
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
|
||||||
|
- ./e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
|
||||||
|
- ./e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
|
||||||
|
command: orderer start
|
||||||
|
|
||||||
|
cli:
|
||||||
|
#image: yeasy/hyperledger-fabric:1.0.1
|
||||||
|
#image: hyperledger/fabric-tools:x86_64-1.0.1
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: cli-base
|
||||||
|
container_name: fabric-cli
|
||||||
|
hostname: fabric-cli
|
||||||
|
tty: true
|
||||||
|
environment:
|
||||||
|
#- GOPATH=/opt/gopath
|
||||||
|
- CORE_PEER_ID=fabric-cli
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
|
||||||
|
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
|
||||||
|
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
|
||||||
|
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
|
||||||
|
## following are peer nodes ##
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: peer-base
|
||||||
|
container_name: peer0.org1.example.com
|
||||||
|
hostname: peer0.org1.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 7051:7051
|
||||||
|
- 7052:7052
|
||||||
|
- 7053:7053
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: peer-base
|
||||||
|
container_name: peer1.org1.example.com
|
||||||
|
hostname: peer1.org1.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer1.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer1.org1.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 8051:7051
|
||||||
|
- 8052:7052
|
||||||
|
- 8053:7053
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: peer-base
|
||||||
|
container_name: peer0.org2.example.com
|
||||||
|
hostname: peer0.org2.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org2.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org2MSP
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 9051:7051
|
||||||
|
- 9052:7052
|
||||||
|
- 9053:7053
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: peer-base
|
||||||
|
container_name: peer1.org2.example.com
|
||||||
|
hostname: peer1.org2.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer1.org2.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer1.org2.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org2MSP
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 10051:7051
|
||||||
|
- 10052:7052
|
||||||
|
- 10053:7053
|
|
@ -0,0 +1,84 @@
|
||||||
|
# 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
|
||||||
|
# * 1 peer
|
||||||
|
# * cli for testing
|
||||||
|
|
||||||
|
version: '2.0'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca.example.com: # not used currently
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: ca-base
|
||||||
|
container_name: ca.example.com
|
||||||
|
hostname: ca.example.com
|
||||||
|
# command: /go/src/github.com/hyperledger/fabric-ca/bin/ca server start -ca testdata/ec.pem -ca-key testdata/ec-key.pem -config testdata/testconfig.json
|
||||||
|
ports:
|
||||||
|
- "7054:7054"
|
||||||
|
command: fabric-ca-server start -b admin:adminpw
|
||||||
|
|
||||||
|
orderer.example.com: # There can be multiple orderers
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: orderer-base
|
||||||
|
container_name: orderer.example.com
|
||||||
|
hostname: orderer.example.com
|
||||||
|
ports:
|
||||||
|
- "7050:7050"
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
|
||||||
|
- ./e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
|
||||||
|
- ./e2e_cli/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
|
||||||
|
command: orderer start
|
||||||
|
|
||||||
|
cli:
|
||||||
|
#extends:
|
||||||
|
# file: peer-base-dev.yaml
|
||||||
|
# service: peer-base
|
||||||
|
#image: yeasy/hyperledger-fabric:1.0.1
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: cli-base
|
||||||
|
container_name: fabric-cli
|
||||||
|
hostname: fabric-cli
|
||||||
|
tty: true
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=fabric-cli
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
|
||||||
|
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
|
||||||
|
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
|
||||||
|
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
|
||||||
|
volumes:
|
||||||
|
- $GOPATH/src/github.com/hyperledger/fabric:/opt/gopath/src/github.com/hyperledger/fabric
|
||||||
|
- /tmp/:/tmp/
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
extends:
|
||||||
|
file: base.yaml
|
||||||
|
service: peer-base-dev
|
||||||
|
container_name: peer0.org1.example.com
|
||||||
|
hostname: peer0.org1.example.com
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
volumes:
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ./e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 7051:7051
|
||||||
|
- 7052:7052
|
||||||
|
- 7053:7053
|
||||||
|
command: bash -c 'bash /tmp/peer_build.sh; peer node start'
|
||||||
|
#command: peer node start
|
||||||
|
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
|
@ -0,0 +1,77 @@
|
||||||
|
# https://github.com/yeasy/docker-compose-files/tree/master/hyperledger
|
||||||
|
# This compose file will start a Hyperledger Fabric 1.0 MVE, including
|
||||||
|
# * ca
|
||||||
|
# * orderer
|
||||||
|
# * peer
|
||||||
|
# * sdk for testing
|
||||||
|
|
||||||
|
# all peers will join the default testchainid channel after bootup
|
||||||
|
|
||||||
|
version: '2.0'
|
||||||
|
|
||||||
|
services:
|
||||||
|
ca:
|
||||||
|
image: yeasy/hyperledger-fabric-ca:1.0.1
|
||||||
|
container_name: fabric-ca
|
||||||
|
hostname: ca
|
||||||
|
# command: /go/src/github.com/hyperledger/fabric-ca/bin/ca server start -ca testdata/ec.pem -ca-key testdata/ec-key.pem -config testdata/testconfig.json
|
||||||
|
ports:
|
||||||
|
- "7054:7054"
|
||||||
|
command: fabric-ca-server start -b admin:adminpw
|
||||||
|
|
||||||
|
orderer0: # There can be multiple orderers
|
||||||
|
image: yeasy/hyperledger-fabric-orderer:1.0.1
|
||||||
|
container_name: fabric-orderer0
|
||||||
|
hostname: orderer0
|
||||||
|
environment:
|
||||||
|
- ORDERER_GENERAL_LEDGERTYPE=file
|
||||||
|
- ORDERER_GENERAL_BATCHTIMEOUT=10s
|
||||||
|
- ORDERER_GENERAL_MAXMESSAGECOUNT=10
|
||||||
|
- ORDERER_GENERAL_MAXWINDOWSIZE=1000
|
||||||
|
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
|
||||||
|
- ORDERER_GENERAL_LISTENPORT=7050
|
||||||
|
- ORDERER_RAMLEDGER_HISTORY_SIZE=100
|
||||||
|
- CONFIGTX_ORDERER_ORDERERTYPE=solo
|
||||||
|
ports:
|
||||||
|
- "7050:7050"
|
||||||
|
command: orderer
|
||||||
|
|
||||||
|
peer0:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yaml
|
||||||
|
service: peer
|
||||||
|
container_name: fabric-peer0
|
||||||
|
hostname: peer0
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=true
|
||||||
|
links:
|
||||||
|
- orderer0
|
||||||
|
ports:
|
||||||
|
- 7051:7051
|
||||||
|
depends_on:
|
||||||
|
- orderer0
|
||||||
|
command: peer node start -o orderer0:7050
|
||||||
|
|
||||||
|
cli:
|
||||||
|
extends:
|
||||||
|
file: peer-base.yaml
|
||||||
|
service: peer
|
||||||
|
container_name: fabric-cli
|
||||||
|
hostname: cli
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=cli
|
||||||
|
- CORE_PEER_ADDRESS=peer0:7051
|
||||||
|
#- CORE_PEER_LOCALMSPID=Org0MSP
|
||||||
|
links:
|
||||||
|
- peer0
|
||||||
|
- orderer0
|
||||||
|
depends_on:
|
||||||
|
- peer0
|
||||||
|
- orderer0
|
||||||
|
command: bash -c 'while true; do sleep 20170504; done'
|
||||||
|
|
||||||
|
#networks:
|
||||||
|
# default:
|
||||||
|
# external:
|
||||||
|
# name: hyperledger_fabric
|
|
@ -0,0 +1,276 @@
|
||||||
|
## Usage of cryptogen and configtxgen
|
||||||
|
|
||||||
|
To bootup a fabric network, we need:
|
||||||
|
|
||||||
|
* crypto_config: crypto keys/certs for all organizations, see `e2e_cli/crypto-config`
|
||||||
|
* orderer_genesis.block: genesis block to bootup orderer, see `e2e_cli/channel-artifacts`
|
||||||
|
* channel.tx: transaction to create an application channel, see `e2e_cli/channel-artifacts`
|
||||||
|
* Org1MSPanchors.tx, Org2MSPanchors.tx: Transaction to update anchor config in Org1 and Org2, see `e2e_cli/channel-artifacts`
|
||||||
|
|
||||||
|
### Generate crypto-config using cryptogen
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cryptogen generate --config=/etc/hyperledger/fabric/crypto-config.yaml --output ./crypto-config
|
||||||
|
```
|
||||||
|
cryptogen will read configuration from `crypto-config.yaml`, by default it was put under `/etc/hyperledger/fabric/`.
|
||||||
|
|
||||||
|
Then put the generated `crypto-config` under `/etc/hyperledger/fabric/`.
|
||||||
|
|
||||||
|
|
||||||
|
### Generate blocks/txs using [configtxgen](http://hyperledger-fabric.readthedocs.io/en/latest/configtxgen.html?highlight=crypto#)
|
||||||
|
|
||||||
|
By default, configtxgen will read configuration from `/etc/hyperledger/fabric/configtx.yaml`, Please customize the configtx.yaml file before running.
|
||||||
|
|
||||||
|
#### Create orderer genesis block
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/orderer.genesis.block
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Create channel transaction artifact
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ CHANNEL_NAME=businesschannel
|
||||||
|
$ configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID ${CHANNEL_NAME}
|
||||||
|
```
|
||||||
|
|
||||||
|
`channel.tx` is used for creating a new application channel `businesschannel`
|
||||||
|
|
||||||
|
#### Update anchor peer for Organizations on the channel
|
||||||
|
|
||||||
|
Choose peer peer0.org1.example.com as org1's anchor peer, and peer0.org2.example.com as org2's anchor peer.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org1MSP
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org2MSP
|
||||||
|
```
|
||||||
|
|
||||||
|
> more details refer to Example2
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
#### Example1: how to add and re-join a new channel
|
||||||
|
|
||||||
|
This example will explain how to add a new channel without change basic topology that desigend in configtx.yaml and crypto-config.yaml.
|
||||||
|
start a fabric network with `docker-compose-1peer.yaml`, and into container fabric-cli
|
||||||
|
|
||||||
|
* 1 Regenerate `channel.tx` using with new channel name
|
||||||
|
|
||||||
|
Create channel configuration for the to-be-created `testchannel`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: CHANNEL_NAME=testchannel
|
||||||
|
$ root@cli: configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID ${CHANNEL_NAME}
|
||||||
|
```
|
||||||
|
|
||||||
|
* 2 regenerate anchor peer configuratoin for Organizations
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org1MSP
|
||||||
|
|
||||||
|
$ root@cli: configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org2MSP
|
||||||
|
```
|
||||||
|
|
||||||
|
* (optional)execute auto-test script
|
||||||
|
|
||||||
|
You can skip this step, this will quickly check whether the network works, and also you can verify manually.
|
||||||
|
```bash
|
||||||
|
$ root@cli: bash ./peer/scripts/test_1peer.sh testchannel
|
||||||
|
```
|
||||||
|
|
||||||
|
* 3 Create new channel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: peer channel create -o orderer.example.com:7050 -c ${CHANNEL_NAME} -f ./channel-artifacts/channel.tx
|
||||||
|
```
|
||||||
|
|
||||||
|
check whether genrated new block `testchannel.block`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@cli: ls testchannel.block
|
||||||
|
testchannel.block
|
||||||
|
```
|
||||||
|
|
||||||
|
* 4 Join new channel
|
||||||
|
|
||||||
|
Join peer0.org1.example.com to the new channel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: peer channel join -b ${CHANNEL_NAME}.block -o orderer.example.com:7050
|
||||||
|
|
||||||
|
Peer joined the channel!
|
||||||
|
```
|
||||||
|
|
||||||
|
check whether success
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: peer channel list
|
||||||
|
|
||||||
|
Channels peers has joined to:
|
||||||
|
testchannel
|
||||||
|
```
|
||||||
|
|
||||||
|
* 5 Update anchor peer
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: peer channel create -o orderer.example.com:7050 -c ${CHANNEL_NAME} -f ./channel-artifacts/Org1MSPanchors.tx
|
||||||
|
```
|
||||||
|
|
||||||
|
* 6 Install
|
||||||
|
|
||||||
|
```bash
|
||||||
|
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
|
||||||
|
```
|
||||||
|
|
||||||
|
* 7 Instantiate
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@cli: peer chaincode instantiate -o orderer.example.com:7050 -C ${CHANNEL_NAME} -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member')"
|
||||||
|
```
|
||||||
|
|
||||||
|
* 8 Query
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@cli: peer chaincode query -C ${CHANNEL_NAME} -n mycc -c '{"Args":["query","a"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
The output should be:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Query Result: 100
|
||||||
|
UTC [main] main -> INFO 008 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#### Example2: how to add an organization or peer
|
||||||
|
|
||||||
|
This example will explain how to add a new org or peer with changed the basic topology that desigend in configtx.yaml and crypto-config.yaml.
|
||||||
|
|
||||||
|
##### all-in-one
|
||||||
|
|
||||||
|
We privide some instance in current directory, in this case we add a new organization `Org3` and new peer `peer0.org3.example.com`.
|
||||||
|
|
||||||
|
* 1 Generate necessary config and certs
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ sudo docker-compose -f docker-compose-2orgs-4peers-event.yaml up
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ root@cli: ./scripts/add-org.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
> ** notice: For docker-compose-file clean, we did not mount these in the container, you need to mount yourself.
|
||||||
|
|
||||||
|
* 2 Re-setup network
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "clean containers...."
|
||||||
|
docker rm -f `docker ps -aq`
|
||||||
|
|
||||||
|
echo "clean images ..."
|
||||||
|
docker rmi -f `docker images|grep mycc-1.0|awk '{print $3}'`
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ sudo docker-compose -f docker-compose-2orgs-4peers-event.yaml up
|
||||||
|
```
|
||||||
|
|
||||||
|
* 3 execute auto-test
|
||||||
|
|
||||||
|
Throuth this script to test whether the network works.
|
||||||
|
```bash
|
||||||
|
$ root@cli: bash ./scripts/test-5-peers.sh newchannel
|
||||||
|
```
|
||||||
|
|
||||||
|
The final output may look like following
|
||||||
|
|
||||||
|
```bash
|
||||||
|
===================== Query on PEER4 on channel 'newchannel' is successful =====================
|
||||||
|
|
||||||
|
===================== All GOOD, End-2-End execution completed =====================
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
##### manually
|
||||||
|
|
||||||
|
* 1 Modify config
|
||||||
|
|
||||||
|
modify configtx.yaml, crypto-cnfig.yaml and docker-compose files to adapt new change. and replace old file.
|
||||||
|
|
||||||
|
* 2 Bootstrap network with `docker-compose-2orgs-4peers-event.yaml`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker-compose -f docker-compose-2orgs-4peers-event.yaml up
|
||||||
|
```
|
||||||
|
|
||||||
|
> notes:You may encounter some errors at startup and some peers can't start up, It's innocuous, ignore it,
|
||||||
|
because we will restart later, and now we just use tools in cli container.
|
||||||
|
|
||||||
|
|
||||||
|
* 3 Generate new certificates
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ cryptogen generate --config=/etc/hyperledger/fabric/crypto-config.yaml --output ./crypto
|
||||||
|
```
|
||||||
|
|
||||||
|
* 4 Create the genesis block
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@cli: configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/orderer_genesis.block
|
||||||
|
```
|
||||||
|
|
||||||
|
* 5 Create the configuration tx
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@cli: CHANNEL_NAME=newchannel
|
||||||
|
root@cli: configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID ${CHANNEL_NAME}
|
||||||
|
```
|
||||||
|
`channel.tx` is used for generating new channel `newchannel`
|
||||||
|
|
||||||
|
* 6 Define the anchor peer for Orgs on the channel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
root@cli: configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org1MSP
|
||||||
|
|
||||||
|
root@cli: configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org2MSP
|
||||||
|
|
||||||
|
root@cli: configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org3MSPanchors.tx -channelID ${CHANNEL_NAME} -asOrg Org3MSP
|
||||||
|
```
|
||||||
|
|
||||||
|
* 7 Restart network
|
||||||
|
|
||||||
|
As we have changed the configtx.yaml and regenerate `orderer_genesis.block`,
|
||||||
|
we'd better restart orderering service or all the service.
|
||||||
|
now we clean all the old service and boot a new network.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo "clean containers...."
|
||||||
|
docker rm -f `docker ps -aq`
|
||||||
|
|
||||||
|
echo "clean images ..."
|
||||||
|
docker rmi -f `docker images|grep mycc-1.0|awk '{print $3}'`
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ sudo docker-compose -f docker-compose-2orgs.yml up
|
||||||
|
```
|
||||||
|
|
||||||
|
* 8 Execute auto-test script
|
||||||
|
|
||||||
|
Until this step, we complete the network re-setup, and then we will test whether it works.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ root@cli: bash ./scripts/test-5-peers.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
If the network works well. the output may looklike:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
|
||||||
|
===================== All GOOD, End-2-End execution completed =====================
|
||||||
|
|
||||||
|
```
|
|
@ -0,0 +1,35 @@
|
||||||
|
## Chaincode Tests
|
||||||
|
|
||||||
|
All the test command needs to be executed inside the `fabric-cli` container.
|
||||||
|
|
||||||
|
Use the following command to login into the container fabric-cli
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
```
|
||||||
|
|
||||||
|
After finish the chaincode tests, you can log-out by `exit`.
|
||||||
|
|
||||||
|
|
||||||
|
### Chaincode Operations
|
||||||
|
|
||||||
|
You can execute some chaincode operations, such as `query` or `invoke`,
|
||||||
|
and you can modify the parameters and execute this script repeatedly.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ bash ./scripts/test_4peers.sh #execute in container fabric-cli
|
||||||
|
```
|
||||||
|
|
||||||
|
You should see the following output:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP
|
||||||
|
UTC [msp] GetDefaultSigningIdentity -> DEBU 005 Obtaining default signing identity
|
||||||
|
UTC [msp/identity] Sign -> DEBU 006 Sign: plaintext: 0AB7070A6D08031A0C08C3EAE9C90510...6D7963631A0A0A0571756572790A0161
|
||||||
|
UTC [msp/identity] Sign -> DEBU 007 Sign: digest: FA308EF50C4812BADB60D58CE15C1CF41089EFB93B27D46885D92C92F55E98A0
|
||||||
|
Query Result: 80
|
||||||
|
UTC [main] main -> INFO 008 Exiting.....
|
||||||
|
===================== Query on PEER3 on channel 'businesschannel' is successful =====================
|
||||||
|
|
||||||
|
===================== All GOOD, End-2-End execution completed =====================
|
||||||
|
```
|
|
@ -0,0 +1,195 @@
|
||||||
|
## Start the configtxlator
|
||||||
|
|
||||||
|
First start a fabric network with docker-compose-2orgs-4peers.yaml, and make sure the network can work,
|
||||||
|
then we will use `configtxlator` to start an http server listening on the designated port and process request.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fab-cli bash
|
||||||
|
$ configtxlator start
|
||||||
|
UTC [configtxlator] startServer -> INFO 001 Serving HTTP requests on 0.0.0.0:7059
|
||||||
|
|
||||||
|
```
|
||||||
|
This logs appears, indicating startup successful.
|
||||||
|
|
||||||
|
## Function
|
||||||
|
|
||||||
|
### translation
|
||||||
|
|
||||||
|
#### /protolator/decode/{msgName}
|
||||||
|
|
||||||
|
Any of the configuration related protos, including `common.Block`, `common.Envelope`, `common.ConfigEnvelope`,
|
||||||
|
`common.ConfigUpdateEnvelope`, `common.Configuration`, and `common.ConfigUpdate` are valid targets for these URLs.
|
||||||
|
this will produces human readable version of config, such as translate to json
|
||||||
|
|
||||||
|
Execute following command in new terminal,
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ cd channel-artifacts
|
||||||
|
$ curl -X POST --data-binary @businesschannel_0.block http://127.0.0.1:7059/protolator/decode/common.Block > businesschannel_0.json
|
||||||
|
```
|
||||||
|
|
||||||
|
for channel.tx, use following msgType.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST --data-binary @channel.tx http://127.0.0.1:7059/protolator/decode/common.Envelope > channel.json
|
||||||
|
```
|
||||||
|
|
||||||
|
#### /protolator/encode/{msgName}
|
||||||
|
|
||||||
|
And we can transform json to proto.
|
||||||
|
```bash
|
||||||
|
$ curl -X POST --data-binary @businesschannel_0.json http://127.0.0.1:7059/protolator/encode/common.Block > businesschannel_0.block
|
||||||
|
```
|
||||||
|
|
||||||
|
### Re-Configuration example
|
||||||
|
|
||||||
|
1. here we will introduce how to re-configuration config.block, first fetch the block and translate it to json.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
|
||||||
|
|
||||||
|
$ peer channel fetch config -o orderer.example.com:7050 -c businesschannel --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA|xargs mv true config_block.pb
|
||||||
|
|
||||||
|
$ peer channel fetch config config_block.pb -o orderer.example.com:7050 -c businesschannel # with no-tls
|
||||||
|
|
||||||
|
$ curl -X POST --data-binary @config_block.pb http://127.0.0.1:7059/protolator/decode/common.Block > config_block.json
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Extract the config section from the block:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ apt-get install jq
|
||||||
|
$ jq .data.data[0].payload.data.config config_block.json > config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
3. edit the config.json, set the batch size to 11, and saving it as update_config.json
|
||||||
|
|
||||||
|
```bash
|
||||||
|
4. $ jq ".channel_group.groups.Orderer.values.BatchSize.value.max_message_count = 11" config.json > updated_config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Re-encode both the original config, and the updated config into proto:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ curl -X POST --data-binary @config.json http://127.0.0.1:7059/protolator/encode/common.Config > config.pb
|
||||||
|
$ curl -X POST --data-binary @updated_config.json http://127.0.0.1:7059/protolator/encode/common.Config > updated_config.pb
|
||||||
|
```
|
||||||
|
|
||||||
|
6. send them to the configtxlator service to compute the config update which transitions between the two.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ curl -X POST -F original=@config.pb -F updated=@updated_config.pb http://127.0.0.1:7059/configtxlator/compute/update-from-configs -F channel=businesschannel > config_update.pb
|
||||||
|
```
|
||||||
|
|
||||||
|
7. we decode the ConfigUpdate so that we may work with it as text:
|
||||||
|
```bash
|
||||||
|
$ curl -X POST --data-binary @config_update.pb http://127.0.0.1:7059/protolator/decode/common.ConfigUpdate > config_update.json
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Then, we wrap it in an envelope message:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ echo '{"payload":{"header":{"channel_header":{"channel_id":"businesschannel", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' > config_update_as_envelope.json
|
||||||
|
```
|
||||||
|
|
||||||
|
9. Next, convert it back into the proto form of a full fledged config transaction:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ curl -X POST --data-binary @config_update_as_envelope.json http://127.0.0.1:7059/protolator/encode/common.Envelope > config_update_as_envelope.pb
|
||||||
|
````
|
||||||
|
|
||||||
|
10. Finally, submit the config update transaction to ordering to perform a config update.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ CORE_PEER_LOCALMSPID=OrdererMSP
|
||||||
|
$ CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp
|
||||||
|
|
||||||
|
$ peer channel update -o orderer.example.com:7050 -c businesschannel -f config_update_as_envelope.pb --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA
|
||||||
|
$ peer channel update -f config_update_as_envelope.pb -o orderer.example.com:7050 -c businesschannel # with no-tls
|
||||||
|
```
|
||||||
|
|
||||||
|
### [WIP]Add an organization
|
||||||
|
|
||||||
|
1. Execute `configtxgen` to generate `channel.tx`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ORDERER_GENERAL_GENESISPROFILE=SampleDevModSolo #Change this env before start ordering service.
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ configtxgen -profile SampleDevModSolo -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID businesschannel
|
||||||
|
```
|
||||||
|
|
||||||
|
2. create channel use channel.tx, then we will get block businesschannel.block
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer channel create -o orderer.example.com:7050 -c businesschannel -f ./channel-artifacts/channel.tx
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start configtxlator
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ configtxlator start
|
||||||
|
```
|
||||||
|
|
||||||
|
4. In a new window, decoding current genesis block
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ curl -X POST --data-binary @businesschannel.block http://127.0.0.1:7059/protolator/decode/common.Block > businesschannel.json
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Extract current config
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jq .data.data[0].payload.data.config businesschannel.json > config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
6. generating new config
|
||||||
|
|
||||||
|
```bash
|
||||||
|
jq '. * {"channel_group":{"groups":{"Application":{"groups":{"ExampleOrg": .channel_group.groups.Application.groups.SampleOrg}}}}}' config.json |
|
||||||
|
jq '.channel_group.groups.Application.groups.ExampleOrg.values.MSP.value.config.name = "ExampleOrg"' > update_config.json
|
||||||
|
```
|
||||||
|
|
||||||
|
7. Translate config.json and update_config.json to proto
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST --data-binary @config.json http://127.0.0.1:7059/protolator/encode/common.Config > config.pb
|
||||||
|
curl -X POST --data-binary @update_config.json http://127.0.0.1:7059/protolator/encode/common.Config > update_config.pb
|
||||||
|
```
|
||||||
|
|
||||||
|
8. Computing config update
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST -F original=@config.pb -F updated=@update_config.pb http://127.0.0.1:7059/configtxlator/compute/update-from-configs -F channel=businesschannel > config_update.pb
|
||||||
|
```
|
||||||
|
|
||||||
|
9. Decoding config update
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST --data-binary @config_update.pb http://127.0.0.1:7059/protolator/decode/common.ConfigUpdate > config_update.json
|
||||||
|
```
|
||||||
|
|
||||||
|
10. Generating config update envelope
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo '{"payload":{"header":{"channel_header":{"channel_id":"businesschannel", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' > config_update_in_envelope.json
|
||||||
|
```
|
||||||
|
|
||||||
|
11. Next, convert it back into the proto form of a full fledged config transaction:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST --data-binary @config_update_in_envelope.json http://127.0.0.1:7059/protolator/encode/common.Envelope > config_update_in_envelope.pb
|
||||||
|
```
|
||||||
|
|
||||||
|
12. Sending config update to channel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ CORE_PEER_LOCALMSPID=OrdererMSP
|
||||||
|
$ CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp
|
||||||
|
|
||||||
|
$ peer channel update -o orderer.example.com:7050 -c businesschannel -f config_update_in_envelope.pb --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA
|
||||||
|
$ (optional)peer channel update -f config_update_as_envelope.pb -o orderer.example.com:7050 -c businesschannel # with no-tls
|
||||||
|
```
|
|
@ -0,0 +1,32 @@
|
||||||
|
|
||||||
|
### Start network with CouchDB
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker-compose -f docker-compose-2orgs-4peers.yaml -f docker-compose-2orgs-4peers-couchdb.yaml up
|
||||||
|
```
|
||||||
|
|
||||||
|
To use CouchDB instead of the default database leveldb, The same chaincode functions are available with CouchDB, however, there is the
|
||||||
|
added ability to perform rich and complex queries against the state database
|
||||||
|
data content contingent upon the chaincode data being modeled as JSON
|
||||||
|
|
||||||
|
### Test chaincode_example02
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec -it fabric-cli bash
|
||||||
|
|
||||||
|
bash ./scripts/initialize.sh
|
||||||
|
|
||||||
|
bash ./scripts/test_4peers.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
You can use chaincode_example02 chaincode against the CouchDB state database
|
||||||
|
using the steps outlined above, however in order to exercise the CouchDB query
|
||||||
|
capabilities you will need to use a chaincode that has data modeled as JSON.
|
||||||
|
(e.g. marbles02)
|
||||||
|
|
||||||
|
### [WIP] [Test example marbles02](https://github.com/hyperledger/fabric/blob/master/examples/chaincode/go/marbles02/marbles_chaincode.go)
|
||||||
|
|
||||||
|
### Interact with CouchDb by WEB-UI
|
||||||
|
|
||||||
|
The browser is `http://localhost:5984/_utils`, then you will find a database named `businesschannel`
|
||||||
|
|
|
@ -0,0 +1,122 @@
|
||||||
|
## Use default channel
|
||||||
|
|
||||||
|
By default, all the peer will join the default chain of `testchainid`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ peer channel list
|
||||||
|
Channels peers has joined to:
|
||||||
|
testchainid
|
||||||
|
UTC [main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
After the cluster is synced successfully, you can validate by install/instantiate, invoking or querying chaincode from the container or from the host.
|
||||||
|
|
||||||
|
### install&instantiate
|
||||||
|
Use `docker exec -it fabric-cli bash` to open a bash inside container `fabric-cli`, which will accept our chaincode testing commands of `install&instantiate`, `invoke` and `query`.
|
||||||
|
|
||||||
|
Inside the container, run the following command to install a new chaincode of the example02. The chaincode will initialize two accounts: `a` and `b`, with value of `100` and `200`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode install -v 1.0 -n test_cc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
|
||||||
|
```
|
||||||
|
This will take a while, and the result may look like following.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[golang-platform] writeGopathSrc -> INFO 001 rootDirectory = /go/src
|
||||||
|
container] WriteFolderToTarPackage -> INFO 002 rootDirectory = /go/src
|
||||||
|
[main] main -> INFO 003 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
Then instantiate the chaincode test_cc on defaule channel testchainid.
|
||||||
|
```bash
|
||||||
|
$ peer chaincode instantiate -v 1.0 -n test_cc -c '{"Args":["init","a","100","b","200"]}' -o orderer0:7050
|
||||||
|
```
|
||||||
|
|
||||||
|
This will take a while, and the result may look like following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
|
||||||
|
UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
|
||||||
|
UTC [main] main -> INFO 003 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
There should be no error in the return log, and in the peer nodes's output.
|
||||||
|
Wait several seconds till the deploy is finished.
|
||||||
|
|
||||||
|
If the `peer chaincode install` and `peer chaincode instantiate` commands are executed successfully, there will generate a new chaincode container, besides the 4 existing one, name like `dev-peer0-test_cc-1.0`.
|
||||||
|
```bash
|
||||||
|
$ docker ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
cf7bf529f214 dev-peer0-test_cc-1.0 "chaincode -peer.a..." 58 seconds ago Up 58 seconds dev-peer0-test_cc-1.0
|
||||||
|
44b6870b0802 hyperledger/fabric-peer "bash -c 'while tr..." 14 minutes ago Up 14 minutes 7050-7059/tcp fabric-cli
|
||||||
|
ed2c4927c0ed hyperledger/fabric-peer "peer node start -..." 14 minutes ago Up 14 minutes 7050/tcp, 7052-7059/tcp, 0.0.0.0:7051->7051/tcp fabric-peer0
|
||||||
|
af5ba8f213bb hyperledger/fabric-orderer "orderer" 14 minutes ago Up 14 minutes 0.0.0.0:7050->7050/tcp fabric-orderer0
|
||||||
|
bbe31b98445f hyperledger/fabric-ca "fabric-ca-server ..." 14 minutes ago Up 14 minutes 7054/tcp, 0.0.0.0:7054->7054/tcp fabric-ca
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
And will also generate a new chaincode image, name like `dev-peer0-test_cc-1.0`.
|
||||||
|
```bash
|
||||||
|
$ docker images
|
||||||
|
REPOSITORY TAG IMAGE ID CREATED SIZE
|
||||||
|
dev-peer0-test_cc-1.0 latest 84e5422eead5 About a minute ago 176 MB
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query
|
||||||
|
Inside the container, query the existing value of `a` and `b`.
|
||||||
|
|
||||||
|
*Notice that the query method can be called by invoke a transaction.*
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -n test_cc -c '{"Args":["query","a"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
The final output may look like the following, with a payload value of `100`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Query Result: 100
|
||||||
|
[main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
Query the value of `b`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -n test_cc -c '{"Args":["query","b"]}' -o orderer0:7050
|
||||||
|
```
|
||||||
|
|
||||||
|
The final output may look like the following, with a payload value of `200`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Query Result: 200
|
||||||
|
[main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### Invoke
|
||||||
|
Inside the container, invoke a transaction to transfer `10` from `a` to `b`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode invoke -n test_cc -c '{"Args":["invoke","a","b","10"]}' -o orderer0:7050
|
||||||
|
```
|
||||||
|
|
||||||
|
The final result may look like the following, the response should be `OK`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
[chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Invoke result: version:1 response:<status:200 message:"OK" > payload:"\n \215\263\337\322u\323?\242t$s\035l\270Ta\270\270+l6\322X\346\365k\020\215Phy\260\022C\n<\002\004lccc\001\007test_cc\004\001\001\001\001\000\000\007test_cc\002\001a\004\001\001\001\001\001b\004\001\001\001\001\002\001a\000\00290\001b\000\003210\000\032\003\010\310\001" endorsement:<endorser:"\n\007DEFAULT\022\232\007-----BEGIN -----\nMIICjDCCAjKgAwIBAgIUBEVwsSx0TmqdbzNwleNBBzoIT0wwCgYIKoZIzj0EAwIw\nfzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNh\nbiBGcmFuY2lzY28xHzAdBgNVBAoTFkludGVybmV0IFdpZGdldHMsIEluYy4xDDAK\nBgNVBAsTA1dXVzEUMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMTYxMTExMTcwNzAw\nWhcNMTcxMTExMTcwNzAwWjBjMQswCQYDVQQGEwJVUzEXMBUGA1UECBMOTm9ydGgg\nQ2Fyb2xpbmExEDAOBgNVBAcTB1JhbGVpZ2gxGzAZBgNVBAoTEkh5cGVybGVkZ2Vy\nIEZhYnJpYzEMMAoGA1UECxMDQ09QMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE\nHBuKsAO43hs4JGpFfiGMkB/xsILTsOvmN2WmwpsPHZNL6w8HWe3xCPQtdG/XJJvZ\n+C756KEsUBM3yw5PTfku8qOBpzCBpDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYw\nFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOFC\ndcUZ4es3ltiCgAVDoyLfVpPIMB8GA1UdIwQYMBaAFBdnQj2qnoI/xMUdn1vDmdG1\nnEgQMCUGA1UdEQQeMByCCm15aG9zdC5jb22CDnd3dy5teWhvc3QuY29tMAoGCCqG\nSM49BAMCA0gAMEUCIDf9Hbl4xn3z4EwNKmilM9lX2Fq4jWpAaRVB97OmVEeyAiEA\n25aDPQHGGq2AvhKT0wvt08cX1GTGCIbfmuLpMwKQj38=\n-----END -----\n" signature:"0E\002!\000\271\232\230\261\336\352ow\021V3\224\252\217\362vzM'\213\376@2\306/\201=\213\023\244\310%\002 \014\277\362|\223\342\277Pk5(\004\331\014\021\307\273\351/]:\020\232\013d\261\035+\266\265\305<" >
|
||||||
|
[main] main -> INFO 002 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
### Query
|
||||||
|
Query again the existing value of `a` and `b`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -n test_cc -c '{"Args":["query","a"]}'
|
||||||
|
```
|
||||||
|
The new value of `a` should be 90.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -n test_cc -c '{"Args":["query","b"]}'
|
||||||
|
```
|
||||||
|
The new value of `b` should be 210.
|
|
@ -0,0 +1,221 @@
|
||||||
|
### Explain 1-peer usage step by step
|
||||||
|
|
||||||
|
This section will show you how to operate the chaincode in detail.
|
||||||
|
first start fabric network with `docker-compose-1peer.yaml`, and we will obtain the basic environmet that can be operated.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker-compose -f docker-compose-1peer.yaml up
|
||||||
|
```
|
||||||
|
|
||||||
|
There will be 4 containers running successfully.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
6688f290a9b9 hyperledger/fabric-peer "bash -c 'while tr..." About a minute ago Up About a minute 7050-7059/tcp fabric-cli
|
||||||
|
6ddbbd972ac3 hyperledger/fabric-peer "peer node start -..." About a minute ago Up About a minute 7050/tcp, 0.0.0.0:7051->7051/tcp, 7052/tcp, 7054-7059/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
|
||||||
|
4afc759e0dc9 hyperledger/fabric-orderer "orderer" About a minute ago Up About a minute 0.0.0.0:7050->7050/tcp orderer.example.com
|
||||||
|
bea1154c7162 hyperledger/fabric-ca "fabric-ca-server ..." About a minute ago Up About a minute 7054/tcp, 0.0.0.0:7054->7054/tcp fabric-ca
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Create artifacts
|
||||||
|
|
||||||
|
**This step can be safely skipped.**.
|
||||||
|
|
||||||
|
As we already put the needed artifacts `orderer.genesis.block` and `channel.tx` under `e2e_cli/channel-artifacts/`.
|
||||||
|
|
||||||
|
Detailed steps in [GenerateArtifacts](artifacts_generation.md) explains the creation of `orderer.genesis.block` (needed by orderering service) and `channel.tx` (needed by cli to create new channel) and crypto related configuration files.
|
||||||
|
|
||||||
|
#### Create new channel
|
||||||
|
|
||||||
|
Create a new channel named `mychannel` with the existing `channel.tx` file.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
```
|
||||||
|
Into the container and execute following commands:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ CHANNEL_NAME="businesschannel"
|
||||||
|
$ peer channel create -o orderer.example.com:7050 -c ${CHANNEL_NAME} -f ./channel-artifacts/channel.tx
|
||||||
|
```
|
||||||
|
The cmd will return lots of info, which is the content of the configuration block.
|
||||||
|
|
||||||
|
And a block with the same name of the channel will be created locally.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ls businesschannel.block
|
||||||
|
businesschannel.block
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the log output of `orderer.example.com`, should find some message like
|
||||||
|
|
||||||
|
```bash
|
||||||
|
orderer.example.com | UTC [orderer/multichain] newChain -> INFO 004 Created and starting new chain newchannel
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Join the channel
|
||||||
|
|
||||||
|
Use the following command to join `peer0.org1.example.com` the channel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer channel join -b ${CHANNEL_NAME}.block
|
||||||
|
|
||||||
|
Peer joined the channel!
|
||||||
|
```
|
||||||
|
|
||||||
|
Will receive the `Peer joined the channel!` response if succeed.
|
||||||
|
|
||||||
|
Then use the following command, we will find the channels that peers joined.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer channel list
|
||||||
|
Channels peers has joined to:
|
||||||
|
mychannel
|
||||||
|
2017-04-11 03:44:40.313 UTC [main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Update anchor peers
|
||||||
|
|
||||||
|
The `configtx.yaml` file contains the definitions for our sample network and presents the topology of the network components - three members (OrdererOrg, Org1 & Org2), But in this MVE, we just use OrdererOrg and Org1, org1 has only peer(pee0.org1), and chose it as anchor peers for Org1.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer channel create -o orderer.example.com:7050 -c ${CHANNEL_NAME} -f ./channel-artifacts/Org1MSPanchors.tx
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Install&Instantiate
|
||||||
|
|
||||||
|
First `install` a chaincode named `mycc` to `peer0`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
|
||||||
|
```
|
||||||
|
|
||||||
|
This will take a while, and the result may look like following.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
UTC [golang-platform] writeGopathSrc -> INFO 004 rootDirectory = /go/src
|
||||||
|
UTC [container] WriteFolderToTarPackage -> INFO 005 rootDirectory = /go/src
|
||||||
|
UTC [main] main -> INFO 006 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
Then `instantiate` the chaincode mycc on channel `mychannel`, with initial args and the endorsement policy.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode instantiate -o orderer.example.com:7050 -C ${CHANNEL_NAME} -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member')"
|
||||||
|
```
|
||||||
|
|
||||||
|
This will take a while, and the result may look like following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default escc
|
||||||
|
UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 005 Using default vscc
|
||||||
|
UTC [main] main -> INFO 006 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
Now in the system, there will be a new `dev-peer0.org1.example.com-mycc-1.0` image and a `dev-peer0.org1.example.com-mycc-1.0` chaincode container.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crluser@baas-test2:~$ docker ps
|
||||||
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
|
7aa088c76597 dev-peer0.org1.example.com-mycc-1.0 "chaincode -peer.a..." 10 seconds ago Up 9 seconds dev-peer0.org1.example.com-mycc-1.0
|
||||||
|
eb1d9c73b26b hyperledger/fabric-peer "bash -c 'while tr..." About a minute ago Up About a minute 7050-7059/tcp fabric-cli
|
||||||
|
2d6fd4f61e2b hyperledger/fabric-peer "peer node start -..." About a minute ago Up About a minute 7050/tcp, 0.0.0.0:7051->7051/tcp, 7052/tcp, 7054-7059/tcp, 0.0.0.0:7053->7053/tcp peer0.org1.example.com
|
||||||
|
832dcc64cc1b hyperledger/fabric-orderer "orderer" About a minute ago Up About a minute 0.0.0.0:7050->7050/tcp orderer.example.com
|
||||||
|
c87095528f76 hyperledger/fabric-ca "fabric-ca-server ..." About a minute ago Up About a minute 7054/tcp, 0.0.0.0:7054->7054/tcp fabric-ca
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Query
|
||||||
|
|
||||||
|
Query the existing value of `a` and `b`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -C ${CHANNEL_NAME} -n mycc -c '{"Args":["query","a"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
The result may look like following, with a payload value of `100`.
|
||||||
|
```bash
|
||||||
|
Query Result: 100
|
||||||
|
[main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -C ${CHANNEL_NAME} -n mycc -c '{"Args":["query","a"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
The result may look like following, with a payload value of `200`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Query Result: 200
|
||||||
|
[main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
#### Invoke
|
||||||
|
|
||||||
|
Inside the container, invoke a transaction to transfer `10` from `a` to `b`.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode invoke -o orderer.example.com:7050 -C ${CHANNEL_NAME} -n mycc -c '{"Args":["invoke","a","b","10"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
The result may look like following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 001 Invoke result: version:1 response:<status:200 message:"OK" > payload:"\n qm\251\207\312\277\256\261b\317:\300\000\014\203`\005\304\254\304,$a\360\327\010\342\342/y]\323\022X\nQ\022\031\n\004lccc\022\021\n\017\n\007test_cc\022\004\010\001\020\001\0224\n\007test_cc\022)\n\t\n\001a\022\004\010\001\020\001\n\t\n\001b\022\004\010\001\020\001\032\007\n\001a\032\00290\032\010\n\001b\032\003210\032\003\010\310\001" endorsement:<endorser:"\n\007Org0MSP\022\210\004-----BEGIN -----\nMIIBYzCCAQmgAwIBAwICA+gwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwIcGVlck9y\nZzAwHhcNMTcwMjIwMTkwNjExWhcNMTgwMjIwMTkwNjExWjAQMQ4wDAYDVQQDDAVw\nZWVyMDBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEF6dfqjqfbIgZuOR+dgoJMl\n/FaUlGI70A/ixmVUY83Yp4YtV3FDBSOPiO5O+s8pHnpbwB1LqhrxAx1Plr0M/UWj\nUDBOMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFBY2bc84vLEwkX1fSAER2p48jJXw\nMB8GA1UdIwQYMBaAFFQzuQR1RZP/Qn/BNDtGSa8n4eN/MAoGCCqGSM49BAMCA0gA\nMEUCIQDeDZ71L+OTYcbbqiDNRf0L8OExO59mH1O3xpdwMAM0MgIgXySG4sv9yV31\nWcWRFfRFyu7o3T72kqiLZ1nkDuJ8jWI=\n-----END -----\n" signature:"0E\002!\000\220M'\245\230do\310>\277\251j\021$\250\237H\353\377\331:\230\362n\216\224~\033\240\006\367%\002 \014\240|h\346\250\356\372\353\301;#\372\027\276!\252F\334/\221\210\254\215\363\235\341v\217\236\274<" >
|
||||||
|
2017-04-06 09:47:15.993 UTC [main] main -> INFO 002 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Query
|
||||||
|
|
||||||
|
And then query the value of `a` and `b`.
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -C ${CHANNEL_NAME} -n mycc -c '{"Args":["query","a"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Query Result: 90
|
||||||
|
[main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
The value of `a` should be `90`.
|
||||||
|
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer chaincode query -C ${CHANNEL_NAME} -n mycc -c '{"Args":["query","b"]}'
|
||||||
|
```
|
||||||
|
|
||||||
|
The value of `b` should be `210`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Query Result: 210
|
||||||
|
[main] main -> INFO 001 Exiting.....
|
||||||
|
```
|
||||||
|
|
||||||
|
Finally, the output of the chaincode containers may look like following.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker logs -f dev-peer0.org1.example.com-mycc-1.0
|
||||||
|
ex02 Init
|
||||||
|
Aval = 100, Bval = 200
|
||||||
|
ex02 Invoke
|
||||||
|
Query Response:{"Name":"a","Amount":"100"}
|
||||||
|
ex02 Invoke
|
||||||
|
Aval = 90, Bval = 210
|
||||||
|
ex02 Invoke
|
||||||
|
Query Response:{"Name":"b","Amount":"210"}
|
||||||
|
ex02 Invoke
|
||||||
|
Query Response:{"Name":"a","Amount":"90"}
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
#### (optional) All-in-one testing operation
|
||||||
|
|
||||||
|
Run this script will check whether the MVE bootstrap success.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ bash ./scripts/test_1peer.sh
|
||||||
|
```
|
|
@ -0,0 +1,33 @@
|
||||||
|
## Events
|
||||||
|
Events didn't support TLS, so make sure TLS has been disabled by setting *_TLS_ENABLED=false in peer-base.yaml and orderer-base.yaml
|
||||||
|
Next, start the network with following command:
|
||||||
|
```bash
|
||||||
|
$ bash scripts/start_fabric.sh docker-compose-2orgs-4peers-event.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
when the network starts successfully, we started a block-listener in container `fabric-event-listener`.
|
||||||
|
so observe the output of the service fabric-event-listener.
|
||||||
|
|
||||||
|
Listening logs at a new terminal,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker logs -f fabric-event-listener
|
||||||
|
```
|
||||||
|
|
||||||
|
So when we do chaincode operations in container `fabric-cli`,
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ docker exec -it fabric-cli bash
|
||||||
|
$ bash ./scripts/initialize.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
then we will get some events at listening terminal looks like following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Received block
|
||||||
|
--------------
|
||||||
|
Received transaction from channel businesschannel:
|
||||||
|
[header:<channel_header:"\010\003\032\014\010\305\326\216\312\005\020\371\326\244\314\003\"\017businesschannel*@
|
||||||
|
633caf1cd9796d49a58898c873bd10055867113f4eeb051a057acbce7df0ed59:\010\022\006\022\004lscc"
|
||||||
|
signature_header:"\n\250\006\n\007Org2MSP\022\234\006-----BEGIN...
|
||||||
|
```
|
|
@ -0,0 +1,37 @@
|
||||||
|
## peer channel fetch
|
||||||
|
|
||||||
|
### Under no-tls
|
||||||
|
|
||||||
|
When you set *TLS_ENABLED=false, then you can fetch blocks using following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ NUM= the block's num you want to fetch
|
||||||
|
$ peer channel fetch $NUM -o orderer.example.com:7050 -c businesschannel
|
||||||
|
```
|
||||||
|
or you can use self-defined file, such as:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer channel fetch $NUM self-define-file.block -o orderer.example.com:7050 -c businesschannel
|
||||||
|
```
|
||||||
|
|
||||||
|
For example, we `install` 4 times, and `invoke` 2 times, so we have 6 blocks in total, and we put it into `/e2e_cli/channel-artifacts`.
|
||||||
|
you can also use following command to fetch blocks:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ peer channel fetch oldest -o orderer.example.com:7050 -c businesschannel
|
||||||
|
$ peer channel fetch newest -o orderer.example.com:7050 -c businesschannel
|
||||||
|
```
|
||||||
|
|
||||||
|
### Under tls
|
||||||
|
|
||||||
|
When you set *TLS_ENABLED=true, then you can fetch blocks using following command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
|
||||||
|
$ NUM= the block's num you want to fetch
|
||||||
|
$ peer channel fetch $NUM -o orderer.example.com:7050 -c businesschannel --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA |xargs mv true businesschannel_$NUM.block
|
||||||
|
$ peer channel fetch oldest -o orderer.example.com:7050 -c businesschannel --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA |xargs mv true businesschannel_oldest.block
|
||||||
|
$ peer channel fetch newest -o orderer.example.com:7050 -c businesschannel --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA |xargs mv true businesschannel_newest.block
|
||||||
|
```
|
||||||
|
|
||||||
|
temporarily cannot support specify self-defined-file.
|
|
@ -0,0 +1,21 @@
|
||||||
|
## Manually Setup
|
||||||
|
|
||||||
|
|
||||||
|
### Install Docker/Docker-Compose
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ bash scripts/setup_Docker.sh # Install Docker, Docker-Compose
|
||||||
|
```
|
||||||
|
|
||||||
|
### Download Images
|
||||||
|
|
||||||
|
Pull necessary images of peer, orderer, ca, and base image. You may optionally run the clean_env.sh script to remove all existing container and images.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ bash scripts/cleanup_env.sh
|
||||||
|
$ bash scripts/download_images.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
There are also some community [images](https://hub.docker.com/r/hyperledger/) at Dockerhub, use at your own choice.
|
||||||
|
|
||||||
|
Now you can try [chaincode test](chaincode_test.md) operations with the bootup fabric network.
|
|
@ -0,0 +1,10 @@
|
||||||
|
## Instantiate chaincode in two channel using same chaincode
|
||||||
|
|
||||||
|
|
||||||
|
## The usage of `peer upgrade` and the diffrence between `peer instantiate`
|
||||||
|
|
||||||
|
|
||||||
|
## Check the results when a new peer joins a channel that has completed some chaincode opreations
|
||||||
|
|
||||||
|
|
||||||
|
## What happens if the organization joins a channel that does not belong to it
|
|
@ -0,0 +1,135 @@
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
zookeeper:
|
||||||
|
image: hyperledger/fabric-zookeeper
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- '2181'
|
||||||
|
- '2888'
|
||||||
|
- '3888'
|
||||||
|
|
||||||
|
kafka:
|
||||||
|
image: hyperledger/fabric-kafka
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- KAFKA_MESSAGE_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
|
||||||
|
- KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
|
||||||
|
- KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
|
||||||
|
ports:
|
||||||
|
- '9092'
|
||||||
|
|
||||||
|
orderer.example.com:
|
||||||
|
container_name: orderer.example.com
|
||||||
|
image: hyperledger/fabric-orderer
|
||||||
|
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
|
||||||
|
# enabled TLS
|
||||||
|
- 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]
|
||||||
|
- ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
|
||||||
|
- ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
|
||||||
|
- ORDERER_KAFKA_VERBOSE=true
|
||||||
|
working_dir: /opt/gopath/src/github.com/hyperledger/fabric
|
||||||
|
command: orderer
|
||||||
|
volumes:
|
||||||
|
- ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
|
||||||
|
- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
|
||||||
|
- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
|
||||||
|
ports:
|
||||||
|
- 7050:7050
|
||||||
|
|
||||||
|
peer0.org1.example.com:
|
||||||
|
container_name: peer0.org1.example.com
|
||||||
|
extends:
|
||||||
|
file: peer-base.yaml
|
||||||
|
service: peer-base
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
volumes:
|
||||||
|
- /var/run/:/host/var/run/
|
||||||
|
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 7051:7051
|
||||||
|
- 7052:7052
|
||||||
|
- 7053:7053
|
||||||
|
|
||||||
|
peer1.org1.example.com:
|
||||||
|
container_name: peer1.org1.example.com
|
||||||
|
extends:
|
||||||
|
file: peer-base.yaml
|
||||||
|
service: peer-base
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer1.org1.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer1.org1.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org1MSP
|
||||||
|
volumes:
|
||||||
|
- /var/run/:/host/var/run/
|
||||||
|
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- 8051:7051
|
||||||
|
- 8052:7052
|
||||||
|
- 8053:7053
|
||||||
|
|
||||||
|
peer0.org2.example.com:
|
||||||
|
container_name: peer0.org2.example.com
|
||||||
|
extends:
|
||||||
|
file: peer-base.yaml
|
||||||
|
service: peer-base
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer0.org2.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org2MSP
|
||||||
|
volumes:
|
||||||
|
- /var/run/:/host/var/run/
|
||||||
|
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 9051:7051
|
||||||
|
- 9052:7052
|
||||||
|
- 9053:7053
|
||||||
|
|
||||||
|
peer1.org2.example.com:
|
||||||
|
container_name: peer1.org2.example.com
|
||||||
|
extends:
|
||||||
|
file: peer-base.yaml
|
||||||
|
service: peer-base
|
||||||
|
environment:
|
||||||
|
- CORE_PEER_ID=peer1.org2.example.com
|
||||||
|
- CORE_PEER_ADDRESS=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_CHAINCODELISTENADDRESS=peer1.org2.example.com:7052
|
||||||
|
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051
|
||||||
|
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
|
||||||
|
- CORE_PEER_LOCALMSPID=Org2MSP
|
||||||
|
volumes:
|
||||||
|
- /var/run/:/host/var/run/
|
||||||
|
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
|
||||||
|
- ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
|
||||||
|
ports:
|
||||||
|
- 10051:7051
|
||||||
|
- 10052:7052
|
||||||
|
- 10053:7053
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
version: '2'
|
||||||
|
services:
|
||||||
|
peer-base:
|
||||||
|
image: hyperledger/fabric-peer
|
||||||
|
environment:
|
||||||
|
- 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/
|
||||||
|
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default
|
||||||
|
#- CORE_LOGGING_LEVEL=ERROR
|
||||||
|
- CORE_LOGGING_LEVEL=DEBUG
|
||||||
|
- CORE_PEER_TLS_ENABLED=true
|
||||||
|
- CORE_PEER_GOSSIP_USELEADERELECTION=true
|
||||||
|
- CORE_PEER_GOSSIP_ORGLEADER=false
|
||||||
|
- CORE_PEER_PROFILE_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
|
||||||
|
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
|
||||||
|
command: peer node start
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,153 @@
|
||||||
|
# Copyright IBM Corp. All Rights Reserved.
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
---
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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: 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. Edit
|
||||||
|
# this list to identify the brokers of the ordering service.
|
||||||
|
# NOTE: Use IP:port notation.
|
||||||
|
Brokers:
|
||||||
|
- kafka0:9092
|
||||||
|
- kafka1:9092
|
||||||
|
- kafka2:9092
|
||||||
|
- kafka3:9092
|
||||||
|
|
||||||
|
# Organizations is the list of orgs which are defined as participants on
|
||||||
|
# the orderer side of the network
|
||||||
|
Organizations:
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# 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:
|
|
@ -0,0 +1,93 @@
|
||||||
|
# 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
|
||||||
|
CA:
|
||||||
|
Country: US
|
||||||
|
Province: California
|
||||||
|
Locality: San Francisco
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# "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
|
||||||
|
CA:
|
||||||
|
Country: US
|
||||||
|
Province: California
|
||||||
|
Locality: San Francisco
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# "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
|
||||||
|
CA:
|
||||||
|
Country: US
|
||||||
|
Province: California
|
||||||
|
Locality: San Francisco
|
||||||
|
Template:
|
||||||
|
Count: 2
|
||||||
|
Users:
|
||||||
|
Count: 1
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgES9plinnjVaL0+bc
|
||||||
|
U4in/asws4O6EN5zGnAbjnW9z8qhRANCAAREJja+a8AzruQ+7ASDdgIK7hXvqJxL
|
||||||
|
ugcF5rtoCCG/0/BjFnKYLVmz1MvvrL7+Kg2vESvlkuWZR54OpKnWd0/R
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQP8SdmHBhNYvNc1eReZwOyTAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEQmNr5rwDOu5D7sBIN2AgruFe+o
|
||||||
|
nEu6BwXmu2gIIb/T8GMWcpgtWbPUy++svv4qDa8RK+WS5ZlHng6kqdZ3T9GjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEICFU29vUDOeXZOqVfRNrDVytv7FHcvBf0s8yzQwy1pt3MAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCIARAcRYf+nmD76kx3wgxRKL/nVQ/pXva3IemmaIgcSjA
|
||||||
|
AiB/6l5s6DTUFyO1V9f7vfVMQcmYCqS2DIRlKQD9I3+Gig==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCTCCAbCgAwIBAgIQCh2UviwCCENbRZm64zC8szAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owVjELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
|
||||||
|
zj0DAQcDQgAEmz+zKZjr4XMJF947O5tqbqdDdl39UAuy8O4MNnsIcXG6Gc3hM97B
|
||||||
|
h2q8ZG+wC2xH6LKockOzX4z7eZPgwrDSHqNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
|
||||||
|
A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgIVTb29QM55dk6pV9E2sNXK2/sUdy8F/S
|
||||||
|
zzLNDDLWm3cwCgYIKoZIzj0EAwIDRwAwRAIgQ6FfeJP3bC2EIDlicfKXrXt9Wv6H
|
||||||
|
BBCPADL64+9oPFACIFCgSYOul3GmTi2OpMQpS4u/0f6oKV/MoJgg0gLv4bdF
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQP8SdmHBhNYvNc1eReZwOyTAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEQmNr5rwDOu5D7sBIN2AgruFe+o
|
||||||
|
nEu6BwXmu2gIIb/T8GMWcpgtWbPUy++svv4qDa8RK+WS5ZlHng6kqdZ3T9GjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEICFU29vUDOeXZOqVfRNrDVytv7FHcvBf0s8yzQwy1pt3MAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCIARAcRYf+nmD76kx3wgxRKL/nVQ/pXva3IemmaIgcSjA
|
||||||
|
AiB/6l5s6DTUFyO1V9f7vfVMQcmYCqS2DIRlKQD9I3+Gig==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNjCCAdygAwIBAgIRALM6kpfGvUTxMkd/kRBesfswCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQQndFc2nHdXQbYUnW1
|
||||||
|
QprgXeTYPdaaE+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7
|
||||||
|
eKq+o18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgn
|
||||||
|
Ub+FwTAKBggqhkjOPQQDAgNIADBFAiEAku5my5qsm2cV8MA4kel9crsUJDJQHkhO
|
||||||
|
9CRi5IXocv4CIAJWG/wd7PBAU5dYUi+ttnMRJCVaMjSpzGLCIcqa1qsv
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCTCCAbCgAwIBAgIQCh2UviwCCENbRZm64zC8szAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owVjELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
|
||||||
|
zj0DAQcDQgAEmz+zKZjr4XMJF947O5tqbqdDdl39UAuy8O4MNnsIcXG6Gc3hM97B
|
||||||
|
h2q8ZG+wC2xH6LKockOzX4z7eZPgwrDSHqNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
|
||||||
|
A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgIVTb29QM55dk6pV9E2sNXK2/sUdy8F/S
|
||||||
|
zzLNDDLWm3cwCgYIKoZIzj0EAwIDRwAwRAIgQ6FfeJP3bC2EIDlicfKXrXt9Wv6H
|
||||||
|
BBCPADL64+9oPFACIFCgSYOul3GmTi2OpMQpS4u/0f6oKV/MoJgg0gLv4bdF
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQP8SdmHBhNYvNc1eReZwOyTAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEQmNr5rwDOu5D7sBIN2AgruFe+o
|
||||||
|
nEu6BwXmu2gIIb/T8GMWcpgtWbPUy++svv4qDa8RK+WS5ZlHng6kqdZ3T9GjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEICFU29vUDOeXZOqVfRNrDVytv7FHcvBf0s8yzQwy1pt3MAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCIARAcRYf+nmD76kx3wgxRKL/nVQ/pXva3IemmaIgcSjA
|
||||||
|
AiB/6l5s6DTUFyO1V9f7vfVMQcmYCqS2DIRlKQD9I3+Gig==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTCSshHNuDC5JmNIN
|
||||||
|
cfSbZyZ/hgxaA1rrTCcSrC9yLqqhRANCAASgt3LoRZsO/f6qK1WOUqB7zUKeO8Jp
|
||||||
|
G0Hp2c1Gu4zpV9pjBGCVFYDyjMg2xy2FGt3ZJgfEljsHFnxL6eYoUtv0
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICDTCCAbOgAwIBAgIRAOGKAb18r9BTgR+TQclAIIowCgYIKoZIzj0EAwIwaTEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFt
|
||||||
|
cGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMFgxCzAJBgNV
|
||||||
|
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNp
|
||||||
|
c2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYI
|
||||||
|
KoZIzj0DAQcDQgAEoLdy6EWbDv3+qitVjlKge81CnjvCaRtB6dnNRruM6VfaYwRg
|
||||||
|
lRWA8ozINscthRrd2SYHxJY7BxZ8S+nmKFLb9KNNMEswDgYDVR0PAQH/BAQDAgeA
|
||||||
|
MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgIVTb29QM55dk6pV9E2sNXK2/sUdy
|
||||||
|
8F/SzzLNDDLWm3cwCgYIKoZIzj0EAwIDSAAwRQIhAJcrEuSf3fR90PyXOpftXrgR
|
||||||
|
rhRIVG8spex7iLg4tkB/AiAzGamwDDqcRz9ryt80OHF2d618oS3UaZF/wPWo7oB9
|
||||||
|
FA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNjCCAdygAwIBAgIRALM6kpfGvUTxMkd/kRBesfswCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQQndFc2nHdXQbYUnW1
|
||||||
|
QprgXeTYPdaaE+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7
|
||||||
|
eKq+o18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgn
|
||||||
|
Ub+FwTAKBggqhkjOPQQDAgNIADBFAiEAku5my5qsm2cV8MA4kel9crsUJDJQHkhO
|
||||||
|
9CRi5IXocv4CIAJWG/wd7PBAU5dYUi+ttnMRJCVaMjSpzGLCIcqa1qsv
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNjCCAdygAwIBAgIRALM6kpfGvUTxMkd/kRBesfswCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQQndFc2nHdXQbYUnW1
|
||||||
|
QprgXeTYPdaaE+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7
|
||||||
|
eKq+o18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgn
|
||||||
|
Ub+FwTAKBggqhkjOPQQDAgNIADBFAiEAku5my5qsm2cV8MA4kel9crsUJDJQHkhO
|
||||||
|
9CRi5IXocv4CIAJWG/wd7PBAU5dYUi+ttnMRJCVaMjSpzGLCIcqa1qsv
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICWjCCAgCgAwIBAgIRANqVGJ4RHohswpqlxF6pQHMwCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMFgxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRwwGgYDVQQDExNvcmRlcmVyLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0C
|
||||||
|
AQYIKoZIzj0DAQcDQgAEPzCwqaaQkxgt0ndGYPnVNZT4aC165Wo0QzDNS7N1srca
|
||||||
|
znZLqDZWnda1GQyJXUmQgpxDiqSPuFVXlKBdyLd+96OBljCBkzAOBgNVHQ8BAf8E
|
||||||
|
BAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQC
|
||||||
|
MAAwKwYDVR0jBCQwIoAggKgP+snFnS4lmw18n4EcJ04IuUmTDXYeAxSYJ1G/hcEw
|
||||||
|
JwYDVR0RBCAwHoITb3JkZXJlci5leGFtcGxlLmNvbYIHb3JkZXJlcjAKBggqhkjO
|
||||||
|
PQQDAgNIADBFAiEAiMaq4QYFv3S13HQeLzumDcErpw3sRRYq8aDCxDmoOkICIB7C
|
||||||
|
08FvQKkJEpyDN/mjVMufNU4rfpjsFRs5IUHXBdhR
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGNicEQgtNBNtuBwF
|
||||||
|
/eA9w4neMwEbTLdidHYL91KgiN2hRANCAAQ/MLCpppCTGC3Sd0Zg+dU1lPhoLXrl
|
||||||
|
ajRDMM1Ls3WytxrOdkuoNlad1rUZDIldSZCCnEOKpI+4VVeUoF3It373
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5owVFluDVt7bnMmG
|
||||||
|
wCVx+bu+9oZwsSAbAZCjHSHkIfmhRANCAAQQndFc2nHdXQbYUnW1QprgXeTYPdaa
|
||||||
|
E+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7eKq+
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNjCCAdygAwIBAgIRALM6kpfGvUTxMkd/kRBesfswCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQQndFc2nHdXQbYUnW1
|
||||||
|
QprgXeTYPdaaE+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7
|
||||||
|
eKq+o18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgn
|
||||||
|
Ub+FwTAKBggqhkjOPQQDAgNIADBFAiEAku5my5qsm2cV8MA4kel9crsUJDJQHkhO
|
||||||
|
9CRi5IXocv4CIAJWG/wd7PBAU5dYUi+ttnMRJCVaMjSpzGLCIcqa1qsv
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCTCCAbCgAwIBAgIQCh2UviwCCENbRZm64zC8szAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owVjELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
|
||||||
|
zj0DAQcDQgAEmz+zKZjr4XMJF947O5tqbqdDdl39UAuy8O4MNnsIcXG6Gc3hM97B
|
||||||
|
h2q8ZG+wC2xH6LKockOzX4z7eZPgwrDSHqNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
|
||||||
|
A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgIVTb29QM55dk6pV9E2sNXK2/sUdy8F/S
|
||||||
|
zzLNDDLWm3cwCgYIKoZIzj0EAwIDRwAwRAIgQ6FfeJP3bC2EIDlicfKXrXt9Wv6H
|
||||||
|
BBCPADL64+9oPFACIFCgSYOul3GmTi2OpMQpS4u/0f6oKV/MoJgg0gLv4bdF
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLjCCAdWgAwIBAgIQP8SdmHBhNYvNc1eReZwOyTAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owaTELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRcwFQYDVQQDEw5jYS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEQmNr5rwDOu5D7sBIN2AgruFe+o
|
||||||
|
nEu6BwXmu2gIIb/T8GMWcpgtWbPUy++svv4qDa8RK+WS5ZlHng6kqdZ3T9GjXzBd
|
||||||
|
MA4GA1UdDwEB/wQEAwIBpjAPBgNVHSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMB
|
||||||
|
Af8wKQYDVR0OBCIEICFU29vUDOeXZOqVfRNrDVytv7FHcvBf0s8yzQwy1pt3MAoG
|
||||||
|
CCqGSM49BAMCA0cAMEQCIARAcRYf+nmD76kx3wgxRKL/nVQ/pXva3IemmaIgcSjA
|
||||||
|
AiB/6l5s6DTUFyO1V9f7vfVMQcmYCqS2DIRlKQD9I3+Gig==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg63wCP24vDJSChlDm
|
||||||
|
hzl0HaT6fxjJu5VjCDE3/Amrgr+hRANCAASbP7MpmOvhcwkX3js7m2pup0N2Xf1Q
|
||||||
|
C7Lw7gw2ewhxcboZzeEz3sGHarxkb7ALbEfosqhyQ7NfjPt5k+DCsNIe
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,13 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICCTCCAbCgAwIBAgIQCh2UviwCCENbRZm64zC8szAKBggqhkjOPQQDAjBpMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEUMBIGA1UEChMLZXhhbXBsZS5jb20xFzAVBgNVBAMTDmNhLmV4YW1w
|
||||||
|
bGUuY29tMB4XDTE3MDkwMTExMDA0M1oXDTI3MDgzMDExMDA0M1owVjELMAkGA1UE
|
||||||
|
BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBGcmFuY2lz
|
||||||
|
Y28xGjAYBgNVBAMMEUFkbWluQGV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZI
|
||||||
|
zj0DAQcDQgAEmz+zKZjr4XMJF947O5tqbqdDdl39UAuy8O4MNnsIcXG6Gc3hM97B
|
||||||
|
h2q8ZG+wC2xH6LKockOzX4z7eZPgwrDSHqNNMEswDgYDVR0PAQH/BAQDAgeAMAwG
|
||||||
|
A1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgIVTb29QM55dk6pV9E2sNXK2/sUdy8F/S
|
||||||
|
zzLNDDLWm3cwCgYIKoZIzj0EAwIDRwAwRAIgQ6FfeJP3bC2EIDlicfKXrXt9Wv6H
|
||||||
|
BBCPADL64+9oPFACIFCgSYOul3GmTi2OpMQpS4u/0f6oKV/MoJgg0gLv4bdF
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNjCCAdygAwIBAgIRALM6kpfGvUTxMkd/kRBesfswCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQQndFc2nHdXQbYUnW1
|
||||||
|
QprgXeTYPdaaE+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7
|
||||||
|
eKq+o18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgn
|
||||||
|
Ub+FwTAKBggqhkjOPQQDAgNIADBFAiEAku5my5qsm2cV8MA4kel9crsUJDJQHkhO
|
||||||
|
9CRi5IXocv4CIAJWG/wd7PBAU5dYUi+ttnMRJCVaMjSpzGLCIcqa1qsv
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICNjCCAdygAwIBAgIRALM6kpfGvUTxMkd/kRBesfswCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMGwxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRQwEgYDVQQKEwtleGFtcGxlLmNvbTEaMBgGA1UEAxMRdGxzY2EuZXhh
|
||||||
|
bXBsZS5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQQndFc2nHdXQbYUnW1
|
||||||
|
QprgXeTYPdaaE+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7
|
||||||
|
eKq+o18wXTAOBgNVHQ8BAf8EBAMCAaYwDwYDVR0lBAgwBgYEVR0lADAPBgNVHRMB
|
||||||
|
Af8EBTADAQH/MCkGA1UdDgQiBCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgn
|
||||||
|
Ub+FwTAKBggqhkjOPQQDAgNIADBFAiEAku5my5qsm2cV8MA4kel9crsUJDJQHkhO
|
||||||
|
9CRi5IXocv4CIAJWG/wd7PBAU5dYUi+ttnMRJCVaMjSpzGLCIcqa1qsv
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICLTCCAdOgAwIBAgIRAPLZMPocwV7bQv/aBksbj3swCgYIKoZIzj0EAwIwbDEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xFDASBgNVBAoTC2V4YW1wbGUuY29tMRowGAYDVQQDExF0bHNjYS5l
|
||||||
|
eGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDNaFw0yNzA4MzAxMTAwNDNaMFYxCzAJ
|
||||||
|
BgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJh
|
||||||
|
bmNpc2NvMRowGAYDVQQDDBFBZG1pbkBleGFtcGxlLmNvbTBZMBMGByqGSM49AgEG
|
||||||
|
CCqGSM49AwEHA0IABINLFP3/CgcWppkAoSZeCNor0fcv5q97saAbwNBcFbnA+zV9
|
||||||
|
akibIF/HkdBNBUXZ14n9F3fkk6Aax6C2JrVBYhujbDBqMA4GA1UdDwEB/wQEAwIF
|
||||||
|
oDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAr
|
||||||
|
BgNVHSMEJDAigCCAqA/6ycWdLiWbDXyfgRwnTgi5SZMNdh4DFJgnUb+FwTAKBggq
|
||||||
|
hkjOPQQDAgNIADBFAiEA7IGo+be4dRtBTsQ+M8epPzAONWG95ZvaMSJIcqv4gmQC
|
||||||
|
IB/9kNMil48sAj9DPeiZ8PHR9J3/e7rmHVwA4vrXXDFE
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgDaoqTS4AwLaselrb
|
||||||
|
EKOFBN5VJAD21LRMXrCwFMiJzjGhRANCAASDSxT9/woHFqaZAKEmXgjaK9H3L+av
|
||||||
|
e7GgG8DQXBW5wPs1fWpImyBfx5HQTQVF2deJ/Rd35JOgGsegtia1QWIb
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYcrrkdnV1DlyF7U+
|
||||||
|
p8OoOScIlCTWfxiNuHznRxhluhihRANCAAQdj4hNSYWuoK1ZEnR2UvbrN1jziqS2
|
||||||
|
oKBtw/HX6CxDnYVS16x4P7bs0QXbx9ng+WWlcjq1XXq5iIrYWKsOQUzP
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICFjCCAb2gAwIBAgIURa/X2XP3tM4wDlZ+LUq9VBmvcwswCgYIKoZIzj0EAwIw
|
||||||
|
aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
|
||||||
|
EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt
|
||||||
|
Y2Etc2VydmVyMB4XDTE3MDkwMTExMDcwMFoXDTMyMDgyODExMDcwMFowaDELMAkG
|
||||||
|
A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl
|
||||||
|
cmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMtY2Etc2Vy
|
||||||
|
dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9iwm3wJWrnw8XX1kswyouzxa
|
||||||
|
RyBBhHEevB2eeNTfzmuo1ni7AvpTEVRnm6jP78gRYCotLNi1b+oUz+cTc6LYOaNF
|
||||||
|
MEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE
|
||||||
|
FBH7wDBnpFH363B5k52fUPtFx0z/MAoGCCqGSM49BAMCA0cAMEQCIBbgfmyJg/r/
|
||||||
|
jJnhmw8bl62sH+nrX9C6U8tfv2Gnq1vUAiBzYjBOaZGC0Nz34cDwtgcRyI22CMTo
|
||||||
|
XvHdC/Ae4zxkUQ==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
|
||||||
|
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
|
||||||
|
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
|
||||||
|
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
|
||||||
|
wfVH1xi8rCo0jv4Nee4=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAemgAwIBAgIQAfA9He7xpAUEnXbP8v/01jAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
HY+ITUmFrqCtWRJ0dlL26zdY84qktqCgbcPx1+gsQ52FUteseD+27NEF28fZ4Pll
|
||||||
|
pXI6tV16uYiK2FirDkFMz6NfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgyEPT8CERiWPOXTQOlShu
|
||||||
|
iGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDSAAwRQIhAOhn/ntHd7sxk6Ds
|
||||||
|
TuZXwmeXoGDBCzQ+Dqyun7LC94BNAiAeRZa/ZKQCmjSogcaBhJHgjKG63IdMHCu2
|
||||||
|
kAsF956AbA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
|
||||||
|
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
|
||||||
|
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
|
||||||
|
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
|
||||||
|
wfVH1xi8rCo0jv4Nee4=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAemgAwIBAgIQAfA9He7xpAUEnXbP8v/01jAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
HY+ITUmFrqCtWRJ0dlL26zdY84qktqCgbcPx1+gsQ52FUteseD+27NEF28fZ4Pll
|
||||||
|
pXI6tV16uYiK2FirDkFMz6NfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgyEPT8CERiWPOXTQOlShu
|
||||||
|
iGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDSAAwRQIhAOhn/ntHd7sxk6Ds
|
||||||
|
TuZXwmeXoGDBCzQ+Dqyun7LC94BNAiAeRZa/ZKQCmjSogcaBhJHgjKG63IdMHCu2
|
||||||
|
kAsF956AbA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg7j9pou9IDBIzB9xQ
|
||||||
|
tqS7Qqz4vZ93ohCoDz7XX3BzHUqhRANCAATN4lpnJD3lnUoqt4uaOwKaKqSSYqKq
|
||||||
|
niDMG0ZOSAl1SaodiVMLyCfNObngAbZiaTgWgBIZkUc8NM7hUlndajv0
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGDCCAb+gAwIBAgIQQxKXDrkcdGeP9KyddyIJRDAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzeJaZyQ95Z1KKreLmjsCmiqkkmKiqp4g
|
||||||
|
zBtGTkgJdUmqHYlTC8gnzTm54AG2Ymk4FoASGZFHPDTO4VJZ3Wo79KNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgyEPT8CERiWPO
|
||||||
|
XTQOlShuiGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDRwAwRAIgVCmgIF4T
|
||||||
|
s7QlHWzUdJYTxruGSlRPuwlekM4Au3kgilYCICmzzTR3z+zoBO2X9M4kyI/ebCxF
|
||||||
|
u2RbCYuMuMUowLDq
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICZzCCAg2gAwIBAgIQfC/PBWN7YUi6LyfRsT71wTAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAw
|
||||||
|
NDJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMC5vcmcxLmV4YW1wbGUuY29t
|
||||||
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExlGcF+toks0eW58iyTd2GBFWDMlE
|
||||||
|
Fi6yLGIbTBu+hSDYw62/NSbbuYhO2zpCBYPCcRWDHzZTtsMgCpL1kFmQGaOBlzCB
|
||||||
|
lDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
|
||||||
|
MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgxV0DX8jX5odQyecAGFV4bBLjVhcA
|
||||||
|
kKLT5M1Ed3BbQNwwKAYDVR0RBCEwH4IWcGVlcjAub3JnMS5leGFtcGxlLmNvbYIF
|
||||||
|
cGVlcjAwCgYIKoZIzj0EAwIDSAAwRQIhAO8SOW+CwnLdTE48RF0Gnv2FrkfryYok
|
||||||
|
1b7ixywliCinAiANq2PWBP0/kA0ieHEZs1/giCX9E+WLgrPfwm+8fISImg==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQggARn3NoeQy+bhzuS
|
||||||
|
d/O4U9Q9JqWxqbdzF2zKkj617JuhRANCAATGUZwX62iSzR5bnyLJN3YYEVYMyUQW
|
||||||
|
LrIsYhtMG76FINjDrb81Jtu5iE7bOkIFg8JxFYMfNlO2wyAKkvWQWZAZ
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
|
||||||
|
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
|
||||||
|
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
|
||||||
|
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
|
||||||
|
wfVH1xi8rCo0jv4Nee4=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAemgAwIBAgIQAfA9He7xpAUEnXbP8v/01jAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
HY+ITUmFrqCtWRJ0dlL26zdY84qktqCgbcPx1+gsQ52FUteseD+27NEF28fZ4Pll
|
||||||
|
pXI6tV16uYiK2FirDkFMz6NfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgyEPT8CERiWPOXTQOlShu
|
||||||
|
iGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDSAAwRQIhAOhn/ntHd7sxk6Ds
|
||||||
|
TuZXwmeXoGDBCzQ+Dqyun7LC94BNAiAeRZa/ZKQCmjSogcaBhJHgjKG63IdMHCu2
|
||||||
|
kAsF956AbA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgputMFhOeoXcCA4Ji
|
||||||
|
qp3Vwg/Aod0fwNtu/WCkwZvJOmmhRANCAARV39373sdyjrofATkrr/VgcAxS9irS
|
||||||
|
T0VNySdbuAIpfM90BJH5dpL4hPuY7Ml759Z08ZXIVUtDcwUX5XNzG24H
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAN2DNjWSlgyPNMDEi/eX7V0wCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABFXf3fvex3KOuh8BOSuv9WBwDFL2KtJP
|
||||||
|
RU3JJ1u4Ail8z3QEkfl2kviE+5jsyXvn1nTxlchVS0NzBRflc3MbbgejTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
|
||||||
|
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQDwrDA8
|
||||||
|
R4RoMxF9XvogVbE8WyWmjL614IQ4P6XfGzdxfwIgWV9nIQRCvnXKrCNCHlHr4sxO
|
||||||
|
xP5K34HRgj1Jr40ODrM=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICZzCCAg2gAwIBAgIQREyFYdgealeFMbnWi/U3TjAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAw
|
||||||
|
NDJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDExZwZWVyMS5vcmcxLmV4YW1wbGUuY29t
|
||||||
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEihFJm/6OPYljjccM0F4Kf5NOt3kd
|
||||||
|
s4xUXNh9mv1L7NjM6W69EHOT1uKiTpMlpMWezLqmdOs1eJ/gsNk54ySQBaOBlzCB
|
||||||
|
lDAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
|
||||||
|
MAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgxV0DX8jX5odQyecAGFV4bBLjVhcA
|
||||||
|
kKLT5M1Ed3BbQNwwKAYDVR0RBCEwH4IWcGVlcjEub3JnMS5leGFtcGxlLmNvbYIF
|
||||||
|
cGVlcjEwCgYIKoZIzj0EAwIDSAAwRQIhAI2ZpaUW94I8N14ssLvvW194pKpNl7Bp
|
||||||
|
1kqcSpfCkpCvAiARSeo9lxDiOV1CAyOm1nbn/OFdz4Wh4m8iBz6RLZ6V5Q==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg1H2Yv70N9yTJ3wRa
|
||||||
|
rorj5uf6eD2YgVue7roLupwNuh+hRANCAASKEUmb/o49iWONxwzQXgp/k063eR2z
|
||||||
|
jFRc2H2a/Uvs2Mzpbr0Qc5PW4qJOkyWkxZ7MuqZ06zV4n+Cw2TnjJJAF
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNZgTFjntL+pcg3lX
|
||||||
|
UjVY+fT9vvCWsEJA5Oq/Hmc3pJahRANCAAThXfCOmsOXZzJdsQlHslPPzdk6OiTJ
|
||||||
|
qpPBIIhCYvb59wo5xA2/x2KqyUM1Y9Fkb5goUEBxj+XFOiK2lxnDX5qz
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
|
||||||
|
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
|
||||||
|
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
|
||||||
|
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
|
||||||
|
wfVH1xi8rCo0jv4Nee4=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAemgAwIBAgIQAfA9He7xpAUEnXbP8v/01jAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
HY+ITUmFrqCtWRJ0dlL26zdY84qktqCgbcPx1+gsQ52FUteseD+27NEF28fZ4Pll
|
||||||
|
pXI6tV16uYiK2FirDkFMz6NfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgyEPT8CERiWPOXTQOlShu
|
||||||
|
iGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDSAAwRQIhAOhn/ntHd7sxk6Ds
|
||||||
|
TuZXwmeXoGDBCzQ+Dqyun7LC94BNAiAeRZa/ZKQCmjSogcaBhJHgjKG63IdMHCu2
|
||||||
|
kAsF956AbA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgg6uVXC5L+7kullxR
|
||||||
|
CYr44nbYJ0Lnb7DLKBqeyMKKOuKhRANCAAT44xBtnUqO0+5SSDJse2OarWXzd5ed
|
||||||
|
wwriIDKjisz45PBTsbqCJMB+qk2HtYKw1WXXwiQ2XZ0b6gayposlQVZ9
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
|
||||||
|
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
|
||||||
|
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
|
||||||
|
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
|
||||||
|
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
|
||||||
|
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
|
||||||
|
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
|
||||||
|
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
|
||||||
|
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
|
||||||
|
wfVH1xi8rCo0jv4Nee4=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICOzCCAeKgAwIBAgIRAIMSt9AP4hmYeHt8U1LCEOYwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNv
|
||||||
|
bTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABBOOEkumNriBX3DEqLJEE3Y0XdgX
|
||||||
|
jYdFIryqjdzWO5qzcpAxQedlL0GTzQvo9SuC/bUWUg0LVkRerrou1l2QNgqjbDBq
|
||||||
|
MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw
|
||||||
|
DAYDVR0TAQH/BAIwADArBgNVHSMEJDAigCDFXQNfyNfmh1DJ5wAYVXhsEuNWFwCQ
|
||||||
|
otPkzUR3cFtA3DAKBggqhkjOPQQDAgNHADBEAiBPR9N7JQJdskOnln/VBW2JTlSG
|
||||||
|
WpaOhsLbpmnhJkCS5gIgRPhhKcJ1a4v0hFeViajyt2TXyMPKbTsWhvJKKl+JM2M=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgdFo0hnDG1JcuPPro
|
||||||
|
0G5Qcn+DkAtgS3FfHG+6B10xsrShRANCAAQTjhJLpja4gV9wxKiyRBN2NF3YF42H
|
||||||
|
RSK8qo3c1juas3KQMUHnZS9Bk80L6PUrgv21FlINC1ZEXq66LtZdkDYK
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGDCCAb+gAwIBAgIQXztS0I3Ktycdzqu1lDxfCjAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7TZtpjohiXFwEeG6gbskdsEMtFcQxOQP
|
||||||
|
1MO1JCxgVTxg+9IYvKuqUMqmhQA0jlueI2Me5kW40blbhAtIKQ4+7KNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgyEPT8CERiWPO
|
||||||
|
XTQOlShuiGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDRwAwRAIgI7fCElam
|
||||||
|
9GuzoHW9nFi4jcbuGTMJ3gBHFZdyM37XB0MCIH3CoJDVZ401CnJGJNwrnL6cQJ2j
|
||||||
|
MgRs18HgngzZpPpo
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICQzCCAemgAwIBAgIQAfA9He7xpAUEnXbP8v/01jAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MHMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMRkwFwYDVQQKExBvcmcxLmV4YW1wbGUuY29tMRwwGgYDVQQD
|
||||||
|
ExNjYS5vcmcxLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE
|
||||||
|
HY+ITUmFrqCtWRJ0dlL26zdY84qktqCgbcPx1+gsQ52FUteseD+27NEF28fZ4Pll
|
||||||
|
pXI6tV16uYiK2FirDkFMz6NfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYG
|
||||||
|
BFUdJQAwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQgyEPT8CERiWPOXTQOlShu
|
||||||
|
iGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDSAAwRQIhAOhn/ntHd7sxk6Ds
|
||||||
|
TuZXwmeXoGDBCzQ+Dqyun7LC94BNAiAeRZa/ZKQCmjSogcaBhJHgjKG63IdMHCu2
|
||||||
|
kAsF956AbA==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgmeOkDC6jW5YSAOZE
|
||||||
|
WnIYm30JTzWv8BHG72DJZOtwX1mhRANCAATtNm2mOiGJcXAR4bqBuyR2wQy0VxDE
|
||||||
|
5A/Uw7UkLGBVPGD70hi8q6pQyqaFADSOW54jYx7mRbjRuVuEC0gpDj7s
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICGDCCAb+gAwIBAgIQXztS0I3Ktycdzqu1lDxfCjAKBggqhkjOPQQDAjBzMQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu
|
||||||
|
b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAwNDJa
|
||||||
|
MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T
|
||||||
|
YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29tMFkw
|
||||||
|
EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE7TZtpjohiXFwEeG6gbskdsEMtFcQxOQP
|
||||||
|
1MO1JCxgVTxg+9IYvKuqUMqmhQA0jlueI2Me5kW40blbhAtIKQ4+7KNNMEswDgYD
|
||||||
|
VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgyEPT8CERiWPO
|
||||||
|
XTQOlShuiGm7e9BRRUzUFmqiiHoq1FEwCgYIKoZIzj0EAwIDRwAwRAIgI7fCElam
|
||||||
|
9GuzoHW9nFi4jcbuGTMJ3gBHFZdyM37XB0MCIH3CoJDVZ401CnJGJNwrnL6cQJ2j
|
||||||
|
MgRs18HgngzZpPpo
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,15 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICSjCCAfCgAwIBAgIRAPcfHzsJAOL/eOpjlvm+hgwwCgYIKoZIzj0EAwIwdjEL
|
||||||
|
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
|
||||||
|
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs
|
||||||
|
c2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEw
|
||||||
|
MDQyWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE
|
||||||
|
BxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G
|
||||||
|
A1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49
|
||||||
|
AwEHA0IABOFd8I6aw5dnMl2xCUeyU8/N2To6JMmqk8EgiEJi9vn3CjnEDb/HYqrJ
|
||||||
|
QzVj0WRvmChQQHGP5cU6IraXGcNfmrOjXzBdMA4GA1UdDwEB/wQEAwIBpjAPBgNV
|
||||||
|
HSUECDAGBgRVHSUAMA8GA1UdEwEB/wQFMAMBAf8wKQYDVR0OBCIEIMVdA1/I1+aH
|
||||||
|
UMnnABhVeGwS41YXAJCi0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDHSo/7
|
||||||
|
y73NLCfyt4HUVH3tzk8BcK5b2HR8eJQdqjAFtQIgJ5oWZ0Q0o0Y3YWmKmEKwiS62
|
||||||
|
R6vTrnPnUxn89Zp5IzU=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,14 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIICOzCCAeGgAwIBAgIQaDKtYPBdqA6HCkJRnYE5QzAKBggqhkjOPQQDAjB2MQsw
|
||||||
|
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
|
||||||
|
YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0GA1UEAxMWdGxz
|
||||||
|
Y2Eub3JnMS5leGFtcGxlLmNvbTAeFw0xNzA5MDExMTAwNDJaFw0yNzA4MzAxMTAw
|
||||||
|
NDJaMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQH
|
||||||
|
Ew1TYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZVc2VyMUBvcmcxLmV4YW1wbGUuY29t
|
||||||
|
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXLHheXZQcGdaAUigHgFNPeAaLRgp
|
||||||
|
lsdSMYsiuBb9rkqcSgptyvGeGsjTDuee5L3suBekZrD+gnVTkiA3wjt646NsMGow
|
||||||
|
DgYDVR0PAQH/BAQDAgWgMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAM
|
||||||
|
BgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMVdA1/I1+aHUMnnABhVeGwS41YXAJCi
|
||||||
|
0+TNRHdwW0DcMAoGCCqGSM49BAMCA0gAMEUCIQDnQSd6SFqnLylHqBdnMQQrU09d
|
||||||
|
DgIXCiMqzZqo21alOgIgBdl8Mz85fL12VeYVZh92cG9d3OU4D43IofjysAzhNhE=
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg4Axz04NiqnAKLmBk
|
||||||
|
1dzVbOrTOZm2Oqlbn2rVJZ6vZIGhRANCAARcseF5dlBwZ1oBSKAeAU094BotGCmW
|
||||||
|
x1IxiyK4Fv2uSpxKCm3K8Z4ayNMO557kvey4F6RmsP6CdVOSIDfCO3rj
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,5 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgWMWVOsOqHMxvIR2H
|
||||||
|
9MRWWAUOzvMLydKhbZQ21ih27lShRANCAAQSNgQpT5K5L8J8tQNr96X2ZCicqGf6
|
||||||
|
25mwVJPxWNsFO074q6/3Vx99M7/Sz2K0NhncvjRCeyOfJH6EZ+/nJsIY
|
||||||
|
-----END PRIVATE KEY-----
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue