Update process
parent
43e32414c5
commit
6e96f4eaf7
|
@ -1,5 +1,9 @@
|
|||
# Makefile to bootup the network, and do operations (channel, chaincode)
|
||||
# Makefile to bootup the network, and do testing with channel, chaincode
|
||||
# Run `make test` will pass all testing cases, and delete the network
|
||||
# Run `make ready` will create a network, pass testing cases, and stand there for manual test, e.g., make test_channel_list
|
||||
|
||||
# support advanced bash grammar
|
||||
SHELL:=/bin/bash
|
||||
# mode of the network: solo, kafka, couchdb, event, dev
|
||||
HLF_MODE ?= solo
|
||||
HLF_VERSION ?= 1.1.0
|
||||
|
@ -28,14 +32,15 @@ all: test
|
|||
|
||||
test:
|
||||
@echo "Run test with $(COMPOSE_FILE)"
|
||||
@echo "Please make sure u have setup Docker and pulled images by 'make setup'."
|
||||
@echo "Please make sure u have setup Docker and pulled images by 'make setup download'."
|
||||
|
||||
make ready # Finish all testing
|
||||
make ready # Run all testing till ready
|
||||
|
||||
make stop clean
|
||||
|
||||
ready: # create/join channel, install/instantiate cc
|
||||
make stop
|
||||
# make clean_config # Remove existing crypto-config and channel artifacts.
|
||||
make gen_config # Will ignore if local config path exists
|
||||
make start
|
||||
|
||||
|
@ -45,21 +50,19 @@ ready: # create/join channel, install/instantiate cc
|
|||
sleep ${NETWORK_INIT_WAIT}; \
|
||||
fi
|
||||
|
||||
make test_channel_create
|
||||
make test_channel_join
|
||||
make channel_test
|
||||
|
||||
make update_anchors
|
||||
|
||||
make test_cc_install
|
||||
make test_cc_instantiate
|
||||
make test_cc_invoke_query
|
||||
make cc_test
|
||||
|
||||
make test_lscc # test lscc operations
|
||||
make test_qscc # test qscc operations
|
||||
|
||||
make test_fetch_blocks # fetch block files
|
||||
|
||||
make test_config_update # not work with this version
|
||||
make test_channel_update # not work with this version
|
||||
make test_config_update
|
||||
make test_channel_update
|
||||
|
||||
make test_fetch_blocks # fetch block files again
|
||||
make test_configtxlator
|
||||
|
@ -67,9 +70,13 @@ ready: # create/join channel, install/instantiate cc
|
|||
make logs_save
|
||||
|
||||
@echo "Now the fabric network is ready to play"
|
||||
@echo "run 'make cli' to enter into the fabric-cli container."
|
||||
@echo "run 'make stop' when done."
|
||||
@echo "* run 'make cli' to enter into the fabric-cli container."
|
||||
@echo "* run 'make stop' when done."
|
||||
|
||||
# channel related operations
|
||||
channel_test: test_channel_create test_channel_join test_channel_list test_channel_getinfo
|
||||
# chaincode related operations
|
||||
cc_test: test_cc_install test_cc_instantiate test_cc_invoke_query
|
||||
restart: stop start
|
||||
|
||||
start: # bootup the fabric network
|
||||
|
@ -84,6 +91,12 @@ stop: # stop the fabric network
|
|||
chaincode_dev: restart chaincode_init test_cc_peer0 stop
|
||||
|
||||
################## Channel testing operations ################
|
||||
test_channel_list: # List the channel that peer joined
|
||||
@echo "List the joined channels"
|
||||
@docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_channel_list.sh"
|
||||
test_channel_getinfo: # Get info of a channel
|
||||
@echo "Get info of the app channel"
|
||||
@docker exec -it fabric-cli bash -c "cd /tmp; bash scripts/test_channel_getinfo.sh"
|
||||
|
||||
test_channel_create: # Init the channel
|
||||
@echo "Create channel on the fabric network"
|
||||
|
@ -168,6 +181,8 @@ clean: # clean up containers
|
|||
@-docker ps -a | awk '{ print $$1,$$2 }' | grep "hyperledger/fabric" | awk '{ print $$1 }' | xargs -r -I {} docker rm -f {}
|
||||
@-docker ps -a | awk '$$2 ~ /dev-peer/ { print $$1 }' | xargs -r -I {} docker rm -f {}
|
||||
@-docker images | awk '$$1 ~ /dev-peer/ { print $$3 }' | xargs -r -I {} docker rmi -f {}
|
||||
echo "May manually clean the crypto-config and $(MODE)/channel-artifacts"
|
||||
clean_config: clean_channel_artifacts clean_crypto_config
|
||||
|
||||
env_clean: # clean up environment
|
||||
@echo "Clean all images and containers"
|
||||
|
@ -206,7 +221,16 @@ gen_config: # generate config artifacts
|
|||
bash scripts/gen_config.sh solo; \
|
||||
fi
|
||||
|
||||
clean_channel_artifacts: # clean channel related artifacts
|
||||
if [ "$(HLF_MODE)" = "kafka" ]; then \
|
||||
rm -rf kafka/channel-artifacts; \
|
||||
else \
|
||||
rm -rf solo/channel-artifacts; \
|
||||
fi
|
||||
|
||||
clean_crypto_config: # clean config artifacts
|
||||
rm -rf crypto-config
|
||||
rm -rf org3/crypto-config
|
||||
download: # download required images
|
||||
@echo "Download Docker images"
|
||||
bash scripts/download_images.sh
|
||||
|
|
|
@ -65,7 +65,7 @@ services:
|
|||
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=v110_default # uncomment this to use specific network
|
||||
- CORE_PEER_GOSSIP_USELEADERELECTION=true
|
||||
- CORE_PEER_GOSSIP_ORGLEADER=false # whether this node is the group leader, default to false
|
||||
#- CORE_PEER_PROFILE_ENABLED=true
|
||||
- CORE_PEER_PROFILE_ENABLED=false
|
||||
- CORE_PEER_TLS_ENABLED=true
|
||||
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
|
||||
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
|
||||
|
|
|
@ -35,7 +35,7 @@ for IMG in baseimage baseos couchdb kafka zookeeper; do
|
|||
done
|
||||
|
||||
echo "=== Pulling fabric images ${FABRIC_IMG_TAG} from fabric repo... ==="
|
||||
for IMG in peer tools orderer ca ccenv; do
|
||||
for IMG in peer tools orderer ca ccenv tools couchdb kafka zookeeper; do
|
||||
HLF_IMG=hyperledger/fabric-${IMG}:$ARCH-$FABRIC_IMG_TAG
|
||||
pull_image $HLF_IMG
|
||||
done
|
||||
|
|
|
@ -22,3 +22,4 @@ install_docker_compose() {
|
|||
command -v "docker" >/dev/null 2>&1 && echo "Docker already installed" || install_docker
|
||||
|
||||
command -v "docker-compose" >/dev/null 2>&1 && echo "Docker-Compose already installed" || install_docker_compose
|
||||
command -v "jq" >/dev/null 2>&1 && echo "jq already installed" || sudo apt-get install jq
|
|
@ -65,7 +65,7 @@ setEnvs () {
|
|||
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_PEER
|
||||
}
|
||||
|
||||
checkOSNAvailability() {
|
||||
|
@ -191,6 +191,35 @@ getShasum () {
|
|||
[ ! $# -eq 1 ] && exit 1
|
||||
shasum ${1} | awk '{print $1}'
|
||||
}
|
||||
channelList () {
|
||||
local org=$1
|
||||
local peer=$2
|
||||
echo "=== List the channels that org${org}/peer${peer} joined === "
|
||||
setEnvs $org $peer
|
||||
peer channel list >&log.txt
|
||||
rc=$?
|
||||
[ $rc -ne 0 ] && cat log.txt
|
||||
if [ $rc -ne 0 ]; then
|
||||
echo "=== Failed to list the channels that org${org}/peer${peer} joined === "
|
||||
else
|
||||
echo "=== Done to list the channels that org${org}/peer${peer} joined === "
|
||||
fi
|
||||
}
|
||||
channelGetInfo () {
|
||||
local channel=$1
|
||||
local org=$2
|
||||
local peer=$3
|
||||
echo "=== Get channel info of ${channel} with id of org${org}/peer${peer} === "
|
||||
setEnvs $org $peer
|
||||
peer channel getinfo -c ${channel} >&log.txt
|
||||
rc=$?
|
||||
[ $rc -ne 0 ] && cat log.txt
|
||||
if [ $rc -ne 0 ]; then
|
||||
echo "=== Fail to get channel info of ${channel} with id of org${org}/peer${peer} === "
|
||||
else
|
||||
echo "=== Done to get channel info of ${channel} with id of org${org}/peer${peer} === "
|
||||
fi
|
||||
}
|
||||
|
||||
# Fetch all blocks for a channel
|
||||
# Usage: channelFetchAll channel org peer
|
||||
|
|
|
@ -18,7 +18,7 @@ echo_b "Querying chaincode ${CC_NAME} on peer org2/peer0..."
|
|||
chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_QUERY_ARGS} 100
|
||||
|
||||
#Invoke on chaincode on Peer0/Org1
|
||||
echo_b "Sending invoke transaction (transfer 10) on org1/peer0..."
|
||||
echo_b "Sending invoke transaction (transfer 10) representing org1/peer0..."
|
||||
chaincodeInvoke ${APP_CHANNEL} 1 0 ${CC_NAME} ${CC_INVOKE_ARGS}
|
||||
|
||||
#Query on chaincode on Peer1/Org2, check if the result is 90
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Importing useful functions for cc testing
|
||||
if [ -f ./func.sh ]; then
|
||||
source ./func.sh
|
||||
elif [ -f scripts/func.sh ]; then
|
||||
source scripts/func.sh
|
||||
fi
|
||||
|
||||
## Join all the peers to the channel
|
||||
echo_b "=== Getting info of channel ${APP_CHANNEL}... ==="
|
||||
|
||||
for org in "${ORGS[@]}"
|
||||
do
|
||||
for peer in "${PEERS[@]}"
|
||||
do
|
||||
channelGetInfo ${APP_CHANNEL} $org $peer
|
||||
done
|
||||
done
|
||||
|
||||
echo_g "=== Get info of channel ${APP_CHANNEL} Complete ==="
|
||||
|
||||
echo
|
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Importing useful functions for cc testing
|
||||
if [ -f ./func.sh ]; then
|
||||
source ./func.sh
|
||||
elif [ -f scripts/func.sh ]; then
|
||||
source scripts/func.sh
|
||||
fi
|
||||
|
||||
## Create channel
|
||||
echo_b "=== Listing joined channels... ==="
|
||||
|
||||
for org in "${ORGS[@]}"
|
||||
do
|
||||
for peer in "${PEERS[@]}"
|
||||
do
|
||||
channelList $org $peer
|
||||
done
|
||||
done
|
||||
|
||||
echo_g "=== Done listing joined channels ==="
|
||||
|
||||
echo
|
|
@ -7,7 +7,7 @@ SYS_CHANNEL="testchainid"
|
|||
APP_CHANNEL="businesschannel"
|
||||
|
||||
# Client cmd execute timeout and retry times
|
||||
TIMEOUT="30"
|
||||
TIMEOUT="60"
|
||||
MAX_RETRY=5
|
||||
|
||||
# Organization and peers
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,116 @@
|
|||
{
|
||||
"payload": {
|
||||
"data": {
|
||||
"config_update": {
|
||||
"channel_id": "businesschannel",
|
||||
"read_set": {
|
||||
"groups": {
|
||||
"Application": {
|
||||
"groups": {
|
||||
"Org1MSP": {
|
||||
"mod_policy": "",
|
||||
"version": "0"
|
||||
},
|
||||
"Org2MSP": {
|
||||
"mod_policy": "",
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"mod_policy": "",
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"mod_policy": "",
|
||||
"values": {
|
||||
"Consortium": {
|
||||
"mod_policy": "",
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"version": "0"
|
||||
},
|
||||
"type": 0,
|
||||
"write_set": {
|
||||
"groups": {
|
||||
"Application": {
|
||||
"groups": {
|
||||
"Org1MSP": {
|
||||
"mod_policy": "",
|
||||
"version": "0"
|
||||
},
|
||||
"Org2MSP": {
|
||||
"mod_policy": "",
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"mod_policy": "Admins",
|
||||
"policies": {
|
||||
"Admins": {
|
||||
"mod_policy": "Admins",
|
||||
"policy": {
|
||||
"type": 3,
|
||||
"value": {
|
||||
"rule": "MAJORITY",
|
||||
"sub_policy": "Admins"
|
||||
}
|
||||
},
|
||||
"version": "0"
|
||||
},
|
||||
"Readers": {
|
||||
"mod_policy": "Admins",
|
||||
"policy": {
|
||||
"type": 3,
|
||||
"value": {
|
||||
"rule": "ANY",
|
||||
"sub_policy": "Readers"
|
||||
}
|
||||
},
|
||||
"version": "0"
|
||||
},
|
||||
"Writers": {
|
||||
"mod_policy": "Admins",
|
||||
"policy": {
|
||||
"type": 3,
|
||||
"value": {
|
||||
"rule": "ANY",
|
||||
"sub_policy": "Writers"
|
||||
}
|
||||
},
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"values": {
|
||||
"Capabilities": {
|
||||
"mod_policy": "Admins",
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"version": "1"
|
||||
}
|
||||
},
|
||||
"mod_policy": "",
|
||||
"values": {
|
||||
"Consortium": {
|
||||
"mod_policy": "",
|
||||
"value": {
|
||||
"name": "SampleConsortium"
|
||||
},
|
||||
"version": "0"
|
||||
}
|
||||
},
|
||||
"version": "0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"channel_header": {
|
||||
"channel_id": "businesschannel",
|
||||
"epoch": "0",
|
||||
"timestamp": "2018-08-20T02:21:38.000Z",
|
||||
"tx_id": "",
|
||||
"type": 2,
|
||||
"version": 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
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.
Binary file not shown.
|
@ -698,13 +698,13 @@
|
|||
},
|
||||
"signatures": [
|
||||
{
|
||||
"signature": "MEQCIA8saAN4dQAJqs6/hjPA/2m2h7m2/TRE/pZyKNKoHC26AiBIlB5qw+3ATn3oX4ruvzxrLCLPF4CrmEltCrWri2ikVg==",
|
||||
"signature": "MEQCIDOl61CxmZnjAjnHz4fmYes8TcojZuX2+XtzdEfOhf4eAiBKlJwk/AtukeV8pEgq/2JcCnnSSz3ZNXxkVm7dSjB5AQ==",
|
||||
"signature_header": {
|
||||
"creator": {
|
||||
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUlGd0tEeURCdXh6ZWg4NGljSmh0ejh3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TkRBeU1ESXpNRE0zV2hjTk1qZ3dNek13TURJek1ETTMKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk1pNWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQk1SQ2lBVEQwNHI3WEE1MlR1d21rbVFpb1BNNDNrWjAKR29mVUVwazZMM3BLc0lXZDRyOEVyY1l2aGpKOUZ3TC9aa1FwamJmVWczTDVOTXZQVVlzRUJOcWpUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSU14bWdiWEIySDQyClpaSElxZk1yUm1ZTXJGTlFjRVFMWkRNQXpSNllTT25oTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFESXFIbkYKTVRueENhY3VqWFExSWRNYjRQM1dQNkFwRzJvNDFmODlzWHQ0RGdJZ1pHR2lIckQ2eG5nMEdIQ1R6dVpjay9keApEVTRteGhRT3piQmxOOUJSaXRVPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
|
||||
"mspid": "Org2MSP"
|
||||
},
|
||||
"nonce": "w2EHWZNMnmJYhRB53At/n9UYiiJ/5FtS"
|
||||
"nonce": "2yjv89nxowCrMWBDCN7CyFkQN9448JVC"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
@ -713,7 +713,7 @@
|
|||
"channel_header": {
|
||||
"channel_id": "businesschannel",
|
||||
"epoch": "0",
|
||||
"timestamp": "2018-04-02T02:35:55.000Z",
|
||||
"timestamp": "2018-08-20T06:36:06.000Z",
|
||||
"tx_id": "",
|
||||
"type": 2,
|
||||
"version": 0
|
||||
|
@ -723,18 +723,18 @@
|
|||
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQWNDZ0F3SUJBZ0lSQUlGd0tEeURCdXh6ZWg4NGljSmh0ejh3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpJdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekl1WlhoaGJYQnNaUzVqYjIwd0hoY05NVGd3TkRBeU1ESXpNRE0zV2hjTk1qZ3dNek13TURJek1ETTMKV2pCYk1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFZk1CMEdBMVVFQXd3V1FXUnRhVzVBYjNKbk1pNWxlR0Z0Y0d4bExtTnZiVEJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQk1SQ2lBVEQwNHI3WEE1MlR1d21rbVFpb1BNNDNrWjAKR29mVUVwazZMM3BLc0lXZDRyOEVyY1l2aGpKOUZ3TC9aa1FwamJmVWczTDVOTXZQVVlzRUJOcWpUVEJMTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBTUJnTlZIUk1CQWY4RUFqQUFNQ3NHQTFVZEl3UWtNQ0tBSU14bWdiWEIySDQyClpaSElxZk1yUm1ZTXJGTlFjRVFMWkRNQXpSNllTT25oTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFESXFIbkYKTVRueENhY3VqWFExSWRNYjRQM1dQNkFwRzJvNDFmODlzWHQ0RGdJZ1pHR2lIckQ2eG5nMEdIQ1R6dVpjay9keApEVTRteGhRT3piQmxOOUJSaXRVPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
|
||||
"mspid": "Org2MSP"
|
||||
},
|
||||
"nonce": "Q3Pu3pjT4oKYb2B/WGd4LjzCtWFNvwAB"
|
||||
"nonce": "CQuP6iJ1BJvmoPMOqs3w8IeJZGNUrG0Z"
|
||||
}
|
||||
}
|
||||
},
|
||||
"signature": "MEQCIAHBqHWlRFNl1qYkqGWwZgU1N1ufcAzKUBkMjfwzXTaXAiAmuPEgzABfraFtq46QGRzI47iVV4iY2hAkaf/5v/Ni4g=="
|
||||
"signature": "MEQCICbIgDycvMnP08dY204A7tYc3yVjAGKPga523EA/xJQpAiAFfIVABnvurPjn/qDPJRbPsvYIvpJNqOmA5TRumeHo4Q=="
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
"channel_header": {
|
||||
"channel_id": "businesschannel",
|
||||
"epoch": "0",
|
||||
"timestamp": "2018-04-02T02:35:55.000Z",
|
||||
"timestamp": "2018-08-20T06:36:06.000Z",
|
||||
"tx_id": "",
|
||||
"type": 1,
|
||||
"version": 0
|
||||
|
@ -744,23 +744,23 @@
|
|||
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJLZ0F3SUJBZ0lRUysyUitKSWo5WnBKTHhOSWk1MmtHREFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFF3TWpBeU16QXpOMW9YRFRJNE1ETXpNREF5TXpBek4xb3dXREVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4SERBYUJnTlZCQU1URTI5eVpHVnlaWEl1WlhoaGJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxCmhrak9QUU1CQndOQ0FBUWlJMzQ2VitObUJNM2xVcGxoODVpTFYzbmF1aVNLRzRjZjE4NWVQTXgxWWp4RG53RlkKaUx5aEFzMmtxSTA3Ly9COXFCOFZwOVh4TVlBeVU3UXVGZGhNbzAwd1N6QU9CZ05WSFE4QkFmOEVCQU1DQjRBdwpEQVlEVlIwVEFRSC9CQUl3QURBckJnTlZIU01FSkRBaWdDQ1BhWDVvUEsyVk5lN2NxU2g2KzRmQVVPRSszQk9FCnJjbGtRSE0xSlpORFFqQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUF0N283UGkzZWVweGpWd24zRTB6Y2ptd2sKQTBIVDh4MnpSYXMwTjlqZ0E0OENJQ1kzUTRjMXM3QlJHcXRsSkF2VU9vMUo0SitXbkRhTGVlS01ZWmRWUWl6TgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
|
||||
"mspid": "OrdererMSP"
|
||||
},
|
||||
"nonce": "QPlC4ualNz0Zr/BsaYsnRkMtRap1do8/"
|
||||
"nonce": "W6NRj5ATK906KzyY/FHCHP9ZYH9T9yw5"
|
||||
}
|
||||
}
|
||||
},
|
||||
"signature": "MEUCIQC4vcjUtdbsCEVnXtMXUUcz3DIi3HyLA2UbFqIjrEF9gwIgLwwdcn+h8ZICNS3SVM4jGRo+NgX4Lp85m4O0EG6mWV8="
|
||||
"signature": "MEQCIFfRKhiHGzqXG+4ZIa3NQV0k7p7JKoe+r6yTf6yZnMwsAiBX+o8RxvZMAAiK4Jxkd8nm2KTfhz/YC18qc2HXly017A=="
|
||||
}
|
||||
]
|
||||
},
|
||||
"header": {
|
||||
"data_hash": "2GGNy1iGuB1oWlh+iSbhLjnCdabAfkk5eOrGyK02r6s=",
|
||||
"data_hash": "Rk8BCGQmhNJTKP7CmGijc3Ub/WEjizb6cbYhmQvVeWk=",
|
||||
"number": "2",
|
||||
"previous_hash": "AxTJ7IK1EB4a/cD9+Y6JVJoUE3Kr4xzEojJ16Xl2w18="
|
||||
"previous_hash": "e1zZVoSuT5rHiJXe9o7fZWmoYM1ZhxdLk4Pc2qtWoSE="
|
||||
},
|
||||
"metadata": {
|
||||
"metadata": [
|
||||
"EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJLZ0F3SUJBZ0lRUysyUitKSWo5WnBKTHhOSWk1MmtHREFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFF3TWpBeU16QXpOMW9YRFRJNE1ETXpNREF5TXpBek4xb3dXREVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4SERBYUJnTlZCQU1URTI5eVpHVnlaWEl1WlhoaGJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxCmhrak9QUU1CQndOQ0FBUWlJMzQ2VitObUJNM2xVcGxoODVpTFYzbmF1aVNLRzRjZjE4NWVQTXgxWWp4RG53RlkKaUx5aEFzMmtxSTA3Ly9COXFCOFZwOVh4TVlBeVU3UXVGZGhNbzAwd1N6QU9CZ05WSFE4QkFmOEVCQU1DQjRBdwpEQVlEVlIwVEFRSC9CQUl3QURBckJnTlZIU01FSkRBaWdDQ1BhWDVvUEsyVk5lN2NxU2g2KzRmQVVPRSszQk9FCnJjbGtRSE0xSlpORFFqQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUF0N283UGkzZWVweGpWd24zRTB6Y2ptd2sKQTBIVDh4MnpSYXMwTjlqZ0E0OENJQ1kzUTRjMXM3QlJHcXRsSkF2VU9vMUo0SitXbkRhTGVlS01ZWmRWUWl6TgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYjv5uhVNNrKivH+vRjRAet/Du2o5nQFbgEkcwRQIhAKK0XRYkHw2IcNqS4owrRiLzWEk9TFse5nrei9nSNE8sAiBFWhxGgfsJsJacvGZyXRAkod/Uxp+iGtHvYUkNHUihUQ==",
|
||||
"CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiS2dBd0lCQWdJUVMrMlIrSklqOVpwSkx4TklpNTJrR0RBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURRd01qQXlNekF6TjFvWERUSTRNRE16TURBeU16QXpOMW93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVFpSTM0NlYrTm1CTTNsVXBsaDg1aUxWM25hdWlTS0c0Y2YxODVlUE14MVlqeERud0ZZCmlMeWhBczJrcUkwNy8vQjlxQjhWcDlYeE1ZQXlVN1F1RmRoTW8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0NQYVg1b1BLMlZOZTdjcVNoNis0ZkFVT0UrM0JPRQpyY2xrUUhNMUpaTkRRakFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUVBdDdvN1BpM2VlcHhqVnduM0UwemNqbXdrCkEwSFQ4eDJ6UmFzME45amdBNDhDSUNZM1E0YzFzN0JSR3F0bEpBdlVPbzFKNEorV25EYUxlZUtNWVpkVlFpek4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGHrO34BkzW7HlIn9SflozfIxYDsQ2dDqLxJGMEQCID5q3xhBmpBWhucPd0mJwfv0rdfNOeooc1psBzfFyTBEAiByL5zpd9dwDKHi4DBH0FWgWHee0wge18bykVyMAcGG1Q==",
|
||||
"EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJLZ0F3SUJBZ0lRUysyUitKSWo5WnBKTHhOSWk1MmtHREFLQmdncWhrak9QUVFEQWpCcE1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVVNQklHQTFVRUNoTUxaWGhoYlhCc1pTNWpiMjB4RnpBVkJnTlZCQU1URG1OaExtVjRZVzF3CmJHVXVZMjl0TUI0WERURTRNRFF3TWpBeU16QXpOMW9YRFRJNE1ETXpNREF5TXpBek4xb3dXREVMTUFrR0ExVUUKQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkdjbUZ1WTJsegpZMjh4SERBYUJnTlZCQU1URTI5eVpHVnlaWEl1WlhoaGJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxCmhrak9QUU1CQndOQ0FBUWlJMzQ2VitObUJNM2xVcGxoODVpTFYzbmF1aVNLRzRjZjE4NWVQTXgxWWp4RG53RlkKaUx5aEFzMmtxSTA3Ly9COXFCOFZwOVh4TVlBeVU3UXVGZGhNbzAwd1N6QU9CZ05WSFE4QkFmOEVCQU1DQjRBdwpEQVlEVlIwVEFRSC9CQUl3QURBckJnTlZIU01FSkRBaWdDQ1BhWDVvUEsyVk5lN2NxU2g2KzRmQVVPRSszQk9FCnJjbGtRSE0xSlpORFFqQUtCZ2dxaGtqT1BRUURBZ05JQURCRkFpRUF0N283UGkzZWVweGpWd24zRTB6Y2ptd2sKQTBIVDh4MnpSYXMwTjlqZ0E0OENJQ1kzUTRjMXM3QlJHcXRsSkF2VU9vMUo0SitXbkRhTGVlS01ZWmRWUWl6TgotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYs5vW1Pt8B5Q1YgRvFqRChLudVG5USvi2EkYwRAIgM6aenJP2Z7qd59MkWH6r60cj63UYRdQIrFZRQN5XWw4CIDi+pO1sDD+67/zPZdbyyEsnJbWPpWinc61SE2eEvI28",
|
||||
"CgIIAhL5BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiS2dBd0lCQWdJUVMrMlIrSklqOVpwSkx4TklpNTJrR0RBS0JnZ3Foa2pPUFFRREFqQnBNUXN3CkNRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNCTUtRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnkKWVc1amFYTmpiekVVTUJJR0ExVUVDaE1MWlhoaGJYQnNaUzVqYjIweEZ6QVZCZ05WQkFNVERtTmhMbVY0WVcxdwpiR1V1WTI5dE1CNFhEVEU0TURRd01qQXlNekF6TjFvWERUSTRNRE16TURBeU16QXpOMW93V0RFTE1Ba0dBMVVFCkJoTUNWVk14RXpBUkJnTlZCQWdUQ2tOaGJHbG1iM0p1YVdFeEZqQVVCZ05WQkFjVERWTmhiaUJHY21GdVkybHoKWTI4eEhEQWFCZ05WQkFNVEUyOXlaR1Z5WlhJdVpYaGhiWEJzWlM1amIyMHdXVEFUQmdjcWhrak9QUUlCQmdncQpoa2pPUFFNQkJ3TkNBQVFpSTM0NlYrTm1CTTNsVXBsaDg1aUxWM25hdWlTS0c0Y2YxODVlUE14MVlqeERud0ZZCmlMeWhBczJrcUkwNy8vQjlxQjhWcDlYeE1ZQXlVN1F1RmRoTW8wMHdTekFPQmdOVkhROEJBZjhFQkFNQ0I0QXcKREFZRFZSMFRBUUgvQkFJd0FEQXJCZ05WSFNNRUpEQWlnQ0NQYVg1b1BLMlZOZTdjcVNoNis0ZkFVT0UrM0JPRQpyY2xrUUhNMUpaTkRRakFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUVBdDdvN1BpM2VlcHhqVnduM0UwemNqbXdrCkEwSFQ4eDJ6UmFzME45amdBNDhDSUNZM1E0YzFzN0JSR3F0bEpBdlVPbzFKNEorV25EYUxlZUtNWVpkVlFpek4KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGDu30JMFWD39LZTNVBhZ4CNfaclF+QRYgRJHMEUCIQCdmm7RIM1/KhcHij7PuOC7s9/v7WUEUerzeBp/vurlmAIgFqFW/LSYboRI/5FSWU1NpBl6leE8qQKxDQk/7Lm6MNw=",
|
||||
"",
|
||||
""
|
||||
]
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue