From 70bff28f8a8fd8d334f23b906a89627b7ea71011 Mon Sep 17 00:00:00 2001 From: Yuki Kondo Date: Wed, 5 Jul 2017 20:00:28 -0700 Subject: [PATCH 01/16] [FAB-5197]Check all prop-responses in balance-transfer "balance-transfer" app doesn't check all of the proposal responses. An app sends a transaction proposal to multiple peers and get multiple responses. However, the only first response "proposalResponses[0]" is checked repeatedly in the loop. This patch fixes the code to check all of the array value of proposalResponses correctly. Change-Id: Id61e691eb4d1c3a6c4a7a390584dfd74f1fc6196 Signed-off-by: Yuki Kondo --- balance-transfer/app/install-chaincode.js | 4 ++-- balance-transfer/app/instantiate-chaincode.js | 4 ++-- balance-transfer/app/invoke-transaction.js | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/balance-transfer/app/install-chaincode.js b/balance-transfer/app/install-chaincode.js index 591b4c7a..fc408d77 100644 --- a/balance-transfer/app/install-chaincode.js +++ b/balance-transfer/app/install-chaincode.js @@ -47,8 +47,8 @@ var installChaincode = function(peers, chaincodeName, chaincodePath, var all_good = true; for (var i in proposalResponses) { let one_good = false; - if (proposalResponses && proposalResponses[0].response && - proposalResponses[0].response.status === 200) { + if (proposalResponses && proposalResponses[i].response && + proposalResponses[i].response.status === 200) { one_good = true; logger.info('install proposal was good'); } else { diff --git a/balance-transfer/app/instantiate-chaincode.js b/balance-transfer/app/instantiate-chaincode.js index 199f139e..312eb6b6 100644 --- a/balance-transfer/app/instantiate-chaincode.js +++ b/balance-transfer/app/instantiate-chaincode.js @@ -63,8 +63,8 @@ var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion var all_good = true; for (var i in proposalResponses) { let one_good = false; - if (proposalResponses && proposalResponses[0].response && - proposalResponses[0].response.status === 200) { + if (proposalResponses && proposalResponses[i].response && + proposalResponses[i].response.status === 200) { one_good = true; logger.info('instantiate proposal was good'); } else { diff --git a/balance-transfer/app/invoke-transaction.js b/balance-transfer/app/invoke-transaction.js index fa4202dd..54098083 100644 --- a/balance-transfer/app/invoke-transaction.js +++ b/balance-transfer/app/invoke-transaction.js @@ -55,8 +55,8 @@ var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args, var all_good = true; for (var i in proposalResponses) { let one_good = false; - if (proposalResponses && proposalResponses[0].response && - proposalResponses[0].response.status === 200) { + if (proposalResponses && proposalResponses[i].response && + proposalResponses[i].response.status === 200) { one_good = true; logger.info('transaction proposal was good'); } else { From e0db341af9981eedeb66e6a35cc8fca174fc880d Mon Sep 17 00:00:00 2001 From: Bret Harrison Date: Thu, 13 Jul 2017 16:09:51 -0400 Subject: [PATCH 02/16] [FAB-5287] NodeSDK - fix sample Sample should use 'fcn' not 'functionName' in the sample curl calls and sample app. Change-Id: I4be92a0394fdf579195e9566d049aac0862d5888 Signed-off-by: Bret Harrison --- balance-transfer/README.md | 2 +- balance-transfer/app.js | 10 +++++----- balance-transfer/testAPIs.sh | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/balance-transfer/README.md b/balance-transfer/README.md index 6fcf23ab..05fe0c28 100644 --- a/balance-transfer/README.md +++ b/balance-transfer/README.md @@ -146,7 +146,7 @@ curl -s -X POST \ "peers": ["localhost:7051"], "chaincodeName":"mycc", "chaincodeVersion":"v0", - "functionName":"init", + "fcn":"init", "args":["a","100","b","200"] }' ``` diff --git a/balance-transfer/app.js b/balance-transfer/app.js index 52224f74..a214eab6 100644 --- a/balance-transfer/app.js +++ b/balance-transfer/app.js @@ -216,12 +216,12 @@ app.post('/channels/:channelName/chaincodes', function(req, res) { var chaincodeName = req.body.chaincodeName; var chaincodeVersion = req.body.chaincodeVersion; var channelName = req.params.channelName; - var functionName = req.body.functionName; + var fcn = req.body.fcn; var args = req.body.args; logger.debug('channelName : ' + channelName); logger.debug('chaincodeName : ' + chaincodeName); logger.debug('chaincodeVersion : ' + chaincodeVersion); - logger.debug('functionName : ' + functionName); + logger.debug('fcn : ' + fcn); logger.debug('args : ' + args); if (!chaincodeName) { res.json(getErrorMessage('\'chaincodeName\'')); @@ -235,15 +235,15 @@ app.post('/channels/:channelName/chaincodes', function(req, res) { res.json(getErrorMessage('\'channelName\'')); return; } - if (!functionName) { - res.json(getErrorMessage('\'functionName\'')); + if (!fcn) { + res.json(getErrorMessage('\'fcn\'')); return; } if (!args) { res.json(getErrorMessage('\'args\'')); return; } - instantiate.instantiateChaincode(channelName, chaincodeName, chaincodeVersion, functionName, args, req.username, req.orgname) + instantiate.instantiateChaincode(channelName, chaincodeName, chaincodeVersion, fcn, args, req.username, req.orgname) .then(function(message) { res.send(message); }); diff --git a/balance-transfer/testAPIs.sh b/balance-transfer/testAPIs.sh index 737238f0..918c6e44 100755 --- a/balance-transfer/testAPIs.sh +++ b/balance-transfer/testAPIs.sh @@ -113,7 +113,7 @@ curl -s -X POST \ -d '{ "chaincodeName":"mycc", "chaincodeVersion":"v0", - "functionName":"init", + "fcn":"init", "args":["a","100","b","200"] }' echo From 6422fc36ceed657e3f222baec10b3a33e07b6d8a Mon Sep 17 00:00:00 2001 From: GeorgeLindsell Date: Fri, 14 Jul 2017 15:39:54 +0100 Subject: [PATCH 03/16] [FAB-5311] Fix spelling error Fix spelling error in instantiate-chaincode.js Fix Issue # 5311. Change-Id: Ib8654e2d12a6e3d138406d0bb8738e37ebee90d1 Signed-off-by: GeorgeLindsell --- balance-transfer/app/instantiate-chaincode.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/balance-transfer/app/instantiate-chaincode.js b/balance-transfer/app/instantiate-chaincode.js index 199f139e..f305b114 100644 --- a/balance-transfer/app/instantiate-chaincode.js +++ b/balance-transfer/app/instantiate-chaincode.js @@ -145,7 +145,7 @@ var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion }).then((response) => { if (response.status === 'SUCCESS') { logger.info('Successfully sent transaction to the orderer.'); - return 'Chaincode Instantiateion is SUCCESS'; + return 'Chaincode Instantiation is SUCCESS'; } else { logger.error('Failed to order the transaction. Error code: ' + response.status); return 'Failed to order the transaction. Error code: ' + response.status; From 6cce07c4402614fe73c1451272da1fc82950c0f8 Mon Sep 17 00:00:00 2001 From: Yuki Kondo Date: Mon, 3 Jul 2017 13:55:26 -0700 Subject: [PATCH 04/16] [FAB-5155]Fix README.md in "balance-transfer" example The README in "balance-transfer" should be fixed in the section: https://github.com/hyperledger/fabric-samples/tree/master/ balance-transfer#running-the-sample-program 1. Broken link There is a link to "Sample REST APIs Requests" which is broken. This is linked to non-existent path on fabric-sdk-node repository. I believe the intended link is to https://github.com/hyperledger/fabric-samples/tree/master/ balance-transfer#sample-rest-apis-requests 2. Instruction to start node application. There is no instruction to start node application. If we execute the REST APIs according to the current README, we can't get any responses since node application is not working. We need to execute the following steps before calling REST APIs. - npm install - PORT=4000 node app fix repo names Change-Id: I9ec0ec18bb36addd6c8371481dc8cfe645053ec6 Signed-off-by: Yuki Kondo Signed-off-by: Christopher Ferris --- balance-transfer/README.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/balance-transfer/README.md b/balance-transfer/README.md index 6fcf23ab..53057065 100644 --- a/balance-transfer/README.md +++ b/balance-transfer/README.md @@ -11,7 +11,7 @@ A sample Node.js app to demonstrate **__fabric-client__** & **__fabric-ca-client * Download docker images ``` -cd fabric-sdk-node/examples/balance-transfer/ +cd fabric-samples/balance-transfer/ docker-compose -f artifacts/docker-compose.yaml pull ``` @@ -40,7 +40,21 @@ docker-compose -f artifacts/docker-compose.yaml up ``` ##### Terminal Window 2 -* Execute the REST APIs from the section [Sample REST APIs Requests](https://github.com/hyperledger/fabric-sdk-node/tree/master/examples/balance-transfer#running-the-sample-program) +* Install the fabric-client and fabric-ca-client node modules + +``` +npm install +``` + +* Start the node app on PORT 4000 + +``` +PORT=4000 node app +``` + +##### Terminal Window 3 + +* Execute the REST APIs from the section [Sample REST APIs Requests](https://github.com/hyperledger/fabric-samples/tree/master/balance-transfer#sample-rest-apis-requests) ### Option 2: @@ -48,7 +62,7 @@ docker-compose -f artifacts/docker-compose.yaml up ##### Terminal Window 1 ``` -cd fabric-sdk-node/examples/balance-transfer +cd fabric-samples/balance-transfer ./runApp.sh @@ -67,7 +81,7 @@ instructions [https://stedolan.github.io/jq/](https://stedolan.github.io/jq/) With the application started in terminal 1, next, test the APIs by executing the script - **testAPIs.sh**: ``` -cd fabric-sdk-node/examples/balance-transfer +cd fabric-samples/balance-transfer ./testAPIs.sh From a7e83fc23594ab22516bd6ae5d834f7336100825 Mon Sep 17 00:00:00 2001 From: Gari Singh Date: Thu, 20 Jul 2017 08:24:26 -0400 Subject: [PATCH 05/16] FAB-5392 Fix path issue for Git Bash users Git Bash is a prereq for Windows users required to run the various sample scripts. Git Bash by default will convert paths and this causes the issue identified by FAB-5392. Luckily Git Bash provides supports an environment variable to override this behavior. Change-Id: I66e52eb2953c0dcc9f04903a1fd1fd94d19b75ce Signed-off-by: Gari Singh --- basic-network/start.sh | 3 +++ fabcar/startFabric.sh | 3 +++ 2 files changed, 6 insertions(+) diff --git a/basic-network/start.sh b/basic-network/start.sh index 88aea6df..246605bd 100755 --- a/basic-network/start.sh +++ b/basic-network/start.sh @@ -7,6 +7,9 @@ # Exit on first error, print all commands. set -ev +# don't rewrite paths for Windows Git Bash users +export MSYS_NO_PATHCONV=1 + docker-compose -f docker-compose.yml down docker-compose -f docker-compose.yml up -d ca.example.com orderer.example.com peer0.org1.example.com couchdb diff --git a/fabcar/startFabric.sh b/fabcar/startFabric.sh index f7680168..fd763367 100755 --- a/fabcar/startFabric.sh +++ b/fabcar/startFabric.sh @@ -7,6 +7,9 @@ # Exit on first error set -e +# don't rewrite paths for Windows Git Bash users +export MSYS_NO_PATHCONV=1 + starttime=$(date +%s) if [ ! -d ~/.hfc-key-store/ ]; then From 134549af22135775524fbe105ccc4471abc99aeb Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Sat, 22 Jul 2017 16:58:14 -0400 Subject: [PATCH 06/16] FAB-5412 add fabric-preload.sh script Add a script to allow users to preload the Fabric docker images without having to run the curl command in the RTD. Change-Id: I3b6c682c3e2ab1f230f7af8c3ce0b95bbb8fd024 Signed-off-by: Christopher Ferris --- scripts/README.md | 10 ++++++++++ scripts/fabric-preload.sh | 42 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 scripts/README.md create mode 100755 scripts/fabric-preload.sh diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 00000000..4dce8de6 --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,10 @@ +## Hyperledger Fabric Samples + +fabric-preload.sh will preload all of the requisite docker images for Hyperledger Fabric and tag them +with the 'latest' tag. Optionally, specify a specific version (e.g. 1.0.1). Default version is 1.0.0. + +```bash +./fabric-preload.sh [version] +``` + +Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License diff --git a/scripts/fabric-preload.sh b/scripts/fabric-preload.sh new file mode 100755 index 00000000..a88963ed --- /dev/null +++ b/scripts/fabric-preload.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# Copyright IBM Corp. All Rights Reserved. +# +# SPDX-License-Identifier: Apache-2.0 +# + +export VERSION=${1:-1.0.0} +export ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/windows/')-$(uname -m | sed 's/x86_64/amd64/g')" | awk '{print tolower($0)}') +#Set MARCH variable i.e ppc64le,s390x,x86_64,i386 +MARCH=`uname -m` + +dockerFabricPull() { + local FABRIC_TAG=$1 + for IMAGES in peer orderer couchdb ccenv javaenv kafka zookeeper tools; do + echo "==> FABRIC IMAGE: $IMAGES" + echo + docker pull hyperledger/fabric-$IMAGES:$FABRIC_TAG + docker tag hyperledger/fabric-$IMAGES:$FABRIC_TAG hyperledger/fabric-$IMAGES + done +} + +dockerCaPull() { + local CA_TAG=$1 + echo "==> FABRIC CA IMAGE" + echo + docker pull hyperledger/fabric-ca:$CA_TAG + docker tag hyperledger/fabric-ca:$CA_TAG hyperledger/fabric-ca +} + +: ${CA_TAG:="$MARCH-$VERSION"} +: ${FABRIC_TAG:="$MARCH-$VERSION"} + +echo "===> Pulling fabric Images" +dockerFabricPull ${FABRIC_TAG} + +echo "===> Pulling fabric ca Image" +dockerCaPull ${CA_TAG} +echo +echo "===> List out hyperledger docker images" +docker images | grep hyperledger* + From 7778837ebb4a4c3cdbd40a8c6f0fd89938feda42 Mon Sep 17 00:00:00 2001 From: Krishna Harsha Voora Date: Thu, 20 Jul 2017 06:08:55 -0400 Subject: [PATCH 07/16] [FAB-5394] Introduce Delay as configurable variable Introduce delay as configurable variable for byfn.sh Change-Id: I8ab05f44c68b36bd95f175c9b5f5091d11fa7083 Signed-off-by: Krishna Harsha Voora --- first-network/byfn.sh | 11 ++++++++--- first-network/docker-compose-cli.yaml | 2 +- first-network/scripts/script.sh | 8 +++++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/first-network/byfn.sh b/first-network/byfn.sh index 04436ed9..ffcc5392 100755 --- a/first-network/byfn.sh +++ b/first-network/byfn.sh @@ -34,7 +34,7 @@ export FABRIC_CFG_PATH=${PWD} # Print the usage message function printHelp () { echo "Usage: " - echo " byfn.sh -m up|down|restart|generate [-c ] [-t ]" + echo " byfn.sh -m up|down|restart|generate [-c ] [-t ] [-d ] " echo " byfn.sh -h|--help (print this message)" echo " -m - one of 'up', 'down', 'restart' or 'generate'" echo " - 'up' - bring up the network with docker-compose up" @@ -43,6 +43,7 @@ function printHelp () { echo " - 'generate' - generate required certificates and genesis block" echo " -c - channel name to use (defaults to \"mychannel\")" echo " -t - CLI timeout duration in microseconds (defaults to 10000)" + echo " -d - delay duration in seconds (defaults to 3)" echo echo "Typically, one would first generate the required certificates and " echo "genesis block, then bring up the network. e.g.:" @@ -106,7 +107,7 @@ function networkUp () { replacePrivateKey generateChannelArtifacts fi - CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1 + CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT DELAY=$CLI_DELAY docker-compose -f $COMPOSE_FILE up -d 2>&1 if [ $? -ne 0 ]; then echo "ERROR !!!! Unable to start network" docker logs -f cli @@ -295,13 +296,15 @@ OS_ARCH=$(echo "$(uname -s|tr '[:upper:]' '[:lower:]'|sed 's/mingw64_nt.*/window # timeout duration - the duration the CLI should wait for a response from # another container before giving up CLI_TIMEOUT=10000 +#default for delay +CLI_DELAY=3 # channel name defaults to "mychannel" CHANNEL_NAME="mychannel" # use this as the default docker-compose yaml definition COMPOSE_FILE=docker-compose-cli.yaml # Parse commandline args -while getopts "h?m:c:t:" opt; do +while getopts "h?m:c:t:d:" opt; do case "$opt" in h|\?) printHelp @@ -313,6 +316,8 @@ while getopts "h?m:c:t:" opt; do ;; t) CLI_TIMEOUT=$OPTARG ;; + d) CLI_DELAY=$OPTARG + ;; esac done diff --git a/first-network/docker-compose-cli.yaml b/first-network/docker-compose-cli.yaml index 28e4b66e..25e64800 100644 --- a/first-network/docker-compose-cli.yaml +++ b/first-network/docker-compose-cli.yaml @@ -67,7 +67,7 @@ services: - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME}; sleep $TIMEOUT' + command: /bin/bash -c './scripts/script.sh ${CHANNEL_NAME} ${DELAY}; sleep $TIMEOUT' volumes: - /var/run/:/host/var/run/ - ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go diff --git a/first-network/scripts/script.sh b/first-network/scripts/script.sh index a49fbb73..43a308ed 100755 --- a/first-network/scripts/script.sh +++ b/first-network/scripts/script.sh @@ -10,6 +10,7 @@ echo echo "Build your first network (BYFN) end-to-end test" echo CHANNEL_NAME="$1" +DELAY="$2" : ${CHANNEL_NAME:="mychannel"} : ${TIMEOUT:="60"} COUNTER=1 @@ -82,6 +83,7 @@ updateAnchorPeers() { cat log.txt verifyResult $res "Anchor peer update failed" echo "===================== Anchor peers for org \"$CORE_PEER_LOCALMSPID\" on \"$CHANNEL_NAME\" is updated successfully ===================== " + sleep $DELAY echo } @@ -93,7 +95,7 @@ joinWithRetry () { if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then COUNTER=` expr $COUNTER + 1` echo "PEER$1 failed to join the channel, Retry after 2 seconds" - sleep 2 + sleep $DELAY joinWithRetry $1 else COUNTER=1 @@ -106,7 +108,7 @@ joinChannel () { setGlobals $ch joinWithRetry $ch echo "===================== PEER$ch joined on the channel \"$CHANNEL_NAME\" ===================== " - sleep 2 + sleep $DELAY echo done } @@ -150,7 +152,7 @@ chaincodeQuery () { # we either get a successful response, or reach TIMEOUT while test "$(($(date +%s)-starttime))" -lt "$TIMEOUT" -a $rc -ne 0 do - sleep 3 + sleep $DELAY echo "Attempting to Query PEER$PEER ...$(($(date +%s)-starttime)) secs" peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt test $? -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') From 2f4e9b851c8ac8ea013500682a2a1ef719ba6ea4 Mon Sep 17 00:00:00 2001 From: Nao Nishijima Date: Mon, 24 Jul 2017 14:57:21 -0700 Subject: [PATCH 08/16] [FAB-5130] Invalid syntax in docker compose files This patch set deletes unused docker-compose environment variables. Now CouchDB section in docker-compose file uses DB_URL env variables. But the variables are not used in CouchDB container. Change-Id: I8e84255e1ea00498b787bdd4042cdb909a96667c Signed-off-by: Nao Nishijima --- basic-network/docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/basic-network/docker-compose.yml b/basic-network/docker-compose.yml index 407e1e9f..454c13bc 100644 --- a/basic-network/docker-compose.yml +++ b/basic-network/docker-compose.yml @@ -82,8 +82,6 @@ services: image: hyperledger/fabric-couchdb:x86_64-1.0.0 ports: - 5984:5984 - environment: - DB_URL: http://localhost:5984/member_db networks: - basic From 92348cb4dd380b2cbc7825f3144505001bb709da Mon Sep 17 00:00:00 2001 From: Chris Elder Date: Tue, 25 Jul 2017 10:57:08 -0400 Subject: [PATCH 09/16] [FAB-5453] Enable CouchDB passwords in Fabric Samples CouchDB usernames and passwords can be enabled by adding additional environment variables to docker compose files. The environment variables are added without values. This will create peer and couchdb containers without CouchDB passwords enabled. Initializing the variables will create a CouchDB container with and admin username and password. The peer will also be created with the CouchDB username in the ledger config. Change-Id: I56c93111b0a4bd29c714df5a50af82517641bb3b Signed-off-by: Chris Elder --- basic-network/docker-compose.yml | 10 +++++++ first-network/docker-compose-couch.yaml | 40 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/basic-network/docker-compose.yml b/basic-network/docker-compose.yml index 454c13bc..68119835 100644 --- a/basic-network/docker-compose.yml +++ b/basic-network/docker-compose.yml @@ -61,6 +61,11 @@ services: - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_basic - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984 + # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD + # provide the credentials for ledger to connect to CouchDB. The username and password must + # match the username and password set for the associated CouchDB. + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= working_dir: /opt/gopath/src/github.com/hyperledger/fabric command: peer node start # command: peer node start --peer-chaincodedev=true @@ -80,6 +85,11 @@ services: couchdb: container_name: couchdb image: hyperledger/fabric-couchdb:x86_64-1.0.0 + # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password + # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= ports: - 5984:5984 networks: diff --git a/first-network/docker-compose-couch.yaml b/first-network/docker-compose-couch.yaml index 7472a65b..b14c7f5c 100644 --- a/first-network/docker-compose-couch.yaml +++ b/first-network/docker-compose-couch.yaml @@ -12,6 +12,11 @@ services: couchdb0: container_name: couchdb0 image: hyperledger/fabric-couchdb + # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password + # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, # for example map it to utilize Fauxton User Interface in dev environments. ports: @@ -23,12 +28,22 @@ services: environment: - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 + # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD + # provide the credentials for ledger to connect to CouchDB. The username and password must + # match the username and password set for the associated CouchDB. + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= depends_on: - couchdb0 couchdb1: container_name: couchdb1 image: hyperledger/fabric-couchdb + # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password + # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, # for example map it to utilize Fauxton User Interface in dev environments. ports: @@ -40,12 +55,22 @@ services: environment: - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984 + # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD + # provide the credentials for ledger to connect to CouchDB. The username and password must + # match the username and password set for the associated CouchDB. + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= depends_on: - couchdb1 couchdb2: container_name: couchdb2 image: hyperledger/fabric-couchdb + # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password + # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, # for example map it to utilize Fauxton User Interface in dev environments. ports: @@ -57,12 +82,22 @@ services: environment: - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984 + # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD + # provide the credentials for ledger to connect to CouchDB. The username and password must + # match the username and password set for the associated CouchDB. + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= depends_on: - couchdb2 couchdb3: container_name: couchdb3 image: hyperledger/fabric-couchdb + # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password + # for CouchDB. This will prevent CouchDB from operating in an "Admin Party" mode. + environment: + - COUCHDB_USER= + - COUCHDB_PASSWORD= # Comment/Uncomment the port mapping if you want to hide/expose the CouchDB service, # for example map it to utilize Fauxton User Interface in dev environments. ports: @@ -74,5 +109,10 @@ services: environment: - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984 + # The CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME and CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD + # provide the credentials for ledger to connect to CouchDB. The username and password must + # match the username and password set for the associated CouchDB. + - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= + - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD= depends_on: - couchdb3 From 79cb041124880f6346b33b952dfd644c02ef3ede Mon Sep 17 00:00:00 2001 From: Jim Zhang Date: Tue, 18 Jul 2017 15:21:52 -0400 Subject: [PATCH 10/16] [FAB-5303] Further balance-transfer code optimization - Made it possible to deploy the app (both the client and fabric backend) to a location other than localhost - Made it possible to work with a backend over grpc instead of always assuming grpcs - Made the list of target peers for instantiate and invoke calls to be optional - Enabled target networks to be controlled by an env variable Change-Id: Ie394cf7e8f6ed47d970d4be992f2f6a0394fff7f Signed-off-by: Jim Zhang --- balance-transfer/README.md | 9 +- balance-transfer/app.js | 19 ++- balance-transfer/app/helper.js | 117 +++++++----------- balance-transfer/app/install-chaincode.js | 2 +- balance-transfer/app/instantiate-chaincode.js | 13 +- balance-transfer/app/invoke-transaction.js | 19 ++- balance-transfer/app/join-channel.js | 23 +--- balance-transfer/app/network-config-aws.json | 55 ++++++++ balance-transfer/app/network-config.json | 48 +++---- balance-transfer/app/query.js | 2 +- balance-transfer/config.js | 14 +++ balance-transfer/config.json | 5 +- balance-transfer/package.json | 9 +- balance-transfer/testAPIs.sh | 10 +- 14 files changed, 187 insertions(+), 158 deletions(-) create mode 100644 balance-transfer/app/network-config-aws.json create mode 100644 balance-transfer/config.js diff --git a/balance-transfer/README.md b/balance-transfer/README.md index 05fe0c28..f1142452 100644 --- a/balance-transfer/README.md +++ b/balance-transfer/README.md @@ -117,7 +117,7 @@ curl -s -X POST \ -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051","localhost:7056"] + "peers": ["peer1","peer2"] }' ``` ### Install chaincode @@ -128,7 +128,7 @@ curl -s -X POST \ -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051","localhost:7056"], + "peers": ["peer1","peer2"], "chaincodeName":"mycc", "chaincodePath":"github.com/example_cc", "chaincodeVersion":"v0" @@ -143,10 +143,8 @@ curl -s -X POST \ -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051"], "chaincodeName":"mycc", "chaincodeVersion":"v0", - "fcn":"init", "args":["a","100","b","200"] }' ``` @@ -159,7 +157,6 @@ curl -s -X POST \ -H "authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE0OTQ4NjU1OTEsInVzZXJuYW1lIjoiSmltIiwib3JnTmFtZSI6Im9yZzEiLCJpYXQiOjE0OTQ4NjE5OTF9.yWaJhFDuTvMQRaZIqg20Is5t-JJ_1BP58yrNLOKxtNI" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051", "localhost:7056"], "fcn":"move", "args":["a","b","10"] }' @@ -232,7 +229,7 @@ curl -s -X GET \ ### Network configuration considerations -You have the ability to change configuration parameters by editing the network-config.json file. +You have the ability to change configuration parameters by either directly editing the network-config.json file or provide an additional file for an alternative target network. The app uses an optional environment variable "TARGET_NETWORK" to control the configuration files to use. For example, if you deployed the target network on Amazon Web Services EC2, you can add a file "network-config-aws.json", and set the "TARGET_NETWORK" environment to 'aws'. The app will pick up the settings inside the "network-config-aws.json" file. #### IP Address** and PORT information diff --git a/balance-transfer/app.js b/balance-transfer/app.js index a214eab6..db936b8a 100644 --- a/balance-transfer/app.js +++ b/balance-transfer/app.js @@ -27,7 +27,10 @@ var expressJWT = require('express-jwt'); var jwt = require('jsonwebtoken'); var bearerToken = require('express-bearer-token'); var cors = require('cors'); -var config = require('./config.json'); + +require('./config.js'); +var hfc = require('fabric-client'); + var helper = require('./app/helper.js'); var channels = require('./app/create-channel.js'); var join = require('./app/join-channel.js'); @@ -35,8 +38,8 @@ var install = require('./app/install-chaincode.js'); var instantiate = require('./app/instantiate-chaincode.js'); var invoke = require('./app/invoke-transaction.js'); var query = require('./app/query.js'); -var host = process.env.HOST || config.host; -var port = process.env.PORT || config.port; +var host = process.env.HOST || hfc.getConfigSetting('host'); +var port = process.env.PORT || hfc.getConfigSetting('port'); /////////////////////////////////////////////////////////////////////////////// //////////////////////////////// SET CONFIGURATONS //////////////////////////// /////////////////////////////////////////////////////////////////////////////// @@ -118,7 +121,7 @@ app.post('/users', function(req, res) { return; } var token = jwt.sign({ - exp: Math.floor(Date.now() / 1000) + parseInt(config.jwt_expiretime), + exp: Math.floor(Date.now() / 1000) + parseInt(hfc.getConfigSetting('jwt_expiretime')), username: username, orgName: orgName }, app.get('secret')); @@ -235,10 +238,6 @@ app.post('/channels/:channelName/chaincodes', function(req, res) { res.json(getErrorMessage('\'channelName\'')); return; } - if (!fcn) { - res.json(getErrorMessage('\'fcn\'')); - return; - } if (!args) { res.json(getErrorMessage('\'args\'')); return; @@ -260,10 +259,6 @@ app.post('/channels/:channelName/chaincodes/:chaincodeName', function(req, res) logger.debug('chaincodeName : ' + chaincodeName); logger.debug('fcn : ' + fcn); logger.debug('args : ' + args); - if (!peers || peers.length == 0) { - res.json(getErrorMessage('\'peers\'')); - return; - } if (!chaincodeName) { res.json(getErrorMessage('\'chaincodeName\'')); return; diff --git a/balance-transfer/app/helper.js b/balance-transfer/app/helper.js index 5cda95a9..8a227f74 100644 --- a/balance-transfer/app/helper.js +++ b/balance-transfer/app/helper.js @@ -24,10 +24,8 @@ var fs = require('fs-extra'); var User = require('fabric-client/lib/User.js'); var crypto = require('crypto'); var copService = require('fabric-ca-client'); -var config = require('../config.json'); var hfc = require('fabric-client'); -hfc.addConfigFile(path.join(__dirname, 'network-config.json')); hfc.setLogger(logger); var ORGS = hfc.getConfigSetting('network-config'); @@ -44,7 +42,7 @@ for (let key in ORGS) { cryptoSuite.setCryptoKeyStore(hfc.newCryptoKeyStore({path: getKeyStoreForOrg(ORGS[key].name)})); client.setCryptoSuite(cryptoSuite); - let channel = client.newChannel(config.channelName); + let channel = client.newChannel(hfc.getConfigSetting('channelName')); channel.addOrderer(newOrderer(client)); clients[key] = client; @@ -58,19 +56,18 @@ for (let key in ORGS) { } function setupPeers(channel, org, client) { - for (let key in ORGS[org]) { - if (key.indexOf('peer') === 0) { - let data = fs.readFileSync(path.join(__dirname, ORGS[org][key]['tls_cacerts'])); - let peer = client.newPeer( - ORGS[org][key].requests, - { - pem: Buffer.from(data).toString(), - 'ssl-target-name-override': ORGS[org][key]['server-hostname'] - } - ); + for (let key in ORGS[org].peers) { + let data = fs.readFileSync(path.join(__dirname, ORGS[org].peers[key]['tls_cacerts'])); + let peer = client.newPeer( + ORGS[org].peers[key].requests, + { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[org].peers[key]['server-hostname'] + } + ); + peer.setName(key); - channel.addPeer(peer); - } + channel.addPeer(peer); } } @@ -78,7 +75,7 @@ function newOrderer(client) { var caRootsPath = ORGS.orderer.tls_cacerts; let data = fs.readFileSync(path.join(__dirname, caRootsPath)); let caroots = Buffer.from(data).toString(); - return client.newOrderer(config.orderer, { + return client.newOrderer(ORGS.orderer.url, { 'pem': caroots, 'ssl-target-name-override': ORGS.orderer['server-hostname'] }); @@ -100,60 +97,36 @@ function getOrgName(org) { } function getKeyStoreForOrg(org) { - return config.keyValueStore + '_' + org; + return hfc.getConfigSetting('keyValueStore') + '_' + org; } -function newRemotes(urls, forPeers, userOrg) { - var targets = []; - // find the peer that match the urls - outer: - for (let index in urls) { - let peerUrl = urls[index]; +function newRemotes(names, forPeers, userOrg) { + let client = getClientForOrg(userOrg); - let found = false; - for (let key in ORGS) { - if (key.indexOf('org') === 0) { - // if looking for event hubs, an app can only connect to - // event hubs in its own org - if (!forPeers && key !== userOrg) { - continue; - } + let targets = []; + // find the peer that match the names + for (let idx in names) { + let peerName = names[idx]; + if (ORGS[userOrg].peers[peerName]) { + // found a peer matching the name + let data = fs.readFileSync(path.join(__dirname, ORGS[userOrg].peers[peerName]['tls_cacerts'])); + let grpcOpts = { + pem: Buffer.from(data).toString(), + 'ssl-target-name-override': ORGS[userOrg].peers[peerName]['server-hostname'] + }; - let org = ORGS[key]; - let client = getClientForOrg(key); - - for (let prop in org) { - if (prop.indexOf('peer') === 0) { - if (org[prop]['requests'].indexOf(peerUrl) >= 0) { - // found a peer matching the subject url - if (forPeers) { - let data = fs.readFileSync(path.join(__dirname, org[prop]['tls_cacerts'])); - targets.push(client.newPeer('grpcs://' + peerUrl, { - pem: Buffer.from(data).toString(), - 'ssl-target-name-override': org[prop]['server-hostname'] - })); - - continue outer; - } else { - let eh = client.newEventHub(); - let data = fs.readFileSync(path.join(__dirname, org[prop]['tls_cacerts'])); - eh.setPeerAddr(org[prop]['events'], { - pem: Buffer.from(data).toString(), - 'ssl-target-name-override': org[prop]['server-hostname'] - }); - targets.push(eh); - - continue outer; - } - } - } - } + if (forPeers) { + targets.push(client.newPeer(ORGS[userOrg].peers[peerName].requests, grpcOpts)); + } else { + let eh = client.newEventHub(); + eh.setPeerAddr(ORGS[userOrg].peers[peerName].events, grpcOpts); + targets.push(eh); } } + } - if (!found) { - logger.error(util.format('Failed to find a peer matching the url %s', peerUrl)); - } + if (targets.length === 0) { + logger.error(util.format('Failed to find peers matching the names %s', names)); } return targets; @@ -170,12 +143,12 @@ var getClientForOrg = function(org) { return clients[org]; }; -var newPeers = function(urls) { - return newRemotes(urls, true); +var newPeers = function(names, org) { + return newRemotes(names, true, org); }; -var newEventHubs = function(urls, org) { - return newRemotes(urls, false, org); +var newEventHubs = function(names, org) { + return newRemotes(names, false, org); }; var getMspID = function(org) { @@ -184,7 +157,7 @@ var getMspID = function(org) { }; var getAdminUser = function(userOrg) { - var users = config.users; + var users = hfc.getConfigSetting('admins'); var username = users[0].username; var password = users[0].secret; var member; @@ -325,7 +298,7 @@ var getOrgAdmin = function(userOrg) { }; var setupChaincodeDeploy = function() { - process.env.GOPATH = path.join(__dirname, config.GOPATH); + process.env.GOPATH = path.join(__dirname, hfc.getConfigSetting('CC_SRC_PATH')); }; var getLogger = function(moduleName) { @@ -334,11 +307,6 @@ var getLogger = function(moduleName) { return logger; }; -var getPeerAddressByName = function(org, peer) { - var address = ORGS[org][peer].requests; - return address.split('grpcs://')[1]; -}; - exports.getChannelForOrg = getChannelForOrg; exports.getClientForOrg = getClientForOrg; exports.getLogger = getLogger; @@ -347,6 +315,5 @@ exports.getMspID = getMspID; exports.ORGS = ORGS; exports.newPeers = newPeers; exports.newEventHubs = newEventHubs; -exports.getPeerAddressByName = getPeerAddressByName; exports.getRegisteredUsers = getRegisteredUsers; exports.getOrgAdmin = getOrgAdmin; diff --git a/balance-transfer/app/install-chaincode.js b/balance-transfer/app/install-chaincode.js index fc408d77..6f72b6d7 100644 --- a/balance-transfer/app/install-chaincode.js +++ b/balance-transfer/app/install-chaincode.js @@ -32,7 +32,7 @@ var installChaincode = function(peers, chaincodeName, chaincodePath, return helper.getOrgAdmin(org).then((user) => { var request = { - targets: helper.newPeers(peers), + targets: helper.newPeers(peers, org), chaincodePath: chaincodePath, chaincodeId: chaincodeName, chaincodeVersion: chaincodeVersion diff --git a/balance-transfer/app/instantiate-chaincode.js b/balance-transfer/app/instantiate-chaincode.js index 312eb6b6..decedbfc 100644 --- a/balance-transfer/app/instantiate-chaincode.js +++ b/balance-transfer/app/instantiate-chaincode.js @@ -20,10 +20,8 @@ var util = require('util'); var hfc = require('fabric-client'); var Peer = require('fabric-client/lib/Peer.js'); var EventHub = require('fabric-client/lib/EventHub.js'); -var config = require('../config.json'); var helper = require('./helper.js'); var logger = helper.getLogger('instantiate-chaincode'); -hfc.addConfigFile(path.join(__dirname, 'network-config.json')); var ORGS = hfc.getConfigSetting('network-config'); var tx_id = null; var eh = null; @@ -49,10 +47,13 @@ var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion var request = { chaincodeId: chaincodeName, chaincodeVersion: chaincodeVersion, - fcn: functionName, args: args, txId: tx_id }; + + if (functionName) + request.fcn = functionName; + return channel.sendInstantiateProposal(request); }, (err) => { logger.error('Failed to initialize the channel'); @@ -88,12 +89,12 @@ var instantiateChaincode = function(channelName, chaincodeName, chaincodeVersion var deployId = tx_id.getTransactionID(); eh = client.newEventHub(); - let data = fs.readFileSync(path.join(__dirname, ORGS[org]['peer1'][ + let data = fs.readFileSync(path.join(__dirname, ORGS[org].peers['peer1'][ 'tls_cacerts' ])); - eh.setPeerAddr(ORGS[org]['peer1']['events'], { + eh.setPeerAddr(ORGS[org].peers['peer1']['events'], { pem: Buffer.from(data).toString(), - 'ssl-target-name-override': ORGS[org]['peer1']['server-hostname'] + 'ssl-target-name-override': ORGS[org].peers['peer1']['server-hostname'] }); eh.connect(); diff --git a/balance-transfer/app/invoke-transaction.js b/balance-transfer/app/invoke-transaction.js index 54098083..2a63d7fb 100644 --- a/balance-transfer/app/invoke-transaction.js +++ b/balance-transfer/app/invoke-transaction.js @@ -19,18 +19,16 @@ var fs = require('fs'); var util = require('util'); var hfc = require('fabric-client'); var Peer = require('fabric-client/lib/Peer.js'); -var config = require('../config.json'); var helper = require('./helper.js'); var logger = helper.getLogger('invoke-chaincode'); var EventHub = require('fabric-client/lib/EventHub.js'); -hfc.addConfigFile(path.join(__dirname, 'network-config.json')); var ORGS = hfc.getConfigSetting('network-config'); -var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args, username, org) { +var invokeChaincode = function(peerNames, channelName, chaincodeName, fcn, args, username, org) { logger.debug(util.format('\n============ invoke transaction on organization %s ============\n', org)); var client = helper.getClientForOrg(org); var channel = helper.getChannelForOrg(org); - var targets = helper.newPeers(peersUrls); + var targets = (peerNames) ? helper.newPeers(peerNames, org) : undefined; var tx_id = null; return helper.getRegisteredUsers(username, org).then((user) => { @@ -38,13 +36,16 @@ var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args, logger.debug(util.format('Sending transaction "%j"', tx_id)); // send proposal to endorser var request = { - targets: targets, chaincodeId: chaincodeName, fcn: fcn, args: args, chainId: channelName, txId: tx_id }; + + if (targets) + request.targets = targets; + return channel.sendTransactionProposal(request); }, (err) => { logger.error('Failed to enroll user \'' + username + '\'. ' + err); @@ -80,7 +81,13 @@ var invokeChaincode = function(peersUrls, channelName, chaincodeName, fcn, args, var transactionID = tx_id.getTransactionID(); var eventPromises = []; - var eventhubs = helper.newEventHubs(peersUrls, org); + if (!peerNames) { + peerNames = channel.getPeers().map(function(peer) { + return peer.getName(); + }); + } + + var eventhubs = helper.newEventHubs(peerNames, org); for (let key in eventhubs) { let eh = eventhubs[key]; eh.connect(); diff --git a/balance-transfer/app/join-channel.js b/balance-transfer/app/join-channel.js index cb86a8e4..5e174c9a 100644 --- a/balance-transfer/app/join-channel.js +++ b/balance-transfer/app/join-channel.js @@ -67,27 +67,16 @@ var joinChannel = function(channelName, peers, username, org) { }).then((genesis_block) => { tx_id = client.newTransactionID(); var request = { - targets: helper.newPeers(peers), + targets: helper.newPeers(peers, org), txId: tx_id, block: genesis_block }; - for (let key in ORGS[org]) { - if (ORGS[org].hasOwnProperty(key)) { - if (key.indexOf('peer') === 0) { - let data = fs.readFileSync(path.join(__dirname, ORGS[org][key][ - 'tls_cacerts' - ])); - let eh = client.newEventHub(); - eh.setPeerAddr(ORGS[org][key].events, { - pem: Buffer.from(data).toString(), - 'ssl-target-name-override': ORGS[org][key]['server-hostname'] - }); - eh.connect(); - eventhubs.push(eh); - allEventhubs.push(eh); - } - } + eventhubs = helper.newEventHubs(peers, org); + for (let key in eventhubs) { + let eh = eventhubs[key]; + eh.connect(); + allEventhubs.push(eh); } var eventPromises = []; diff --git a/balance-transfer/app/network-config-aws.json b/balance-transfer/app/network-config-aws.json new file mode 100644 index 00000000..310cfbe9 --- /dev/null +++ b/balance-transfer/app/network-config-aws.json @@ -0,0 +1,55 @@ +{ + "network-config": { + "orderer": { + "url": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7050", + "server-hostname": "orderer.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/ca.crt" + }, + "org1": { + "name": "peerOrg1", + "mspid": "Org1MSP", + "ca": "https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7054", + "peers": { + "peer1": { + "requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7051", + "events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7053", + "server-hostname": "peer0.org1.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" + }, + "peer2": { + "requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7056", + "events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:7058", + "server-hostname": "peer1.org1.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" + } + }, + "admin": { + "key": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", + "cert": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts" + } + }, + "org2": { + "name": "peerOrg2", + "mspid": "Org2MSP", + "ca": "https://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8054", + "peers": { + "peer1": { + "requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8051", + "events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8053", + "server-hostname": "peer0.org2.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" + }, + "peer2": { + "requests": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8056", + "events": "grpc://ec2-13-59-99-140.us-east-2.compute.amazonaws.com:8058", + "server-hostname": "peer1.org2.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" + } + }, + "admin": { + "key": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore", + "cert": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts" + } + } + } +} diff --git a/balance-transfer/app/network-config.json b/balance-transfer/app/network-config.json index b305d20a..80289fa7 100644 --- a/balance-transfer/app/network-config.json +++ b/balance-transfer/app/network-config.json @@ -9,17 +9,19 @@ "name": "peerOrg1", "mspid": "Org1MSP", "ca": "https://localhost:7054", - "peer1": { - "requests": "grpcs://localhost:7051", - "events": "grpcs://localhost:7053", - "server-hostname": "peer0.org1.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" - }, - "peer2": { - "requests": "grpcs://localhost:7056", - "events": "grpcs://localhost:7058", - "server-hostname": "peer1.org1.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" + "peers": { + "peer1": { + "requests": "grpcs://localhost:7051", + "events": "grpcs://localhost:7053", + "server-hostname": "peer0.org1.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" + }, + "peer2": { + "requests": "grpcs://localhost:7056", + "events": "grpcs://localhost:7058", + "server-hostname": "peer1.org1.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt" + } }, "admin": { "key": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore", @@ -30,17 +32,19 @@ "name": "peerOrg2", "mspid": "Org2MSP", "ca": "https://localhost:8054", - "peer1": { - "requests": "grpcs://localhost:8051", - "events": "grpcs://localhost:8053", - "server-hostname": "peer0.org2.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" - }, - "peer2": { - "requests": "grpcs://localhost:8056", - "events": "grpcs://localhost:8058", - "server-hostname": "peer1.org2.example.com", - "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" + "peers": { + "peer1": { + "requests": "grpcs://localhost:8051", + "events": "grpcs://localhost:8053", + "server-hostname": "peer0.org2.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" + }, + "peer2": { + "requests": "grpcs://localhost:8056", + "events": "grpcs://localhost:8058", + "server-hostname": "peer1.org2.example.com", + "tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.crt" + } }, "admin": { "key": "../artifacts/channel/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore", diff --git a/balance-transfer/app/query.js b/balance-transfer/app/query.js index ddf2eddf..ef8676b1 100644 --- a/balance-transfer/app/query.js +++ b/balance-transfer/app/query.js @@ -261,7 +261,7 @@ var getChannels = function(peer, username, org) { function buildTarget(peer, org) { var target = null; if (typeof peer !== 'undefined') { - let targets = helper.newPeers([helper.getPeerAddressByName(org, peer)]); + let targets = helper.newPeers([peer], org); if (targets && targets.length > 0) target = targets[0]; } diff --git a/balance-transfer/config.js b/balance-transfer/config.js new file mode 100644 index 00000000..3ff928f7 --- /dev/null +++ b/balance-transfer/config.js @@ -0,0 +1,14 @@ +var util = require('util'); +var path = require('path'); +var hfc = require('fabric-client'); + +var file = 'network-config%s.json'; + +var env = process.env.TARGET_NETWORK; +if (env) + file = util.format(file, '-' + env); +else + file = util.format(file, ''); + +hfc.addConfigFile(path.join(__dirname, 'app', file)); +hfc.addConfigFile(path.join(__dirname, 'config.json')); \ No newline at end of file diff --git a/balance-transfer/config.json b/balance-transfer/config.json index e490a04f..d2fe9c0b 100644 --- a/balance-transfer/config.json +++ b/balance-transfer/config.json @@ -3,11 +3,10 @@ "port":"4000", "jwt_expiretime": "36000", "channelName":"mychannel", - "GOPATH":"../artifacts", + "CC_SRC_PATH":"../artifacts", "keyValueStore":"/tmp/fabric-client-kvs", "eventWaitTime":"30000", - "orderer":"grpcs://localhost:7050", - "users":[ + "admins":[ { "username":"admin", "secret":"adminpw" diff --git a/balance-transfer/package.json b/balance-transfer/package.json index 555cfc34..f95a80be 100644 --- a/balance-transfer/package.json +++ b/balance-transfer/package.json @@ -2,15 +2,18 @@ "name": "balance-transfer", "version": "1.0.0", "description": "A balance-transfer example node program to demonstrate using node.js SDK APIs", - "main": "app/app.js", + "main": "app.js", + "scripts": { + "start": "node app.js" + }, "keywords": [ "fabric-client sample app", "balance-transfer node sample", "v1.0 fabric nodesdk sample" ], "engines": { - "node": ">=6.9.5", - "npm": ">=3.10.10" + "node": ">=6.9.5 <7.0", + "npm": ">=3.10.10 <4.0" }, "license": "Apache-2.0", "dependencies": { diff --git a/balance-transfer/testAPIs.sh b/balance-transfer/testAPIs.sh index 918c6e44..ab0d7eb8 100755 --- a/balance-transfer/testAPIs.sh +++ b/balance-transfer/testAPIs.sh @@ -56,7 +56,7 @@ curl -s -X POST \ -H "authorization: Bearer $ORG1_TOKEN" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051","localhost:7056"] + "peers": ["peer1","peer2"] }' echo echo @@ -68,7 +68,7 @@ curl -s -X POST \ -H "authorization: Bearer $ORG2_TOKEN" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:8051","localhost:8056"] + "peers": ["peer1","peer2"] }' echo echo @@ -80,7 +80,7 @@ curl -s -X POST \ -H "authorization: Bearer $ORG1_TOKEN" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051","localhost:7056"], + "peers": ["peer1", "peer2"], "chaincodeName":"mycc", "chaincodePath":"github.com/example_cc", "chaincodeVersion":"v0" @@ -96,7 +96,7 @@ curl -s -X POST \ -H "authorization: Bearer $ORG2_TOKEN" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:8051","localhost:8056"], + "peers": ["peer1","peer2"], "chaincodeName":"mycc", "chaincodePath":"github.com/example_cc", "chaincodeVersion":"v0" @@ -113,7 +113,6 @@ curl -s -X POST \ -d '{ "chaincodeName":"mycc", "chaincodeVersion":"v0", - "fcn":"init", "args":["a","100","b","200"] }' echo @@ -126,7 +125,6 @@ TRX_ID=$(curl -s -X POST \ -H "authorization: Bearer $ORG1_TOKEN" \ -H "content-type: application/json" \ -d '{ - "peers": ["localhost:7051", "localhost:8051"], "fcn":"move", "args":["a","b","10"] }') From 592114010ec6ee747090c6398840fafbae7daf33 Mon Sep 17 00:00:00 2001 From: dsanchezseco Date: Thu, 3 Aug 2017 12:18:50 +0200 Subject: [PATCH 11/16] [FAB-5576] -f flag to choose docker-compose on byfn.sh Using the -f flag is possible to specify the docker-compose file to use on the byfn.sh script to have a standar way to test the different configurations for the samples project. The defautl is 'docker-compose-cli.yaml' -h output updated as well. Fix Issue # FAB-5576. Change-Id: I8766ab930f05d9c4934b149872b9de3a299ff345 Signed-off-by: dsanchezseco --- first-network/byfn.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/first-network/byfn.sh b/first-network/byfn.sh index ffcc5392..d2d2af51 100755 --- a/first-network/byfn.sh +++ b/first-network/byfn.sh @@ -34,7 +34,7 @@ export FABRIC_CFG_PATH=${PWD} # Print the usage message function printHelp () { echo "Usage: " - echo " byfn.sh -m up|down|restart|generate [-c ] [-t ] [-d ] " + echo " byfn.sh -m up|down|restart|generate [-c ] [-t ] [-d ] [-f ]" echo " byfn.sh -h|--help (print this message)" echo " -m - one of 'up', 'down', 'restart' or 'generate'" echo " - 'up' - bring up the network with docker-compose up" @@ -44,6 +44,7 @@ function printHelp () { echo " -c - channel name to use (defaults to \"mychannel\")" echo " -t - CLI timeout duration in microseconds (defaults to 10000)" echo " -d - delay duration in seconds (defaults to 3)" + echo " -f - specify which docker-compose file use (defaults to docker-compose-cli.yaml)" echo echo "Typically, one would first generate the required certificates and " echo "genesis block, then bring up the network. e.g.:" @@ -318,6 +319,8 @@ while getopts "h?m:c:t:d:" opt; do ;; d) CLI_DELAY=$OPTARG ;; + f) COMPOSE_FILE=$OPTARG + ;; esac done From be773d2015592b399e554e52ec357105a81deb63 Mon Sep 17 00:00:00 2001 From: dsanchezseco Date: Thu, 3 Aug 2017 20:16:27 +0200 Subject: [PATCH 12/16] [FAB-5603] fixed missing f option on switch fixed the unrecognized option on byfn.sh script when providing the docker-compose file to start the network Fix Issue # FAB-5603 Change-Id: I74234c53d8f82cbf2678f80aa3a898c3ec51c422 Signed-off-by: dsanchezseco --- first-network/byfn.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/first-network/byfn.sh b/first-network/byfn.sh index d2d2af51..535bbf94 100755 --- a/first-network/byfn.sh +++ b/first-network/byfn.sh @@ -305,7 +305,7 @@ CHANNEL_NAME="mychannel" COMPOSE_FILE=docker-compose-cli.yaml # Parse commandline args -while getopts "h?m:c:t:d:" opt; do +while getopts "h?m:c:t:d:f:" opt; do case "$opt" in h|\?) printHelp From 2571c960a863792a5b5b28fbf957db312f6d655c Mon Sep 17 00:00:00 2001 From: Artem Barger Date: Sun, 6 Aug 2017 12:54:26 +0300 Subject: [PATCH 13/16] [FAB-56431]: Add dependency for couchdb into peer. Currently peer and couchdb containers started simulateously, while clearly peer depends on availability of the state db, therfore this commit add dependency declaration into docker-compose.yaml file to make sure to start couchdb before peer container. Change-Id: Id2302a32fba9234d04ef3f4e6bd24ac92a766995 Signed-off-by: Artem Barger --- .../org1.example.com/ca/org1.example.com-cert.pem | 14 +++++++------- basic-network/docker-compose.yml | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/org1.example.com-cert.pem b/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/org1.example.com-cert.pem index 35b927ae..91cc85e8 100644 --- a/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/org1.example.com-cert.pem +++ b/basic-network/crypto-config/peerOrganizations/org1.example.com/ca/org1.example.com-cert.pem @@ -1,14 +1,14 @@ -----BEGIN CERTIFICATE----- -MIICFzCCAb2gAwIBAgIUTtBERRtj53mS3poZ2N1Enigcf3wwCgYIKoZIzj0EAwIw +MIICFjCCAb2gAwIBAgIUK7b5iTNHRYriNccrvzxXjYvXENkwCgYIKoZIzj0EAwIw aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK EwtIeXBlcmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMt -Y2Etc2VydmVyMB4XDTE3MDYyOTE5MzIwMFoXDTMyMDYyNTE5MzIwMFowaDELMAkG +Y2Etc2VydmVyMB4XDTE3MDgwNjA5NDMwMFoXDTMyMDgwMjA5NDMwMFowaDELMAkG A1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQKEwtIeXBl cmxlZGdlcjEPMA0GA1UECxMGRmFicmljMRkwFwYDVQQDExBmYWJyaWMtY2Etc2Vy -dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEH8fsI6vVIVn2j3jXpwKkM79/ -LGy0Z9UeHA0JQcbAhOMaf5w+arqXgw+ZQkASAfaoRjozYZA39jSS/EE1XZI6HqNF +dmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvbZZ9gSMveMg6dQ2f3hGRE4Q +JE++GbwJXYCjiwqDt9xJ4s/wuLhOEqKzYkhntdvLaUH5zJWFRyy/5LQ5BV2/AKNF MEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQEwHQYDVR0OBBYE -FBo/MF+TauY0epUtCphNSvUDTX1EMAoGCCqGSM49BAMCA0gAMEUCIQCM21QC+8ru -8M4LwF8aTMyzpoYm1UqX8ndhrwYpcglATgIgd67Lr3baI+NQoM1G8hNpTe2+OUoS -H/fG3eOymx90eOE= +FPDCv6nfcXF2u42xfz/l4bKjjWrkMAoGCCqGSM49BAMCA0cAMEQCIAOrX7gTfZF5 +5s0jhv/niBAgCFrZqNcmVqLI2ycPyZ1QAiBeguVoBfUfZ6saQDNqyzm55rwoUNhl +1jnpnbjkbup3wA== -----END CERTIFICATE----- diff --git a/basic-network/docker-compose.yml b/basic-network/docker-compose.yml index 454c13bc..b15b14e9 100644 --- a/basic-network/docker-compose.yml +++ b/basic-network/docker-compose.yml @@ -74,6 +74,7 @@ services: - ./config:/etc/hyperledger/configtx depends_on: - orderer.example.com + - couchdb networks: - basic From 7f1c2f4225b0b469f2ead1a1312b3f8a12ff78b4 Mon Sep 17 00:00:00 2001 From: rameshbabu Date: Thu, 29 Jun 2017 14:38:45 +0000 Subject: [PATCH 14/16] FAB-5056 enable couchdb test in byfn e2e script update byfn.sh script to enable couchdb tests. Follow the below steps from first-network dir ./byfn.sh -m generate -c ibmblockchain ./byfn.sh -m up -c ibmblockchain -s couchdb ./byfn.sh -m down Change-Id: If84e744b35a96fa1ed314dff0abf845ab363fcbb Signed-off-by: rameshbabu --- first-network/byfn.sh | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/first-network/byfn.sh b/first-network/byfn.sh index 535bbf94..e335fd00 100755 --- a/first-network/byfn.sh +++ b/first-network/byfn.sh @@ -1,5 +1,6 @@ #!/bin/bash -# + +# # Copyright IBM Corp All Rights Reserved # # SPDX-License-Identifier: Apache-2.0 @@ -34,7 +35,7 @@ export FABRIC_CFG_PATH=${PWD} # Print the usage message function printHelp () { echo "Usage: " - echo " byfn.sh -m up|down|restart|generate [-c ] [-t ] [-d ] [-f ]" + echo " byfn.sh -m up|down|restart|generate [-c ] [-t ] [-d ] [-f ] [-s ]" echo " byfn.sh -h|--help (print this message)" echo " -m - one of 'up', 'down', 'restart' or 'generate'" echo " - 'up' - bring up the network with docker-compose up" @@ -45,13 +46,14 @@ function printHelp () { echo " -t - CLI timeout duration in microseconds (defaults to 10000)" echo " -d - delay duration in seconds (defaults to 3)" echo " -f - specify which docker-compose file use (defaults to docker-compose-cli.yaml)" + echo " -s - the database backend to use: goleveldb (default) or couchdb" echo echo "Typically, one would first generate the required certificates and " echo "genesis block, then bring up the network. e.g.:" echo - echo " byfn.sh -m generate -c " - echo " byfn.sh -m up -c " - echo " byfn.sh -m down -c " + echo " byfn.sh -m generate -c mychannel" + echo " byfn.sh -m up -c mychannel -s couchdb" + echo " byfn.sh -m down -c mychannel" echo echo "Taking all defaults:" echo " byfn.sh -m generate" @@ -109,6 +111,11 @@ function networkUp () { generateChannelArtifacts fi CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT DELAY=$CLI_DELAY docker-compose -f $COMPOSE_FILE up -d 2>&1 + if [ "${IF_COUCHDB}" == "couchdb" ]; then + CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1 + else + CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1 + fi if [ $? -ne 0 ]; then echo "ERROR !!!! Unable to start network" docker logs -f cli @@ -120,6 +127,7 @@ function networkUp () { # Tear down running network function networkDown () { docker-compose -f $COMPOSE_FILE down + docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH down # Don't remove containers, images, etc if restarting if [ "$MODE" != "restart" ]; then #Cleanup the chaincode containers @@ -303,9 +311,11 @@ CLI_DELAY=3 CHANNEL_NAME="mychannel" # use this as the default docker-compose yaml definition COMPOSE_FILE=docker-compose-cli.yaml +# +COMPOSE_FILE_COUCH=docker-compose-couch.yaml # Parse commandline args -while getopts "h?m:c:t:d:f:" opt; do +while getopts "h?m:c:t:d:f:s:" opt; do case "$opt" in h|\?) printHelp @@ -321,6 +331,8 @@ while getopts "h?m:c:t:d:f:" opt; do ;; f) COMPOSE_FILE=$OPTARG ;; + s) IF_COUCHDB=$OPTARG + ;; esac done @@ -339,8 +351,13 @@ else fi # Announce what was requested -echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}'" + if [ "${IF_COUCHDB}" == "couchdb" ]; then + echo + echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}' using database '${IF_COUCHDB}'" + else + echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}'" + fi # ask for confirmation to proceed askProceed @@ -349,7 +366,7 @@ if [ "${MODE}" == "up" ]; then networkUp elif [ "${MODE}" == "down" ]; then ## Clear the network networkDown -elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts + elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts generateCerts replacePrivateKey generateChannelArtifacts From 7cca09f0470eceabc233018e7a9ae48a88487218 Mon Sep 17 00:00:00 2001 From: rameshthoomu Date: Fri, 11 Aug 2017 17:09:08 -0400 Subject: [PATCH 15/16] FAB-5759 fix byfn e2e test failures Remove docker-compose script to fix the byfn e2e test failures Change-Id: Iee560b73f5fe535120ee888a816646d3aba224ed Signed-off-by: rameshthoomu --- first-network/byfn.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/first-network/byfn.sh b/first-network/byfn.sh index e335fd00..46c41735 100755 --- a/first-network/byfn.sh +++ b/first-network/byfn.sh @@ -110,11 +110,10 @@ function networkUp () { replacePrivateKey generateChannelArtifacts fi - CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT DELAY=$CLI_DELAY docker-compose -f $COMPOSE_FILE up -d 2>&1 if [ "${IF_COUCHDB}" == "couchdb" ]; then - CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1 + CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT DELAY=$CLI_DELAY docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH up -d 2>&1 else - CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT docker-compose -f $COMPOSE_FILE up -d 2>&1 + CHANNEL_NAME=$CHANNEL_NAME TIMEOUT=$CLI_TIMEOUT DELAY=$CLI_DELAY docker-compose -f $COMPOSE_FILE up -d 2>&1 fi if [ $? -ne 0 ]; then echo "ERROR !!!! Unable to start network" From ba0a098ca6b35f9bb2d9d387f1aeadcfd906358d Mon Sep 17 00:00:00 2001 From: Gari Singh Date: Thu, 31 Aug 2017 05:18:03 -0400 Subject: [PATCH 16/16] FAB-5995 Update samples to work with v1.0.2 basic network: - update docker-compose.yaml to use v1.0.2 - regenerate artifacts fabcar: - update creds chaincode-docker-devmode: - renegerate channel tx and genesis block balance-transfer: - update docker-compose.yaml - update readme to use download link - regenerate channel artifacts Change-Id: I7d52f1afce51ea9e1b115fa287d281af95d9ad85 Signed-off-by: Gari Singh --- balance-transfer/README.md | 3 +- balance-transfer/artifacts/base.yaml | 2 +- .../artifacts/channel/genesis.block | Bin 9072 -> 9089 bytes .../artifacts/channel/mychannel.tx | Bin 369 -> 394 bytes .../artifacts/docker-compose.yaml | 6 ++-- basic-network/config/channel.tx | Bin 369 -> 368 bytes basic-network/config/genesis.block | Bin 9072 -> 6360 bytes ...0cdb202c4943604f95c72ee0ff839d3ec300719_sk | 5 ---- ...da6f3b6b74925ed0d23061af4899409ba46ae6a_sk | 5 ++++ .../example.com/ca/ca.example.com-cert.pem | 14 ++++----- .../msp/admincerts/Admin@example.com-cert.pem | 22 +++++++------- .../msp/cacerts/ca.example.com-cert.pem | 14 ++++----- .../msp/tlscacerts/tlsca.example.com-cert.pem | 24 ++++++++-------- .../msp/admincerts/Admin@example.com-cert.pem | 22 +++++++------- .../msp/cacerts/ca.example.com-cert.pem | 14 ++++----- ...8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk | 5 ---- ...558dc7859c4fe458e262e674a6c23f242ea33d1_sk | 5 ++++ .../signcerts/orderer.example.com-cert.pem | 15 +++++----- .../msp/tlscacerts/tlsca.example.com-cert.pem | 24 ++++++++-------- .../orderers/orderer.example.com/tls/ca.crt | 24 ++++++++-------- .../orderer.example.com/tls/server.crt | 26 ++++++++--------- .../orderer.example.com/tls/server.key | 6 ++-- ...77809902713b8e321a5ab55ecc104dafc2eec49_sk | 5 ---- ...a8d0d7672785b685cb503bcb95e53dcc279fba7_sk | 5 ++++ .../tlsca/tlsca.example.com-cert.pem | 24 ++++++++-------- .../msp/admincerts/Admin@example.com-cert.pem | 22 +++++++------- .../msp/cacerts/ca.example.com-cert.pem | 14 ++++----- ...09d6165268fba153211af1281f00d45f54b1022_sk | 5 ++++ ...f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk | 5 ---- .../msp/signcerts/Admin@example.com-cert.pem | 22 +++++++------- .../msp/tlscacerts/tlsca.example.com-cert.pem | 24 ++++++++-------- .../users/Admin@example.com/tls/ca.crt | 24 ++++++++-------- .../users/Admin@example.com/tls/server.crt | 14 ++++----- .../users/Admin@example.com/tls/server.key | 6 ++-- ...b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk | 5 ---- ...01851d14504d31aad1b2ddddbac6a57365e497c_sk | 5 ++++ .../ca/ca.org1.example.com-cert.pem | 26 ++++++++--------- .../ca/org1.example.com-cert.pem | 14 ++++----- .../Admin@org1.example.com-cert.pem | 16 +++++------ .../msp/cacerts/ca.org1.example.com-cert.pem | 26 ++++++++--------- .../tlsca.org1.example.com-cert.pem | 26 ++++++++--------- .../Admin@org1.example.com-cert.pem | 16 +++++------ .../msp/cacerts/ca.org1.example.com-cert.pem | 26 ++++++++--------- ...80e5cce249beaab27b70c741bb0e2554355957e_sk | 5 ---- ...72a0ccfbfb42727480fb8c8d0223af321a7893d_sk | 5 ++++ .../signcerts/peer0.org1.example.com-cert.pem | 24 ++++++++-------- .../tlsca.org1.example.com-cert.pem | 26 ++++++++--------- .../peers/peer0.org1.example.com/tls/ca.crt | 26 ++++++++--------- .../peer0.org1.example.com/tls/server.crt | 27 +++++++++--------- .../peer0.org1.example.com/tls/server.key | 6 ++-- ...b974d857933706737d00d04bf65f74e3976f9f8_sk | 5 ---- ...3c8d2c591f745d1babc4d6d9cce0a1acc168acb_sk | 5 ++++ .../tlsca/tlsca.org1.example.com-cert.pem | 26 ++++++++--------- .../Admin@org1.example.com-cert.pem | 16 +++++------ .../msp/cacerts/ca.org1.example.com-cert.pem | 26 ++++++++--------- ...304edecc020fe63f41a6db109f1e227cc1cb2a8_sk | 5 ---- ...91e62130f8008a0bf996e4e4b84cd097a747fec_sk | 5 ++++ .../signcerts/Admin@org1.example.com-cert.pem | 16 +++++------ .../tlsca.org1.example.com-cert.pem | 26 ++++++++--------- .../users/Admin@org1.example.com/tls/ca.crt | 26 ++++++++--------- .../Admin@org1.example.com/tls/server.crt | 24 ++++++++-------- .../Admin@org1.example.com/tls/server.key | 6 ++-- .../User1@org1.example.com-cert.pem | 24 ++++++++-------- .../msp/cacerts/ca.org1.example.com-cert.pem | 26 ++++++++--------- ...780fc84acc9752ef30ebc16be1f4666c02b614b_sk | 5 ---- ...7c97e90f3952e379497dc55eb903f31b50abc83_sk | 5 ++++ .../signcerts/User1@org1.example.com-cert.pem | 24 ++++++++-------- .../tlsca.org1.example.com-cert.pem | 26 ++++++++--------- .../users/User1@org1.example.com/tls/ca.crt | 26 ++++++++--------- .../User1@org1.example.com/tls/server.crt | 16 +++++------ .../User1@org1.example.com/tls/server.key | 6 ++-- ...d2c1375df27360d7227f48cdc2f80e505678005_sk | 5 ---- .../ca/ca.org2.example.com-cert.pem | 15 ---------- .../Admin@org2.example.com-cert.pem | 14 --------- .../msp/cacerts/ca.org2.example.com-cert.pem | 15 ---------- .../tlsca.org2.example.com-cert.pem | 15 ---------- .../Admin@org2.example.com-cert.pem | 14 --------- .../msp/cacerts/ca.org2.example.com-cert.pem | 15 ---------- ...6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk | 5 ---- .../signcerts/peer0.org2.example.com-cert.pem | 14 --------- .../tlsca.org2.example.com-cert.pem | 15 ---------- .../peers/peer0.org2.example.com/tls/ca.crt | 15 ---------- .../peer0.org2.example.com/tls/server.crt | 16 ----------- .../peer0.org2.example.com/tls/server.key | 5 ---- ...6062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk | 5 ---- .../tlsca/tlsca.org2.example.com-cert.pem | 15 ---------- .../Admin@org2.example.com-cert.pem | 14 --------- .../msp/cacerts/ca.org2.example.com-cert.pem | 15 ---------- ...fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk | 5 ---- .../signcerts/Admin@org2.example.com-cert.pem | 14 --------- .../tlsca.org2.example.com-cert.pem | 15 ---------- .../users/Admin@org2.example.com/tls/ca.crt | 15 ---------- .../Admin@org2.example.com/tls/server.crt | 14 --------- .../Admin@org2.example.com/tls/server.key | 5 ---- .../User1@org2.example.com-cert.pem | 14 --------- .../msp/cacerts/ca.org2.example.com-cert.pem | 15 ---------- ...0ff9aefa47c565678f100ca8673db249ee785ac_sk | 5 ---- .../signcerts/User1@org2.example.com-cert.pem | 14 --------- .../tlsca.org2.example.com-cert.pem | 15 ---------- .../users/User1@org2.example.com/tls/ca.crt | 15 ---------- .../User1@org2.example.com/tls/server.crt | 14 --------- .../User1@org2.example.com/tls/server.key | 5 ---- basic-network/docker-compose.yml | 10 +++---- chaincode-docker-devmode/myc.tx | Bin 334 -> 360 bytes chaincode-docker-devmode/orderer.block | Bin 6875 -> 8668 bytes ...4edecc020fe63f41a6db109f1e227cc1cb2a8-priv | 5 ---- ...04edecc020fe63f41a6db109f1e227cc1cb2a8-pub | 4 --- fabcar/creds/PeerAdmin | 2 +- ...e62130f8008a0bf996e4e4b84cd097a747fec-priv | 5 ++++ ...1e62130f8008a0bf996e4e4b84cd097a747fec-pub | 14 +++++++++ fabcar/invoke.js | 4 +-- fabcar/package.json | 4 +-- 112 files changed, 542 insertions(+), 912 deletions(-) delete mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/ca/0d46ccf0e9436c1bc3b6e2bf80cdb202c4943604f95c72ee0ff839d3ec300719_sk create mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/ca/a0606a4a860a1e31c90a23788da6f3b6b74925ed0d23061af4899409ba46ae6a_sk delete mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/2fb065725bf1b7e2811c0e8ca8d37f5a951fc4cd1162a47aad8accf9ddd10291_sk create mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/keystore/4d2f776c0fef8eac3f460a7c3558dc7859c4fe458e262e674a6c23f242ea33d1_sk delete mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/tlsca/6a211ed18880b4db3867831c977809902713b8e321a5ab55ecc104dafc2eec49_sk create mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/tlsca/8d2186556c85d515e737d0c0da8d0d7672785b685cb503bcb95e53dcc279fba7_sk create mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/1deeab5433fa6e5f045eb763109d6165268fba153211af1281f00d45f54b1022_sk delete mode 100755 basic-network/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp/keystore/db670eed8487a93c35ae448b9f84c2f241a7a8c87df0544fc1dc08baf7832aa0_sk delete mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/ca/0e729224e8b3f31784c8a93c5b8ef6f4c1c91d9e6e577c45c33163609fe40011_sk create mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/ca/4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk delete mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/27db82c96b1482480baa1c75f80e5cce249beaab27b70c741bb0e2554355957e_sk create mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/46be1d569fe68f33e517c9e0072a0ccfbfb42727480fb8c8d0223af321a7893d_sk delete mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/tlsca/945092d936f5838c5a6f6484db974d857933706737d00d04bf65f74e3976f9f8_sk create mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/tlsca/ed3fd82393e95fc2c475afc113c8d2c591f745d1babc4d6d9cce0a1acc168acb_sk delete mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8_sk create mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec_sk delete mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/73cdc0072c7203f1ec512232c780fc84acc9752ef30ebc16be1f4666c02b614b_sk create mode 100755 basic-network/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83_sk delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/ca/a7d47efa46a6ba07730c850fed2c1375df27360d7227f48cdc2f80e505678005_sk delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/keystore/0d9f72608133ee627b570b6af6877666bc8f365746f9329d6dd8a5f54e53e2ab_sk delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/signcerts/peer0.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.crt delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/server.key delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/tlsca/7bb8ba3ff11d3c8cf592bd4326062e77d06ac4963c7b7ae459284dfbd3eb5aac_sk delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/admincerts/Admin@org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/keystore/1995b11d6573ed3be52fcd7a5fa477bc0f183e1f5f398c8281d0ce7c2c75a076_sk delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/signcerts/Admin@org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/ca.crt delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.crt delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/tls/server.key delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/admincerts/User1@org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/cacerts/ca.org2.example.com-cert.pem delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/keystore/585175c83bac91fc0c1ce8f9d0ff9aefa47c565678f100ca8673db249ee785ac_sk delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/signcerts/User1@org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/msp/tlscacerts/tlsca.org2.example.com-cert.pem delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/ca.crt delete mode 100644 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.crt delete mode 100755 basic-network/crypto-config/peerOrganizations/org2.example.com/users/User1@org2.example.com/tls/server.key delete mode 100644 fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-priv delete mode 100644 fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-pub create mode 100755 fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-priv create mode 100644 fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-pub diff --git a/balance-transfer/README.md b/balance-transfer/README.md index 5db95e4d..5f37222e 100644 --- a/balance-transfer/README.md +++ b/balance-transfer/README.md @@ -8,11 +8,10 @@ A sample Node.js app to demonstrate **__fabric-client__** & **__fabric-ca-client * [Docker Compose](https://docs.docker.com/compose/overview/) - v1.8 or higher * [Git client](https://git-scm.com/downloads) - needed for clone commands * **Node.js** v6.9.0 - 6.10.0 ( __Node v7+ is not supported__ ) -* Download docker images +* [Download Docker images](http://hyperledger-fabric.readthedocs.io/en/latest/samples.html#binaries) ``` cd fabric-samples/balance-transfer/ -docker-compose -f artifacts/docker-compose.yaml pull ``` Once you have completed the above setup, you will have provisioned a local network with the following docker container configuration: diff --git a/balance-transfer/artifacts/base.yaml b/balance-transfer/artifacts/base.yaml index b4e6694b..3d15863a 100644 --- a/balance-transfer/artifacts/base.yaml +++ b/balance-transfer/artifacts/base.yaml @@ -6,7 +6,7 @@ version: '2' services: peer-base: - image: hyperledger/fabric-peer:x86_64-1.0.0 + image: hyperledger/fabric-peer environment: - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock # the following setting starts chaincode containers on the same diff --git a/balance-transfer/artifacts/channel/genesis.block b/balance-transfer/artifacts/channel/genesis.block index c818a28b82ab536d897f64f69ea5ff61f9a8c07f..07b9c8d71e844850027ec45d2b210cc6db46fad6 100644 GIT binary patch delta 364 zcmez1*63c(r6i>=~n8#dY^Jw>gnk=z1VGhrHfMLJP6##qa<{}jq9u% z*C{uyO0H-QMgc}CHjaNM)}Lin;x0)oE=kTv%*@M7(Q+_IGqp^!NHMW6Pc%+3Ff=eo zG%!grNiw%IPclw1Og2g}PfklrOfj)EOG!3NPEAX+Fpf1hF*7ttH8C+VPPH%*k`j{G z)cpR-2BRsi+a@hmo$DLw=%y8Ip%!z?TIh@`*GX5QW3ECIb-1{l^Ye=Hi%K#}bBl!< zb%eHQa|r||<`(3nA|!+sYHx1jX5*T?Q#5h1JGa{8+oC)iT5OIfxtV#z8}G1lO@1M& zGTD;bVe(c{waK~MB9oQGVnlVhpelrvg*Z4Eg;<1`gcv4!iy3X+B38;ZIZM%PvWBAL rWECZq$)A)wC;wE`X4IN|SV@0!fKt_DF=Y>+sEQEG7AX!c1_%TIS%-F# delta 366 zcmZp4|KL{7r6i?raq}{dEsJhO&ae_*F#R#tn-BS`zkaCvo6mW@{MzoLZRJAy-MIF+ zaqV>Ds^p61U=(1KV&hmbb;~JMCGL{c;*#Wy#LT?R6fFlcW1}=PLyI({B;%wsqg2Zj z!&Ea16BBdO#H7@;WP?;=OCu8lQ-c%>6U#KyM8ibWq_kKQi{xaJw8W$o6EibQAt@n= zawiAxoE^4*p7G~AaM)nqe=@oyFC$5Es?cs%t{tvITU~`3bhx;k^Ye=Hi%K#}bBl#O zXbWxA<`M`_%q_@CMMwxO)ZSdn&CWIXK9}lbJ~5uj&7!FsT5OIfxtV#z8}G1jP2MG{ zG&z%-XYvbCH83r}Z9G{@EJa*~3#v*;NQi@jQHVu|Nr*v;ZE~EL{N|%#rCgI66&)s9 pD!Na8s#r2vU0H=uYjTrPg4*f69xQPRx)udo0uF|f1FWh0V5Z;V?jYqW^!Ul zW`3T~1V#=79Oi3*&77`cY&<$`k?BPYSnI$L&g%^PZpo%8DFzNyTF+ecm delta 169 zcmeBT{>UW2^^S=vk}I5pNs5hQ{nRa|CJOkoOkm>botPX~zm8F;oso;%v7jI)GdZy& zGe1wLf`d_rn~UAQDBaLEI6#O2$}s|Sl%%-W98+>L^NNK8g!nj^g}7jR0Vbdvdw5Z1 iNorBC5Wf&FP?8fa0FnzzO-wCYFh5 zNogj@7M7M~X-SqwCPwCosV0W0CT1pm3tUBv&{GlN1}r`l(w^O%(9An83u<%f!W*TbZ1Zn3tEDBjhin$;Ith zP>_?EoLG{XpC=?G#LdO-UzBd>8yq0S0Oc4>?9!@V$0*d!h^n}PgAuE8uwEr8E;h%M z+|0aUAps#i4rU=P7+-)1D90XNlv$EmR4l|V#0!+IMxP~?JAdBGxDP$MVy Gs{jD}(mBfj diff --git a/basic-network/config/genesis.block b/basic-network/config/genesis.block index c818a28b82ab536d897f64f69ea5ff61f9a8c07f..5c47c782b8423470c9729fe206947b425b353893 100644 GIT binary patch delta 2631 zcma)-ORU^h9mac;-t=C#Rnuwiy-7$=a+|a$H`Ul4+cN_ca{L%S#vaepV;e=__l##e zo*CO?k5x6zk_~EcyFe7R6%`;rLLySt1q(KSM1=|q9s)!wp{@XdSOEgT+|mX%sOU&X z$NzJ@IN$kw-~UgIUm&-j!}FJZx%>R|^&hKrag4e&G(W`;*d_Vd!PJ^d-3T`+ewsDx5{(G9D*ERQmOP>A8LA zbk7LpQ|CV$rN8eLx9`8U^=9$p#mkR(X^H~Q!UHK!0*~(keo{ub4xxHHJSVVrCtVFd zB`jXKH`!u}gYA!O<{R7RuFABON%SOZ(b9T2vRaaFr83Rq@7JKAPv*tb+wJ116Q$y< zQmJ_P#6j`eLk}0t-SY-W84kcafJh0BJ;ry?DDul-*cg?o@H()SmBJm>m|>h$%f23 zwCs49Bw{F`GoV2OyU`$9lCkVYam7v|V``!5WLhiUI`ttvakGdsvq`UAULQf5KQf*5 zI1yKSeL*1?D#q6{^R1n(@npxCn4#R3l&@GZTc*QX(stu$%RfZyw zjIp`UT{`vokg3)Fxv6QjIZ>Q>_>;Ffez2e| z1Vs}9gAy+{EOOL^2LlGq7BRc7*eH=Llw5auYMN4>#y3Nq&wZHLz(sdckZ$PmRB4S8 zfEhq#b|AG~N{Y&}j^B|OM9)YLXnNdal5V#`AVNg(j8`XR-R8q_*u6Af3Dl83$XCK( zHc=BOM7hauoMd7&HrXs@iqjXb7l)rs858>}a; z)6px=qL*sZ3ANA~h?wSvgVe%$l^o}g9p+_{l>Bi7LV@Y6b46aVes#vuRVGi1@9nDB zWw?w|a-UGj6qIqpRoZRya5U`JVYQnqvzDpnGBsLCjc_RzU%YTmXKhS3L?1%B7=_}Y zsr32se7GDhhEr7qN_B+l9hb(CSxeHu7|1oerf4RXt;NBlQCHbm7v@QZWe`kFqhZTq z=2(43l96NGxw&_FYwro@6tIKwEGj)(+S%DE-CH_Qx~FLFqe$t61L!_^X*)}2S^Dfj z={IK}=)F&Q>6P9*bNOil7j2GNyp+#@b{phOW5q)tt1U z;*H%41%8fzo1|w<7A!T|2-OLFhev~2)u{A(YE1VemRK_OsRnK(6ts#Qrqy{9z`dSRs}G{CxJEfC%UZcN%pfo(;d*sMx`BiWj22O8pKK0S$?tAs&p-7G+)9MglGG6utFyANzHpF?0(ZrYAoz2~S zGAg8lnf_ld(`VFfWTCB*7$_K|4UyDj2Z@H(V~NBzZefny@&OJCQP$HCbQ#Ct!1JcN!>+TNJ6e!T^S>G z!VrumEmpa&@ThD;hJw(#;12AR_qb$}4y)$M3N_sWVO6#8>R=HOquyMKV9L)eS5&oe z8Y;()`s$tAmo9Ie`Yv+znP)B)7Y?r%e?H`kzg|8%aqU#`!XZ&~4x7arhu4a8k20IB RE2V4ih2!}h=$?O%e*vfHTj~G+ literal 9072 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 diff --git a/chaincode-docker-devmode/orderer.block b/chaincode-docker-devmode/orderer.block index 1546cfdb6528942243f24611277ff6c63b5c3594..f98d441290ceb49d0d92375c722534bc830d235b 100644 GIT binary patch delta 454 zcmca@ddIn*OG!%M;qHo;Ct8jtzu^##xWc}X`Sk?bJHB3!RGEcEIN=`9JGOafQ>L$#=PPIFlZenNQ?BKv zTuV&3D!HOL7zG%m*f^dyE6R7l5Ap}lx$%rBqbzq zE;}%($6*Qo-|xA`#nB5gBp)4_{vm;Nx zLcwFQhJsG07R;2>5?tKQ`FX|pMJ1V~xy3@eC4?F!xC9_BLP!X`5hu>2lYh%uYmwwg zE1)A&#AV?A5)$G7`iDh`Nr*v;ZL*?({A6}T&B-Sf>?a#28cuFibOm}sW%4OSApihC BnVkRt diff --git a/fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-priv b/fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-priv deleted file mode 100644 index 1c78a398..00000000 --- a/fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-priv +++ /dev/null @@ -1,5 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgNmsvQQm4nwrxOKFX -UNfLPgjNm+FtYu3vb6OZ9q/5GbChRANCAAQKZvNQOjMissqOnc4DMi1IbubsWXDv -qtPxU7wTqi2ULDEq0FGQ+lkvueisLc2yPITff0nk7ilcKqEgClDJFGxG ------END PRIVATE KEY----- diff --git a/fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-pub b/fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-pub deleted file mode 100644 index b35b0276..00000000 --- a/fabcar/creds/5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8-pub +++ /dev/null @@ -1,4 +0,0 @@ ------BEGIN PUBLIC KEY----- -MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw -76rT8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRg== ------END PUBLIC KEY----- diff --git a/fabcar/creds/PeerAdmin b/fabcar/creds/PeerAdmin index f348397b..47b48be7 100644 --- a/fabcar/creds/PeerAdmin +++ b/fabcar/creds/PeerAdmin @@ -1 +1 @@ -{"name":"PeerAdmin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"5890f0061619c06fb29dea8cb304edecc020fe63f41a6db109f1e227cc1cb2a8","identity":{"certificate":"-----BEGIN CERTIFICATE-----\nMIICGTCCAb+gAwIBAgIQKKKdQSzsDoUYn/LPAuRWGTAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xNzA2MjMxMjMzMTlaFw0yNzA2MjExMjMzMTla\nMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECmbzUDozIrLKjp3OAzItSG7m7Flw76rT\n8VO8E6otlCwxKtBRkPpZL7norC3NsjyE339J5O4pXCqhIApQyRRsRqNNMEswDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgDnKSJOiz8xeE\nyKk8W4729MHJHZ5uV3xFwzFjYJ/kABEwCgYIKoZIzj0EAwIDSAAwRQIhALT02pc/\nyfE/4wUJfUBQ32GifUEh8JktAXzL/73S0rjYAiACNSp6zAQBX9SBxTOGMk4cGGAy\nCKqf8052NVUs2CvPzA==\n-----END CERTIFICATE-----\n"}}} \ No newline at end of file +{"name":"PeerAdmin","mspid":"Org1MSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec","identity":{"certificate":"-----BEGIN CERTIFICATE-----\nMIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa\nMFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw\nEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/\nsLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD\nVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64\nugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU\n/GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu\no2HkWiuxLsibGxtE\n-----END CERTIFICATE-----\n"}}} \ No newline at end of file diff --git a/fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-priv b/fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-priv new file mode 100755 index 00000000..838716ac --- /dev/null +++ b/fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-priv @@ -0,0 +1,5 @@ +-----BEGIN PRIVATE KEY----- +MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgRgQr347ij6cjwX7m +KjzbbD8Tlwdfu6FaubjWJWLGyqahRANCAARXV1+YrGwUpajujoM0EhohV5sII8Az +0L+wsG3iklGt72lYT3zsONdmhneCVzj4Og8y1OYFGps9XBhxS+lthjyn +-----END PRIVATE KEY----- diff --git a/fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-pub b/fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-pub new file mode 100644 index 00000000..df8f568c --- /dev/null +++ b/fabcar/creds/cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec-pub @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICGDCCAb+gAwIBAgIQFSxnLAGsu04zrFkAEwzn6zAKBggqhkjOPQQDAjBzMQsw +CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy +YW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu +b3JnMS5leGFtcGxlLmNvbTAeFw0xNzA4MzEwOTE0MzJaFw0yNzA4MjkwOTE0MzJa +MFsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T +YW4gRnJhbmNpc2NvMR8wHQYDVQQDDBZBZG1pbkBvcmcxLmV4YW1wbGUuY29tMFkw +EwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEV1dfmKxsFKWo7o6DNBIaIVebCCPAM9C/ +sLBt4pJRre9pWE987DjXZoZ3glc4+DoPMtTmBRqbPVwYcUvpbYY8p6NNMEswDgYD +VR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0jBCQwIoAgQjmqDc122u64 +ugzacBhR0UUE0xqtGy3d26xqVzZeSXwwCgYIKoZIzj0EAwIDRwAwRAIgXMy26AEU +/GUMPfCMs/nQjQME1ZxBHAYZtKEuRR361JsCIEg9BOZdIoioRivJC+ZUzvJUnkXu +o2HkWiuxLsibGxtE +-----END CERTIFICATE----- diff --git a/fabcar/invoke.js b/fabcar/invoke.js index 7ad02fab..bd541f32 100644 --- a/fabcar/invoke.js +++ b/fabcar/invoke.js @@ -54,8 +54,8 @@ Promise.resolve().then(() => { var request = { targets: targets, chaincodeId: options.chaincode_id, - fcn: '', - args: [''], + fcn: 'createCar', + args: ['CAR10', 'Chevy', 'Volt', 'Red', 'Nick'], chainId: options.channel_id, txId: tx_id }; diff --git a/fabcar/package.json b/fabcar/package.json index c33d0dad..bc264750 100644 --- a/fabcar/package.json +++ b/fabcar/package.json @@ -7,8 +7,8 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { - "fabric-ca-client": "^1.0.0", - "fabric-client": "^1.0.0" + "fabric-ca-client": "^1.0.1", + "fabric-client": "^1.0.1" }, "author": "Anthony O'Dowd", "license": "Apache-2.0",