Split a separate dev dir for testing latest code

pull/108/head
Baohua Yang 2017-10-05 23:21:54 +08:00
parent 8d5d18f9ea
commit 825a0c69d3
546 changed files with 16969 additions and 345 deletions

View File

@ -28,13 +28,13 @@ all:
ready: restart ready: restart
@echo "Restart, init network and then do cc testing..." @echo "Restart, init network and then do cc testing..."
if [ "$DEV_ENABLED" = "true" ]; then \ if [ "$(DEV_ENABLED)" = "true" ]; then \
sleep 35; \ echo "In DEV mode, wait for rebuilding ..." && sleep 35; \
make init_peer0; \ make init_peer0; \
sleep 2; \ sleep 5; \
make test_peer0; \ make test_peer0; \
else \ else \
sleep 3; \ echo "In Normal mode ..." && sleep 3; \
make init; \ make init; \
sleep 2; \ sleep 2; \
make test_cc; \ make test_cc; \
@ -45,7 +45,7 @@ ready: restart
@echo "run 'make stop' when done." @echo "run 'make stop' when done."
start: # bootup the fabric network start: # bootup the fabric network
@echo "Start a fabric network with 2-org-4-peer" @echo "Start a fabric network with ${COMPOSE_FILE}"
make clean make clean
docker-compose -f ${COMPOSE_FILE} up -d # Start a fabric network docker-compose -f ${COMPOSE_FILE} up -d # Start a fabric network
@ -113,6 +113,7 @@ logs_check: logs_save logs_view
logs_save: # save logs logs_save: # save logs
docker logs peer0.org1.example.com >& /tmp/dev_peer.log docker logs peer0.org1.example.com >& /tmp/dev_peer.log
docker logs orderer.example.com >& /tmp/dev_orderer.log
logs_view: # view logs logs_view: # view logs
less /tmp/dev_peer.log less /tmp/dev_peer.log

View File

@ -1,56 +0,0 @@
# This is the default base file for kafka based ordering
# Notice that chaincode is executed inside docker in default net mode
# https://github.com/yeasy/docker-compose-files
# Depends on the yeasy/hyperledger-fabric image.
version: '2'
services:
orderer-base:
#image: yeasy/hyperledger-fabric-orderer:1.0.2
image: hyperledger/fabric-orderer:x86_64-1.0.2
restart: always
environment:
- ORDERER_GENERAL_LOGLEVEL=DEBUG
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_GENESISMETHOD=file
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
- ORDERER_GENERAL_LEDGERTYPE=file
- ORDERER_GENERAL_BATCHTIMEOUT=2s
- ORDERER_GENERAL_MAXMESSAGECOUNT=10
- ORDERER_GENERAL_MAXWINDOWSIZE=1000
- ORDERER_GENERAL_LISTENPORT=7050
# 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]
# Kafka related configurations
- ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
- ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
- ORDERER_KAFKA_VERBOSE=true
expose:
- "7050" #
command: orderer start
zookeeper-base:
image: hyperledger/fabric-zookeeper:x86_64-1.0.2
restart: always
expose:
- '2181'
- '2888'
- '3888'
kafka-base:
image: hyperledger/fabric-kafka:x86_64-1.0.2
restart: always
environment:
- KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B
- KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B
- KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
- KAFKA_LOG_RETENTION_MS=-1
expose:
- '9092'

View File

@ -21,6 +21,7 @@ services:
restart: always restart: always
environment: environment:
- ORDERER_GENERAL_LOGLEVEL=DEBUG - ORDERER_GENERAL_LOGLEVEL=DEBUG
- ORDERER_GENERAL_LOGFORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_GENESISMETHOD=file - ORDERER_GENERAL_GENESISMETHOD=file
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
@ -42,12 +43,13 @@ services:
command: orderer start command: orderer start
peer-base: peer-base:
image: yeasy/hyperledger-fabric:1.0.2 image: yeasy/hyperledger-fabric-peer:1.0.2
#image: hyperledger/fabric-peer:x86_64-1.0.2 #image: hyperledger/fabric-peer:x86_64-1.0.2
restart: always restart: always
environment: environment:
- CORE_PEER_ADDRESSAUTODETECT=false - CORE_PEER_ADDRESSAUTODETECT=false
- CORE_LOGGING_LEVEL=DEBUG - CORE_LOGGING_LEVEL=DEBUG
- CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=102_default # uncomment this to use specific network - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=102_default # uncomment this to use specific network
- CORE_PEER_GOSSIP_USELEADERELECTION=true - CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false # this node is the group leader, default to false - CORE_PEER_GOSSIP_ORGLEADER=false # this node is the group leader, default to false
@ -56,6 +58,8 @@ services:
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt - 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_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
- CORE_CHIANCODE_LOGGING_LEVEL=DEBUG
- CORE_CHIANCODE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
expose: expose:
- "7050" # Rest - "7050" # Rest
- "7051" # Grpc - "7051" # Grpc
@ -81,6 +85,7 @@ services:
environment: environment:
#- GOPATH=/opt/gopath #- GOPATH=/opt/gopath
- CORE_LOGGING_LEVEL=DEBUG - CORE_LOGGING_LEVEL=DEBUG
- CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
- CORE_PEER_TLS_ENABLED=true # to enable TLS, change to true - 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 - 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" - CHANNEL_NAME:="businesschannel"
@ -91,5 +96,27 @@ services:
#container_name: couchdb0 #container_name: couchdb0
image: hyperledger/fabric-couchdb:x86_64-1.0.2 image: hyperledger/fabric-couchdb:x86_64-1.0.2
restart: always restart: always
tty: true
# Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, # 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. # for example map it to utilize Fauxton User Interface in dev environments.
zookeeper-base:
image: hyperledger/fabric-zookeeper:x86_64-1.0.2
restart: always
tty: true
expose:
- '2181'
- '2888'
- '3888'
kafka-base:
image: hyperledger/fabric-kafka:x86_64-1.0.2
restart: always
tty: true
environment:
- KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B
- KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B
- KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
- KAFKA_LOG_RETENTION_MS=-1
expose:
- '9092'

View File

@ -10,70 +10,81 @@ version: '2.0'
services: services:
orderer.example.com: # There can be multiple orderers orderer.example.com: # There can be multiple orderers
extends: extends:
file: base-dev.yaml file: docker-compose-base-dev.yaml
service: orderer-base service: orderer.example.com
container_name: orderer.example.com depends_on:
hostname: orderer.example.com - kafka0
ports: - kafka1
- "7050:7050" - kafka2
volumes: - kafka3
- ./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: bash -c 'orderer start'
#command: bash -c 'bash /tmp/orderer_build.sh; orderer start'
peer0.org1.example.com: peer0.org1.example.com:
extends: extends:
file: base-dev.yaml file: docker-compose-base-dev.yaml
service: peer-base service: peer0.org1.example.com
container_name: peer0.org1.example.com depends_on:
hostname: peer0.org1.example.com - orderer.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 'peer node start'
command: bash -c 'bash /tmp/peer_build.sh; peer node start'
cli: cli:
extends: extends:
file: base-dev.yaml file: docker-compose-base-dev.yaml
service: cli-base service: cli
container_name: fabric-cli depends_on:
hostname: fabric-cli - peer0.org1.example.com
tty: true - orderer.example.com
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/
# ca.example.com: # not used currently # ZooKeeper services, at least 3 nodes
# extends: zookeeper0:
# file: base.yaml extends:
# service: ca-base file: docker-compose-base-kafka.yaml
# container_name: ca.example.com service: zookeeper0
# 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 zookeeper1:
# ports: extends:
# - "7054:7054" file: docker-compose-base-kafka.yaml
# command: fabric-ca-server start -b admin:adminpw service: zookeeper1
zookeeper2:
extends:
file: docker-compose-base-kafka.yaml
service: zookeeper2
# Kafka services, at least 4 node to tolerant work with 1 node failure
kafka0:
extends:
file: docker-compose-base-kafka.yaml
service: kafka0
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka1:
extends:
file: docker-compose-base-kafka.yaml
service: kafka1
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka2:
extends:
file: docker-compose-base-kafka.yaml
service: kafka2
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka3:
extends:
file: docker-compose-base-kafka.yaml
service: kafka3
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
#networks: #networks:
# default: # default:

View File

@ -17,12 +17,12 @@ version: '2'
services: services:
orderer.example.com: orderer.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: orderer.example.com service: orderer.example.com
peer0.org1.example.com: peer0.org1.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer0.org1.example.com service: peer0.org1.example.com
environment: environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
@ -32,7 +32,7 @@ services:
peer1.org1.example.com: peer1.org1.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer1.org1.example.com service: peer1.org1.example.com
environment: environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
@ -42,7 +42,7 @@ services:
peer0.org2.example.com: peer0.org2.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer0.org2.example.com service: peer0.org2.example.com
environment: environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
@ -52,7 +52,7 @@ services:
peer1.org2.example.com: peer1.org2.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer1.org2.example.com service: peer1.org2.example.com
environment: environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
@ -102,6 +102,6 @@ services:
cli: cli:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: cli service: cli

View File

@ -19,32 +19,32 @@ services:
orderer.example.com: # There can be multiple orderers orderer.example.com: # There can be multiple orderers
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: orderer.example.com service: orderer.example.com
peer0.org1.example.com: peer0.org1.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer0.org1.example.com service: peer0.org1.example.com
peer1.org1.example.com: peer1.org1.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer1.org1.example.com service: peer1.org1.example.com
peer0.org2.example.com: peer0.org2.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer0.org2.example.com service: peer0.org2.example.com
peer1.org2.example.com: peer1.org2.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer1.org2.example.com service: peer1.org2.example.com
cli: cli:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: cli service: cli
environment: environment:
- CORE_PEER_TLS_ENABLED=false # event-listener doesn't support TLS - CORE_PEER_TLS_ENABLED=false # event-listener doesn't support TLS

View File

@ -51,38 +51,26 @@ services:
# ZooKeeper services, at least 3 nodes # ZooKeeper services, at least 3 nodes
zookeeper0: zookeeper0:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: zookeeper-base file: docker-compose-base-kafka.yaml
environment: service: zookeeper0
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
zookeeper1: zookeeper1:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: zookeeper-base file: docker-compose-base-kafka.yaml
environment: service: zookeeper1
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
zookeeper2: zookeeper2:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: zookeeper-base service: zookeeper2
environment:
- ZOO_MY_ID=3
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
# Kafka services, at least 4 node to tolerant work with 1 node failure # Kafka services, at least 4 node to tolerant work with 1 node failure
kafka0: kafka0:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: kafka-base service: kafka0
environment:
- KAFKA_BROKER_ID=0
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
depends_on: depends_on:
- zookeeper0 - zookeeper0
- zookeeper1 - zookeeper1
@ -90,13 +78,8 @@ services:
kafka1: kafka1:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: kafka-base service: kafka1
environment:
- KAFKA_BROKER_ID=1
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
depends_on: depends_on:
- zookeeper0 - zookeeper0
- zookeeper1 - zookeeper1
@ -104,13 +87,8 @@ services:
kafka2: kafka2:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: kafka-base service: kafka2
environment:
- KAFKA_BROKER_ID=2
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
depends_on: depends_on:
- zookeeper0 - zookeeper0
- zookeeper1 - zookeeper1
@ -118,17 +96,13 @@ services:
kafka3: kafka3:
extends: extends:
file: base-kafka.yaml file: docker-compose-base-kafka.yaml
service: kafka-base service: kafka3
environment:
- KAFKA_BROKER_ID=3
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
depends_on: depends_on:
- zookeeper0 - zookeeper0
- zookeeper1 - zookeeper1
- zookeeper2 - zookeeper2
#networks: #networks:
# default: # default:
# external: # external:

View File

@ -10,42 +10,42 @@ version: '2.0'
services: services:
# ca.org1.example.com: # ca.org1.example.com:
# extends: # extends:
# file: docker-compose-base.yaml # file: docker-compose-base-e2e.yaml
# service: ca.org1.example.com # service: ca.org1.example.com
# ca.org2.example.com: # ca.org2.example.com:
# extends: # extends:
# file: docker-compose-base.yaml # file: docker-compose-base-e2e.yaml
# service: ca.org2.example.com # service: ca.org2.example.com
cli: cli:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: cli service: cli
orderer.example.com: # There can be multiple orderers orderer.example.com: # There can be multiple orderers
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: orderer.example.com service: orderer.example.com
peer0.org1.example.com: peer0.org1.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer0.org1.example.com service: peer0.org1.example.com
peer1.org1.example.com: peer1.org1.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer1.org1.example.com service: peer1.org1.example.com
peer0.org2.example.com: peer0.org2.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer0.org2.example.com service: peer0.org2.example.com
peer1.org2.example.com: peer1.org2.example.com:
extends: extends:
file: docker-compose-base.yaml file: docker-compose-base-e2e.yaml
service: peer1.org2.example.com service: peer1.org2.example.com
#networks: #networks:

View File

@ -0,0 +1,96 @@
# This is the development compose 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 yeasy/hyperledger-fabric image.
version: '2'
services:
orderer.example.com: # There can be multiple orderers
extends:
file: base.yaml
service: orderer-base
image: yeasy/hyperledger-fabric:1.0.2
container_name: orderer.example.com
hostname: orderer.example.com
ports:
- "7050:7050"
environment:
# Kafka related configurations
- ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
- ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
- ORDERER_KAFKA_VERBOSE=true
volumes:
- $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric
# for e2e_cli case
#- ./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
# for kafka case
- ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
command: bash -c 'bash /tmp/orderer_build.sh; orderer start' # use this if to debug orderer
#command: bash -c 'orderer start' # use this if to debug orderer
peer0.org1.example.com:
extends:
file: base.yaml
service: peer-base
image: yeasy/hyperledger-fabric:1.0.2
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:
- $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric
# e2e mode configuration
#- ./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
# kafka mode configuration
- ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ./kafka/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: bash -c 'peer node start'
cli:
extends:
file: base.yaml
service: cli-base
image: yeasy/hyperledger-fabric:1.0.2
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/
- ./scripts:/tmp/scripts
# e2e mode configuration
#- ./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
# kafka mode configuration
- ./kafka/channel-artifacts:/tmp/channel-artifacts
- ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
- ./kafka/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml
- ./kafka/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
- ./kafka/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples

View File

@ -13,8 +13,6 @@ version: '2' # v3 does not support 'extends' yet
services: services:
ca.org1.example.com: ca.org1.example.com:
#image: yeasy/hyperledger-fabric-ca:1.0.2
#image: hyperledger/fabric-ca:x86_64-1.0.2
extends: extends:
file: base.yaml file: base.yaml
service: ca-base service: ca-base
@ -31,8 +29,6 @@ services:
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' 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: ca.org2.example.com:
#image: yeasy/hyperledger-fabric-ca:1.0.2
#image: hyperledger/fabric-ca:x86_64-1.0.2
extends: extends:
file: base.yaml file: base.yaml
service: ca-base service: ca-base
@ -63,8 +59,6 @@ services:
command: orderer start command: orderer start
cli: cli:
#image: yeasy/hyperledger-fabric:1.0.2
#image: hyperledger/fabric-tools:x86_64-1.0.2
extends: extends:
file: base.yaml file: base.yaml
service: cli-base service: cli-base

View File

@ -1,4 +1,4 @@
# Base compose files for: # Kafka enabled fabric network with:
# ca.org1.example.com # ca.org1.example.com
# ca.org2.example.com # ca.org2.example.com
@ -7,6 +7,8 @@
# peer1.org1.example.com # peer1.org1.example.com
# peer0.org2.example.com # peer0.org2.example.com
# peer1.org2.example.com # peer1.org2.example.com
# 3 zookeeper nodes
# 4 kafka nodes
# cli # cli
version: '2' # v3 does not support 'extends' yet version: '2' # v3 does not support 'extends' yet
@ -50,12 +52,17 @@ services:
orderer.example.com: # There can be multiple orderers orderer.example.com: # There can be multiple orderers
extends: extends:
file: base-kafka.yaml file: base.yaml
service: orderer-base service: orderer-base
container_name: orderer.example.com container_name: orderer.example.com
hostname: orderer.example.com hostname: orderer.example.com
ports: ports:
- "7050:7050" - "7050:7050"
environment:
# Kafka related configurations
- ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
- ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
- ORDERER_KAFKA_VERBOSE=true
volumes: volumes:
- ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block - ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp - ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
@ -63,8 +70,6 @@ services:
command: orderer start command: orderer start
cli: cli:
#image: yeasy/hyperledger-fabric:1.0.2
#image: hyperledger/fabric-tools:x86_64-1.0.2
extends: extends:
file: base.yaml file: base.yaml
service: cli-base service: cli-base
@ -72,7 +77,6 @@ services:
hostname: fabric-cli hostname: fabric-cli
tty: true tty: true
environment: environment:
#- GOPATH=/opt/gopath
- CORE_PEER_ID=fabric-cli - CORE_PEER_ID=fabric-cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1 - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1
- CORE_PEER_LOCALMSPID=Org1MSP - CORE_PEER_LOCALMSPID=Org1MSP
@ -81,7 +85,6 @@ services:
- 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_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 - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
volumes: volumes:
#- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./scripts:/tmp/scripts - ./scripts:/tmp/scripts
- ./kafka/channel-artifacts:/tmp/channel-artifacts - ./kafka/channel-artifacts:/tmp/channel-artifacts
- ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml - ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
@ -173,3 +176,84 @@ services:
- 10051:7051 - 10051:7051
- 10052:7052 - 10052:7052
- 10053:7053 - 10053:7053
# ZooKeeper services, at least 3 nodes
zookeeper0:
extends:
file: base.yaml
service: zookeeper-base
container_name: zookeeper0
hostname: zookeeper0
environment:
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
zookeeper1:
extends:
file: base.yaml
service: zookeeper-base
container_name: zookeeper1
hostname: zookeeper1
environment:
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
zookeeper2:
extends:
file: base.yaml
service: zookeeper-base
container_name: zookeeper2
hostname: zookeeper2
environment:
- ZOO_MY_ID=3
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
# Kafka services, at least 4 node to tolerant work with 1 node failure
kafka0:
extends:
file: base.yaml
service: kafka-base
container_name: kafka0
hostname: kafka0
environment:
- KAFKA_BROKER_ID=0
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
kafka1:
extends:
file: base.yaml
service: kafka-base
container_name: kafka1
hostname: kafka1
environment:
- KAFKA_BROKER_ID=1
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
kafka2:
extends:
file: base.yaml
service: kafka-base
container_name: kafka2
hostname: kafka2
environment:
- KAFKA_BROKER_ID=2
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
kafka3:
extends:
file: base.yaml
service: kafka-base
container_name: kafka3
hostname: kafka3
environment:
- KAFKA_BROKER_ID=3
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181

View File

@ -9,7 +9,7 @@ services:
zookeeper0: zookeeper0:
container_name: zookeeper0 container_name: zookeeper0
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=1 - ZOO_MY_ID=1
@ -18,7 +18,7 @@ services:
zookeeper1: zookeeper1:
container_name: zookeeper1 container_name: zookeeper1
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=2 - ZOO_MY_ID=2
@ -27,7 +27,7 @@ services:
zookeeper2: zookeeper2:
container_name: zookeeper2 container_name: zookeeper2
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=3 - ZOO_MY_ID=3
@ -36,7 +36,7 @@ services:
kafka0: kafka0:
container_name: kafka0 container_name: kafka0
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=0 - KAFKA_BROKER_ID=0
@ -51,7 +51,7 @@ services:
kafka1: kafka1:
container_name: kafka1 container_name: kafka1
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=1 - KAFKA_BROKER_ID=1
@ -66,7 +66,7 @@ services:
kafka2: kafka2:
container_name: kafka2 container_name: kafka2
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=2 - KAFKA_BROKER_ID=2
@ -81,7 +81,7 @@ services:
kafka3: kafka3:
container_name: kafka3 container_name: kafka3
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=3 - KAFKA_BROKER_ID=3
@ -95,7 +95,7 @@ services:
orderer.example.com: orderer.example.com:
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: orderer.example.com service: orderer.example.com
container_name: orderer.example.com container_name: orderer.example.com
depends_on: depends_on:
@ -110,25 +110,25 @@ services:
peer0.org1.example.com: peer0.org1.example.com:
container_name: peer0.org1.example.com container_name: peer0.org1.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer0.org1.example.com service: peer0.org1.example.com
peer1.org1.example.com: peer1.org1.example.com:
container_name: peer1.org1.example.com container_name: peer1.org1.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer1.org1.example.com service: peer1.org1.example.com
peer0.org2.example.com: peer0.org2.example.com:
container_name: peer0.org2.example.com container_name: peer0.org2.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer0.org2.example.com service: peer0.org2.example.com
peer1.org2.example.com: peer1.org2.example.com:
container_name: peer1.org2.example.com container_name: peer1.org2.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer1.org2.example.com service: peer1.org2.example.com
cli: cli:

View File

@ -39,7 +39,7 @@ services:
zookeeper0: zookeeper0:
container_name: zookeeper0 container_name: zookeeper0
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=1 - ZOO_MY_ID=1
@ -48,7 +48,7 @@ services:
zookeeper1: zookeeper1:
container_name: zookeeper1 container_name: zookeeper1
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=2 - ZOO_MY_ID=2
@ -57,7 +57,7 @@ services:
zookeeper2: zookeeper2:
container_name: zookeeper2 container_name: zookeeper2
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=3 - ZOO_MY_ID=3
@ -66,7 +66,7 @@ services:
kafka0: kafka0:
container_name: kafka0 container_name: kafka0
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=0 - KAFKA_BROKER_ID=0
@ -81,7 +81,7 @@ services:
kafka1: kafka1:
container_name: kafka1 container_name: kafka1
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=1 - KAFKA_BROKER_ID=1
@ -96,7 +96,7 @@ services:
kafka2: kafka2:
container_name: kafka2 container_name: kafka2
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=2 - KAFKA_BROKER_ID=2
@ -111,7 +111,7 @@ services:
kafka3: kafka3:
container_name: kafka3 container_name: kafka3
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=3 - KAFKA_BROKER_ID=3
@ -125,7 +125,7 @@ services:
orderer.example.com: orderer.example.com:
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: orderer.example.com service: orderer.example.com
container_name: orderer.example.com container_name: orderer.example.com
depends_on: depends_on:
@ -137,23 +137,23 @@ services:
peer0.org1.example.com: peer0.org1.example.com:
container_name: peer0.org1.example.com container_name: peer0.org1.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer0.org1.example.com service: peer0.org1.example.com
peer1.org1.example.com: peer1.org1.example.com:
container_name: peer1.org1.example.com container_name: peer1.org1.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer1.org1.example.com service: peer1.org1.example.com
peer0.org2.example.com: peer0.org2.example.com:
container_name: peer0.org2.example.com container_name: peer0.org2.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer0.org2.example.com service: peer0.org2.example.com
peer1.org2.example.com: peer1.org2.example.com:
container_name: peer1.org2.example.com container_name: peer1.org2.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer1.org2.example.com service: peer1.org2.example.com

View File

@ -39,7 +39,7 @@ services:
zookeeper0: zookeeper0:
container_name: zookeeper0 container_name: zookeeper0
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=1 - ZOO_MY_ID=1
@ -48,7 +48,7 @@ services:
zookeeper1: zookeeper1:
container_name: zookeeper1 container_name: zookeeper1
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=2 - ZOO_MY_ID=2
@ -57,7 +57,7 @@ services:
zookeeper2: zookeeper2:
container_name: zookeeper2 container_name: zookeeper2
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: zookeeper service: zookeeper
environment: environment:
- ZOO_MY_ID=3 - ZOO_MY_ID=3
@ -66,7 +66,7 @@ services:
kafka0: kafka0:
container_name: kafka0 container_name: kafka0
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=0 - KAFKA_BROKER_ID=0
@ -81,7 +81,7 @@ services:
kafka1: kafka1:
container_name: kafka1 container_name: kafka1
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=1 - KAFKA_BROKER_ID=1
@ -96,7 +96,7 @@ services:
kafka2: kafka2:
container_name: kafka2 container_name: kafka2
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=2 - KAFKA_BROKER_ID=2
@ -111,7 +111,7 @@ services:
kafka3: kafka3:
container_name: kafka3 container_name: kafka3
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: kafka service: kafka
environment: environment:
- KAFKA_BROKER_ID=3 - KAFKA_BROKER_ID=3
@ -125,7 +125,7 @@ services:
orderer.example.com: orderer.example.com:
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: orderer.example.com service: orderer.example.com
container_name: orderer.example.com container_name: orderer.example.com
depends_on: depends_on:
@ -137,23 +137,23 @@ services:
peer0.org1.example.com: peer0.org1.example.com:
container_name: peer0.org1.example.com container_name: peer0.org1.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer0.org1.example.com service: peer0.org1.example.com
peer1.org1.example.com: peer1.org1.example.com:
container_name: peer1.org1.example.com container_name: peer1.org1.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer1.org1.example.com service: peer1.org1.example.com
peer0.org2.example.com: peer0.org2.example.com:
container_name: peer0.org2.example.com container_name: peer0.org2.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer0.org2.example.com service: peer0.org2.example.com
peer1.org2.example.com: peer1.org2.example.com:
container_name: peer1.org2.example.com container_name: peer1.org2.example.com
extends: extends:
file: base/docker-compose-base.yaml file: base/docker-compose-base-e2e.yaml
service: peer1.org2.example.com service: peer1.org2.example.com

View File

@ -0,0 +1,133 @@
KAFKA_ENABLED ?= false
COUCHDB_ENABLED ?= false
DEV_ENABLED ?= true
COMPOSE_FILE ?= "docker-compose-2orgs-4peers.yaml"
ifeq ($(KAFKA_ENABLED),true)
COMPOSE_FILE="docker-compose-2orgs-4peers-kafka.yaml"
endif
ifeq ($(COUCHDB_ENABLED),true)
COMPOSE_FILE="docker-compose-2orgs-4peers-couchdb.yaml"
endif
ifeq ($(DEV_ENABLED),true)
COMPOSE_FILE="docker-compose-1orgs-1peers-dev.yaml"
endif
all:
@echo "Run test with ${COMPOSE_FILE}"
@echo "Please make sure u have setup Docker and pulled images by 'make setup'."
sleep 1
make ready
make lscc qscc
make stop clean
ready: restart
@echo "Restart, init network and then do cc testing..."
if [ "$(DEV_ENABLED)" = "true" ]; then \
echo "In DEV mode, wait for rebuilding ..." && sleep 35; \
make init_peer0; \
sleep 2; \
make test_peer0; \
else \
echo "In Normal mode ..." && sleep 3; \
make init; \
sleep 2; \
make test_cc; \
fi
@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."
start: # bootup the fabric network
@echo "Start a fabric network with 2-org-4-peer"
make clean
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"
init_peer0: # 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"
stop: # stop the fabric network
@echo "Stop the fabric network"
docker-compose -f ${COMPOSE_FILE} down # Stop a fabric network
restart: stop start
################## Chaincode testing operations ################
test_cc: # test user chaincode on all peers
@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 queries
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"
################## Env setup related, no need to see usually ################
setup: # setup the environment
bash scripts/setup_Docker.sh # Install Docker, Docker-Compose
bash scripts/download_images.sh # Pull required Docker images
clean: # clean up containers
@echo "Clean all containers and fabric cc images"
@-docker rm -f `docker ps -qa`
@-docker rmi $$(docker images | awk '$$1 ~ /dev-peer/ { print $$3}')
clean_env: # 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
peer: # enter the peer container
docker exec -it peer0.org1.example.com bash
dev_compile: # rebuild the peer
docker exec -it peer0.org1.example.com bash /tmp/peer_build.sh
ps: # show existing docker images
docker ps -a
logs: # show logs
docker-compose -f ${COMPOSE_FILE} logs -f --tail 200
logs_check: logs_save logs_view
logs_save: # save logs
docker logs peer0.org1.example.com >& /tmp/dev_peer.log
docker logs orderer.example.com >& /tmp/dev_orderer.log
logs_view: # view logs
less /tmp/dev_peer.log
gen_e2e: # generate e2e_cli artifacts
cd e2e_cli && bash gen_artifacts.sh
gen_kafka: # generate kafka artifacts
cd kafka && bash gen_artifacts.sh
download: # download required images
@echo "Download Docker images"
docker pull yeasy/hyperledger-fabric:latest
docker pull yeasy/hyperledger-fabric:1.0.3
docker pull hyperledger/fabric-baseos:x86_64-0.4.2
docker tag yeasy/hyperledger-fabric:latest hyperledger/fabric-ccenv:x86_64-1.1.0

View File

@ -0,0 +1,144 @@
# Hyperledger fabric 1.0.3
Here we show steps on how to setup a fabric 1.0.3 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 ordering 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).

View File

@ -1,50 +1,23 @@
# This is the development base file to config env and command # This is the default base file to config env and command
# Notice that chaincode is executed inside docker in default net mode # Notice that chaincode is executed inside docker in default net mode
# https://github.com/yeasy/docker-compose-files # https://github.com/yeasy/docker-compose-files
# Depends on the yeasy/hyperledger-fabric image. # Depends on the hyperledger/fabric-peer image.
version: '2' version: '2'
services: services:
peer-base: ca-base:
image: yeasy/hyperledger-fabric:latest #image: yeasy/hyperledger-fabric-ca:1.0.3
image: hyperledger/fabric-ca:x86_64-1.0.3
restart: always restart: always
environment: environment:
#- CORE_PEER_ID=peer0 - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
- CORE_PEER_ADDRESSAUTODETECT=false - FABRIC_CA_SERVER_TLS_ENABLED=true
- CORE_LOGGING_LEVEL=DEBUG
- CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=102_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
- CORE_CHIANCODE_LOGGING_LEVEL=DEBUG
- CORE_CHIANCODE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
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
- $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric
command: bash -c 'bash /tmp/peer_build.sh; peer node start'
orderer-base: orderer-base:
image: yeasy/hyperledger-fabric:latest #image: yeasy/hyperledger-fabric-orderer:1.0.3
#image: hyperledger/fabric-orderer:x86_64-1.0.2 image: hyperledger/fabric-orderer:x86_64-1.0.3
restart: always restart: always
environment: environment:
- ORDERER_GENERAL_LOGLEVEL=DEBUG - ORDERER_GENERAL_LOGLEVEL=DEBUG
@ -67,29 +40,83 @@ services:
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
expose: expose:
- "7050" # - "7050" #
command: orderer start
peer-base:
image: yeasy/hyperledger-fabric-peer:1.0.3
#image: hyperledger/fabric-peer:x86_64-1.0.3
restart: always
environment:
- CORE_PEER_ADDRESSAUTODETECT=false
- CORE_LOGGING_LEVEL=DEBUG
- CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=103_default # uncomment this to use specific network
- 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
- CORE_CHIANCODE_LOGGING_LEVEL=DEBUG
- CORE_CHIANCODE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
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 volumes: # docker.sock is mapped as the default CORE_VM_ENDPOINT
- $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric - /var/run/docker.sock:/var/run/docker.sock
#command: bash -c 'bash /tmp/orderer_build.sh; orderer start' # use this if to debug orderer #volumes:
command: bash -c 'bash /tmp/orderer_build.sh; orderer start' # - /var/run/:/host/var/run/
command: peer node start
cli-base: cli-base:
image: yeasy/hyperledger-fabric:latest #image: yeasy/hyperledger-fabric:1.0.3
#image: hyperledger/fabric-tools:x86_64-1.0.2 image: hyperledger/fabric-tools:x86_64-1.0.3
restart: always restart: always
tty: true tty: true
environment: environment:
#- GOPATH=/opt/gopath #- GOPATH=/opt/gopath
- CORE_LOGGING_LEVEL=DEBUG - CORE_LOGGING_LEVEL=DEBUG
- CORE_LOGGING_FORMAT=%{color}[%{id:03x} %{time:01-02 15:04:05.00 MST}] [%{longpkg}] %{callpath} -> %{level:.4s}%{color:reset} %{message}
- CORE_PEER_TLS_ENABLED=true # to enable TLS, change to true - 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 - 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" - 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 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: bash -c 'cd /tmp; bash scripts/func.sh; while true; do sleep 20170910; done' command: bash -c 'cd /tmp; bash scripts/func.sh; while true; do sleep 20170504; done'
couchdb-base:
#container_name: couchdb0
image: hyperledger/fabric-couchdb:x86_64-1.0.3
restart: always
tty: true
# 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.
zookeeper-base:
image: hyperledger/fabric-zookeeper:x86_64-1.0.3
restart: always
tty: true
expose:
- '2181'
- '2888'
- '3888'
kafka-base:
image: hyperledger/fabric-kafka:x86_64-1.0.3
restart: always
tty: true
environment:
- KAFKA_MESSAGE_MAX_BYTES=1048576 # 1 * 1024 * 1024 B
- KAFKA_REPLICA_FETCH_MAX_BYTES=1048576 # 1 * 1024 * 1024 B
- KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
- KAFKA_LOG_RETENTION_MS=-1
expose:
- '9092'

View File

@ -0,0 +1,27 @@
#! /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

View File

@ -0,0 +1,13 @@
#!/bin/bash
echo "Start configtxlator service and listen on port 7059"
docker run \
--rm -it \
--name configtxlator \
-p 7059:7059 \
yeasy/hyperledger-fabric \
configtxlator start
docker rm -f configtxlator

View File

@ -0,0 +1,82 @@
# 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:
orderer.example.com: # There can be multiple orderers
extends:
file: docker-compose-base-dev.yaml
service: orderer.example.com
peer0.org1.example.com:
extends:
file: docker-compose-base-dev.yaml
service: peer0.org1.example.com
cli:
extends:
file: docker-compose-base-dev.yaml
service: cli
# ZooKeeper services, at least 3 nodes
zookeeper0:
extends:
file: docker-compose-base-kafka.yaml
service: zookeeper0
zookeeper1:
extends:
file: docker-compose-base-kafka.yaml
service: zookeeper1
zookeeper2:
extends:
file: docker-compose-base-kafka.yaml
service: zookeeper2
# Kafka services, at least 4 node to tolerant work with 1 node failure
kafka0:
extends:
file: docker-compose-base-kafka.yaml
service: kafka0
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka1:
extends:
file: docker-compose-base-kafka.yaml
service: kafka1
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka2:
extends:
file: docker-compose-base-kafka.yaml
service: kafka2
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka3:
extends:
file: docker-compose-base-kafka.yaml
service: kafka3
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
#networks:
# default:
# external:
# name: hyperledger_fabric

View File

@ -0,0 +1,107 @@
# github.com/yeasy/docker-compose-files
# fabric network with couchdb as the peer state db.
# including:
# orderer.example.com: orderer node
# peer0.org1.example.com: peer0 node
# peer1.org1.example.com: peer1 node
# peer0.org2.example.com: peer2 node
# peer1.org2.example.com: peer3 node
# couchdb0: couchdb node
# couchdb1: couchdb node
# couchdb2: couchdb node
# couchdb3: couchdb node
# cli: cli node
version: '2'
services:
orderer.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: orderer.example.com
peer0.org1.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer0.org1.example.com
environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
depends_on:
- couchdb0
peer1.org1.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer1.org1.example.com
environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984
depends_on:
- couchdb1
peer0.org2.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer0.org2.example.com
environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984
depends_on:
- couchdb2
peer1.org2.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer1.org2.example.com
environment:
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984
depends_on:
- couchdb3
couchdb0:
extends:
file: base.yaml
service: couchdb-base
container_name: couchdb0
# 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" # this is the restful API addr, can also access fauxton web ui thru http://localhost:5984/_utils/
couchdb1:
extends:
file: base.yaml
service: couchdb-base
container_name: couchdb1
# 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"
couchdb2:
extends:
file: base.yaml
service: couchdb-base
container_name: couchdb2
# 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"
couchdb3:
extends:
file: base.yaml
service: couchdb-base
container_name: couchdb3
# 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"
cli:
extends:
file: docker-compose-base-e2e.yaml
service: cli

View File

@ -0,0 +1,91 @@
# 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.3
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-e2e.yaml
service: orderer.example.com
peer0.org1.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer0.org1.example.com
peer1.org1.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer1.org1.example.com
peer0.org2.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer0.org2.example.com
peer1.org2.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer1.org2.example.com
cli:
extends:
file: docker-compose-base-e2e.yaml
service: cli
environment:
- CORE_PEER_TLS_ENABLED=false # event-listener doesn't support TLS
event-listener:
container_name: fabric-event-listener
hostname: fabric-event-listener
image: yeasy/hyperledger-fabric:1.0.3
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/
- ./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
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
depends_on:
- orderer.example.com
- peer0.org1.example.com
- peer1.org1.example.com
- peer0.org2.example.com
- peer1.org2.example.com
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
#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'
command: bash -c 'while true; do sleep 20170504; done'
#networks:
# default:
# external:
# name: hyperledger_fabric
#networks:
# default:
# external:
# name: hyperledger_fabric

View File

@ -0,0 +1,109 @@
# https://github.com/yeasy/docker-compose-files/tree/master/hyperledger
# This compose file will start a Hyperledger Fabric 1.0 MVE, including
# * 2 ca (not in use now)
# * 1 orderer
# * 4 peers in 2 orgs
# * cli for testing
version: '2.0'
services:
# ca.org1.example.com:
# extends:
# file: docker-compose-base-kafka.yaml
# service: ca.org1.example.com
# ca.org2.example.com:
# extends:
# file: docker-compose-base-kafka.yaml
# service: ca.org2.example.com
cli:
extends:
file: docker-compose-base-kafka.yaml
service: cli
orderer.example.com: # There can be multiple orderers
extends:
file: docker-compose-base-kafka.yaml
service: orderer.example.com
peer0.org1.example.com:
extends:
file: docker-compose-base-kafka.yaml
service: peer0.org1.example.com
peer1.org1.example.com:
extends:
file: docker-compose-base-kafka.yaml
service: peer1.org1.example.com
peer0.org2.example.com:
extends:
file: docker-compose-base-kafka.yaml
service: peer0.org2.example.com
peer1.org2.example.com:
extends:
file: docker-compose-base-kafka.yaml
service: peer1.org2.example.com
# ZooKeeper services, at least 3 nodes
zookeeper0:
extends:
file: docker-compose-base-kafka.yaml
file: docker-compose-base-kafka.yaml
service: zookeeper0
zookeeper1:
extends:
file: docker-compose-base-kafka.yaml
file: docker-compose-base-kafka.yaml
service: zookeeper1
zookeeper2:
extends:
file: docker-compose-base-kafka.yaml
service: zookeeper2
# Kafka services, at least 4 node to tolerant work with 1 node failure
kafka0:
extends:
file: docker-compose-base-kafka.yaml
service: kafka0
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka1:
extends:
file: docker-compose-base-kafka.yaml
service: kafka1
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka2:
extends:
file: docker-compose-base-kafka.yaml
service: kafka2
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
kafka3:
extends:
file: docker-compose-base-kafka.yaml
service: kafka3
depends_on:
- zookeeper0
- zookeeper1
- zookeeper2
#networks:
# default:
# external:
# name: hyperledger_fabric

View File

@ -0,0 +1,54 @@
# https://github.com/yeasy/docker-compose-files/tree/master/hyperledger
# This compose file will start a Hyperledger Fabric 1.0 MVE, including
# * 2 ca (not in use now)
# * 1 orderer
# * 4 peers in 2 orgs
# * cli for testing
version: '2.0'
services:
# ca.org1.example.com:
# extends:
# file: docker-compose-base-e2e.yaml
# service: ca.org1.example.com
# ca.org2.example.com:
# extends:
# file: docker-compose-base-e2e.yaml
# service: ca.org2.example.com
cli:
extends:
file: docker-compose-base-e2e.yaml
service: cli
orderer.example.com: # There can be multiple orderers
extends:
file: docker-compose-base-e2e.yaml
service: orderer.example.com
peer0.org1.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer0.org1.example.com
peer1.org1.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer1.org1.example.com
peer0.org2.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer0.org2.example.com
peer1.org2.example.com:
extends:
file: docker-compose-base-e2e.yaml
service: peer1.org2.example.com
#networks:
# default:
# external:
# name: hyperledger_fabric

View File

@ -0,0 +1,96 @@
# This is the development compose 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 yeasy/hyperledger-fabric image.
version: '2'
services:
orderer.example.com: # There can be multiple orderers
extends:
file: base.yaml
service: orderer-base
image: yeasy/hyperledger-fabric:1.0.3
container_name: orderer.example.com
hostname: orderer.example.com
ports:
- "7050:7050"
environment:
# Kafka related configurations
- ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
- ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
- ORDERER_KAFKA_VERBOSE=true
volumes:
- $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric
# for e2e_cli case
#- ./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
# for kafka case
- ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
#command: bash -c 'bash /tmp/orderer_build.sh; orderer start' # use this if to debug orderer
command: bash -c 'orderer start' # use this if to debug orderer
peer0.org1.example.com:
extends:
file: base.yaml
service: peer-base
image: yeasy/hyperledger-fabric:latest
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:
- $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric
# e2e mode configuration
#- ./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
# kafka mode configuration
- ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ./kafka/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: bash -c 'peer node start'
cli:
extends:
file: base.yaml
service: cli-base
image: yeasy/hyperledger-fabric:1.0.3
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/
- ./scripts:/tmp/scripts
# e2e mode configuration
#- ./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
# kafka mode configuration
- ./kafka/channel-artifacts:/tmp/channel-artifacts
- ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
- ./kafka/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml
- ./kafka/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
- ./kafka/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples

View File

@ -0,0 +1,169 @@
# Base compose files for:
# ca.org1.example.com
# ca.org2.example.com
# orderer.example.com
# peer0.org1.example.com
# peer1.org1.example.com
# peer0.org2.example.com
# peer1.org2.example.com
# cli
version: '2' # v3 does not support 'extends' yet
services:
ca.org1.example.com:
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:
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:
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
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
## 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

View File

@ -0,0 +1,259 @@
# Kafka enabled fabric network with:
# ca.org1.example.com
# ca.org2.example.com
# orderer.example.com
# peer0.org1.example.com
# peer1.org1.example.com
# peer0.org2.example.com
# peer1.org2.example.com
# 3 zookeeper nodes
# 4 kafka nodes
# cli
version: '2' # v3 does not support 'extends' yet
services:
ca.org1.example.com:
#image: yeasy/hyperledger-fabric-ca:1.0.3
#image: hyperledger/fabric-ca:x86_64-1.0.3
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:
- ./kafka/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.3
#image: hyperledger/fabric-ca:x86_64-1.0.3
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:
- ./kafka/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"
environment:
# Kafka related configurations
- ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
- ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
- ORDERER_KAFKA_VERBOSE=true
volumes:
- ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
- ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
command: orderer start
cli:
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:
- ./scripts:/tmp/scripts
- ./kafka/channel-artifacts:/tmp/channel-artifacts
- ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
- ./kafka/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml
- ./kafka/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
- ./kafka/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples
## 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:
- ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ./kafka/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:
- ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ./kafka/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:
- ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
- ./kafka/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:
- ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
- ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
ports:
- 10051:7051
- 10052:7052
- 10053:7053
# ZooKeeper services, at least 3 nodes
zookeeper0:
extends:
file: base.yaml
service: zookeeper-base
container_name: zookeeper0
hostname: zookeeper0
environment:
- ZOO_MY_ID=1
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
zookeeper1:
extends:
file: base.yaml
service: zookeeper-base
container_name: zookeeper1
hostname: zookeeper1
environment:
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
zookeeper2:
extends:
file: base.yaml
service: zookeeper-base
container_name: zookeeper2
hostname: zookeeper2
environment:
- ZOO_MY_ID=3
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888
# Kafka services, at least 4 node to tolerant work with 1 node failure
kafka0:
extends:
file: base.yaml
service: kafka-base
container_name: kafka0
hostname: kafka0
environment:
- KAFKA_BROKER_ID=0
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
kafka1:
extends:
file: base.yaml
service: kafka-base
container_name: kafka1
hostname: kafka1
environment:
- KAFKA_BROKER_ID=1
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
kafka2:
extends:
file: base.yaml
service: kafka-base
container_name: kafka2
hostname: kafka2
environment:
- KAFKA_BROKER_ID=2
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181
kafka3:
extends:
file: base.yaml
service: kafka-base
container_name: kafka3
hostname: kafka3
environment:
- KAFKA_BROKER_ID=3
- KAFKA_DEFAULT_REPLICATION_FACTOR=3
- KAFKA_MIN_INSYNC_REPLICAS=2
- KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181

View File

@ -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 =====================
```

View File

@ -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 =====================
```

View File

@ -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
```

View File

@ -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`

View File

@ -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.

View File

@ -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
```

View File

@ -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...
```

View File

@ -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.

View 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.

View File

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

View File

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

View File

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

View File

@ -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:

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgES9plinnjVaL0+bc
U4in/asws4O6EN5zGnAbjnW9z8qhRANCAAREJja+a8AzruQ+7ASDdgIK7hXvqJxL
ugcF5rtoCCG/0/BjFnKYLVmz1MvvrL7+Kg2vESvlkuWZR54OpKnWd0/R
-----END PRIVATE KEY-----

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgTCSshHNuDC5JmNIN
cfSbZyZ/hgxaA1rrTCcSrC9yLqqhRANCAASgt3LoRZsO/f6qK1WOUqB7zUKeO8Jp
G0Hp2c1Gu4zpV9pjBGCVFYDyjMg2xy2FGt3ZJgfEljsHFnxL6eYoUtv0
-----END PRIVATE KEY-----

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgGNicEQgtNBNtuBwF
/eA9w4neMwEbTLdidHYL91KgiN2hRANCAAQ/MLCpppCTGC3Sd0Zg+dU1lPhoLXrl
ajRDMM1Ls3WytxrOdkuoNlad1rUZDIldSZCCnEOKpI+4VVeUoF3It373
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg5owVFluDVt7bnMmG
wCVx+bu+9oZwsSAbAZCjHSHkIfmhRANCAAQQndFc2nHdXQbYUnW1QprgXeTYPdaa
E+Wfq99u7eiWt8qBsVYz/ETfFJ/hTYxKH5hdTfUeJCXPZDOgf6T7eKq+
-----END PRIVATE KEY-----

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg63wCP24vDJSChlDm
hzl0HaT6fxjJu5VjCDE3/Amrgr+hRANCAASbP7MpmOvhcwkX3js7m2pup0N2Xf1Q
C7Lw7gw2ewhxcboZzeEz3sGHarxkb7ALbEfosqhyQ7NfjPt5k+DCsNIe
-----END PRIVATE KEY-----

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgDaoqTS4AwLaselrb
EKOFBN5VJAD21LRMXrCwFMiJzjGhRANCAASDSxT9/woHFqaZAKEmXgjaK9H3L+av
e7GgG8DQXBW5wPs1fWpImyBfx5HQTQVF2deJ/Rd35JOgGsegtia1QWIb
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYcrrkdnV1DlyF7U+
p8OoOScIlCTWfxiNuHznRxhluhihRANCAAQdj4hNSYWuoK1ZEnR2UvbrN1jziqS2
oKBtw/HX6CxDnYVS16x4P7bs0QXbx9ng+WWlcjq1XXq5iIrYWKsOQUzP
-----END PRIVATE KEY-----

View File

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

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
wfVH1xi8rCo0jv4Nee4=
-----END CERTIFICATE-----

View File

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

View File

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

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
wfVH1xi8rCo0jv4Nee4=
-----END CERTIFICATE-----

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg7j9pou9IDBIzB9xQ
tqS7Qqz4vZ93ohCoDz7XX3BzHUqhRANCAATN4lpnJD3lnUoqt4uaOwKaKqSSYqKq
niDMG0ZOSAl1SaodiVMLyCfNObngAbZiaTgWgBIZkUc8NM7hUlndajv0
-----END PRIVATE KEY-----

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQggARn3NoeQy+bhzuS
d/O4U9Q9JqWxqbdzF2zKkj617JuhRANCAATGUZwX62iSzR5bnyLJN3YYEVYMyUQW
LrIsYhtMG76FINjDrb81Jtu5iE7bOkIFg8JxFYMfNlO2wyAKkvWQWZAZ
-----END PRIVATE KEY-----

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
wfVH1xi8rCo0jv4Nee4=
-----END CERTIFICATE-----

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgputMFhOeoXcCA4Ji
qp3Vwg/Aod0fwNtu/WCkwZvJOmmhRANCAARV39373sdyjrofATkrr/VgcAxS9irS
T0VNySdbuAIpfM90BJH5dpL4hPuY7Ml759Z08ZXIVUtDcwUX5XNzG24H
-----END PRIVATE KEY-----

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRAN2DNjWSlgyPNMDEi/eX7V0wCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAxMWcGVlcjEub3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABFXf3fvex3KOuh8BOSuv9WBwDFL2KtJP
RU3JJ1u4Ail8z3QEkfl2kviE+5jsyXvn1nTxlchVS0NzBRflc3MbbgejTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQDwrDA8
R4RoMxF9XvogVbE8WyWmjL614IQ4P6XfGzdxfwIgWV9nIQRCvnXKrCNCHlHr4sxO
xP5K34HRgj1Jr40ODrM=
-----END CERTIFICATE-----

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg1H2Yv70N9yTJ3wRa
rorj5uf6eD2YgVue7roLupwNuh+hRANCAASKEUmb/o49iWONxwzQXgp/k063eR2z
jFRc2H2a/Uvs2Mzpbr0Qc5PW4qJOkyWkxZ7MuqZ06zV4n+Cw2TnjJJAF
-----END PRIVATE KEY-----

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNZgTFjntL+pcg3lX
UjVY+fT9vvCWsEJA5Oq/Hmc3pJahRANCAAThXfCOmsOXZzJdsQlHslPPzdk6OiTJ
qpPBIIhCYvb59wo5xA2/x2KqyUM1Y9Fkb5goUEBxj+XFOiK2lxnDX5qz
-----END PRIVATE KEY-----

View File

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

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
wfVH1xi8rCo0jv4Nee4=
-----END CERTIFICATE-----

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgg6uVXC5L+7kullxR
CYr44nbYJ0Lnb7DLKBqeyMKKOuKhRANCAAT44xBtnUqO0+5SSDJse2OarWXzd5ed
wwriIDKjisz45PBTsbqCJMB+qk2HtYKw1WXXwiQ2XZ0b6gayposlQVZ9
-----END PRIVATE KEY-----

View File

@ -0,0 +1,14 @@
-----BEGIN CERTIFICATE-----
MIICGjCCAcCgAwIBAgIRAPGRVw8QcfBpee3Ja3cvffkwCgYIKoZIzj0EAwIwczEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh
Lm9yZzEuZXhhbXBsZS5jb20wHhcNMTcwOTAxMTEwMDQyWhcNMjcwODMwMTEwMDQy
WjBbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN
U2FuIEZyYW5jaXNjbzEfMB0GA1UEAwwWQWRtaW5Ab3JnMS5leGFtcGxlLmNvbTBZ
MBMGByqGSM49AgEGCCqGSM49AwEHA0IABPjjEG2dSo7T7lJIMmx7Y5qtZfN3l53D
CuIgMqOKzPjk8FOxuoIkwH6qTYe1grDVZdfCJDZdnRvqBrKmiyVBVn2jTTBLMA4G
A1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1UdIwQkMCKAIMhD0/AhEYlj
zl00DpUobohpu3vQUUVM1BZqooh6KtRRMAoGCCqGSM49BAMCA0gAMEUCIQC5cqF2
q0XWF5TtueZexFr9hx7d5jr8xZ21lLlJILlCoQIgOhVwxz9d5F5Svh6PYdZK8q/z
wfVH1xi8rCo0jv4Nee4=
-----END CERTIFICATE-----

View File

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

View File

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

View File

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

View File

@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgdFo0hnDG1JcuPPro
0G5Qcn+DkAtgS3FfHG+6B10xsrShRANCAAQTjhJLpja4gV9wxKiyRBN2NF3YF42H
RSK8qo3c1juas3KQMUHnZS9Bk80L6PUrgv21FlINC1ZEXq66LtZdkDYK
-----END PRIVATE KEY-----

Some files were not shown because too many files have changed in this diff Show More