From 87600bd29bf43c61c24f2877326df08dadcf5435 Mon Sep 17 00:00:00 2001 From: nikhil550 Date: Mon, 30 Mar 2020 14:18:06 -0400 Subject: [PATCH] [FAB-17268] Move fabcar sample to test network (#103) Signed-off-by: NIKHIL E GUPTA Co-authored-by: NIKHIL E GUPTA --- fabcar/java/pom.xml | 4 +- .../src/main/java/org/example/ClientApp.java | 5 +- .../main/java/org/example/EnrollAdmin.java | 2 +- .../main/java/org/example/RegisterUser.java | 16 +- fabcar/javascript/enrollAdmin.js | 2 +- fabcar/javascript/invoke.js | 10 +- fabcar/javascript/query.js | 8 +- fabcar/javascript/registerUser.js | 16 +- fabcar/networkDown.sh | 18 ++ fabcar/startFabric.sh | 217 ++---------------- fabcar/typescript/src/enrollAdmin.ts | 2 +- fabcar/typescript/src/invoke.ts | 10 +- fabcar/typescript/src/query.ts | 8 +- fabcar/typescript/src/registerUser.ts | 16 +- test-network/network.sh | 8 +- test-network/scripts/deployCC.sh | 27 ++- 16 files changed, 108 insertions(+), 261 deletions(-) create mode 100755 fabcar/networkDown.sh diff --git a/fabcar/java/pom.xml b/fabcar/java/pom.xml index 01d1517981..d3abafb431 100644 --- a/fabcar/java/pom.xml +++ b/fabcar/java/pom.xml @@ -4,7 +4,7 @@ 4.0.0 fabcar-java fabcar-java - 1.4.0-SNAPSHOT + 2.0.0-SNAPSHOT @@ -53,4 +53,4 @@ test - \ No newline at end of file + diff --git a/fabcar/java/src/main/java/org/example/ClientApp.java b/fabcar/java/src/main/java/org/example/ClientApp.java index 6589410af2..b4fad8defa 100755 --- a/fabcar/java/src/main/java/org/example/ClientApp.java +++ b/fabcar/java/src/main/java/org/example/ClientApp.java @@ -22,12 +22,11 @@ public static void main(String[] args) throws Exception { // Load a file system based wallet for managing identities. Path walletPath = Paths.get("wallet"); Wallet wallet = Wallet.createFileSystemWallet(walletPath); - // load a CCP - Path networkConfigPath = Paths.get("..", "..", "first-network", "connection-org1.yaml"); + Path networkConfigPath = Paths.get("..", "..", "test-network", "organizations", "peerOrganizations", "org1.example.com", "connection-org1.yaml"); Gateway.Builder builder = Gateway.createBuilder(); - builder.identity(wallet, "user1").networkConfig(networkConfigPath).discovery(true); + builder.identity(wallet, "appUser").networkConfig(networkConfigPath).discovery(true); // create a gateway connection try (Gateway gateway = builder.connect()) { diff --git a/fabcar/java/src/main/java/org/example/EnrollAdmin.java b/fabcar/java/src/main/java/org/example/EnrollAdmin.java index b9992de7a8..ace0449f79 100644 --- a/fabcar/java/src/main/java/org/example/EnrollAdmin.java +++ b/fabcar/java/src/main/java/org/example/EnrollAdmin.java @@ -26,7 +26,7 @@ public static void main(String[] args) throws Exception { // Create a CA client for interacting with the CA. Properties props = new Properties(); props.put("pemFile", - "../../first-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); + "../../test-network/organizations/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); props.put("allowAllHostNames", "true"); HFCAClient caClient = HFCAClient.createNewInstance("https://localhost:7054", props); CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite(); diff --git a/fabcar/java/src/main/java/org/example/RegisterUser.java b/fabcar/java/src/main/java/org/example/RegisterUser.java index f892bef9b5..0f56747ef5 100644 --- a/fabcar/java/src/main/java/org/example/RegisterUser.java +++ b/fabcar/java/src/main/java/org/example/RegisterUser.java @@ -29,7 +29,7 @@ public static void main(String[] args) throws Exception { // Create a CA client for interacting with the CA. Properties props = new Properties(); props.put("pemFile", - "../../first-network/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); + "../../test-network/organizations/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem"); props.put("allowAllHostNames", "true"); HFCAClient caClient = HFCAClient.createNewInstance("https://localhost:7054", props); CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite(); @@ -39,9 +39,9 @@ public static void main(String[] args) throws Exception { Wallet wallet = Wallet.createFileSystemWallet(Paths.get("wallet")); // Check to see if we've already enrolled the user. - boolean userExists = wallet.exists("user1"); + boolean userExists = wallet.exists("appUser"); if (userExists) { - System.out.println("An identity for the user \"user1\" already exists in the wallet"); + System.out.println("An identity for the user \"appUser\" already exists in the wallet"); return; } @@ -98,14 +98,14 @@ public String getMspId() { }; // Register the user, enroll the user, and import the new identity into the wallet. - RegistrationRequest registrationRequest = new RegistrationRequest("user1"); + RegistrationRequest registrationRequest = new RegistrationRequest("appUser"); registrationRequest.setAffiliation("org1.department1"); - registrationRequest.setEnrollmentID("user1"); + registrationRequest.setEnrollmentID("appUser"); String enrollmentSecret = caClient.register(registrationRequest, admin); - Enrollment enrollment = caClient.enroll("user1", enrollmentSecret); + Enrollment enrollment = caClient.enroll("appUser", enrollmentSecret); Identity user = Identity.createIdentity("Org1MSP", enrollment.getCert(), enrollment.getKey()); - wallet.put("user1", user); - System.out.println("Successfully enrolled user \"user1\" and imported it into the wallet"); + wallet.put("appUser", user); + System.out.println("Successfully enrolled user \"appUser\" and imported it into the wallet"); } } diff --git a/fabcar/javascript/enrollAdmin.js b/fabcar/javascript/enrollAdmin.js index 359866bd9c..8a32e932ae 100644 --- a/fabcar/javascript/enrollAdmin.js +++ b/fabcar/javascript/enrollAdmin.js @@ -12,7 +12,7 @@ const path = require('path'); async function main() { try { // load the network configuration - const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); + const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json'); const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); // Create a new CA client for interacting with the CA. diff --git a/fabcar/javascript/invoke.js b/fabcar/javascript/invoke.js index bf4e0a896e..f90a016ad8 100644 --- a/fabcar/javascript/invoke.js +++ b/fabcar/javascript/invoke.js @@ -11,7 +11,7 @@ const path = require('path'); async function main() { try { // load the network configuration - const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); + const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json'); let ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); // Create a new file system based wallet for managing identities. @@ -20,16 +20,16 @@ async function main() { console.log(`Wallet path: ${walletPath}`); // Check to see if we've already enrolled the user. - const identity = await wallet.get('user1'); + const identity = await wallet.get('appUser'); if (!identity) { - console.log('An identity for the user "user1" does not exist in the wallet'); + console.log('An identity for the user "appUser" does not exist in the wallet'); console.log('Run the registerUser.js application before retrying'); return; } // Create a new gateway for connecting to our peer node. const gateway = new Gateway(); - await gateway.connect(ccp, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: true } }); + await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: true } }); // Get the network (channel) our contract is deployed to. const network = await gateway.getNetwork('mychannel'); @@ -39,7 +39,7 @@ async function main() { // Submit the specified transaction. // createCar transaction - requires 5 argument, ex: ('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom') - // changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR10', 'Dave') + // changeCarOwner transaction - requires 2 args , ex: ('changeCarOwner', 'CAR12', 'Dave') await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom'); console.log('Transaction has been submitted'); diff --git a/fabcar/javascript/query.js b/fabcar/javascript/query.js index efdb0b76d4..817e8b8d5c 100644 --- a/fabcar/javascript/query.js +++ b/fabcar/javascript/query.js @@ -12,7 +12,7 @@ const fs = require('fs'); async function main() { try { // load the network configuration - const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); + const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json'); const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); // Create a new file system based wallet for managing identities. @@ -21,16 +21,16 @@ async function main() { console.log(`Wallet path: ${walletPath}`); // Check to see if we've already enrolled the user. - const identity = await wallet.get('user1'); + const identity = await wallet.get('appUser'); if (!identity) { - console.log('An identity for the user "user1" does not exist in the wallet'); + console.log('An identity for the user "appUser" does not exist in the wallet'); console.log('Run the registerUser.js application before retrying'); return; } // Create a new gateway for connecting to our peer node. const gateway = new Gateway(); - await gateway.connect(ccp, { wallet, identity: 'user1', discovery: { enabled: true, asLocalhost: true } }); + await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: true } }); // Get the network (channel) our contract is deployed to. const network = await gateway.getNetwork('mychannel'); diff --git a/fabcar/javascript/registerUser.js b/fabcar/javascript/registerUser.js index 41a09330ea..1a5cd379e0 100644 --- a/fabcar/javascript/registerUser.js +++ b/fabcar/javascript/registerUser.js @@ -12,7 +12,7 @@ const path = require('path'); async function main() { try { // load the network configuration - const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); + const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json'); const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8')); // Create a new CA client for interacting with the CA. @@ -25,9 +25,9 @@ async function main() { console.log(`Wallet path: ${walletPath}`); // Check to see if we've already enrolled the user. - const userIdentity = await wallet.get('user1'); + const userIdentity = await wallet.get('appUser'); if (userIdentity) { - console.log('An identity for the user "user1" already exists in the wallet'); + console.log('An identity for the user "appUser" already exists in the wallet'); return; } @@ -46,11 +46,11 @@ async function main() { // Register the user, enroll the user, and import the new identity into the wallet. const secret = await ca.register({ affiliation: 'org1.department1', - enrollmentID: 'user1', + enrollmentID: 'appUser', role: 'client' }, adminUser); const enrollment = await ca.enroll({ - enrollmentID: 'user1', + enrollmentID: 'appUser', enrollmentSecret: secret }); const x509Identity = { @@ -61,11 +61,11 @@ async function main() { mspId: 'Org1MSP', type: 'X.509', }; - await wallet.put('user1', x509Identity); - console.log('Successfully registered and enrolled admin user "user1" and imported it into the wallet'); + await wallet.put('appUser', x509Identity); + console.log('Successfully registered and enrolled admin user "appUser" and imported it into the wallet'); } catch (error) { - console.error(`Failed to register user "user1": ${error}`); + console.error(`Failed to register user "appUser": ${error}`); process.exit(1); } } diff --git a/fabcar/networkDown.sh b/fabcar/networkDown.sh new file mode 100755 index 0000000000..c1bc2313c1 --- /dev/null +++ b/fabcar/networkDown.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# +# Copyright IBM Corp All Rights Reserved +# +# SPDX-License-Identifier: Apache-2.0 +# +# Exit on first error +set -ex + +# Bring the test network down +pushd ../test-network +./network.sh down +popd + +# clean out any old identites in the wallets +rm -rf javascript/wallet/* +rm -rf java/wallet/* +rm -rf typescript/wallet/* diff --git a/fabcar/startFabric.sh b/fabcar/startFabric.sh index 1a527687f3..386ff788c5 100755 --- a/fabcar/startFabric.sh +++ b/fabcar/startFabric.sh @@ -5,215 +5,34 @@ # SPDX-License-Identifier: Apache-2.0 # # Exit on first error -set -ex +set -e # don't rewrite paths for Windows Git Bash users export MSYS_NO_PATHCONV=1 starttime=$(date +%s) CC_SRC_LANGUAGE=${1:-"go"} CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH=github.com/hyperledger/fabric-samples/chaincode/fabcar/go - echo Vendoring Go dependencies ... - pushd ../chaincode/fabcar/go - GO111MODULE=on go mod vendor - popd - echo Finished vendoring Go dependencies -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/fabcar/java/build/install/fabcar - echo Compiling Java code ... - pushd ../chaincode/fabcar/java - ./gradlew installDist - popd - echo Finished compiling Java code -elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/fabcar/javascript -elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then - CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/fabcar/typescript - echo Compiling TypeScript code into JavaScript ... - pushd ../chaincode/fabcar/typescript - npm install - npm run build - popd - echo Finished compiling TypeScript code into JavaScript -else +if [ "$CC_SRC_LANGUAGE" != "go" -a "$CC_SRC_LANGUAGE" != "golang" -a "$CC_SRC_LANGUAGE" != "java" \ + -a "$CC_SRC_LANGUAGE" != "javascript" -a "$CC_SRC_LANGUAGE" != "typescript" ] ; then + echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, java, javascript, and typescript - exit 1 -fi + echo Supported chaincode languages are: go, java, javascript, and typescript + exit 1 +fi -# clean the keystore -rm -rf ./hfc-key-store +# clean out any old identites in the wallets +rm -rf javascript/wallet/* +rm -rf java/wallet/* +rm -rf typescript/wallet/* # launch network; create channel and join peer to channel -pushd ../first-network -echo y | ./byfn.sh down -echo y | ./byfn.sh up -a -n -s couchdb +pushd ../test-network +./network.sh down +./network.sh up createChannel -ca -s couchdb +./network.sh deployCC -l ${CC_SRC_LANGUAGE} popd -CONFIG_ROOT=/opt/gopath/src/github.com/hyperledger/fabric/peer -ORG1_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp -ORG1_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -ORG2_MSPCONFIGPATH=${CONFIG_ROOT}/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp -ORG2_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -ORDERER_TLS_ROOTCERT_FILE=${CONFIG_ROOT}/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - -PEER0_ORG1="docker exec --e CORE_PEER_LOCALMSPID=Org1MSP --e CORE_PEER_ADDRESS=peer0.org1.example.com:7051 --e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} --e CORE_PEER_TLS_ROOTCERT_FILE=${ORG1_TLS_ROOTCERT_FILE} -cli -peer ---tls=true ---cafile=${ORDERER_TLS_ROOTCERT_FILE} ---orderer=orderer.example.com:7050" - -PEER1_ORG1="docker exec --e CORE_PEER_LOCALMSPID=Org1MSP --e CORE_PEER_ADDRESS=peer1.org1.example.com:8051 --e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} --e CORE_PEER_TLS_ROOTCERT_FILE=${ORG1_TLS_ROOTCERT_FILE} -cli -peer ---tls=true ---cafile=${ORDERER_TLS_ROOTCERT_FILE} ---orderer=orderer.example.com:7050" - -PEER0_ORG2="docker exec --e CORE_PEER_LOCALMSPID=Org2MSP --e CORE_PEER_ADDRESS=peer0.org2.example.com:9051 --e CORE_PEER_MSPCONFIGPATH=${ORG2_MSPCONFIGPATH} --e CORE_PEER_TLS_ROOTCERT_FILE=${ORG2_TLS_ROOTCERT_FILE} -cli -peer ---tls=true ---cafile=${ORDERER_TLS_ROOTCERT_FILE} ---orderer=orderer.example.com:7050" - -PEER1_ORG2="docker exec --e CORE_PEER_LOCALMSPID=Org2MSP --e CORE_PEER_ADDRESS=peer1.org2.example.com:10051 --e CORE_PEER_MSPCONFIGPATH=${ORG2_MSPCONFIGPATH} --e CORE_PEER_TLS_ROOTCERT_FILE=${ORG2_TLS_ROOTCERT_FILE} -cli -peer ---tls=true ---cafile=${ORDERER_TLS_ROOTCERT_FILE} ---orderer=orderer.example.com:7050" - -echo "Packaging smart contract on peer0.org1.example.com" -${PEER0_ORG1} lifecycle chaincode package \ - fabcar.tar.gz \ - --path "$CC_SRC_PATH" \ - --lang "$CC_RUNTIME_LANGUAGE" \ - --label fabcarv1 - -echo "Installing smart contract on peer0.org1.example.com" -${PEER0_ORG1} lifecycle chaincode install \ - fabcar.tar.gz - -echo "Installing smart contract on peer1.org1.example.com" -${PEER1_ORG1} lifecycle chaincode install \ - fabcar.tar.gz - -echo "Determining package ID for smart contract on peer0.org1.example.com" -REGEX='Package ID: ([^,]*), Label: fabcarv1' -if [[ `${PEER0_ORG1} lifecycle chaincode queryinstalled` =~ $REGEX ]]; then - PACKAGE_ID_ORG1=${BASH_REMATCH[1]} -else - echo Could not find package ID for fabcarv1 chaincode on peer0.org1.example.com - exit 1 -fi - -echo "Approving smart contract for org1" -${PEER0_ORG1} lifecycle chaincode approveformyorg \ - --package-id ${PACKAGE_ID_ORG1} \ - --channelID mychannel \ - --name fabcar \ - --version 1.0 \ - --signature-policy "AND('Org1MSP.member','Org2MSP.member')" \ - --sequence 1 \ - --waitForEvent - -echo "Packaging smart contract on peer0.org2.example.com" -${PEER0_ORG2} lifecycle chaincode package \ - fabcar.tar.gz \ - --path "$CC_SRC_PATH" \ - --lang "$CC_RUNTIME_LANGUAGE" \ - --label fabcarv1 - -echo "Installing smart contract on peer0.org2.example.com" -${PEER0_ORG2} lifecycle chaincode install fabcar.tar.gz - -echo "Installing smart contract on peer1.org2.example.com" -${PEER1_ORG2} lifecycle chaincode install fabcar.tar.gz - -echo "Determining package ID for smart contract on peer0.org2.example.com" -REGEX='Package ID: ([^,]*), Label: fabcarv1' -if [[ `${PEER0_ORG2} lifecycle chaincode queryinstalled` =~ $REGEX ]]; then - PACKAGE_ID_ORG2=${BASH_REMATCH[1]} -else - echo Could not find package ID for fabcarv1 chaincode on peer0.org2.example.com - exit 1 -fi - -echo "Approving smart contract for org2" -${PEER0_ORG2} lifecycle chaincode approveformyorg \ - --package-id ${PACKAGE_ID_ORG2} \ - --channelID mychannel \ - --name fabcar \ - --version 1.0 \ - --signature-policy "AND('Org1MSP.member','Org2MSP.member')" \ - --sequence 1 \ - --waitForEvent - -echo "Committing smart contract" -${PEER0_ORG1} lifecycle chaincode commit \ - --channelID mychannel \ - --name fabcar \ - --version 1.0 \ - --signature-policy "AND('Org1MSP.member','Org2MSP.member')" \ - --sequence 1 \ - --waitForEvent \ - --peerAddresses peer0.org1.example.com:7051 \ - --peerAddresses peer0.org2.example.com:9051 \ - --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ - --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} - -echo "Submitting initLedger transaction to smart contract on mychannel" -# echo "The transaction is sent to all of the peers so that chaincode is built before receiving the following requests" -${PEER0_ORG1} chaincode invoke \ - -C mychannel \ - -n fabcar \ - -c '{"function":"initLedger","Args":[]}' \ - --waitForEvent \ - --waitForEventTimeout 300s \ - --peerAddresses peer0.org1.example.com:7051 \ - --peerAddresses peer0.org2.example.com:9051 \ - --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ - --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} - -# Temporary workaround (see FAB-15897) - cannot invoke across all four peers at the same time, so use a query to build -# the chaincode across the remaining peers. -${PEER1_ORG1} chaincode query \ - -C mychannel \ - -n fabcar \ - -c '{"function":"queryAllCars","Args":[]}' \ - --peerAddresses peer1.org1.example.com:8051 \ - --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} -${PEER1_ORG2} chaincode query \ - -C mychannel \ - -n fabcar \ - -c '{"function":"queryAllCars","Args":[]}' \ - --peerAddresses peer1.org2.example.com:10051 \ - --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} - cat < - the database backend to use: goleveldb (default) or couchdb" echo " -r - CLI times out after certain number of attempts (defaults to 5)" echo " -d - delay duration in seconds (defaults to 3)" - echo " -l - the programming language of the chaincode to deploy: go (default), javascript, or java" + echo " -l - the programming language of the chaincode to deploy: go (default), java, javascript, typescript" echo " -v - chaincode version. Must be a round number, 1, 2, 3, etc" echo " -i - the tag to be used to launch the network (defaults to \"latest\")" echo " -verbose - verbose mode" @@ -370,7 +370,7 @@ function createChannel() { ## Call the script to isntall and instantiate a chaincode on the channel function deployCC() { - scripts/deployCC.sh $CHANNEL_NAME $CC_RUNTIME_LANGUAGE $VERSION $CLI_DELAY $MAX_RETRY $VERBOSE + scripts/deployCC.sh $CHANNEL_NAME $CC_SRC_LANGUAGE $VERSION $CLI_DELAY $MAX_RETRY $VERBOSE if [ $? -ne 0 ]; then echo "ERROR !!! Deploying chaincode failed" @@ -434,7 +434,7 @@ COMPOSE_FILE_COUCH_ORG3=addOrg3/docker/docker-compose-couch-org3.yaml COMPOSE_FILE_ORG3=addOrg3/docker/docker-compose-org3.yaml # # use golang as the default language for chaincode -CC_RUNTIME_LANGUAGE=golang +CC_SRC_LANGUAGE=golang # Chaincode version VERSION=1 # default image tag @@ -491,7 +491,7 @@ while [[ $# -ge 1 ]] ; do shift ;; -l ) - CC_RUNTIME_LANGUAGE="$2" + CC_SRC_LANGUAGE="$2" shift ;; -v ) diff --git a/test-network/scripts/deployCC.sh b/test-network/scripts/deployCC.sh index 1357898267..3ebb81cb5e 100755 --- a/test-network/scripts/deployCC.sh +++ b/test-network/scripts/deployCC.sh @@ -1,21 +1,21 @@ CHANNEL_NAME="$1" -CC_RUNTIME_LANGUAGE="$2" +CC_SRC_LANGUAGE="$2" VERSION="$3" DELAY="$4" MAX_RETRY="$5" VERBOSE="$6" : ${CHANNEL_NAME:="mychannel"} -: ${CC_RUNTIME_LANGUAGE:="golang"} +: ${CC_SRC_LANGUAGE:="golang"} : ${VERSION:="1"} : ${DELAY:="3"} : ${MAX_RETRY:="5"} : ${VERBOSE:="false"} -CC_RUNTIME_LANGUAGE=`echo "$CC_RUNTIME_LANGUAGE" | tr [:upper:] [:lower:]` +CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` FABRIC_CFG_PATH=$PWD/../config/ -if [ "$CC_RUNTIME_LANGUAGE" = "go" -o "$CC_RUNTIME_LANGUAGE" = "golang" ] ; then +if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ] ; then CC_RUNTIME_LANGUAGE=golang CC_SRC_PATH="../chaincode/fabcar/go/" @@ -25,11 +25,11 @@ if [ "$CC_RUNTIME_LANGUAGE" = "go" -o "$CC_RUNTIME_LANGUAGE" = "golang" ] ; then popd echo Finished vendoring Go dependencies -elif [ "$CC_RUNTIME_LANGUAGE" = "javascript" ]; then +elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js CC_SRC_PATH="../chaincode/fabcar/javascript/" -elif [ "$CC_RUNTIME_LANGUAGE" = "java" ]; then +elif [ "$CC_SRC_LANGUAGE" = "java" ]; then CC_RUNTIME_LANGUAGE=java CC_SRC_PATH="../chaincode/fabcar/java/build/install/fabcar" @@ -39,9 +39,20 @@ elif [ "$CC_RUNTIME_LANGUAGE" = "java" ]; then popd echo Finished compiling Java code +elif [ "$CC_SRC_LANGUAGE" = "typescript" ]; then + CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js + CC_SRC_PATH="../chaincode/fabcar/typescript/" + + echo Compiling TypeScript code into JavaScript ... + pushd ../chaincode/fabcar/typescript + npm install + npm run build + popd + echo Finished compiling TypeScript code into JavaScript + else - echo The chaincode language ${CC_RUNTIME_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java + echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script + echo Supported chaincode languages are: go, java, javascript, and typescript exit 1 fi