Fix output msg
parent
636d561928
commit
b4a4c23247
|
@ -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
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -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",
|
||||
"",
|
||||
""
|
||||
]
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
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
Loading…
Reference in New Issue