Fix output msg

pull/117/head
Baohua Yang 2018-01-18 13:31:00 +08:00
parent 636d561928
commit b4a4c23247
35 changed files with 24623 additions and 24379 deletions

View File

@ -57,7 +57,8 @@ ready: # create/join channel, install/instantiate cc
make test_qscc # test qscc operations
make test_fetch_blocks # fetch block files
make test_config_update
#make test_config_update # not work with this version
#make test_channel_update # not work with this version
make logs_save

View File

@ -20,7 +20,6 @@ services:
container_name: ca.org1.example.com
hostname: ca.org1.example.com
environment:
- FABRIC_CA_SERVER_TLS_ENABLED=true
- 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
@ -37,7 +36,6 @@ services:
container_name: ca.org2.example.com
hostname: ca.org2.example.com
environment:
- FABRIC_CA_SERVER_TLS_ENABLED=true
- 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
@ -47,22 +45,18 @@ services:
- ./solo/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: # orderer node for example org
orderer.example.com: # orderer in solo mode
extends:
file: base.yaml
service: orderer-base
container_name: orderer.example.com
hostname: orderer.example.com
environment:
- ORDERER_GENERAL_TLS_ENABLED=true
ports:
- "7050:7050"
volumes:
- ./solo/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block
- ./solo/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp
- ./solo/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls
command: orderer start
## following are peer nodes ##
@ -78,7 +72,6 @@ services:
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
volumes:
- ./solo/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ./solo/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
@ -96,11 +89,10 @@ services:
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_EXTERNALENDPOINT=peer1.org1.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
volumes:
- ./solo/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ./solo/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
@ -118,11 +110,10 @@ services:
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_EXTERNALENDPOINT=peer0.org2.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
- CORE_PEER_LOCALMSPID=Org2MSP
- CORE_PEER_TLS_ENABLED=true
volumes:
- ./solo/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp
- ./solo/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls
@ -140,11 +131,10 @@ services:
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_EXTERNALENDPOINT=peer1.org2.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051
- CORE_PEER_LOCALMSPID=Org2MSP
- CORE_PEER_TLS_ENABLED=true
volumes:
- ./solo/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp
- ./solo/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls
@ -162,11 +152,10 @@ services:
environment:
- CORE_PEER_ID=peer0.org3.example.com
- CORE_PEER_ADDRESS=peer0.org3.example.com:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:7051
- CORE_PEER_CHAINCODELISTENADDRESS=peer0.org3.example.com:7052
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org3.example.com:7051
- CORE_PEER_LOCALMSPID=Org3MSP
- CORE_PEER_TLS_ENABLED=true
volumes:
- ./solo/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/msp:/etc/hyperledger/fabric/msp
- ./solo/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls:/etc/hyperledger/fabric/tls
@ -181,26 +170,13 @@ services:
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=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
- CORE_PEER_TLS_ENABLED=true # to enable TLS, change to true
volumes:
#- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./scripts:/tmp/scripts
- ./solo/channel-artifacts:/tmp/channel-artifacts
- ./solo/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml
- ./solo/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml
- ./solo/crypto-config:/etc/hyperledger/fabric/crypto-config
- ./examples:/opt/gopath/src/examples
#- ./examples:/opt/gopath/src/github.com/hyperledger/fabric/examples
event-listener:
extends:

View File

@ -1,10 +1,20 @@
# This is the default base file to config env and command
# All element in this file is abstract without knowing the org and consensus type
# Contains the base template for all Hyperledger Fabric services
# Never directly use services in this template, but inherent
# All services are abstract without any names, config or port mapping
# https://github.com/yeasy/docker-compose-files
#
# * ca-base: base for fabric-ca
# * orderer-base: base for fabric-orderer
# * peer-base: base for fabric-peer
# * cli-base: base for fabric peer client
# * event-listener-base: base for fabric eventhub listener
# * kafka-base: base for kafka
# * zookeeper-base: base for fabric-zookeeper
# * couchdb-base: base for couchdb
# * explorer-base: base for Hyperledger blockchain-explorer
# * mysql-base: base for MySQL
# Depends on the hyperledger/fabric-peer image.
version: '2'
version: '2' # compose v3 still doesn't support `extends`, shame!
services:
ca-base:
@ -13,8 +23,7 @@ services:
restart: always
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
- FABRIC_CA_SERVER_TLS_ENABLED=true
#- FABRIC_CA_SERVER_TLS_ENABLED=false
- FABRIC_CA_SERVER_TLS_ENABLED=true # change to false to disable TLS
orderer-base:
#image: yeasy/hyperledger-fabric-orderer:1.0.2
@ -43,6 +52,7 @@ services:
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
expose:
- "7050" #
#command: bash -c 'bash /tmp/orderer_build.sh; orderer start' # use this if to debug orderer
command: orderer start
peer-base:
@ -54,8 +64,8 @@ services:
- 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=v102_default # uncomment this to use specific network
- CORE_PEER_GOSSIP_ORGLEADER=false # whether this node is the group leader, default to false
- 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
@ -76,12 +86,10 @@ services:
- "7059" # tlsCAA
volumes: # docker.sock is mapped as the default CORE_VM_ENDPOINT
- /var/run/docker.sock:/var/run/docker.sock
#volumes:
# - /var/run/:/host/var/run/
command: peer node start
cli-base:
#image: yeasy/hyperledger-fabric:1.0.2
image: hyperledger/fabric-tools:x86_64-1.0.2
restart: always
tty: true
@ -106,14 +114,6 @@ services:
#command: bash -c 'block-listener -events-address=peer0.org1.example.com:7053 -events-mspdir=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/ -events-mspid=Org1MSP'
command: bash -c 'while true; do sleep 20170504; done'
couchdb-base:
#container_name: couchdb0
image: hyperledger/fabric-couchdb:x86_64-1.0.2
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.2
restart: always
@ -136,3 +136,20 @@ services:
- KAFKA_LOG_RETENTION_MS=-1
expose:
- '9092'
couchdb-base:
image: hyperledger/fabric-couchdb:x86_64-1.0.2
restart: always
tty: true
explorer-base:
image: yeasy/blockchain-explorer:0.1.0-preview # Till we have official image
expose:
- "8080" # HTTP port
command: bash -c 'sleep 10; node main.js'
mysql-base: # mysql service
image: mysql:8.0
restart: always
expose:
- "3306"

View File

@ -50,31 +50,32 @@ services:
service: peer1.org2.example.com
explorer:
image: yeasy/blockchain-explorer:latest
extends:
file: base.yaml
service: explorer-base
container_name: explorer
hostname: explorer
depends_on:
- mysql
volumes:
- ./explorer/config.json:/blockchain-explorer/config.json
- ./explorer-artifacts/config.json:/blockchain-explorer/config.json
- ./solo/crypto-config:/blockchain-explorer/first-network/crypto-config
ports:
- "8080:8080" # HTTP port
command: bash -c 'sleep 10; node main.js'
mysql: # mysql service
image: mysql:8.0
extends:
file: base.yaml
service: mysql-base
container_name: mysql
hostname: mysql
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=fabricexplorer
volumes:
- ./explorer/fabricexplorer.sql:/docker-entrypoint-initdb.d/fabricexplorer.sql
expose:
- "3306"
- ./explorer-artifacts/fabricexplorer.sql:/docker-entrypoint-initdb.d/fabricexplorer.sql
#command: bash -c 'mysqld; sleep 1; mysql -uroot -proot < /tmp/fabricexplorer.sql; while true; do sleep 20171117; done'
#networks:
# default:
# external:

View File

@ -0,0 +1,57 @@
{
"network-config": {
"org1": {
"name": "peerOrg1",
"mspid": "Org1MSP",
"peer1": {
"requests": "grpcs://peer0.org1.example.com:7051",
"events": "grpcs://peer0.org1.example.com:7053",
"server-hostname": "peer0.org1.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
},
"peer2": {
"requests": "grpcs://peer1.org1.example.com:7051",
"events": "grpcs://peer1.org1.example.com:7053",
"server-hostname": "peer1.org1.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
},
"admin": {
"key": "/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
"cert": "/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts"
}
},
"org2": {
"name": "peerOrg2",
"mspid": "Org2MSP",
"peer1": {
"requests": "grpcs://peer0.org2.example.com:7051",
"events": "grpcs://peer0.org2.example.com:7053",
"server-hostname": "peer0.org2.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
},
"peer2": {
"requests": "grpcs://peer1.org2.example.com:7051",
"events": "grpcs://peer1.org2.example.com:7053",
"server-hostname": "peer1.org2.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
},
"admin": {
"key": "/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
"cert": "/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts"
}
}
},
"host":"explorer",
"port":"8080",
"channel": "businesschannel",
"GOPATH":"/opt/gopath",
"keyValueStore":"/tmp/fabric-client-kvs",
"eventWaitTime":"30000",
"mysql":{
"host":"mysql",
"port":"3306",
"database":"fabricexplorer",
"username":"root",
"passwd":"root"
}
}

View File

@ -1,73 +0,0 @@
{
"network-config": {
"orderer": [
{
"url": "grpcs://orderer.example.com:7050",
"server-hostname": "orderer.example.com",
"tls_cacerts": "/first-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt"
}
],
"org1": {
"name": "peerOrg1",
"mspid": "Org1MSP",
"peer1": {
"requests": "grpcs://peer0.org1.example.com:7051",
"events": "grpcs://peer0.org1.example.com:7053",
"server-hostname": "peer0.org1.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt"
},
"peer2": {
"requests": "grpcs://peer1.org1.example.com:7051",
"events": "grpcs://peer1.org1.example.com:7053",
"server-hostname": "peer1.org1.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt"
},
"admin": {
"key": "/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore",
"cert": "/first-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts"
}
},
"org2": {
"name": "peerOrg2",
"mspid": "Org2MSP",
"ca": "https://ca.org2.example.com:7054",
"peer1": {
"requests": "grpcs://peer0.org2.example.com:7051",
"events": "grpcs://peer0.org2.example.com:7053",
"server-hostname": "peer0.org2.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt"
},
"peer2": {
"requests": "grpcs://peer1.org2.example.com:7051",
"events": "grpcs://peer1.org2.example.com:7053",
"server-hostname": "peer1.org2.example.com",
"tls_cacerts": "/first-network/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt"
},
"admin": {
"key": "/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore",
"cert": "/first-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts"
}
}
},
"host":"explorer",
"port":"8080",
"channel": "businesschannel",
"GOPATH":"../artifacts",
"keyValueStore":"/tmp/fabric-client-kvs",
"eventWaitTime":"30000",
"peer":"peer1",
"org":["org1"],
"users":[
{
"username":"admin",
"secret":"adminpw"
}
],
"mysql":{
"host":"mysql",
"port":"3306",
"database":"fabricexplorer",
"username":"root",
"passwd":"root"
}
}

View File

@ -32,39 +32,44 @@ fi
# Verify $1 is not 0, then output error msg $2 and exit
verifyResult () {
if [ $1 -ne 0 ] ; then
echo_b "$2"
echo "$2"
echo_r "=== ERROR !!! FAILED to execute End-2-End Scenario ==="
exit 1
fi
}
# set env to use orderOrg's identity
setOrdererEnvs () {
CORE_PEER_LOCALMSPID="OrdererMSP"
CORE_PEER_MSPCONFIGPATH=${ORDERER_ADMIN_MSP}
CORE_PEER_TLS_ROOTCERT_FILE=${ORDERER_TLS_ROOTCERT}
export CORE_PEER_LOCALMSPID="OrdererMSP"
export CORE_PEER_MSPCONFIGPATH=${ORDERER_ADMIN_MSP}
export CORE_PEER_TLS_ROOTCERT_FILE=${ORDERER_TLS_ROOTCERT}
#t="\${ORG${org}_PEER${peer}_URL}" && CORE_PEER_ADDRESS=`eval echo $t`
}
# Set global env variables for fabric usage
# Set global env variables for fabric cli, after seting:
# client is the admin as given org
# TLS root cert is configured to given peer's
# remote peer address is configured to given peer's
# Usage: setEnvs org peer
setEnvs () {
local org=$1 # 1 or 2
local peer=$2 # 0 or 1
[ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1
local t=""
CORE_PEER_LOCALMSPID="Org${org}MSP"
export CORE_PEER_LOCALMSPID="Org${org}MSP"
#CORE_PEER_MSPCONFIGPATH=\$${ORG${org}_ADMIN_MSP}
t="\${ORG${org}_ADMIN_MSP}" && CORE_PEER_MSPCONFIGPATH=`eval echo $t`
t="\${ORG${org}_PEER${peer}_TLS_ROOTCERT}" && CORE_PEER_TLS_ROOTCERT_FILE=`eval echo $t`
t="\${ORG${org}_PEER${peer}_URL}" && CORE_PEER_ADDRESS=`eval echo $t`
t="\${ORG${org}_PEER${peer}_URL}" && export CORE_PEER_ADDRESS=`eval echo $t`
t="\${ORG${org}_ADMIN_MSP}" && export CORE_PEER_MSPCONFIGPATH=`eval echo $t`
t="\${ORG${org}_PEER${peer}_TLS_ROOTCERT}" && export CORE_PEER_TLS_ROOTCERT_FILE=`eval echo $t`
# env |grep CORE
#env |grep CORE
}
checkOSNAvailability() {
#Use orderer's MSP for fetching system channel config block
CORE_PEER_LOCALMSPID="OrdererMSP"
CORE_PEER_TLS_ROOTCERT_FILE=${ORDERER_TLS_CA}
CORE_PEER_MSPCONFIGPATH=${ORDERER_MSP}
export CORE_PEER_LOCALMSPID="OrdererMSP"
export CORE_PEER_TLS_ROOTCERT_FILE=${ORDERER_TLS_CA}
export CORE_PEER_MSPCONFIGPATH=${ORDERER_MSP}
local rc=1
local starttime=$(date +%s)
@ -83,7 +88,7 @@ checkOSNAvailability() {
test $? -eq 0 && VALUE=$(cat log.txt | awk '/Received block/ {print $NF}')
test "$VALUE" = "0" && let rc=0
done
cat log.txt
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "Ordering Service is not available, Please try again ..."
echo "=== Ordering Service is up and running === "
echo
@ -117,26 +122,28 @@ channelCreateAction(){
# channelCreate APP_CHANNEL APP_CHANNEL.tx org peer
channelCreate() {
local channel=$1
local channel_tx=$2
local tx=$2
local org=$3
local peer=$4
echo_b "=== Create Channel ${channel} by org $org peer $peer === "
local counter=0
[ -z $channel ] && [ -z $tx ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1
echo "=== Create Channel ${channel} by org $org peer $peer === "
setEnvs $org $peer
channelCreateAction "${channel}" "${channel_tx}"
local res=$?
while [ ${counter} -lt ${MAX_RETRY} -a ${res} -ne 0 ]; do
echo_b "Failed to create channel $channel, retry after 3s"
channelCreateAction "${channel}" "${tx}"
local rc=$?
local counter=0
while [ ${counter} -lt ${MAX_RETRY} -a ${rc} -ne 0 ]; do
echo "Failed to create channel $channel, retry after 3s"
sleep 3
channelCreateAction "${channel}" "${channel_tx}"
res=$?
channelCreateAction "${channel}" "${tx}"
rc=$?
let counter=${counter}+1
#COUNTER=` expr $COUNTER + 1`
done
cat log.txt
verifyResult ${res} "Channel ${channel} creation failed"
echo_g "=== Channel ${channel} is created. === "
[ $rc -ne 0 ] && cat log.txt
verifyResult ${rc} "Channel ${channel} creation failed"
echo "=== Channel ${channel} is created. === "
}
# called by channelJoinWithRetry
@ -153,16 +160,16 @@ channelJoinWithRetry () {
local peer=$2
local counter=0
channelJoinAction ${channel}
local res=$?
while [ ${counter} -lt ${MAX_RETRY} -a ${res} -ne 0 ]; do
echo_b "peer${peer} failed to join channel ${channel}, retry after 2s"
local rc=$?
while [ ${counter} -lt ${MAX_RETRY} -a ${rc} -ne 0 ]; do
echo "peer${peer} failed to join channel ${channel}, retry after 2s"
sleep 2
channelJoinAction ${channel}
res=$?
rc=$?
let counter=${counter}+1
done
cat log.txt
verifyResult ${res} "After $MAX_RETRY attempts, peer${peer} failed to Join the Channel"
[ $rc -ne 0 ] && cat log.txt
verifyResult ${rc} "After $MAX_RETRY attempts, peer${peer} failed to Join the Channel"
}
# Join given (by default all) peers into the channel
@ -171,17 +178,19 @@ channelJoin () {
local channel=$1
local org=$2
local peer=$3
[ -z $channel ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1
echo_b "=== Join org$org/peer$peer into channel ${channel} === "
echo "=== Join org$org/peer$peer into channel ${channel} === "
setEnvs $org $peer
channelJoinWithRetry ${channel} $peer
echo_g "=== org$org/peer$peer joined into channel ${channel} === "
echo "=== org$org/peer$peer joined into channel ${channel} === "
}
getShasum () {
[ ! $# -eq 1 ] && exit 1
shasum ${1} | awk '{print $1}'
}
# Fetch all blocks for a channel
# Usage: channelFetchAll channel org peer
channelFetchAll () {
@ -189,27 +198,27 @@ channelFetchAll () {
local org=$2
local peer=$3
echo_b "=== Fetch all block for channel $channel === "
echo "=== Fetch all block for channel $channel === "
local block_file=/tmp/${channel}_newest.block
channelFetch ${channel} $org $peer "newest" ${block_file}
[ $? -ne 0 ] && exit 1
newest_block_shasum=$(getShasum ${block_file})
echo_b "fetch newest block ${block_file} with shasum=${newest_block_shasum}"
echo "fetch newest block ${block_file} with shasum=${newest_block_shasum}"
block_file=${CHANNEL_ARTIFACTS}/${channel}_config.block
channelFetch ${channel} $org $peer "config" ${block_file}
[ $? -ne 0 ] && exit 1
echo_b "fetch config block ${block_file}"
echo "fetch config block ${block_file}"
for i in $(seq 0 16); do # we at most fetch 16 blocks
block_file=${CHANNEL_ARTIFACTS}/${channel}_${i}.block
channelFetch ${channel} $org $peer $i ${block_file}
[ $? -ne 0 ] && exit 1
[ -f $block_file ] || break
echo_b "fetch block $i and saved into ${block_file}"
echo "fetch block $i and saved into ${block_file}"
block_shasum=$(getShasum ${block_file})
[ ${block_shasum} = ${newest_block_shasum} ] && { echo_g "Block $i is the last one for channel $channel"; break; }
[ ${block_shasum} = ${newest_block_shasum} ] && { echo "Block $i is the last one for channel $channel"; break; }
done
}
@ -220,10 +229,10 @@ channelFetch () {
local peer=$3
local num=$4
local block_file=$5
echo_b "=== Fetch block $num of channel $channel === "
echo "=== Fetch block $num of channel $channel === "
#setEnvs $org $peer
setOrdererEnvs
setOrdererEnvs # system channel required id from ordererOrg
# while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful),
# lets supply it directly as we know it using the "-o" option
if [ -z "${CORE_PEER_TLS_ENABLED}" ] || [ "${CORE_PEER_TLS_ENABLED}" = "false" ]; then
@ -244,7 +253,7 @@ channelFetch () {
echo_r "Fetch block $num of channel $channel failed"
return 1
else
echo_g "=== Fetch block $num of channel $channel is successful === "
echo "=== Fetch block $num of channel $channel OK === "
return 0
fi
}
@ -255,19 +264,20 @@ channelSignConfigTx () {
local channel=$1
local org=$2
local peer=$3
local txFile=$4
echo_b "=== Sign channel config tx $txFile for channel $channel by org $org peer $peer === "
[ -f ${CHANNEL_ARTIFACTS}/${txFile} ] || { echo_r "${txFile} not exist"; exit 1; }
local tx=$4
[ -z $channel ] && [ -z $tx ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1
echo "=== Sign channel config tx $tx for channel $channel by org $org peer $peer === "
[ -f ${CHANNEL_ARTIFACTS}/${tx} ] || { echo_r "${tx} not exist"; exit 1; }
setEnvs $org $peer
peer channel signconfigtx -f ${CHANNEL_ARTIFACTS}/${txFile} >&log.txt
res=$?
cat log.txt
if [ $res -ne 0 ]; then
peer channel signconfigtx -f ${CHANNEL_ARTIFACTS}/${tx} >&log.txt
rc=$?
[ $rc -ne 0 ] && cat log.txt
if [ $rc -ne 0 ]; then
echo_r "Sign channel config tx for channel $channel by org $org peer $peer failed"
else
echo_g "=== Sign channel config tx channel $channel by org $org peer $peer is successful === "
echo "=== Sign channel config tx channel $channel by org $org peer $peer is successful === "
fi
}
@ -277,29 +287,31 @@ channelUpdate() {
local channel=$1
local org=$2
local peer=$3
local txFile=$4
local tx=$4
[ -z $channel ] && [ -z $tx ] && [ -z $org ] && [ -z $peer ] && echo_r "input param invalid" && exit -1
setEnvs $org $peer
echo_b "=== Update config on channel ${channel} === "
[ -f ${CHANNEL_ARTIFACTS}/${txFile} ] || { echo_r "${txFile} not exist"; exit 1; }
echo "=== Update config on channel ${channel} === "
[ -f ${CHANNEL_ARTIFACTS}/${tx} ] || { echo_r "${tx} not exist"; exit 1; }
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
peer channel update \
-o ${ORDERER_URL} \
-c ${channel} \
-f ${CHANNEL_ARTIFACTS}/${txFile} \
-f ${CHANNEL_ARTIFACTS}/${tx} \
>&log.txt
else
peer channel update \
-o ${ORDERER_URL} \
-c ${channel} \
-f ${CHANNEL_ARTIFACTS}/${txFile} \
-f ${CHANNEL_ARTIFACTS}/${tx} \
--tls $CORE_PEER_TLS_ENABLED \
--cafile ${ORDERER_TLS_CA} \
>&log.txt
fi
res=$?
cat log.txt
verifyResult $res "peer channel update failed"
echo_g "=== Channel ${channel} is updated. === "
rc=$?
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "peer channel update failed"
echo "=== Channel ${channel} is updated. === "
sleep 2
}
@ -311,17 +323,18 @@ chaincodeInstall () {
local name=$3
local version=$4
local path=$5
echo_b "=== Install Chaincode $name:$version ($path) on org${org} peer$peer === "
[ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $version ] && [ -z $path ] && echo_r "input param invalid" && exit -1
echo "=== Install Chaincode $name:$version ($path) on org${org} peer$peer === "
setEnvs $org $peer
peer chaincode install \
-n ${name} \
-v $version \
-p ${path} \
>&log.txt
res=$?
cat log.txt
verifyResult $res "Chaincode installation on remote peer$peer has Failed"
echo_g "=== Chaincode is installed on remote peer$peer === "
rc=$?
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "Chaincode installation on remote peer$peer has Failed"
echo "=== Chaincode is installed on remote peer$peer === "
}
# Instantiate chaincode on specifized peer node
@ -333,8 +346,9 @@ chaincodeInstantiate () {
local name=$4
local version=$5
local args=$6
[ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $version ] && [ -z $args ] && echo_r "input param invalid" && exit -1
setEnvs $org $peer
echo_b "=== chaincodeInstantiate for channel ${channel} on org $org peer $peer ===="
echo "=== chaincodeInstantiate for channel ${channel} on org $org peer $peer ===="
# while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful),
# lets supply it directly as we know it using the "-o" option
if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then
@ -358,10 +372,10 @@ chaincodeInstantiate () {
--cafile ${ORDERER_TLS_CA} \
>&log.txt
fi
res=$?
cat log.txt
verifyResult $res "ChaincodeInstantiation on peer$peer in channel ${channel} failed"
echo_g "=== Chaincode Instantiated in channel ${channel} by peer$peer ==="
rc=$?
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "ChaincodeInstantiation on peer$peer in channel ${channel} failed"
echo "=== Chaincode Instantiated in channel ${channel} by peer$peer ==="
}
@ -372,7 +386,8 @@ chaincodeInvoke () {
local peer=$3
local name=$4
local args=$5
echo_g "=== Invoke transaction on peer$peer in channel ${channel} === "
[ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $args ] && echo_r "input param invalid" && exit -1
echo "=== Invoke transaction on peer$peer in channel ${channel} === "
setEnvs $org $peer
# while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful),
# lets supply it directly as we know it using the "-o" option
@ -393,10 +408,10 @@ chaincodeInvoke () {
--cafile ${ORDERER_TLS_CA} \
>&log.txt
fi
res=$?
cat log.txt
verifyResult $res "Invoke execution on peer$peer failed "
echo_g "=== Invoke transaction on peer$peer in channel ${channel} is successful === "
rc=$?
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "Invoke execution on peer$peer failed "
echo "=== Invoke transaction on peer$peer in channel ${channel} is successful === "
}
# query channel peer name args expected_result
@ -406,15 +421,16 @@ chaincodeQuery () {
local peer=$3
local name=$4
local args=$5
[ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $args ] && echo_r "input param invalid" && exit -1
[ $# -gt 5 ] && local expected_result=$6
echo_b "=== Querying on org$org peer$peer in channel ${channel}... === "
echo "=== Querying on org$org peer$peer in channel ${channel}... === "
local rc=1
local starttime=$(date +%s)
setEnvs $org $peer
# we either get a successful response, or reach TIMEOUT
while [ "$(($(date +%s)-starttime))" -lt "$TIMEOUT" -a $rc -ne 0 ]; do
echo_b "Attempting to Query peer${peer}.org${org} ...$(($(date +%s)-starttime)) secs"
echo "Attempting to Query peer${peer}.org${org} ...$(($(date +%s)-starttime)) secs"
peer chaincode query \
-C "${channel}" \
-n "${name}" \
@ -425,13 +441,15 @@ chaincodeQuery () {
test $? -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}')
test "$VALUE" = "${expected_result}" && let rc=0
fi
cat log.txt
if [ $rc -ne 0 ]; then
cat log.txt
sleep 2
fi
done
# rc==0, or timeout
if [ $rc -eq 0 ]; then
echo_g "=== Query on peer$peer in channel ${channel} is successful === "
echo "=== Query on peer$peer in channel ${channel} is successful === "
else
echo_r "=== Query result on peer$peer is INVALID, run `make stop clean` to clean ==="
exit 1
@ -444,18 +462,16 @@ chaincodeQuery () {
chaincodeStartDev () {
local peer=$1
local version=$2
#setEnvs $peer
#setEnvs 1 0
[ -z $peer ] && [ -z $version ] && echo_r "input param invalid" && exit -1
setEnvs 1 0
CORE_CHAINCODE_LOGLEVEL=debug \
CORE_PEER_ADDRESS=peer${peer}.org1.example.com:7052 \
CORE_CHAINCODE_ID_NAME=${CC_02_NAME}:${version} \
nohup ./scripts/chaincode_example02 > chaincode_dev.log &
res=$?
cat log.txt
verifyResult $res "Chaincode start in dev mode has Failed"
echo_g "=== Chaincode started in dev mode === "
echo
rc=$?
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "Chaincode start in dev mode has Failed"
echo "=== Chaincode started in dev mode === "
}
# chaincodeUpgrade channel peer name version args
@ -466,7 +482,8 @@ chaincodeUpgrade () {
local name=$4
local version=$5
local args=$6
echo_b "=== Upgrade chaincode to version $version on peer$peer in channel ${channel} === "
[ -z $channel ] && [ -z $org ] && [ -z $peer ] && [ -z $name ] && [ -z $version ] && [ -z $args ] && echo_r "input param invalid" && exit -1
echo "=== Upgrade chaincode to version $version on peer$peer in channel ${channel} === "
setEnvs $org $peer
# while 'peer chaincode' command can get the orderer endpoint from the peer (if join was successful),
@ -490,11 +507,10 @@ chaincodeUpgrade () {
--cafile ${ORDERER_TLS_CA} \
>&log.txt
fi
res=$?
cat log.txt
verifyResult $res "Upgrade execution on peer$peer failed "
echo_g "=== Upgrade transaction on peer$peer in channel ${channel} is successful === "
echo
rc=$?
[ $rc -ne 0 ] && cat log.txt
verifyResult $rc "Upgrade execution on peer$peer failed "
echo "=== Upgrade transaction on peer$peer in channel ${channel} is successful === "
}
# configtxlator encode json to pb
@ -504,7 +520,7 @@ configtxlatorEncode() {
local input=$2
local output=$3
echo_b "Encode $input --> $output using type $msgType"
echo "Encode $input --> $output using type $msgType"
curl -sX POST \
--data-binary @${input} \
${CTL_ENCODE_URL}/${msgType} \
@ -518,7 +534,7 @@ configtxlatorDecode() {
local input=$2
local output=$3
echo_b "Config Decode $input --> $output using type $msgType"
echo "Config Decode $input --> $output using type $msgType"
if [ ! -f $input ]; then
echo_r "input file not found"
exit 1
@ -538,7 +554,7 @@ configtxlatorCompare() {
local updated=$3
local output=$4
echo_b "Config Compare $origin vs $updated > ${output} in channel $channel"
echo "Config Compare $origin vs $updated > ${output} in channel $channel"
if [ ! -f $origin ] || [ ! -f $updated ]; then
echo_r "input file not found"
exit 1

View File

@ -10,10 +10,16 @@ fi
## Install chaincode on all peers
CC_NAME=${CC_02_NAME}
CC_PATH=${CC_02_PATH}
echo_b "Installing chaincode ${CC_NAME} on all 4 peers..."
chaincodeInstall 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
chaincodeInstall 1 1 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
chaincodeInstall 2 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
chaincodeInstall 2 1 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
echo_b "=== Installing chaincode ${CC_NAME} on all 4 peers... ==="
echo_g "=== Install chaincode done ==="
for org in "${ORGS[@]}"
do
for peer in "${PEERS[@]}"
do
chaincodeInstall $org $peer ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
done
done
echo_g "=== Install chaincode done ==="
echo

View File

@ -10,8 +10,13 @@ fi
# Instantiate chaincode in the channel, executed once on any node is enough
CC_NAME=${CC_02_NAME}
CC_INIT_ARGS=${CC_02_INIT_ARGS}
echo_b "Instantiating chaincode on channel ${APP_CHANNEL} (once for each channel is enough, we make it concurrent here)..."
# (once for each channel is enough, we make it concurrent here)
echo_b "=== Instantiating chaincode on channel ${APP_CHANNEL}... ==="
chaincodeInstantiate "${APP_CHANNEL}" 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_INIT_ARGS}
chaincodeInstantiate "${APP_CHANNEL}" 2 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_INIT_ARGS}
echo_g "=== Instantiate chaincode done ==="
echo_g "=== Instantiate chaincode on channel ${APP_CHANNEL} done ==="
echo

View File

@ -11,6 +11,8 @@ CC_NAME=${CC_02_NAME}
CC_INVOKE_ARGS=${CC_02_INVOKE_ARGS}
CC_QUERY_ARGS=${CC_02_QUERY_ARGS}
#Query on chaincode on Peer0/Org1
echo_g "=== Testing Chaincode invoke/query ==="
echo_b "Querying chaincode ${CC_NAME} on peer org2/peer0..."
chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_QUERY_ARGS} 100
@ -32,4 +34,6 @@ echo_b "Querying chaincode on all 4peers..."
chaincodeQuery ${APP_CHANNEL} 1 0 ${CC_NAME} ${CC_QUERY_ARGS} 80
chaincodeQuery ${APP_CHANNEL} 2 0 ${CC_NAME} ${CC_QUERY_ARGS} 80
echo_g "=== All GOOD, chaincode invoke/query completed ==="
echo_g "=== Chaincode invoke/query completed ==="
echo

View File

@ -11,7 +11,8 @@ CC_NAME=${CC_02_NAME}
CC_PATH=${CC_02_PATH}
CC_UPGRADE_ARGS=${CC_02_UPGRADE_ARGS}
#Upgrade to new version
echo_b "Upgrade chaincode ${CC_NAME} to new version..."
echo_b "=== Upgrade chaincode ${CC_NAME} to new version... ==="
chaincodeInstall 1 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
chaincodeInstall 1 1 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
chaincodeInstall 2 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
@ -24,4 +25,6 @@ chaincodeUpgrade ${APP_CHANNEL} 1 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_U
chaincodeQuery ${APP_CHANNEL} 1 0 "${CC_NAME}" "${CC_QUERY_ARGS}" 100
chaincodeQuery ${APP_CHANNEL} 2 1 "${CC_NAME}" "${CC_QUERY_ARGS}" 100
echo_g "=== All GOOD, chaincode Upgrade completed ==="
echo_g "=== chaincode ${CC_NAME} Upgrade completed ==="
echo

View File

@ -8,5 +8,10 @@ elif [ -f scripts/func.sh ]; then
fi
## Create channel
echo_b "Creating channel ${APP_CHANNEL} with ${APP_CHANNEL_TX}..."
echo_b "=== Creating channel ${APP_CHANNEL} with ${APP_CHANNEL_TX}... ==="
channelCreate "${APP_CHANNEL}" "${APP_CHANNEL_TX}" 1 0
echo_g "=== Created channel ${APP_CHANNEL} with ${APP_CHANNEL_TX} ==="
echo

View File

@ -8,7 +8,7 @@ elif [ -f scripts/func.sh ]; then
fi
## Join all the peers to the channel
echo_b "Update the channel ${APP_CHANNEL} by adding new Org..."
echo_b "=== Join peers ${PEERS} from org ${ORGS} into ${APP_CHANNEL}... ==="
for org in "${ORGS[@]}"
do
@ -17,3 +17,7 @@ do
channelJoin ${APP_CHANNEL} $org $peer
done
done
echo_g "=== Join peers ${PEERS} from org ${ORGS} into ${APP_CHANNEL} Complete ==="
echo

View File

@ -8,7 +8,7 @@ elif [ -f scripts/func.sh ]; then
fi
## Join all the peers to the channel
echo_b "Having all peers join the channel ${APP_CHANNEL}..."
echo_b "=== Updating config of channel ${APP_CHANNEL}... ==="
echo_b "Sign the channel update tx by Org1/Peer0 and Org2/Peer0"
channelSignConfigTx ${APP_CHANNEL} "1" "0" "${CFG_DELTA_ENV_PB}"
@ -33,3 +33,7 @@ fi
# Now new org is valid to join the channel
# channelJoin ${APP_CHANNEL} "3" "0"
echo_g "=== Updated config of channel ${APP_CHANNEL}... ==="
echo

View File

@ -12,10 +12,12 @@ fi
org=1
peer=0
echo_b "=== Fetching blocks ==="
echo_b "=== Fetching blocks of channel ${APP_CHANNEL} and ${SYS_CHANNEL} ==="
channelFetchAll ${APP_CHANNEL} $org $peer
channelFetchAll ${SYS_CHANNEL} $org $peer
echo_g "Block fetching done!"
echo_g "=== Fetched Blocks from channels done! ==="
echo

View File

@ -20,6 +20,7 @@ peer=0
#--cafile ${ORDERER_TLS_CA} \
CC_NAME=${CC_02_NAME}
echo_b "LSCC Get id"
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getid","'${APP_CHANNEL}'", "'${CC_NAME}'"]}'
@ -61,4 +62,6 @@ chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getchaincodes"]}'
# -n lscc \
# -c '{"Args":["getchaincodes"]}'
echo_g "LSCC testing done!"
echo_g "LSCC testing done!"
echo

View File

@ -30,4 +30,6 @@ chaincodeQuery ${APP_CHANNEL} $org $peer qscc '{"Args":["GetBlockByNumber","'${A
# -n qscc \
# -c '{"Args":["GetBlockByNumber","'${APP_CHANNEL}'","2"]}'
echo_g "QSCC testing done!"
echo_g "QSCC testing done!"
echo

View File

@ -8,8 +8,12 @@ elif [ -f scripts/func.sh ]; then
fi
## Set the anchor peers for each org in the channel
echo_b "Updating anchor peers for org1..."
echo_b "=== Updating anchor peers to peer0 for org1... ==="
channelUpdate ${APP_CHANNEL} 1 0 Org1MSPanchors.tx
echo_b "Updating anchor peers for org2..."
echo_b "=== Updating anchor peers to peer0 for org2... ==="
channelUpdate ${APP_CHANNEL} 2 0 Org2MSPanchors.tx
echo_b "=== Updated anchor peers ==="
echo

View File

@ -5,7 +5,6 @@
# Name of app channel, need to align with the gen_artifacts.sh
SYS_CHANNEL="testchainid"
APP_CHANNEL="businesschannel"
#APP_CHANNEL="appchannel"
# Client cmd execute timeout and retry times
TIMEOUT="30"
@ -14,6 +13,8 @@ MAX_RETRY=5
# Organization and peers
ORGS=( 1 2 )
PEERS=( 0 1 )
#: "${ORGS:=( 1 2 )}"
#: "${PEERS:=( 0 1 )}"
# MSP related paths
ORDERER_TLS_CA=/etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

View File

@ -674,13 +674,13 @@
},
"signatures": [
{
"signature": "MEUCIQCBmOeHd8S/jdhmNGxCszPbEfcv4p/1EEBWyoHsCrsbfgIgQHn7HSg8z/6xFQdDD+/OoQ0JDUXOJbmxEvIo/qZ4n4A=",
"signature": "MEQCIATVJZUaxHzrjS/+PeqVTKl6gyiOF6R+N0TSOHZ16V60AiASFdWxHyV+2xGwOxAycBShDfO8QtGwvTn3QK1yryAgkw==",
"signature_header": {
"creator": {
"id_bytes": "LS0tLS1CRUdJTiAtLS0tLQpNSUlDR2pDQ0FjQ2dBd0lCQWdJUkFOMnVKZDJueE1VVE9XOXdLTm9YZHhnd0NnWUlLb1pJemowRUF3SXdjekVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4R1RBWEJnTlZCQW9URUc5eVp6SXVaWGhoYlhCc1pTNWpiMjB4SERBYUJnTlZCQU1URTJOaApMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd01UQXpNVE13T1RVMVdoY05Namd3TVRBeE1UTXdPVFUxCldqQmJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU4KVTJGdUlFWnlZVzVqYVhOamJ6RWZNQjBHQTFVRUF3d1dRV1J0YVc1QWIzSm5NaTVsZUdGdGNHeGxMbU52YlRCWgpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJKR1N4RlpFN3NvcDZVbWVkcnZmWDNCQ0RVRUpJdTg0Cm1RTk1jYWQzMXpUNmR3Sm0zaHJBL1h6dk1uMzUvS25sWXpkS2hMMmNPWHdVbERHWXFqR2p4UTZqVFRCTE1BNEcKQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUNzR0ExVWRJd1FrTUNLQUlIWXdDTmNFK0ZmcgpaWHFaSTRKTFA4WVhqelRmcU9WUWs5MmI0NC9kVTVUdU1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRQ2JKaWRRCjg0Qzh4aGpVbVJwb2lsSEtsNUZDSXdVQnc2OURaUU8vN1p6ZVB3SWdCcENRY2dLRDRGbk5WWStHczRTNVN2UlMKQVhZeFVMWnBYWURRWHQxS2FMST0KLS0tLS1FTkQgLS0tLS0K",
"mspid": "Org2MSP"
},
"nonce": "OKB2Q4Xj9oeXmeukVzgAu2EtbGY+Qn3J"
"nonce": "5DBHiQFaIv3E6cEhSyfP3E55qQXxaWlY"
}
}
]
@ -689,7 +689,7 @@
"channel_header": {
"channel_id": "businesschannel",
"epoch": "0",
"timestamp": "2018-01-14T11:45:36.000Z",
"timestamp": "2018-01-18T01:29:45.000Z",
"tx_id": "",
"type": 2,
"version": 0
@ -699,18 +699,18 @@
"id_bytes": "LS0tLS1CRUdJTiAtLS0tLQpNSUlDR2pDQ0FjQ2dBd0lCQWdJUkFOMnVKZDJueE1VVE9XOXdLTm9YZHhnd0NnWUlLb1pJemowRUF3SXdjekVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4R1RBWEJnTlZCQW9URUc5eVp6SXVaWGhoYlhCc1pTNWpiMjB4SERBYUJnTlZCQU1URTJOaApMbTl5WnpJdVpYaGhiWEJzWlM1amIyMHdIaGNOTVRnd01UQXpNVE13T1RVMVdoY05Namd3TVRBeE1UTXdPVFUxCldqQmJNUXN3Q1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU4KVTJGdUlFWnlZVzVqYVhOamJ6RWZNQjBHQTFVRUF3d1dRV1J0YVc1QWIzSm5NaTVsZUdGdGNHeGxMbU52YlRCWgpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJKR1N4RlpFN3NvcDZVbWVkcnZmWDNCQ0RVRUpJdTg0Cm1RTk1jYWQzMXpUNmR3Sm0zaHJBL1h6dk1uMzUvS25sWXpkS2hMMmNPWHdVbERHWXFqR2p4UTZqVFRCTE1BNEcKQTFVZER3RUIvd1FFQXdJSGdEQU1CZ05WSFJNQkFmOEVBakFBTUNzR0ExVWRJd1FrTUNLQUlIWXdDTmNFK0ZmcgpaWHFaSTRKTFA4WVhqelRmcU9WUWs5MmI0NC9kVTVUdU1Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lRQ2JKaWRRCjg0Qzh4aGpVbVJwb2lsSEtsNUZDSXdVQnc2OURaUU8vN1p6ZVB3SWdCcENRY2dLRDRGbk5WWStHczRTNVN2UlMKQVhZeFVMWnBYWURRWHQxS2FMST0KLS0tLS1FTkQgLS0tLS0K",
"mspid": "Org2MSP"
},
"nonce": "eF1lRTMYHUrCmISih4UI5cI8JqStbJGF"
"nonce": "VfelwNfFPko4tdo0/fWiVB0o4KY43q9C"
}
}
},
"signature": "MEUCIQDWB/GF7sfHvpEsdV5LFT5nUkJ/SimHQnTYHRRz/9n7/AIgbRde4Vg77eiZntFYGd3Rx4qJjaLWEgrr4AmKNhSgBzo="
"signature": "MEUCIQCy9WnpV1J4BerR6Tc1BLyrpHMcJjwq/VYycFXZC+K/DQIgNriKA6oVyKna8TJ6f8QnCNbSTWst+sykaUOBKGBWKvU="
}
},
"header": {
"channel_header": {
"channel_id": "businesschannel",
"epoch": "0",
"timestamp": "2018-01-14T11:45:36.000Z",
"timestamp": "2018-01-18T01:29:45.000Z",
"tx_id": "",
"type": 1,
"version": 0
@ -720,23 +720,23 @@
"id_bytes": "LS0tLS1CRUdJTiAtLS0tLQpNSUlDRERDQ0FiS2dBd0lCQWdJUU1GdzVRaFZmd2tkdnJCMytZZllmcHpBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURFd016RXpNRGsxTlZvWERUSTRNREV3TVRFek1EazFOVm93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVJpY2tSZ0dUcW91QmFPK0lWTDkrVzBjMDBTdTd4MTZyWDhJak5Ham82Z1prVUFZanB6Ck1LbUIxQ1JXM2VvVTJ0VWQ2cklCTVhqNE1RRlVSRTlXek9ldG8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0FaSHlhaE5iK3BLb2VpMGg0SWlnMjh4WFBieENtTgpSdlpOTGErMUs4dU5xakFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUVBdlRySTNCeTRNUnArM0oxQldPa3VhOEhICi80VndZRjY0am4yT0xJbE4vLzBDSUQ2OVNuOHJzR25qeHI0U2pGNGs3M3NIbzBkM2RXWTlYcG43TU1HcEQrdmwKLS0tLS1FTkQgLS0tLS0K",
"mspid": "OrdererMSP"
},
"nonce": "tUlDKUlpk4HBahFWeSTuwOumb24UQxqa"
"nonce": "HPaOwejSJxDaz9X9hZjB4sep+iuD0qgh"
}
}
},
"signature": "MEUCIQCRJEqEKXS0zswR9VV9iW3PDNBTyx++e1EIv8DGGNjVUAIgFPGqH96kvWpY7nTS+emhjRyFnNyqHfIz71U4T9dVGiU="
"signature": "MEQCIEMy/GrtVEG2Xhg+I91Za6QqKqtsBVC1NMDIn3L+REMRAiAVfyH6BwF2fTXZ/KuYknL2Efwr2dKULDu7Lp9n4L6s5Q=="
}
]
},
"header": {
"data_hash": "MBpB+KXoUXIfx7Uvi+pu3Nw4yNE4gCsJgzyThQpamw8=",
"data_hash": "A7IbIktTeUSbEcyCAf5gh4Wm8W8f3dIQqZ5Fvp9i6L4=",
"number": "2",
"previous_hash": "ayiaxilXZ5mAzVqkxjG7rSFaXhv6gOdo8WBb3ZACjL0="
"previous_hash": "eqjMGWfLZssm7nf+o2eJaDcav9WV+v4wQslk4hyzYUI="
},
"metadata": {
"metadata": [
"EuIGCpcGCvoFCgpPcmRlcmVyTVNQEusFLS0tLS1CRUdJTiAtLS0tLQpNSUlDRERDQ0FiS2dBd0lCQWdJUU1GdzVRaFZmd2tkdnJCMytZZllmcHpBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURFd016RXpNRGsxTlZvWERUSTRNREV3TVRFek1EazFOVm93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVJpY2tSZ0dUcW91QmFPK0lWTDkrVzBjMDBTdTd4MTZyWDhJak5Ham82Z1prVUFZanB6Ck1LbUIxQ1JXM2VvVTJ0VWQ2cklCTVhqNE1RRlVSRTlXek9ldG8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0FaSHlhaE5iK3BLb2VpMGg0SWlnMjh4WFBieENtTgpSdlpOTGErMUs4dU5xakFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUVBdlRySTNCeTRNUnArM0oxQldPa3VhOEhICi80VndZRjY0am4yT0xJbE4vLzBDSUQ2OVNuOHJzR25qeHI0U2pGNGs3M3NIbzBkM2RXWTlYcG43TU1HcEQrdmwKLS0tLS1FTkQgLS0tLS0KEhiTZ0r80Qf/8o1OgRcpiS1B5LXX1o5TNBISRjBEAiA2Gje9DjJRV0z/Djhw2zkcU1KvPBAYs0DnmXjiMlSu4QIgAvTf8cMH914xeA9BhoAR12B2u4mSLPk0Z6A88fvrRgA=",
"CgIIAhLiBgqXBgr6BQoKT3JkZXJlck1TUBLrBS0tLS0tQkVHSU4gLS0tLS0KTUlJQ0REQ0NBYktnQXdJQkFnSVFNRnc1UWhWZndrZHZyQjMrWWZZZnB6QUtCZ2dxaGtqT1BRUURBakJwTVFzdwpDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlUyRnVJRVp5CllXNWphWE5qYnpFVU1CSUdBMVVFQ2hNTFpYaGhiWEJzWlM1amIyMHhGekFWQmdOVkJBTVREbU5oTG1WNFlXMXcKYkdVdVkyOXRNQjRYRFRFNE1ERXdNekV6TURrMU5Wb1hEVEk0TURFd01URXpNRGsxTlZvd1dERUxNQWtHQTFVRQpCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCR2NtRnVZMmx6ClkyOHhIREFhQmdOVkJBTVRFMjl5WkdWeVpYSXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3EKaGtqT1BRTUJCd05DQUFSaWNrUmdHVHFvdUJhTytJVkw5K1cwYzAwU3U3eDE2clg4SWpOR2pvNmdaa1VBWWpwegpNS21CMUNSVzNlb1UydFVkNnJJQk1YajRNUUZVUkU5V3pPZXRvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3CkRBWURWUjBUQVFIL0JBSXdBREFyQmdOVkhTTUVKREFpZ0NBWkh5YWhOYitwS29laTBoNElpZzI4eFhQYnhDbU4KUnZaTkxhKzFLOHVOcWpBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlFQXZUckkzQnk0TVJwKzNKMUJXT2t1YThISAovNFZ3WUY2NGpuMk9MSWxOLy8wQ0lENjlTbjhyc0duanhyNFNqRjRrNzNzSG8wZDNkV1k5WHBuN01NR3BEK3ZsCi0tLS0tRU5EIC0tLS0tChIYbfUO1Qdv0LHMmqXh4pKaryBBT/SEOw/rEkYwRAIgJWemsA/ljGvswN+uNVSl8SEeJl/3Q9qRE+zg+PuI1J0CIHmiVz1oYjSnX8W7s2oGqpEpY6T5YtxkrIx7jMHwZaXX",
"EuIGCpcGCvoFCgpPcmRlcmVyTVNQEusFLS0tLS1CRUdJTiAtLS0tLQpNSUlDRERDQ0FiS2dBd0lCQWdJUU1GdzVRaFZmd2tkdnJCMytZZllmcHpBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURFd016RXpNRGsxTlZvWERUSTRNREV3TVRFek1EazFOVm93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVJpY2tSZ0dUcW91QmFPK0lWTDkrVzBjMDBTdTd4MTZyWDhJak5Ham82Z1prVUFZanB6Ck1LbUIxQ1JXM2VvVTJ0VWQ2cklCTVhqNE1RRlVSRTlXek9ldG8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0FaSHlhaE5iK3BLb2VpMGg0SWlnMjh4WFBieENtTgpSdlpOTGErMUs4dU5xakFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUVBdlRySTNCeTRNUnArM0oxQldPa3VhOEhICi80VndZRjY0am4yT0xJbE4vLzBDSUQ2OVNuOHJzR25qeHI0U2pGNGs3M3NIbzBkM2RXWTlYcG43TU1HcEQrdmwKLS0tLS1FTkQgLS0tLS0KEhhZvR42NNeASOvUs4kWGvmijruJ76dYg8wSRjBEAiALRZ93gBb7IsOxX3eet2NYGjGZt7VxkjwlJGoil8lmRwIgH7SMIFIeovM42YI1ZRJ+zuxHjm1uYPAf5t1LwF0tV60=",
"CgIIAhLiBgqXBgr6BQoKT3JkZXJlck1TUBLrBS0tLS0tQkVHSU4gLS0tLS0KTUlJQ0REQ0NBYktnQXdJQkFnSVFNRnc1UWhWZndrZHZyQjMrWWZZZnB6QUtCZ2dxaGtqT1BRUURBakJwTVFzdwpDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTlUyRnVJRVp5CllXNWphWE5qYnpFVU1CSUdBMVVFQ2hNTFpYaGhiWEJzWlM1amIyMHhGekFWQmdOVkJBTVREbU5oTG1WNFlXMXcKYkdVdVkyOXRNQjRYRFRFNE1ERXdNekV6TURrMU5Wb1hEVEk0TURFd01URXpNRGsxTlZvd1dERUxNQWtHQTFVRQpCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCR2NtRnVZMmx6ClkyOHhIREFhQmdOVkJBTVRFMjl5WkdWeVpYSXVaWGhoYlhCc1pTNWpiMjB3V1RBVEJnY3Foa2pPUFFJQkJnZ3EKaGtqT1BRTUJCd05DQUFSaWNrUmdHVHFvdUJhTytJVkw5K1cwYzAwU3U3eDE2clg4SWpOR2pvNmdaa1VBWWpwegpNS21CMUNSVzNlb1UydFVkNnJJQk1YajRNUUZVUkU5V3pPZXRvMDB3U3pBT0JnTlZIUThCQWY4RUJBTUNCNEF3CkRBWURWUjBUQVFIL0JBSXdBREFyQmdOVkhTTUVKREFpZ0NBWkh5YWhOYitwS29laTBoNElpZzI4eFhQYnhDbU4KUnZaTkxhKzFLOHVOcWpBS0JnZ3Foa2pPUFFRREFnTklBREJGQWlFQXZUckkzQnk0TVJwKzNKMUJXT2t1YThISAovNFZ3WUY2NGpuMk9MSWxOLy8wQ0lENjlTbjhyc0duanhyNFNqRjRrNzNzSG8wZDNkV1k5WHBuN01NR3BEK3ZsCi0tLS0tRU5EIC0tLS0tChIYYey91RlzZwjLw+ZxOL9rU63c2Cnz9aYqEkYwRAIgc1gVJxHbQXuS/XtPPUJnXuOiWMpeslVCttAcF3RBwbYCIDbpiujFgtgtRGBSz7BCmUumYoiZN1TekmML6BIhY7LJ",
"",
""
]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff