From 2a5a59b60a752494336859c35048e77bc42de526 Mon Sep 17 00:00:00 2001 From: Simon Stone Date: Tue, 5 Mar 2019 12:55:30 +0000 Subject: [PATCH] [FAB-14487] Make FabCar use BYFN, not basic-network Update FabCar to use BYFN. As a result, the sample client applications need to change so that they use the correct connection profile paths, and so that they use service discovery. Change-Id: If02b7fb4ad308c6a7d1e1aa9f953e1bc4e942719 Signed-off-by: Simon Stone --- fabcar/javascript/enrollAdmin.js | 8 ++- fabcar/javascript/invoke.js | 7 +-- fabcar/javascript/query.js | 7 +-- fabcar/javascript/registerUser.js | 7 +-- fabcar/startFabric.sh | 89 +++++++++++++++++++++++---- fabcar/typescript/src/enrollAdmin.ts | 8 ++- fabcar/typescript/src/invoke.ts | 7 +-- fabcar/typescript/src/query.ts | 7 +-- fabcar/typescript/src/registerUser.ts | 7 +-- 9 files changed, 99 insertions(+), 48 deletions(-) diff --git a/fabcar/javascript/enrollAdmin.js b/fabcar/javascript/enrollAdmin.js index 72c7f6e6..8d2a86aa 100644 --- a/fabcar/javascript/enrollAdmin.js +++ b/fabcar/javascript/enrollAdmin.js @@ -9,7 +9,7 @@ const { FileSystemWallet, X509WalletMixin } = require('fabric-network'); const fs = require('fs'); const path = require('path'); -const ccpPath = path.resolve(__dirname, '..', '..', 'basic-network', 'connection.json'); +const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); const ccpJSON = fs.readFileSync(ccpPath, 'utf8'); const ccp = JSON.parse(ccpJSON); @@ -17,8 +17,10 @@ async function main() { try { // Create a new CA client for interacting with the CA. - const caURL = ccp.certificateAuthorities['ca.example.com'].url; - const ca = new FabricCAServices(caURL); + const caInfo = ccp.certificateAuthorities['ca.org1.example.com']; + const caTLSCACertsPath = path.resolve(__dirname, '..', '..', 'first-network', caInfo.tlsCACerts.path); + const caTLSCACerts = fs.readFileSync(caTLSCACertsPath); + const ca = new FabricCAServices(caInfo.url, { trustedRoots: caTLSCACerts, verify: false }, caInfo.caName); // Create a new file system based wallet for managing identities. const walletPath = path.join(process.cwd(), 'wallet'); diff --git a/fabcar/javascript/invoke.js b/fabcar/javascript/invoke.js index 7e3a2aeb..013188bb 100644 --- a/fabcar/javascript/invoke.js +++ b/fabcar/javascript/invoke.js @@ -5,12 +5,9 @@ 'use strict'; const { FileSystemWallet, Gateway } = require('fabric-network'); -const fs = require('fs'); const path = require('path'); -const ccpPath = path.resolve(__dirname, '..', '..', 'basic-network', 'connection.json'); -const ccpJSON = fs.readFileSync(ccpPath, 'utf8'); -const ccp = JSON.parse(ccpJSON); +const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); async function main() { try { @@ -30,7 +27,7 @@ async function main() { // Create a new gateway for connecting to our peer node. const gateway = new Gateway(); - await gateway.connect(ccp, { wallet, identity: 'user1', discovery: { enabled: false } }); + await gateway.connect(ccpPath, { wallet, identity: 'user1', 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/query.js b/fabcar/javascript/query.js index 0014f3af..40af411f 100644 --- a/fabcar/javascript/query.js +++ b/fabcar/javascript/query.js @@ -5,12 +5,9 @@ 'use strict'; const { FileSystemWallet, Gateway } = require('fabric-network'); -const fs = require('fs'); const path = require('path'); -const ccpPath = path.resolve(__dirname, '..', '..', 'basic-network', 'connection.json'); -const ccpJSON = fs.readFileSync(ccpPath, 'utf8'); -const ccp = JSON.parse(ccpJSON); +const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); async function main() { try { @@ -30,7 +27,7 @@ async function main() { // Create a new gateway for connecting to our peer node. const gateway = new Gateway(); - await gateway.connect(ccp, { wallet, identity: 'user1', discovery: { enabled: false } }); + await gateway.connect(ccpPath, { wallet, identity: 'user1', 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 21af6f13..cb786a25 100644 --- a/fabcar/javascript/registerUser.js +++ b/fabcar/javascript/registerUser.js @@ -5,12 +5,9 @@ 'use strict'; const { FileSystemWallet, Gateway, X509WalletMixin } = require('fabric-network'); -const fs = require('fs'); const path = require('path'); -const ccpPath = path.resolve(__dirname, '..', '..', 'basic-network', 'connection.json'); -const ccpJSON = fs.readFileSync(ccpPath, 'utf8'); -const ccp = JSON.parse(ccpJSON); +const ccpPath = path.resolve(__dirname, '..', '..', 'first-network', 'connection-org1.json'); async function main() { try { @@ -37,7 +34,7 @@ async function main() { // Create a new gateway for connecting to our peer node. const gateway = new Gateway(); - await gateway.connect(ccp, { wallet, identity: 'admin', discovery: { enabled: false } }); + await gateway.connect(ccpPath, { wallet, identity: 'admin', discovery: { enabled: true, asLocalhost: true } }); // Get the CA client object from the gateway for interacting with the CA. const ca = gateway.getClient().getCertificateAuthority(); diff --git a/fabcar/startFabric.sh b/fabcar/startFabric.sh index e57ec129..851633a9 100755 --- a/fabcar/startFabric.sh +++ b/fabcar/startFabric.sh @@ -14,13 +14,13 @@ 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/fabcar/go + CC_SRC_PATH=github.com/chaincode/fabcar/go elif [ "$CC_SRC_LANGUAGE" = "javascript" ]; then CC_RUNTIME_LANGUAGE=node # chaincode runtime language is node.js - CC_SRC_PATH=/opt/gopath/src/github.com/fabcar/javascript + CC_SRC_PATH=/opt/gopath/src/github.com/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/fabcar/typescript + CC_SRC_PATH=/opt/gopath/src/github.com/chaincode/fabcar/typescript echo Compiling TypeScript code into JavaScript ... pushd ../chaincode/fabcar/typescript npm install @@ -38,18 +38,83 @@ fi rm -rf ./hfc-key-store # launch network; create channel and join peer to channel -cd ../basic-network -./start.sh +cd ../first-network +echo y | ./byfn.sh down +echo y | ./byfn.sh up -a -n -s couchdb -# Now launch the CLI container in order to install, instantiate chaincode -# and prime the ledger with our 10 cars -docker-compose -f ./docker-compose.yml up -d cli -docker ps -a +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 +set -x -docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n fabcar -v 1.0 -p "$CC_SRC_PATH" -l "$CC_RUNTIME_LANGUAGE" -docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -l "$CC_RUNTIME_LANGUAGE" -v 1.0 -c '{"Args":[]}' -P "OR ('Org1MSP.member','Org2MSP.member')" +echo "Installing smart contract on peer0.org1.example.com" +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 chaincode install \ + -n fabcar \ + -v 1.0 \ + -p "$CC_SRC_PATH" \ + -l "$CC_RUNTIME_LANGUAGE" + +echo "Installing smart contract on peer0.org2.example.com" +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 chaincode install \ + -n fabcar \ + -v 1.0 \ + -p "$CC_SRC_PATH" \ + -l "$CC_RUNTIME_LANGUAGE" + +echo "Instantiating smart contract on mychannel" +docker exec \ + -e CORE_PEER_LOCALMSPID=Org1MSP \ + -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \ + cli \ + peer chaincode instantiate \ + -o orderer.example.com:7050 \ + -C mychannel \ + -n fabcar \ + -l "$CC_RUNTIME_LANGUAGE" \ + -v 1.0 \ + -c '{"Args":[]}' \ + -P "AND('Org1MSP.member','Org2MSP.member')" \ + --tls \ + --cafile ${ORDERER_TLS_ROOTCERT_FILE} \ + --peerAddresses peer0.org1.example.com:7051 \ + --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} + +echo "Waiting for instantiation request to be committed ..." sleep 10 -docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n fabcar -c '{"function":"initLedger","Args":[]}' + +echo "Submitting initLedger transaction to smart contract on mychannel" +docker exec \ + -e CORE_PEER_LOCALMSPID=Org1MSP \ + -e CORE_PEER_MSPCONFIGPATH=${ORG1_MSPCONFIGPATH} \ + cli \ + peer chaincode invoke \ + -o orderer.example.com:7050 \ + -C mychannel \ + -n fabcar \ + -c '{"function":"initLedger","Args":[]}' \ + --waitForEvent \ + --tls \ + --cafile ${ORDERER_TLS_ROOTCERT_FILE} \ + --peerAddresses peer0.org1.example.com:7051 \ + --peerAddresses peer0.org2.example.com:9051 \ + --tlsRootCertFiles ${ORG1_TLS_ROOTCERT_FILE} \ + --tlsRootCertFiles ${ORG2_TLS_ROOTCERT_FILE} +set +x cat <