From adfef198df2a416629c6375e7632b553433456d2 Mon Sep 17 00:00:00 2001 From: nikhil550 Date: Fri, 26 Jun 2020 12:36:29 -0400 Subject: [PATCH] FAB-18015 (#214) Remove first network sample if Fabric 2.2 Signed-off-by: NIKHIL E GUPTA Co-authored-by: NIKHIL E GUPTA --- first-network/.env | 2 - first-network/.gitignore | 8 - first-network/README.md | 7 - first-network/base/docker-compose-base.yaml | 110 ---- first-network/base/peer-base.yaml | 50 -- first-network/byfn.sh | 532 ------------------ first-network/ccp-generate.sh | 49 -- first-network/ccp-template.json | 60 -- first-network/ccp-template.yaml | 43 -- first-network/channel-artifacts/.gitkeep | 0 first-network/configtx.yaml | 363 ------------ first-network/crypto-config.yaml | 88 --- first-network/docker-compose-ca.yaml | 46 -- first-network/docker-compose-cli.yaml | 93 --- first-network/docker-compose-couch-org3.yaml | 64 --- first-network/docker-compose-couch.yaml | 118 ---- .../docker-compose-e2e-template.yaml | 90 --- first-network/docker-compose-etcdraft2.yaml | 85 --- first-network/docker-compose-org3.yaml | 97 ---- first-network/eyfn.sh | 307 ---------- first-network/org3-artifacts/configtx.yaml | 59 -- first-network/org3-artifacts/org3-crypto.yaml | 19 - first-network/scripts/script.sh | 169 ------ first-network/scripts/step1org3.sh | 81 --- first-network/scripts/step2org3.sh | 86 --- first-network/scripts/testorg3.sh | 89 --- first-network/scripts/upgrade_to_v14.sh | 76 --- first-network/scripts/utils.sh | 451 --------------- 28 files changed, 3242 deletions(-) delete mode 100644 first-network/.env delete mode 100644 first-network/.gitignore delete mode 100644 first-network/README.md delete mode 100644 first-network/base/docker-compose-base.yaml delete mode 100644 first-network/base/peer-base.yaml delete mode 100755 first-network/byfn.sh delete mode 100755 first-network/ccp-generate.sh delete mode 100644 first-network/ccp-template.json delete mode 100644 first-network/ccp-template.yaml delete mode 100644 first-network/channel-artifacts/.gitkeep delete mode 100644 first-network/configtx.yaml delete mode 100644 first-network/crypto-config.yaml delete mode 100644 first-network/docker-compose-ca.yaml delete mode 100644 first-network/docker-compose-cli.yaml delete mode 100644 first-network/docker-compose-couch-org3.yaml delete mode 100644 first-network/docker-compose-couch.yaml delete mode 100644 first-network/docker-compose-e2e-template.yaml delete mode 100644 first-network/docker-compose-etcdraft2.yaml delete mode 100644 first-network/docker-compose-org3.yaml delete mode 100755 first-network/eyfn.sh delete mode 100644 first-network/org3-artifacts/configtx.yaml delete mode 100644 first-network/org3-artifacts/org3-crypto.yaml delete mode 100755 first-network/scripts/script.sh delete mode 100755 first-network/scripts/step1org3.sh delete mode 100755 first-network/scripts/step2org3.sh delete mode 100755 first-network/scripts/testorg3.sh delete mode 100755 first-network/scripts/upgrade_to_v14.sh delete mode 100755 first-network/scripts/utils.sh diff --git a/first-network/.env b/first-network/.env deleted file mode 100644 index a6665fed..00000000 --- a/first-network/.env +++ /dev/null @@ -1,2 +0,0 @@ -COMPOSE_PROJECT_NAME=net -IMAGE_TAG=latest diff --git a/first-network/.gitignore b/first-network/.gitignore deleted file mode 100644 index 038650ef..00000000 --- a/first-network/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -/channel-artifacts/*.tx -/channel-artifacts/*.block -/crypto-config/* -/ledgers -/ledgers-backup -/channel-artifacts/*.json -/org3-artifacts/crypto-config/* -/connection-*.* \ No newline at end of file diff --git a/first-network/README.md b/first-network/README.md deleted file mode 100644 index 6d9e2543..00000000 --- a/first-network/README.md +++ /dev/null @@ -1,7 +0,0 @@ -## Build Your First Network (BYFN) - -The directions for using this are documented in the Hyperledger Fabric -["Build Your First Network"](http://hyperledger-fabric.readthedocs.io/en/latest/build_network.html) tutorial. - -*NOTE:* After navigating to the documentation, choose the documentation version that matches your version of Fabric - diff --git a/first-network/base/docker-compose-base.yaml b/first-network/base/docker-compose-base.yaml deleted file mode 100644 index 4c55ff96..00000000 --- a/first-network/base/docker-compose-base.yaml +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -services: - - orderer.example.com: - container_name: orderer.example.com - extends: - file: peer-base.yaml - service: orderer-base - volumes: - - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp - - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls - - orderer.example.com:/var/hyperledger/production/orderer - ports: - - 7050:7050 - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org1.example.com - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:7051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org1.example.com:/var/hyperledger/production - ports: - - 7051:7051 - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org1.example.com - - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:8051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org1.example.com:8052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:8051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org1.example.com:/var/hyperledger/production - - ports: - - 8051:8051 - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org2.example.com - - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:9051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org2.example.com:9052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:9052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:9051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:10051 - - CORE_PEER_LOCALMSPID=Org2MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org2.example.com:/var/hyperledger/production - ports: - - 9051:9051 - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org2.example.com - - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:10051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org2.example.com:10052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:10052 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:10051 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:9051 - - CORE_PEER_LOCALMSPID=Org2MSP - volumes: - - /var/run/:/host/var/run/ - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp - - ../crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org2.example.com:/var/hyperledger/production - ports: - - 10051:10051 diff --git a/first-network/base/peer-base.yaml b/first-network/base/peer-base.yaml deleted file mode 100644 index 11dc8a73..00000000 --- a/first-network/base/peer-base.yaml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -services: - peer-base: - image: hyperledger/fabric-peer:$IMAGE_TAG - environment: - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - # the following setting starts chaincode containers on the same - # bridge network as the peers - # https://docs.docker.com/compose/networking/ - - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn - - FABRIC_LOGGING_SPEC=INFO - #- FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_GOSSIP_USELEADERELECTION=true - - CORE_PEER_GOSSIP_ORGLEADER=false - - CORE_PEER_PROFILE_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt - # Allow more time for chaincode container to build on install. - - CORE_CHAINCODE_EXECUTETIMEOUT=300s - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: peer node start - - orderer-base: - image: hyperledger/fabric-orderer:$IMAGE_TAG - environment: - - FABRIC_LOGGING_SPEC=INFO - - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 - - ORDERER_GENERAL_BOOTSTRAPMETHOD=file - - ORDERER_GENERAL_BOOTSTRAPFILE=/var/hyperledger/orderer/orderer.genesis.block - - ORDERER_GENERAL_LOCALMSPID=OrdererMSP - - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - # enabled TLS - - ORDERER_GENERAL_TLS_ENABLED=true - - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt - - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key - - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] - working_dir: /opt/gopath/src/github.com/hyperledger/fabric - command: orderer - diff --git a/first-network/byfn.sh b/first-network/byfn.sh deleted file mode 100755 index 47744946..00000000 --- a/first-network/byfn.sh +++ /dev/null @@ -1,532 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script will orchestrate a sample end-to-end execution of the Hyperledger -# Fabric network. -# -# The end-to-end verification provisions a sample Fabric network consisting of -# two organizations, each maintaining two peers, and a Raft ordering service. -# -# This verification makes use of two fundamental tools, which are necessary to -# create a functioning transactional network with digital signature validation -# and access control: -# -# * cryptogen - generates the x509 certificates used to identify and -# authenticate the various components in the network. -# * configtxgen - generates the requisite configuration artifacts for orderer -# bootstrap and channel creation. -# -# Each tool consumes a configuration yaml file, within which we specify the topology -# of our network (cryptogen) and the location of our certificates for various -# configuration operations (configtxgen). Once the tools have been successfully run, -# we are able to launch our network. More detail on the tools and the structure of -# the network will be provided later in this document. For now, let's get going... - -# prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries -# this may be commented out to resolve installed version of tools if desired -export PATH=${PWD}/../bin:${PWD}:$PATH -export FABRIC_CFG_PATH=${PWD} -export VERBOSE=false - -# Print the usage message -function printHelp() { - echo "Usage: " - echo " byfn.sh [-c ] [-t ] [-d ] [-f ] [-s ] [-l ] [-i ] [-a] [-n] [-v]" - echo " - one of 'up', 'down', 'restart', 'generate' or 'upgrade'" - echo " - 'up' - bring up the network with docker-compose up" - echo " - 'down' - clear the network with docker-compose down" - echo " - 'restart' - restart the network" - echo " - 'generate' - generate required certificates and genesis block" - echo " - 'upgrade' - upgrade the network from version 1.3.x to 1.4.0" - echo " -c - channel name to use (defaults to \"mychannel\")" - echo " -t - CLI timeout duration in seconds (defaults to 10)" - echo " -d - delay duration in seconds (defaults to 3)" - echo " -s - the database backend to use: goleveldb (default) or couchdb" - echo " -l - the programming language of the chaincode to deploy: go (default), javascript, or java" - echo " -i - the tag to be used to launch the network (defaults to \"latest\")" - echo " -a - launch certificate authorities (no certificate authorities are launched by default)" - echo " -n - do not deploy chaincode (abstore chaincode is deployed by default)" - echo " -v - verbose mode" - echo " byfn.sh -h (print this message)" - 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 generate -c mychannel" - echo " byfn.sh up -c mychannel -s couchdb" - echo " byfn.sh up -c mychannel -s couchdb -i 1.4.0" - echo " byfn.sh up -l javascript" - echo " byfn.sh down -c mychannel" - echo " byfn.sh upgrade -c mychannel" - echo - echo "Taking all defaults:" - echo " byfn.sh generate" - echo " byfn.sh up" - echo " byfn.sh down" -} - -# Ask user for confirmation to proceed -function askProceed() { - read -p "Continue? [Y/n] " ans - case "$ans" in - y | Y | "") - echo "proceeding ..." - ;; - n | N) - echo "exiting..." - exit 1 - ;; - *) - echo "invalid response" - askProceed - ;; - esac -} - -# Obtain CONTAINER_IDS and remove them -# TODO Might want to make this optional - could clear other containers -function clearContainers() { - CONTAINER_IDS=$(docker ps -a | awk '($2 ~ /dev-peer.*/) {print $1}') - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then - echo "---- No containers available for deletion ----" - else - docker rm -f $CONTAINER_IDS - fi -} - -# Delete any images that were generated as a part of this setup -# specifically the following images are often left behind: -# TODO list generated image naming patterns -function removeUnwantedImages() { - DOCKER_IMAGE_IDS=$(docker images | awk '($1 ~ /dev-peer.*/) {print $3}') - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then - echo "---- No images available for deletion ----" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi -} - -# Versions of fabric known not to work with this release of first-network -BLACKLISTED_VERSIONS="^1\." - -# Do some basic sanity checking to make sure that the appropriate versions of fabric -# binaries/images are available. In the future, additional checking for the presence -# of go or other items could be added. -function checkPrereqs() { - # Note, we check configtxlator externally because it does not require a config file, and peer in the - # docker image because of FAB-8551 that makes configtxlator return 'development version' in docker - LOCAL_VERSION=$(configtxlator version | sed -ne 's/ Version: //p') - DOCKER_IMAGE_VERSION=$(docker run --rm hyperledger/fabric-tools:$IMAGETAG peer version | sed -ne 's/ Version: //p' | head -1) - - echo "LOCAL_VERSION=$LOCAL_VERSION" - echo "DOCKER_IMAGE_VERSION=$DOCKER_IMAGE_VERSION" - - if [ "$LOCAL_VERSION" != "$DOCKER_IMAGE_VERSION" ]; then - echo "=================== WARNING ===================" - echo " Local fabric binaries and docker images are " - echo " out of sync. This may cause problems. " - echo "===============================================" - fi - - for UNSUPPORTED_VERSION in $BLACKLISTED_VERSIONS; do - echo "$LOCAL_VERSION" | grep -q $UNSUPPORTED_VERSION - if [ $? -eq 0 ]; then - echo "ERROR! Local Fabric binary version of $LOCAL_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." - exit 1 - fi - - echo "$DOCKER_IMAGE_VERSION" | grep -q $UNSUPPORTED_VERSION - if [ $? -eq 0 ]; then - echo "ERROR! Fabric Docker image version of $DOCKER_IMAGE_VERSION does not match this newer version of BYFN and is unsupported. Either move to a later version of Fabric or checkout an earlier version of fabric-samples." - exit 1 - fi - done -} - -# Generate the needed certificates, the genesis block and start the network. -function networkUp() { - checkPrereqs - # generate artifacts if they don't exist - if [ ! -d "crypto-config" ]; then - generateCerts - generateChannelArtifacts - fi - COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}" - if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" - export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) - export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) - fi - if [ "${IF_COUCHDB}" == "couchdb" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" - fi - IMAGE_TAG=$IMAGETAG docker-compose ${COMPOSE_FILES} up -d 2>&1 - docker ps -a - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to start network" - exit 1 - fi - - echo "Sleeping 15s to allow Raft cluster to complete booting" - sleep 15 - - if [ "${NO_CHAINCODE}" != "true" ]; then - echo Vendoring Go dependencies ... - pushd ../chaincode/abstore/go - GO111MODULE=on go mod vendor - popd - echo Finished vendoring Go dependencies - fi - - # now run the end to end script - docker exec cli scripts/script.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE $NO_CHAINCODE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Test failed" - exit 1 - fi -} - -# Upgrade the network components which are at version 1.3.x to 1.4.x -# Stop the orderer and peers, backup the ledger for orderer and peers, cleanup chaincode containers and images -# and relaunch the orderer and peers with latest tag -function upgradeNetwork() { - if [[ "$IMAGETAG" == *"1.4"* ]] || [[ $IMAGETAG == "latest" ]]; then - docker inspect -f '{{.Config.Volumes}}' orderer.example.com | grep -q '/var/hyperledger/production/orderer' - if [ $? -ne 0 ]; then - echo "ERROR !!!! This network does not appear to start with fabric-samples >= v1.3.x?" - exit 1 - fi - - LEDGERS_BACKUP=./ledgers-backup - - # create ledger-backup directory - mkdir -p $LEDGERS_BACKUP - - export IMAGE_TAG=$IMAGETAG - COMPOSE_FILES="-f ${COMPOSE_FILE} -f ${COMPOSE_FILE_RAFT2}" - if [ "${CERTIFICATE_AUTHORITIES}" == "true" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_CA}" - export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls *_sk) - export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls *_sk) - fi - if [ "${IF_COUCHDB}" == "couchdb" ]; then - COMPOSE_FILES="${COMPOSE_FILES} -f ${COMPOSE_FILE_COUCH}" - fi - - # removing the cli container - docker-compose $COMPOSE_FILES stop cli - docker-compose $COMPOSE_FILES up -d --no-deps cli - - echo "Upgrading orderer" - docker-compose $COMPOSE_FILES stop orderer.example.com - docker cp -a orderer.example.com:/var/hyperledger/production/orderer $LEDGERS_BACKUP/orderer.example.com - docker-compose $COMPOSE_FILES up -d --no-deps orderer.example.com - - for PEER in peer0.org1.example.com peer1.org1.example.com peer0.org2.example.com peer1.org2.example.com; do - echo "Upgrading peer $PEER" - - # Stop the peer and backup its ledger - docker-compose $COMPOSE_FILES stop $PEER - docker cp -a $PEER:/var/hyperledger/production $LEDGERS_BACKUP/$PEER/ - - # Remove any old containers and images for this peer - CC_CONTAINERS=$(docker ps | grep dev-$PEER | awk '{print $1}') - if [ -n "$CC_CONTAINERS" ]; then - docker rm -f $CC_CONTAINERS - fi - CC_IMAGES=$(docker images | grep dev-$PEER | awk '{print $1}') - if [ -n "$CC_IMAGES" ]; then - docker rmi -f $CC_IMAGES - fi - - # Start the peer again - docker-compose $COMPOSE_FILES up -d --no-deps $PEER - done - - docker exec cli scripts/upgrade_to_v14.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Test failed" - exit 1 - fi - else - echo "ERROR !!!! Pass the v1.4.x image tag" - fi -} - -# Tear down running network -function networkDown() { - # stop org3 containers also in addition to org1 and org2, in case we were running sample to add org3 - docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_COUCH -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_CA -f $COMPOSE_FILE_ORG3 down --volumes --remove-orphans - - # Don't remove the generated artifacts -- note, the ledgers are always removed - if [ "$MODE" != "restart" ]; then - # Bring down the network, deleting the volumes - #Delete any ledger backups - docker run -v $PWD:/tmp/first-network --rm hyperledger/fabric-tools:$IMAGETAG rm -Rf /tmp/first-network/ledgers-backup - #Cleanup the chaincode containers - clearContainers - #Cleanup images - removeUnwantedImages - # remove orderer block and other channel configuration transactions and certs - rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config ./org3-artifacts/crypto-config/ channel-artifacts/org3.json - fi -} - -# We will use the cryptogen tool to generate the cryptographic material (x509 certs) -# for our various network entities. The certificates are based on a standard PKI -# implementation where validation is achieved by reaching a common trust anchor. -# -# Cryptogen consumes a file - ``crypto-config.yaml`` - that contains the network -# topology and allows us to generate a library of certificates for both the -# Organizations and the components that belong to those Organizations. Each -# Organization is provisioned a unique root certificate (``ca-cert``), that binds -# specific components (peers and orderers) to that Org. Transactions and communications -# within Fabric are signed by an entity's private key (``keystore``), and then verified -# by means of a public key (``signcerts``). You will notice a "count" variable within -# this file. We use this to specify the number of peers per Organization; in our -# case it's two peers per Org. The rest of this template is extremely -# self-explanatory. -# -# After we run the tool, the certs will be parked in a folder titled ``crypto-config``. - -# Generates Org certs using cryptogen tool -function generateCerts() { - which cryptogen - if [ "$?" -ne 0 ]; then - echo "cryptogen tool not found. exiting" - exit 1 - fi - echo - echo "##########################################################" - echo "##### Generate certificates using cryptogen tool #########" - echo "##########################################################" - - if [ -d "crypto-config" ]; then - rm -Rf crypto-config - fi - set -x - cryptogen generate --config=./crypto-config.yaml - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate certificates..." - exit 1 - fi - echo - echo "Generate CCP files for Org1 and Org2" - ./ccp-generate.sh -} - -# The `configtxgen tool is used to create four artifacts: orderer **bootstrap -# block**, fabric **channel configuration transaction**, and two **anchor -# peer transactions** - one for each Peer Org. -# -# The orderer block is the genesis block for the ordering service, and the -# channel transaction file is broadcast to the orderer at channel creation -# time. The anchor peer transactions, as the name might suggest, specify each -# Org's anchor peer on this channel. -# -# Configtxgen consumes a file - ``configtx.yaml`` - that contains the definitions -# for the sample network. There are three members - one Orderer Org (``OrdererOrg``) -# and two Peer Orgs (``Org1`` & ``Org2``) each managing and maintaining two peer nodes. -# This file also specifies a consortium - ``SampleConsortium`` - consisting of our -# two Peer Orgs. Pay specific attention to the "Profiles" section at the top of -# this file. You will notice that we have two unique headers. One for the orderer genesis -# block - ``TwoOrgsOrdererGenesis`` - and one for our channel - ``TwoOrgsChannel``. -# These headers are important, as we will pass them in as arguments when we create -# our artifacts. This file also contains two additional specifications that are worth -# noting. Firstly, we specify the anchor peers for each Peer Org -# (``peer0.org1.example.com`` & ``peer0.org2.example.com``). Secondly, we point to -# the location of the MSP directory for each member, in turn allowing us to store the -# root certificates for each Org in the orderer genesis block. This is a critical -# concept. Now any network entity communicating with the ordering service can have -# its digital signature verified. -# -# This function will generate the crypto material and our four configuration -# artifacts, and subsequently output these files into the ``channel-artifacts`` -# folder. -# -# If you receive the following warning, it can be safely ignored: -# -# [bccsp] GetDefault -> WARN 001 Before using BCCSP, please call InitFactories(). Falling back to bootBCCSP. -# -# You can ignore the logs regarding intermediate certs, we are not using them in -# this crypto implementation. - -# Generate orderer genesis block, channel configuration transaction and -# anchor peer update transactions -function generateChannelArtifacts() { - which configtxgen - if [ "$?" -ne 0 ]; then - echo "configtxgen tool not found. exiting" - exit 1 - fi - - echo "##########################################################" - echo "######### Generating Orderer Genesis block ##############" - echo "##########################################################" - # Note: For some unknown reason (at least for now) the block file can't be - # named orderer.genesis.block or the orderer will fail to launch! - set -x - configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate orderer genesis block..." - exit 1 - fi - echo - echo "#################################################################" - echo "### Generating channel configuration transaction 'channel.tx' ###" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate channel configuration transaction..." - exit 1 - fi - - echo - echo "#################################################################" - echo "####### Generating anchor peer update for Org1MSP ##########" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update for Org1MSP..." - exit 1 - fi - - echo - echo "#################################################################" - echo "####### Generating anchor peer update for Org2MSP ##########" - echo "#################################################################" - set -x - configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate \ - ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate anchor peer update for Org2MSP..." - exit 1 - fi - echo -} - -# timeout duration - the duration the CLI should wait for a response from -# another container before giving up -CLI_TIMEOUT=10 -# default for delay between commands -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 -# -COMPOSE_FILE_COUCH=docker-compose-couch.yaml -# org3 docker compose file -COMPOSE_FILE_ORG3=docker-compose-org3.yaml -# two additional etcd/raft orderers -COMPOSE_FILE_RAFT2=docker-compose-etcdraft2.yaml -# certificate authorities compose file -COMPOSE_FILE_CA=docker-compose-ca.yaml -# -# use go as the default language for chaincode -CC_SRC_LANGUAGE=go -# default image tag -IMAGETAG="latest" -# Parse commandline args -if [ "$1" = "-m" ]; then # supports old usage, muscle memory is powerful! - shift -fi -MODE=$1 -shift -# Determine whether starting, stopping, restarting, generating or upgrading -if [ "$MODE" == "up" ]; then - EXPMODE="Starting" -elif [ "$MODE" == "down" ]; then - EXPMODE="Stopping" -elif [ "$MODE" == "restart" ]; then - EXPMODE="Restarting" -elif [ "$MODE" == "generate" ]; then - EXPMODE="Generating certs and genesis block" -elif [ "$MODE" == "upgrade" ]; then - EXPMODE="Upgrading the network" -else - printHelp - exit 1 -fi - -while getopts "h?c:t:d:s:l:i:anv" opt; do - case "$opt" in - h | \?) - printHelp - exit 0 - ;; - c) - CHANNEL_NAME=$OPTARG - ;; - t) - CLI_TIMEOUT=$OPTARG - ;; - d) - CLI_DELAY=$OPTARG - ;; - s) - IF_COUCHDB=$OPTARG - ;; - l) - CC_SRC_LANGUAGE=$OPTARG - ;; - i) - IMAGETAG=$(go env GOARCH)"-"$OPTARG - ;; - a) - CERTIFICATE_AUTHORITIES=true - ;; - n) - NO_CHAINCODE=true - ;; - v) - VERBOSE=true - ;; - esac -done - - -# Announce what was requested - -if [ "${IF_COUCHDB}" == "couchdb" ]; then - echo - echo "${EXPMODE} for channel '${CHANNEL_NAME}' with CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds and using database '${IF_COUCHDB}'" -else - echo "${EXPMODE} for channel '${CHANNEL_NAME}' with CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds" -fi -# ask for confirmation to proceed -askProceed - -#Create the network using docker compose -if [ "${MODE}" == "up" ]; then - networkUp -elif [ "${MODE}" == "down" ]; then ## Clear the network - networkDown -elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts - generateCerts - generateChannelArtifacts -elif [ "${MODE}" == "restart" ]; then ## Restart the network - networkDown - networkUp -elif [ "${MODE}" == "upgrade" ]; then ## Upgrade the network from version 1.2.x to 1.3.x - upgradeNetwork -else - printHelp - exit 1 -fi diff --git a/first-network/ccp-generate.sh b/first-network/ccp-generate.sh deleted file mode 100755 index 11d37155..00000000 --- a/first-network/ccp-generate.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -function one_line_pem { - echo "`awk 'NF {sub(/\\n/, ""); printf "%s\\\\\\\n",$0;}' $1`" -} - -function json_ccp { - local PP=$(one_line_pem $5) - local CP=$(one_line_pem $6) - sed -e "s/\${ORG}/$1/" \ - -e "s/\${P0PORT}/$2/" \ - -e "s/\${P1PORT}/$3/" \ - -e "s/\${CAPORT}/$4/" \ - -e "s#\${PEERPEM}#$PP#" \ - -e "s#\${CAPEM}#$CP#" \ - ccp-template.json -} - -function yaml_ccp { - local PP=$(one_line_pem $5) - local CP=$(one_line_pem $6) - sed -e "s/\${ORG}/$1/" \ - -e "s/\${P0PORT}/$2/" \ - -e "s/\${P1PORT}/$3/" \ - -e "s/\${CAPORT}/$4/" \ - -e "s#\${PEERPEM}#$PP#" \ - -e "s#\${CAPEM}#$CP#" \ - ccp-template.yaml | sed -e $'s/\\\\n/\\\n /g' -} - -ORG=1 -P0PORT=7051 -P1PORT=8051 -CAPORT=7054 -PEERPEM=crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem -CAPEM=crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem - -echo "$(json_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org1.json -echo "$(yaml_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org1.yaml - -ORG=2 -P0PORT=9051 -P1PORT=10051 -CAPORT=8054 -PEERPEM=crypto-config/peerOrganizations/org2.example.com/tlsca/tlsca.org2.example.com-cert.pem -CAPEM=crypto-config/peerOrganizations/org2.example.com/ca/ca.org2.example.com-cert.pem - -echo "$(json_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org2.json -echo "$(yaml_ccp $ORG $P0PORT $P1PORT $CAPORT $PEERPEM $CAPEM)" > connection-org2.yaml diff --git a/first-network/ccp-template.json b/first-network/ccp-template.json deleted file mode 100644 index 243f0ccd..00000000 --- a/first-network/ccp-template.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "first-network-org${ORG}", - "version": "1.0.0", - "client": { - "organization": "Org${ORG}", - "connection": { - "timeout": { - "peer": { - "endorser": "300" - } - } - } - }, - "organizations": { - "Org${ORG}": { - "mspid": "Org${ORG}MSP", - "peers": [ - "peer0.org${ORG}.example.com", - "peer1.org${ORG}.example.com" - ], - "certificateAuthorities": [ - "ca.org${ORG}.example.com" - ] - } - }, - "peers": { - "peer0.org${ORG}.example.com": { - "url": "grpcs://localhost:${P0PORT}", - "tlsCACerts": { - "pem": "${PEERPEM}" - }, - "grpcOptions": { - "ssl-target-name-override": "peer0.org${ORG}.example.com", - "hostnameOverride": "peer0.org${ORG}.example.com" - } - }, - "peer1.org${ORG}.example.com": { - "url": "grpcs://localhost:${P1PORT}", - "tlsCACerts": { - "pem": "${PEERPEM}" - }, - "grpcOptions": { - "ssl-target-name-override": "peer1.org${ORG}.example.com", - "hostnameOverride": "peer1.org${ORG}.example.com" - } - } - }, - "certificateAuthorities": { - "ca.org${ORG}.example.com": { - "url": "https://localhost:${CAPORT}", - "caName": "ca-org${ORG}", - "tlsCACerts": { - "pem": "${CAPEM}" - }, - "httpOptions": { - "verify": false - } - } - } -} diff --git a/first-network/ccp-template.yaml b/first-network/ccp-template.yaml deleted file mode 100644 index 35333d99..00000000 --- a/first-network/ccp-template.yaml +++ /dev/null @@ -1,43 +0,0 @@ ---- -name: first-network-org${ORG} -version: 1.0.0 -client: - organization: Org${ORG} - connection: - timeout: - peer: - endorser: '300' -organizations: - Org${ORG}: - mspid: Org${ORG}MSP - peers: - - peer0.org${ORG}.example.com - - peer1.org${ORG}.example.com - certificateAuthorities: - - ca.org${ORG}.example.com -peers: - peer0.org${ORG}.example.com: - url: grpcs://localhost:${P0PORT} - tlsCACerts: - pem: | - ${PEERPEM} - grpcOptions: - ssl-target-name-override: peer0.org${ORG}.example.com - hostnameOverride: peer0.org${ORG}.example.com - peer1.org${ORG}.example.com: - url: grpcs://localhost:${P1PORT} - tlsCACerts: - pem: | - ${PEERPEM} - grpcOptions: - ssl-target-name-override: peer1.org${ORG}.example.com - hostnameOverride: peer1.org${ORG}.example.com -certificateAuthorities: - ca.org${ORG}.example.com: - url: https://localhost:${CAPORT} - caName: ca-org${ORG} - tlsCACerts: - pem: | - ${CAPEM} - httpOptions: - verify: false diff --git a/first-network/channel-artifacts/.gitkeep b/first-network/channel-artifacts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/first-network/configtx.yaml b/first-network/configtx.yaml deleted file mode 100644 index c81f2b02..00000000 --- a/first-network/configtx.yaml +++ /dev/null @@ -1,363 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Section: Organizations -# -# - This section defines the different organizational identities which will -# be referenced later in the configuration. -# -################################################################################ -Organizations: - - # SampleOrg defines an MSP using the sampleconfig. It should never be used - # in production but may be used as a template for other definitions - - &OrdererOrg - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: OrdererOrg - - # ID to load the MSP definition as - ID: OrdererMSP - - # MSPDir is the filesystem path which contains the MSP configuration - MSPDir: crypto-config/ordererOrganizations/example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('OrdererMSP.member')" - Writers: - Type: Signature - Rule: "OR('OrdererMSP.member')" - Admins: - Type: Signature - Rule: "OR('OrdererMSP.admin')" - - OrdererEndpoints: - - orderer.example.com:7050 - - - &Org1 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org1MSP - - # ID to load the MSP definition as - ID: Org1MSP - - MSPDir: crypto-config/peerOrganizations/org1.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org1MSP.admin', 'Org1MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org1MSP.admin')" - Endorsement: - Type: Signature - Rule: "OR('Org1MSP.peer')" - - # leave this flag set to true. - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org1.example.com - Port: 7051 - - - &Org2 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org2MSP - - # ID to load the MSP definition as - ID: Org2MSP - - MSPDir: crypto-config/peerOrganizations/org2.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org2MSP.admin', 'Org2MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org2MSP.admin')" - Endorsement: - Type: Signature - Rule: "OR('Org2MSP.peer')" - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org2.example.com - Port: 9051 - -################################################################################ -# -# SECTION: Capabilities -# -# - This section defines the capabilities of fabric network. This is a new -# concept as of v1.1.0 and should not be utilized in mixed networks with -# v1.0.x peers and orderers. Capabilities define features which must be -# present in a fabric binary for that binary to safely participate in the -# fabric network. For instance, if a new MSP type is added, newer binaries -# might recognize and validate the signatures from this type, while older -# binaries without this support would be unable to validate those -# transactions. This could lead to different versions of the fabric binaries -# having different world states. Instead, defining a capability for a channel -# informs those binaries without this capability that they must cease -# processing transactions until they have been upgraded. For v1.0.x if any -# capabilities are defined (including a map with all capabilities turned off) -# then the v1.0.x peer will deliberately crash. -# -################################################################################ -Capabilities: - # Channel capabilities apply to both the orderers and the peers and must be - # supported by both. - # Set the value of the capability to true to require it. - Channel: &ChannelCapabilities - # V2_0 capability ensures that orderers and peers behave according - # to v2.0 channel capabilities. Orderers and peers from - # prior releases would behave in an incompatible way, and are therefore - # not able to participate in channels at v2.0 capability. - # Prior to enabling V2.0 channel capabilities, ensure that all - # orderers and peers on a channel are at v2.0.0 or later. - V2_0: true - - # Orderer capabilities apply only to the orderers, and may be safely - # used with prior release peers. - # Set the value of the capability to true to require it. - Orderer: &OrdererCapabilities - # V2_0 orderer capability ensures that orderers behave according - # to v2.0 orderer capabilities. Orderers from - # prior releases would behave in an incompatible way, and are therefore - # not able to participate in channels at v2.0 orderer capability. - # Prior to enabling V2.0 orderer capabilities, ensure that all - # orderers on channel are at v2.0.0 or later. - V2_0: true - - # Application capabilities apply only to the peer network, and may be safely - # used with prior release orderers. - # Set the value of the capability to true to require it. - Application: &ApplicationCapabilities - # V2_0 application capability ensures that peers behave according - # to v2.0 application capabilities. Peers from - # prior releases would behave in an incompatible way, and are therefore - # not able to participate in channels at v2.0 application capability. - # Prior to enabling V2.0 application capabilities, ensure that all - # peers on channel are at v2.0.0 or later. - V2_0: true - -################################################################################ -# -# SECTION: Application -# -# - This section defines the values to encode into a config transaction or -# genesis block for application related parameters -# -################################################################################ -Application: &ApplicationDefaults - - # Organizations is the list of orgs which are defined as participants on - # the application side of the network - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Application policies, their canonical path is - # /Channel/Application/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - LifecycleEndorsement: - Type: ImplicitMeta - Rule: "MAJORITY Endorsement" - Endorsement: - Type: ImplicitMeta - Rule: "MAJORITY Endorsement" - - Capabilities: - <<: *ApplicationCapabilities -################################################################################ -# -# SECTION: Orderer -# -# - This section defines the values to encode into a config transaction or -# genesis block for orderer related parameters -# -################################################################################ -Orderer: &OrdererDefaults - - # Orderer Type: The orderer implementation to start - OrdererType: etcdraft - - # Batch Timeout: The amount of time to wait before creating a batch - BatchTimeout: 2s - - # Batch Size: Controls the number of messages batched into a block - BatchSize: - - # Max Message Count: The maximum number of messages to permit in a batch - MaxMessageCount: 10 - - # Absolute Max Bytes: The absolute maximum number of bytes allowed for - # the serialized messages in a batch. - AbsoluteMaxBytes: 99 MB - - # Preferred Max Bytes: The preferred maximum number of bytes allowed for - # the serialized messages in a batch. A message larger than the preferred - # max bytes will result in a batch larger than preferred max bytes. - PreferredMaxBytes: 512 KB - - # Organizations is the list of orgs which are defined as participants on - # the orderer side of the network - Organizations: - - # Policies defines the set of policies at this level of the config tree - # For Orderer policies, their canonical path is - # /Channel/Orderer/ - Policies: - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - # BlockValidation specifies what signatures must be included in the block - # from the orderer for the peer to validate it. - BlockValidation: - Type: ImplicitMeta - Rule: "ANY Writers" - -################################################################################ -# -# CHANNEL -# -# This section defines the values to encode into a config transaction or -# genesis block for channel related parameters. -# -################################################################################ -Channel: &ChannelDefaults - # Policies defines the set of policies at this level of the config tree - # For Channel policies, their canonical path is - # /Channel/ - Policies: - # Who may invoke the 'Deliver' API - Readers: - Type: ImplicitMeta - Rule: "ANY Readers" - # Who may invoke the 'Broadcast' API - Writers: - Type: ImplicitMeta - Rule: "ANY Writers" - # By default, who may modify elements at this config level - Admins: - Type: ImplicitMeta - Rule: "MAJORITY Admins" - - # Capabilities describes the channel level capabilities, see the - # dedicated Capabilities section elsewhere in this file for a full - # description - Capabilities: - <<: *ChannelCapabilities - -################################################################################ -# -# Profile -# -# - Different configuration profiles may be encoded here to be specified -# as parameters to the configtxgen tool -# -################################################################################ -Profiles: - - TwoOrgsChannel: - Consortium: SampleConsortium - <<: *ChannelDefaults - Application: - <<: *ApplicationDefaults - Organizations: - - *Org1 - - *Org2 - Capabilities: - <<: *ApplicationCapabilities - - SampleMultiNodeEtcdRaft: - <<: *ChannelDefaults - Capabilities: - <<: *ChannelCapabilities - Orderer: - <<: *OrdererDefaults - OrdererType: etcdraft - EtcdRaft: - Consenters: - - Host: orderer.example.com - Port: 7050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/server.crt - - Host: orderer2.example.com - Port: 8050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/server.crt - - Host: orderer3.example.com - Port: 9050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/server.crt - - Host: orderer4.example.com - Port: 10050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/server.crt - - Host: orderer5.example.com - Port: 11050 - ClientTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt - ServerTLSCert: crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/server.crt - Addresses: - - orderer.example.com:7050 - - orderer2.example.com:8050 - - orderer3.example.com:9050 - - orderer4.example.com:10050 - - orderer5.example.com:11050 - - Organizations: - - *OrdererOrg - Capabilities: - <<: *OrdererCapabilities - Application: - <<: *ApplicationDefaults - Organizations: - - <<: *OrdererOrg - Consortiums: - SampleConsortium: - Organizations: - - *Org1 - - *Org2 diff --git a/first-network/crypto-config.yaml b/first-network/crypto-config.yaml deleted file mode 100644 index a38299b5..00000000 --- a/first-network/crypto-config.yaml +++ /dev/null @@ -1,88 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# --------------------------------------------------------------------------- -# "OrdererOrgs" - Definition of organizations managing orderer nodes -# --------------------------------------------------------------------------- -OrdererOrgs: - # --------------------------------------------------------------------------- - # Orderer - # --------------------------------------------------------------------------- - - Name: Orderer - Domain: example.com - # --------------------------------------------------------------------------- - # "Specs" - See PeerOrgs below for complete description - # --------------------------------------------------------------------------- - Specs: - - Hostname: orderer - - Hostname: orderer2 - - Hostname: orderer3 - - Hostname: orderer4 - - Hostname: orderer5 - -# --------------------------------------------------------------------------- -# "PeerOrgs" - Definition of organizations managing peer nodes -# --------------------------------------------------------------------------- -PeerOrgs: - # --------------------------------------------------------------------------- - # Org1 - # --------------------------------------------------------------------------- - - Name: Org1 - Domain: org1.example.com - EnableNodeOUs: true - # --------------------------------------------------------------------------- - # "Specs" - # --------------------------------------------------------------------------- - # Uncomment this section to enable the explicit definition of hosts in your - # configuration. Most users will want to use Template, below - # - # Specs is an array of Spec entries. Each Spec entry consists of two fields: - # - Hostname: (Required) The desired hostname, sans the domain. - # - CommonName: (Optional) Specifies the template or explicit override for - # the CN. By default, this is the template: - # - # "{{.Hostname}}.{{.Domain}}" - # - # which obtains its values from the Spec.Hostname and - # Org.Domain, respectively. - # --------------------------------------------------------------------------- - # Specs: - # - Hostname: foo # implicitly "foo.org1.example.com" - # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above - # - Hostname: bar - # - Hostname: baz - # --------------------------------------------------------------------------- - # "Template" - # --------------------------------------------------------------------------- - # Allows for the definition of 1 or more hosts that are created sequentially - # from a template. By default, this looks like "peer%d" from 0 to Count-1. - # You may override the number of nodes (Count), the starting index (Start) - # or the template used to construct the name (Hostname). - # - # Note: Template and Specs are not mutually exclusive. You may define both - # sections and the aggregate nodes will be created for you. Take care with - # name collisions - # --------------------------------------------------------------------------- - Template: - Count: 2 - # Start: 5 - # Hostname: {{.Prefix}}{{.Index}} # default - # --------------------------------------------------------------------------- - # "Users" - # --------------------------------------------------------------------------- - # Count: The number of user accounts _in addition_ to Admin - # --------------------------------------------------------------------------- - Users: - Count: 1 - # --------------------------------------------------------------------------- - # Org2: See "Org1" for full specification - # --------------------------------------------------------------------------- - - Name: Org2 - Domain: org2.example.com - EnableNodeOUs: true - Template: - Count: 2 - Users: - Count: 1 diff --git a/first-network/docker-compose-ca.yaml b/first-network/docker-compose-ca.yaml deleted file mode 100644 index 7f019606..00000000 --- a/first-network/docker-compose-ca.yaml +++ /dev/null @@ -1,46 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - ca0: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/${BYFN_CA1_PRIVATE_KEY} - - FABRIC_CA_SERVER_PORT=7054 - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${BYFN_CA1_PRIVATE_KEY} -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - networks: - - byfn - - ca1: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/${BYFN_CA2_PRIVATE_KEY} - - FABRIC_CA_SERVER_PORT=8054 - ports: - - "8054:8054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${BYFN_CA2_PRIVATE_KEY} -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - networks: - - byfn \ No newline at end of file diff --git a/first-network/docker-compose-cli.yaml b/first-network/docker-compose-cli.yaml deleted file mode 100644 index 7ad11f01..00000000 --- a/first-network/docker-compose-cli.yaml +++ /dev/null @@ -1,93 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - byfn: - -services: - - orderer.example.com: - extends: - file: base/docker-compose-base.yaml - service: orderer.example.com - container_name: orderer.example.com - networks: - - byfn - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org1.example.com - networks: - - byfn - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org1.example.com - networks: - - byfn - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org2.example.com - networks: - - byfn - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org2.example.com - networks: - - byfn - - cli: - container_name: cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - #- FABRIC_LOGGING_SPEC=DEBUG - - FABRIC_LOGGING_SPEC=INFO - - CORE_PEER_ID=cli - - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - - CORE_PEER_LOCALMSPID=Org1MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key - - 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 - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode - - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts - depends_on: - - orderer.example.com - - peer0.org1.example.com - - peer1.org1.example.com - - peer0.org2.example.com - - peer1.org2.example.com - networks: - - byfn diff --git a/first-network/docker-compose-couch-org3.yaml b/first-network/docker-compose-couch-org3.yaml deleted file mode 100644 index d1ab4ebc..00000000 --- a/first-network/docker-compose-couch-org3.yaml +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - couchdb4: - container_name: couchdb4 - image: couchdb:2.3 - # 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: - - "9984:5984" - networks: - - byfn - - peer0.org3.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb4: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: - - couchdb4 - - couchdb5: - container_name: couchdb5 - image: couchdb:2.3 - # 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: - - "10984:5984" - networks: - - byfn - - peer1.org3.example.com: - environment: - - CORE_LEDGER_STATE_STATEDATABASE=CouchDB - - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb5: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: - - couchdb5 diff --git a/first-network/docker-compose-couch.yaml b/first-network/docker-compose-couch.yaml deleted file mode 100644 index d7a2bdc0..00000000 --- a/first-network/docker-compose-couch.yaml +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -networks: - byfn: - -services: - couchdb0: - container_name: couchdb0 - image: couchdb:2.3 - # 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: - - "5984:5984" - networks: - - byfn - - peer0.org1.example.com: - 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: couchdb:2.3 - # 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: - - "6984:5984" - networks: - - byfn - - peer1.org1.example.com: - 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: couchdb:2.3 - # 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: - - "7984:5984" - networks: - - byfn - - peer0.org2.example.com: - 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: couchdb:2.3 - # 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: - - "8984:5984" - networks: - - byfn - - peer1.org2.example.com: - 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 diff --git a/first-network/docker-compose-e2e-template.yaml b/first-network/docker-compose-e2e-template.yaml deleted file mode 100644 index bd874028..00000000 --- a/first-network/docker-compose-e2e-template.yaml +++ /dev/null @@ -1,90 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer.example.com: - peer0.org1.example.com: - peer1.org1.example.com: - peer0.org2.example.com: - peer1.org2.example.com: - -networks: - byfn: -services: - ca0: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org1 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/CA1_PRIVATE_KEY - ports: - - "7054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/CA1_PRIVATE_KEY -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg1 - networks: - - byfn - - ca1: - image: hyperledger/fabric-ca:$IMAGE_TAG - environment: - - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - - FABRIC_CA_SERVER_CA_NAME=ca-org2 - - FABRIC_CA_SERVER_TLS_ENABLED=true - - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem - - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/CA2_PRIVATE_KEY - ports: - - "8054:7054" - command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org2.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/CA2_PRIVATE_KEY -b admin:adminpw -d' - volumes: - - ./crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config - container_name: ca_peerOrg2 - networks: - - byfn - - orderer.example.com: - extends: - file: base/docker-compose-base.yaml - service: orderer.example.com - container_name: orderer.example.com - networks: - - byfn - - peer0.org1.example.com: - container_name: peer0.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org1.example.com - networks: - - byfn - - peer1.org1.example.com: - container_name: peer1.org1.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org1.example.com - networks: - - byfn - - peer0.org2.example.com: - container_name: peer0.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer0.org2.example.com - networks: - - byfn - - peer1.org2.example.com: - container_name: peer1.org2.example.com - extends: - file: base/docker-compose-base.yaml - service: peer1.org2.example.com - networks: - - byfn diff --git a/first-network/docker-compose-etcdraft2.yaml b/first-network/docker-compose-etcdraft2.yaml deleted file mode 100644 index 042d884a..00000000 --- a/first-network/docker-compose-etcdraft2.yaml +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - orderer2.example.com: - orderer3.example.com: - orderer4.example.com: - orderer5.example.com: - -networks: - byfn: - -services: - - orderer2.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=8050 - container_name: orderer2.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls - - orderer2.example.com:/var/hyperledger/production/orderer - ports: - - 8050:8050 - - orderer3.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=9050 - container_name: orderer3.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer3.example.com/tls/:/var/hyperledger/orderer/tls - - orderer3.example.com:/var/hyperledger/production/orderer - ports: - - 9050:9050 - - orderer4.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=10050 - container_name: orderer4.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer4.example.com/tls/:/var/hyperledger/orderer/tls - - orderer4.example.com:/var/hyperledger/production/orderer - ports: - - 10050:10050 - - orderer5.example.com: - extends: - file: base/peer-base.yaml - service: orderer-base - environment: - - ORDERER_GENERAL_LISTENPORT=11050 - container_name: orderer5.example.com - networks: - - byfn - volumes: - - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/msp:/var/hyperledger/orderer/msp - - ./crypto-config/ordererOrganizations/example.com/orderers/orderer5.example.com/tls/:/var/hyperledger/orderer/tls - - orderer5.example.com:/var/hyperledger/production/orderer - ports: - - 11050:11050 diff --git a/first-network/docker-compose-org3.yaml b/first-network/docker-compose-org3.yaml deleted file mode 100644 index 20aa79cf..00000000 --- a/first-network/docker-compose-org3.yaml +++ /dev/null @@ -1,97 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -version: '2' - -volumes: - peer0.org3.example.com: - peer1.org3.example.com: - -networks: - byfn: - -services: - - peer0.org3.example.com: - container_name: peer0.org3.example.com - extends: - file: base/peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer0.org3.example.com - - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:11051 - - CORE_PEER_CHAINCODEADDRESS=peer0.org3.example.com:11052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:11052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org3.example.com:12051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org3.example.com:11051 - - CORE_PEER_LOCALMSPID=Org3MSP - volumes: - - /var/run/:/host/var/run/ - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/msp:/etc/hyperledger/fabric/msp - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls:/etc/hyperledger/fabric/tls - - peer0.org3.example.com:/var/hyperledger/production - ports: - - 11051:11051 - networks: - - byfn - - peer1.org3.example.com: - container_name: peer1.org3.example.com - extends: - file: base/peer-base.yaml - service: peer-base - environment: - - CORE_PEER_ID=peer1.org3.example.com - - CORE_PEER_ADDRESS=peer1.org3.example.com:12051 - - CORE_PEER_LISTENADDRESS=0.0.0.0:12051 - - CORE_PEER_CHAINCODEADDRESS=peer1.org3.example.com:12052 - - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:12052 - - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org3.example.com:11051 - - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org3.example.com:12051 - - CORE_PEER_LOCALMSPID=Org3MSP - volumes: - - /var/run/:/host/var/run/ - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/msp:/etc/hyperledger/fabric/msp - - ./org3-artifacts/crypto-config/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls:/etc/hyperledger/fabric/tls - - peer1.org3.example.com:/var/hyperledger/production - ports: - - 12051:12051 - networks: - - byfn - - - Org3cli: - container_name: Org3cli - image: hyperledger/fabric-tools:$IMAGE_TAG - tty: true - stdin_open: true - environment: - - GOPATH=/opt/gopath - - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock - - FABRIC_LOGGING_SPEC=INFO - #- FABRIC_LOGGING_SPEC=DEBUG - - CORE_PEER_ID=Org3cli - - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - - CORE_PEER_LOCALMSPID=Org3MSP - - CORE_PEER_TLS_ENABLED=true - - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/server.crt - - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/server.key - - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt - - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp - working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer - command: /bin/bash - volumes: - - /var/run/:/host/var/run/ - - ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode - - ./org3-artifacts/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ - - ./crypto-config/peerOrganizations/org1.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com - - ./crypto-config/peerOrganizations/org2.example.com:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com - - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ - depends_on: - - peer0.org3.example.com - - peer1.org3.example.com - networks: - - byfn diff --git a/first-network/eyfn.sh b/first-network/eyfn.sh deleted file mode 100755 index 0a5d82f8..00000000 --- a/first-network/eyfn.sh +++ /dev/null @@ -1,307 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script extends the Hyperledger Fabric By Your First Network by -# adding a third organization to the network previously setup in the -# BYFN tutorial. -# - -# prepending $PWD/../bin to PATH to ensure we are picking up the correct binaries -# this may be commented out to resolve installed version of tools if desired -export PATH=${PWD}/../bin:${PWD}:$PATH -export FABRIC_CFG_PATH=${PWD} -export VERBOSE=false - -# Print the usage message -function printHelp () { - echo "Usage: " - echo " eyfn.sh up|down|restart|generate [-c ] [-t ] [-d ] [-f ] [-s ]" - echo " eyfn.sh -h|--help (print this message)" - echo " - one of 'up', 'down', 'restart' or 'generate'" - echo " - 'up' - bring up the network with docker-compose up" - echo " - 'down' - clear the network with docker-compose down" - echo " - 'restart' - restart the network" - echo " - 'generate' - generate required certificates and genesis block" - echo " -c - channel name to use (defaults to \"mychannel\")" - echo " -t - CLI timeout duration in seconds (defaults to 10)" - echo " -d - delay duration in seconds (defaults to 3)" - echo " -s - the database backend to use: goleveldb (default) or couchdb" - echo " -l - the programming language of the chaincode to deploy: go (default), javascript, or java" - echo " -i - the tag to be used to launch the network (defaults to \"latest\")" - echo " -v - verbose mode" - echo - echo "Typically, one would first generate the required certificates and " - echo "genesis block, then bring up the network. e.g.:" - echo - echo " eyfn.sh generate -c mychannel" - echo " eyfn.sh up -c mychannel -s couchdb" - echo " eyfn.sh up -l javascript" - echo " eyfn.sh down -c mychannel" - echo - echo "Taking all defaults:" - echo " eyfn.sh generate" - echo " eyfn.sh up" - echo " eyfn.sh down" -} - -# Ask user for confirmation to proceed -function askProceed () { - read -p "Continue? [Y/n] " ans - case "$ans" in - y|Y|"" ) - echo "proceeding ..." - ;; - n|N ) - echo "exiting..." - exit 1 - ;; - * ) - echo "invalid response" - askProceed - ;; - esac -} - -# Obtain CONTAINER_IDS and remove them -# TODO Might want to make this optional - could clear other containers -function clearContainers () { - CONTAINER_IDS=$(docker ps -aq) - if [ -z "$CONTAINER_IDS" -o "$CONTAINER_IDS" == " " ]; then - echo "---- No containers available for deletion ----" - else - docker rm -f $CONTAINER_IDS - fi -} - -# Delete any images that were generated as a part of this setup -# specifically the following images are often left behind: -# TODO list generated image naming patterns -function removeUnwantedImages() { - DOCKER_IMAGE_IDS=$(docker images|awk '($1 ~ /dev-peer.*.mycc.*/) {print $3}') - if [ -z "$DOCKER_IMAGE_IDS" -o "$DOCKER_IMAGE_IDS" == " " ]; then - echo "---- No images available for deletion ----" - else - docker rmi -f $DOCKER_IMAGE_IDS - fi -} - -# Generate the needed certificates, the genesis block and start the network. -function networkUp () { - # generate artifacts if they don't exist - if [ ! -d "org3-artifacts/crypto-config" ]; then - generateCerts - generateChannelArtifacts - createConfigTx - fi - # start org3 peers - if [ "${IF_COUCHDB}" == "couchdb" ]; then - IMAGE_TAG=${IMAGETAG} docker-compose -f $COMPOSE_FILE_ORG3 -f $COMPOSE_FILE_COUCH_ORG3 up -d 2>&1 - else - IMAGE_TAG=$IMAGETAG docker-compose -f $COMPOSE_FILE_ORG3 up -d 2>&1 - fi - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to start Org3 network" - exit 1 - fi - echo - echo "###############################################################" - echo "############### Have Org3 peers join network ##################" - echo "###############################################################" - docker exec Org3cli ./scripts/step2org3.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to have Org3 peers join network" - exit 1 - fi - # finish by running the test - docker exec Org3cli ./scripts/testorg3.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to run test" - exit 1 - fi -} - -# Tear down running network -function networkDown () { - docker-compose -f $COMPOSE_FILE -f $COMPOSE_FILE_RAFT2 -f $COMPOSE_FILE_ORG3 -f $COMPOSE_FILE_COUCH down --volumes --remove-orphans - # Don't remove containers, images, etc if restarting - if [ "$MODE" != "restart" ]; then - #Cleanup the chaincode containers - clearContainers - #Cleanup images - removeUnwantedImages - # remove orderer block and other channel configuration transactions and certs - rm -rf channel-artifacts/*.block channel-artifacts/*.tx crypto-config ./org3-artifacts/crypto-config/ channel-artifacts/org3.json - fi -} - -# Use the CLI container to create the configuration transaction needed to add -# Org3 to the network -function createConfigTx () { - echo - echo "###############################################################" - echo "####### Generate and submit config tx to add Org3 #############" - echo "###############################################################" - docker exec cli scripts/step1org3.sh $CHANNEL_NAME $CLI_DELAY $CC_SRC_LANGUAGE $CLI_TIMEOUT $VERBOSE - if [ $? -ne 0 ]; then - echo "ERROR !!!! Unable to create config tx" - exit 1 - fi -} - -# We use the cryptogen tool to generate the cryptographic material -# (x509 certs) for the new org. After we run the tool, the certs will -# be parked in the BYFN folder titled ``crypto-config``. - -# Generates Org3 certs using cryptogen tool -function generateCerts (){ - which cryptogen - if [ "$?" -ne 0 ]; then - echo "cryptogen tool not found. exiting" - exit 1 - fi - echo - echo "###############################################################" - echo "##### Generate Org3 certificates using cryptogen tool #########" - echo "###############################################################" - - (cd org3-artifacts - set -x - cryptogen generate --config=./org3-crypto.yaml - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate certificates..." - exit 1 - fi - ) - echo -} - -# Generate channel configuration transaction -function generateChannelArtifacts() { - which configtxgen - if [ "$?" -ne 0 ]; then - echo "configtxgen tool not found. exiting" - exit 1 - fi - echo "##########################################################" - echo "######### Generating Org3 config material ###############" - echo "##########################################################" - (cd org3-artifacts - export FABRIC_CFG_PATH=$PWD - set -x - configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json - res=$? - set +x - if [ $res -ne 0 ]; then - echo "Failed to generate Org3 config material..." - exit 1 - fi - ) - cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/ - echo -} - - -# If BYFN wasn't run abort -if [ ! -d crypto-config ]; then - echo - echo "ERROR: Please, run byfn.sh first." - echo - exit 1 -fi - -# timeout duration - the duration the CLI should wait for a response from -# another container before giving up -CLI_TIMEOUT=10 -#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 -# -COMPOSE_FILE_COUCH=docker-compose-couch.yaml -# use this as the default docker-compose yaml definition -COMPOSE_FILE_ORG3=docker-compose-org3.yaml -# -COMPOSE_FILE_COUCH_ORG3=docker-compose-couch-org3.yaml -# two additional etcd/raft orderers -COMPOSE_FILE_RAFT2=docker-compose-etcdraft2.yaml -# use go as the default language for chaincode -CC_SRC_LANGUAGE=go -# default image tag -IMAGETAG="latest" - -# Parse commandline args -if [ "$1" = "-m" ];then # supports old usage, muscle memory is powerful! - shift -fi -MODE=$1;shift -# Determine whether starting, stopping, restarting or generating for announce -if [ "$MODE" == "up" ]; then - EXPMODE="Starting" -elif [ "$MODE" == "down" ]; then - EXPMODE="Stopping" -elif [ "$MODE" == "restart" ]; then - EXPMODE="Restarting" -elif [ "$MODE" == "generate" ]; then - EXPMODE="Generating certs and genesis block for" -else - printHelp - exit 1 -fi -while getopts "h?c:t:d:s:l:i:v" opt; do - case "$opt" in - h|\?) - printHelp - exit 0 - ;; - c) CHANNEL_NAME=$OPTARG - ;; - t) CLI_TIMEOUT=$OPTARG - ;; - d) CLI_DELAY=$OPTARG - ;; - s) IF_COUCHDB=$OPTARG - ;; - l) CC_SRC_LANGUAGE=$OPTARG - ;; - i) IMAGETAG=$OPTARG - ;; - v) VERBOSE=true - ;; - esac -done - -# Announce what was requested - - if [ "${IF_COUCHDB}" == "couchdb" ]; then - echo - echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds and using database '${IF_COUCHDB}'" - else - echo "${EXPMODE} with channel '${CHANNEL_NAME}' and CLI timeout of '${CLI_TIMEOUT}' seconds and CLI delay of '${CLI_DELAY}' seconds" - fi -# ask for confirmation to proceed -askProceed - -#Create the network using docker compose -if [ "${MODE}" == "up" ]; then - networkUp -elif [ "${MODE}" == "down" ]; then ## Clear the network - networkDown -elif [ "${MODE}" == "generate" ]; then ## Generate Artifacts - generateCerts - generateChannelArtifacts - createConfigTx -elif [ "${MODE}" == "restart" ]; then ## Restart the network - networkDown - networkUp -else - printHelp - exit 1 -fi diff --git a/first-network/org3-artifacts/configtx.yaml b/first-network/org3-artifacts/configtx.yaml deleted file mode 100644 index 8cd744c7..00000000 --- a/first-network/org3-artifacts/configtx.yaml +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - ---- -################################################################################ -# -# Section: Organizations -# -# - This section defines the different organizational identities which will -# be referenced later in the configuration. -# -################################################################################ -Organizations: - - &Org3 - # DefaultOrg defines the organization which is used in the sampleconfig - # of the fabric.git development environment - Name: Org3MSP - - # ID to load the MSP definition as - ID: Org3MSP - - MSPDir: crypto-config/peerOrganizations/org3.example.com/msp - - # Policies defines the set of policies at this level of the config tree - # For organization policies, their canonical path is usually - # /Channel/// - Policies: - Readers: - Type: Signature - Rule: "OR('Org3MSP.admin', 'Org3MSP.peer', 'Org3MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org3MSP.admin', 'Org3MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org3MSP.admin')" - - AnchorPeers: - # AnchorPeers defines the location of peers which can be used - # for cross org gossip communication. Note, this value is only - # encoded in the genesis block in the Application section context - - Host: peer0.org3.example.com - Port: 11051 - - Policies: - Readers: - Type: Signature - Rule: "OR('Org3MSP.admin', 'Org3MSP.peer', 'Org3MSP.client')" - Writers: - Type: Signature - Rule: "OR('Org3MSP.admin', 'Org3MSP.client')" - Admins: - Type: Signature - Rule: "OR('Org3MSP.admin')" - Endorsement: - Type: Signature - Rule: "OR('Org3MSP.peer')" diff --git a/first-network/org3-artifacts/org3-crypto.yaml b/first-network/org3-artifacts/org3-crypto.yaml deleted file mode 100644 index 4711620d..00000000 --- a/first-network/org3-artifacts/org3-crypto.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# --------------------------------------------------------------------------- -# "PeerOrgs" - Definition of organizations managing peer nodes -# --------------------------------------------------------------------------- -PeerOrgs: - # --------------------------------------------------------------------------- - # Org3 - # --------------------------------------------------------------------------- - - Name: Org3 - Domain: org3.example.com - EnableNodeOUs: true - Template: - Count: 2 - Users: - Count: 1 diff --git a/first-network/scripts/script.sh b/first-network/scripts/script.sh deleted file mode 100755 index fe8cb2b5..00000000 --- a/first-network/scripts/script.sh +++ /dev/null @@ -1,169 +0,0 @@ -#!/bin/bash - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Build your first network (BYFN) end-to-end test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -NO_CHAINCODE="$6" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -: ${NO_CHAINCODE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=20 -PACKAGE_ID="" - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/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/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - - -echo "Channel name : "$CHANNEL_NAME - -# import utils -. scripts/utils.sh - -createChannel() { - setGlobals 0 1 - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx >&log.txt - res=$? - set +x - else - set -x - peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile $ORDERER_CA >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Channel creation failed" - echo "===================== Channel '$CHANNEL_NAME' created ===================== " - echo -} - -joinChannel () { - for org in 1 2; do - for peer in 0 1; do - joinChannelWithRetry $peer $org - echo "===================== peer${peer}.org${org} joined channel '$CHANNEL_NAME' ===================== " - sleep $DELAY - echo - done - done -} - -## Create channel -echo "Creating channel..." -createChannel - -## Join all the peers to the channel -echo "Having all peers join the channel..." -joinChannel - -## Set the anchor peers for each org in the channel -echo "Updating anchor peers for org1..." -updateAnchorPeers 0 1 -echo "Updating anchor peers for org2..." -updateAnchorPeers 0 2 - -if [ "${NO_CHAINCODE}" != "true" ]; then - - ## at first we package the chaincode - packageChaincode 1 0 1 - - ## Install chaincode on peer0.org1 and peer0.org2 - echo "Installing chaincode on peer0.org1..." - installChaincode 0 1 - echo "Install chaincode on peer0.org2..." - installChaincode 0 2 - - ## query whether the chaincode is installed - queryInstalled 0 1 - - ## approve the definition for org1 - approveForMyOrg 1 0 1 - - ## check whether the chaincode definition is ready to be committed - ## expect org1 to have approved and org2 not to - checkCommitReadiness 1 0 1 "\"Org1MSP\": true" "\"Org2MSP\": false" - checkCommitReadiness 1 0 2 "\"Org1MSP\": true" "\"Org2MSP\": false" - - ## now approve also for org2 - approveForMyOrg 1 0 2 - - ## check whether the chaincode definition is ready to be committed - ## expect them both to have approved - checkCommitReadiness 1 0 1 "\"Org1MSP\": true" "\"Org2MSP\": true" - checkCommitReadiness 1 0 2 "\"Org1MSP\": true" "\"Org2MSP\": true" - - ## now that we know for sure both orgs have approved, commit the definition - commitChaincodeDefinition 1 0 1 0 2 - - ## query on both orgs to see that the definition committed successfully - queryCommitted 1 0 1 - queryCommitted 1 0 2 - - # invoke init - chaincodeInvoke 1 0 1 0 2 - - # Query chaincode on peer0.org1 - echo "Querying chaincode on peer0.org1..." - chaincodeQuery 0 1 100 - - # Invoke chaincode on peer0.org1 and peer0.org2 - echo "Sending invoke transaction on peer0.org1 peer0.org2..." - chaincodeInvoke 0 0 1 0 2 - - # Query chaincode on peer0.org1 - echo "Querying chaincode on peer0.org1..." - chaincodeQuery 0 1 90 - - ## Install chaincode on peer1.org2 - echo "Installing chaincode on peer1.org2..." - installChaincode 1 2 - - # Query on chaincode on peer1.org2, check if the result is 90 - echo "Querying chaincode on peer1.org2..." - chaincodeQuery 1 2 90 - -fi - -echo -echo "========= All GOOD, BYFN execution completed =========== " -echo - -echo -echo " _____ _ _ ____ " -echo "| ____| | \ | | | _ \ " -echo "| _| | \| | | | | | " -echo "| |___ | |\ | | |_| | " -echo "|_____| |_| \_| |____/ " -echo - -exit 0 diff --git a/first-network/scripts/step1org3.sh b/first-network/scripts/step1org3.sh deleted file mode 100755 index 4329860c..00000000 --- a/first-network/scripts/step1org3.sh +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# first step of the EYFN tutorial. It creates and submits a -# configuration transaction to add org3 to the network previously -# setup in the BYFN tutorial. -# - -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/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/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -# import utils -. scripts/utils.sh - -echo -echo "========= Creating config transaction to add org3 to network =========== " -echo - -# Fetch the config for the channel, writing it to config.json -fetchChannelConfig ${CHANNEL_NAME} config.json - -# Modify the configuration to append the new org -set -x -jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json -set +x - -# Compute a config update, based on the differences between config.json and modified_config.json, write it as a transaction to org3_update_in_envelope.pb -createConfigUpdate ${CHANNEL_NAME} config.json modified_config.json org3_update_in_envelope.pb - -echo -echo "========= Config transaction to add org3 to network created ===== " -echo - -echo "Signing config transaction" -echo -signConfigtxAsPeerOrg 1 org3_update_in_envelope.pb - -echo -echo "========= Submitting transaction from a different peer (peer0.org2) which also signs it ========= " -echo -setGlobals 0 2 -set -x -peer channel update -f org3_update_in_envelope.pb -c ${CHANNEL_NAME} -o orderer.example.com:7050 --tls --cafile ${ORDERER_CA} -set +x - -echo -echo "========= Config transaction to add org3 to network submitted! =========== " -echo - -exit 0 diff --git a/first-network/scripts/step2org3.sh b/first-network/scripts/step2org3.sh deleted file mode 100755 index fec4dcc4..00000000 --- a/first-network/scripts/step2org3.sh +++ /dev/null @@ -1,86 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# second step of the EYFN tutorial. It joins the org3 peers to the -# channel previously setup in the BYFN tutorial and install the -# chaincode as version 2.0 on peer0.org3. -# - -echo -echo "========= Getting Org3 on to your first network ========= " -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="3"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 -PACKAGE_ID="" - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/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/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -# import utils -. scripts/utils.sh - -echo "Fetching channel config block from orderer..." -set -x -peer channel fetch 0 $CHANNEL_NAME.block -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA >&log.txt -res=$? -set +x -cat log.txt -verifyResult $res "Fetching config block from orderer has Failed" - -joinChannelWithRetry 0 3 -echo "===================== peer0.org3 joined channel '$CHANNEL_NAME' ===================== " -joinChannelWithRetry 1 3 -echo "===================== peer1.org3 joined channel '$CHANNEL_NAME' ===================== " - -## at first we package the chaincode -packageChaincode 1 0 3 - -echo "Installing chaincode on peer0.org3..." -installChaincode 0 3 - -## query whether the chaincode is installed -queryInstalled 0 3 - -## sanity check: expect the chaincode to be already committed -queryCommitted 1 0 3 - -## approve it for our org, so that our peers know what package to invoke -approveForMyOrg 1 0 3 - -# Query on chaincode on peer0.org3, check if the result is 90 -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 90 - -echo -echo "========= Finished adding Org3 to your first network! ========= " -echo - -exit 0 diff --git a/first-network/scripts/testorg3.sh b/first-network/scripts/testorg3.sh deleted file mode 100755 index 04e23114..00000000 --- a/first-network/scripts/testorg3.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/bash -# -# Copyright IBM Corp. All Rights Reserved. -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This script is designed to be run in the org3cli container as the -# final step of the EYFN tutorial. It simply issues a couple of -# chaincode requests through the org3 peers to check that org3 was -# properly added to the network previously setup in the BYFN tutorial. -# - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Extend your first network (EYFN) test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${TIMEOUT:="10"} -: ${CC_SRC_LANGUAGE:="go"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=`echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]` -COUNTER=1 -MAX_RETRY=5 - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/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/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -echo "Channel name : "$CHANNEL_NAME - -# import functions -. scripts/utils.sh - -# Query chaincode on peer0.org3, check if the result is 90 -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 90 - -# Invoke chaincode on peer0.org1 and peer0.org3 -echo "Sending invoke transaction on peer0.org1 peer0.org3..." -chaincodeInvoke 0 0 1 0 3 - -# Query on chaincode on peer0.org3, peer0.org2, peer0.org1 check if the result is 80 -# We query a peer in each organization, to ensure peers from all organizations are in sync -# and there is no state fork between organizations. -echo "Querying chaincode on peer0.org3..." -chaincodeQuery 0 3 80 - -echo "Querying chaincode on peer0.org2..." -chaincodeQuery 0 2 80 - -echo "Querying chaincode on peer0.org1..." -chaincodeQuery 0 1 80 - - -echo -echo "========= All GOOD, EYFN test execution completed =========== " -echo - -echo -echo " _____ _ _ ____ " -echo "| ____| | \ | | | _ \ " -echo "| _| | \| | | | | | " -echo "| |___ | |\ | | |_| | " -echo "|_____| |_| \_| |____/ " -echo - -exit 0 diff --git a/first-network/scripts/upgrade_to_v14.sh b/first-network/scripts/upgrade_to_v14.sh deleted file mode 100755 index 3fb4df68..00000000 --- a/first-network/scripts/upgrade_to_v14.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -echo -echo " ____ _____ _ ____ _____ " -echo "/ ___| |_ _| / \ | _ \ |_ _|" -echo "\___ \ | | / _ \ | |_) | | | " -echo " ___) | | | / ___ \ | _ < | | " -echo "|____/ |_| /_/ \_\ |_| \_\ |_| " -echo -echo "Upgrade your first network (BYFN) from v1.3.x to v1.4.x end-to-end test" -echo -CHANNEL_NAME="$1" -DELAY="$2" -CC_SRC_LANGUAGE="$3" -TIMEOUT="$4" -VERBOSE="$5" -: ${CHANNEL_NAME:="mychannel"} -: ${DELAY:="5"} -: ${CC_SRC_LANGUAGE:="go"} -: ${TIMEOUT:="10"} -: ${VERBOSE:="false"} -CC_SRC_LANGUAGE=$(echo "$CC_SRC_LANGUAGE" | tr [:upper:] [:lower:]) -COUNTER=1 -MAX_RETRY=5 - -if [ "$CC_SRC_LANGUAGE" = "go" -o "$CC_SRC_LANGUAGE" = "golang" ]; then - CC_RUNTIME_LANGUAGE=golang - CC_SRC_PATH="github.com/hyperledger/fabric-samples/chaincode/abstore/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/hyperledger/fabric-samples/chaincode/abstore/javascript/" -elif [ "$CC_SRC_LANGUAGE" = "java" ]; then - CC_RUNTIME_LANGUAGE=java - CC_SRC_PATH="/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/abstore/java/" -else - echo The chaincode language ${CC_SRC_LANGUAGE} is not supported by this script - echo Supported chaincode languages are: go, javascript, java - exit 1 -fi - -echo "Channel name : "$CHANNEL_NAME - -# import utils -. scripts/utils.sh - -sleep $DELAY - -#Query on chaincode on Peer0/Org1 -echo "Querying chaincode on org1/peer0..." -chaincodeQuery 0 1 90 - -sleep $DELAY - -#Invoke on chaincode on Peer0/Org1 -echo "Sending invoke transaction on org1/peer0..." -chaincodeInvoke 0 1 0 2 - -sleep $DELAY - -#Query on chaincode on Peer0/Org1 -echo "Querying chaincode on org1/peer0..." -chaincodeQuery 0 1 80 - -echo -echo "===================== All GOOD, End-2-End UPGRADE Scenario execution completed ===================== " -echo - -echo -echo " _____ _ _ ____ _____ ____ _____ " -echo "| ____| | \ | | | _ \ | ____| |___ \ | ____|" -echo "| _| | \| | | | | | _____ | _| __) | | _| " -echo "| |___ | |\ | | |_| | |_____| | |___ / __/ | |___ " -echo "|_____| |_| \_| |____/ |_____| |_____| |_____|" -echo - -exit 0 diff --git a/first-network/scripts/utils.sh b/first-network/scripts/utils.sh deleted file mode 100755 index fbc11b67..00000000 --- a/first-network/scripts/utils.sh +++ /dev/null @@ -1,451 +0,0 @@ -# -# Copyright IBM Corp All Rights Reserved -# -# SPDX-License-Identifier: Apache-2.0 -# - -# This is a collection of bash functions used by different scripts - -ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -PEER0_ORG1_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt -PEER0_ORG2_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt -PEER0_ORG3_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer0.org3.example.com/tls/ca.crt - -# verify the result of the end-to-end test -verifyResult() { - if [ $1 -ne 0 ]; then - echo "!!!!!!!!!!!!!!! "$2" !!!!!!!!!!!!!!!!" - echo "========= ERROR !!! FAILED to execute End-2-End Scenario ===========" - echo - exit 1 - fi -} - -# Set OrdererOrg.Admin globals -setOrdererGlobals() { - CORE_PEER_LOCALMSPID="OrdererMSP" - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp -} - -setGlobals() { - PEER=$1 - ORG=$2 - if [ $ORG -eq 1 ]; then - CORE_PEER_LOCALMSPID="Org1MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG1_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 - else - CORE_PEER_ADDRESS=peer1.org1.example.com:8051 - fi - elif [ $ORG -eq 2 ]; then - CORE_PEER_LOCALMSPID="Org2MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG2_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org2.example.com:9051 - else - CORE_PEER_ADDRESS=peer1.org2.example.com:10051 - fi - - elif [ $ORG -eq 3 ]; then - CORE_PEER_LOCALMSPID="Org3MSP" - CORE_PEER_TLS_ROOTCERT_FILE=$PEER0_ORG3_CA - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp - if [ $PEER -eq 0 ]; then - CORE_PEER_ADDRESS=peer0.org3.example.com:11051 - else - CORE_PEER_ADDRESS=peer1.org3.example.com:12051 - fi - else - echo "================== ERROR !!! ORG Unknown ==================" - fi - - if [ "$VERBOSE" == "true" ]; then - env | grep CORE - fi -} - -updateAnchorPeers() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx >&log.txt - res=$? - set +x - else - set -x - peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/${CORE_PEER_LOCALMSPID}anchors.tx --tls --cafile $ORDERER_CA >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Anchor peer update failed" - echo "===================== Anchor peers updated for org '$CORE_PEER_LOCALMSPID' on channel '$CHANNEL_NAME' ===================== " - sleep $DELAY - echo -} - -## Sometimes Join takes time hence RETRY at least 5 times -joinChannelWithRetry() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - - set -x - peer channel join -b $CHANNEL_NAME.block >&log.txt - res=$? - set +x - cat log.txt - if [ $res -ne 0 -a $COUNTER -lt $MAX_RETRY ]; then - COUNTER=$(expr $COUNTER + 1) - echo "peer${PEER}.org${ORG} failed to join the channel, Retry after $DELAY seconds" - sleep $DELAY - joinChannelWithRetry $PEER $ORG - else - COUNTER=1 - fi - verifyResult $res "After $MAX_RETRY attempts, peer${PEER}.org${ORG} has failed to join channel '$CHANNEL_NAME' " -} - -# packageChaincode VERSION PEER ORG -packageChaincode() { - VERSION=$1 - PEER=$2 - ORG=$3 - setGlobals $PEER $ORG - set -x - peer lifecycle chaincode package mycc.tar.gz --path ${CC_SRC_PATH} --lang ${CC_RUNTIME_LANGUAGE} --label mycc_${VERSION} >&log.txt - res=$? - set +x - cat log.txt - verifyResult $res "Chaincode packaging on peer${PEER}.org${ORG} has failed" - echo "===================== Chaincode is packaged on peer${PEER}.org${ORG} ===================== " - echo -} - -# installChaincode PEER ORG -installChaincode() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - set -x - peer lifecycle chaincode install mycc.tar.gz >&log.txt - res=$? - set +x - cat log.txt - verifyResult $res "Chaincode installation on peer${PEER}.org${ORG} has failed" - echo "===================== Chaincode is installed on peer${PEER}.org${ORG} ===================== " - echo -} - -# queryInstalled PEER ORG -queryInstalled() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - set -x - peer lifecycle chaincode queryinstalled >&log.txt - res=$? - set +x - cat log.txt - PACKAGE_ID=`sed -n '/Package/{s/^Package ID: //; s/, Label:.*$//; p;}' log.txt` - verifyResult $res "Query installed on peer${PEER}.org${ORG} has failed" - echo PackageID is ${PACKAGE_ID} - echo "===================== Query installed successful on peer${PEER}.org${ORG} on channel ===================== " - echo -} - -# approveForMyOrg VERSION PEER ORG -approveForMyOrg() { - VERSION=$1 - PEER=$2 - ORG=$3 - setGlobals $PEER $ORG - - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer lifecycle chaincode approveformyorg --channelID $CHANNEL_NAME --name mycc --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt - set +x - else - set -x - peer lifecycle chaincode approveformyorg --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name mycc --version ${VERSION} --init-required --package-id ${PACKAGE_ID} --sequence ${VERSION} --waitForEvent >&log.txt - set +x - fi - cat log.txt - verifyResult $res "Chaincode definition approved on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' failed" - echo "===================== Chaincode definition approved on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - echo -} - -# commitChaincodeDefinition VERSION PEER ORG (PEER ORG)... -commitChaincodeDefinition() { - VERSION=$1 - shift - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " - - # while 'peer chaincode' command can get the orderer endpoint from the - # peer (if join was successful), let's supply it directly as we know - # it using the "-o" option - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer lifecycle chaincode commit -o orderer.example.com:7050 --channelID $CHANNEL_NAME --name mycc $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt - res=$? - set +x - else - set -x - peer lifecycle chaincode commit -o orderer.example.com:7050 --tls --cafile $ORDERER_CA --channelID $CHANNEL_NAME --name mycc $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --init-required >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Chaincode definition commit failed on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' failed" - echo "===================== Chaincode definition committed on channel '$CHANNEL_NAME' ===================== " - echo -} - -# checkCommitReadiness VERSION PEER ORG -checkCommitReadiness() { - VERSION=$1 - PEER=$2 - ORG=$3 - shift 3 - setGlobals $PEER $ORG - echo "===================== Checking the commit readiness of the chaincode definition on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to check the commit readiness of the chaincode definition on peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer lifecycle chaincode checkcommitreadiness --channelID $CHANNEL_NAME --name mycc $PEER_CONN_PARMS --version ${VERSION} --sequence ${VERSION} --output json --init-required >&log.txt - res=$? - set +x - test $res -eq 0 || continue - let rc=0 - for var in "$@" - do - grep "$var" log.txt &>/dev/null || let rc=1 - done - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Checking the commit readiness of the chaincode definition successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Check commit readiness result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -# queryCommitted VERSION PEER ORG -queryCommitted() { - VERSION=$1 - PEER=$2 - ORG=$3 - setGlobals $PEER $ORG - EXPECTED_RESULT="Version: ${VERSION}, Sequence: ${VERSION}, Endorsement Plugin: escc, Validation Plugin: vscc" - echo "===================== Querying chaincode definition on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to Query committed status on peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer lifecycle chaincode querycommitted --channelID $CHANNEL_NAME --name mycc >&log.txt - res=$? - set +x - test $res -eq 0 && VALUE=$(cat log.txt | grep -o '^Version: [0-9], Sequence: [0-9], Endorsement Plugin: escc, Validation Plugin: vscc') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query chaincode definition successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Query chaincode definition result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -chaincodeQuery() { - PEER=$1 - ORG=$2 - setGlobals $PEER $ORG - EXPECTED_RESULT=$3 - echo "===================== Querying on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME'... ===================== " - local rc=1 - local starttime=$(date +%s) - - # continue to poll - # we either get a successful response, or reach TIMEOUT - while - test "$(($(date +%s) - starttime))" -lt "$TIMEOUT" -a $rc -ne 0 - do - sleep $DELAY - echo "Attempting to Query peer${PEER}.org${ORG} ...$(($(date +%s) - starttime)) secs" - set -x - peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' >&log.txt - res=$? - set +x - test $res -eq 0 && VALUE=$(cat log.txt | awk '/Query Result/ {print $NF}') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - # removed the string "Query Result" from peer chaincode query command - # result. as a result, have to support both options until the change - # is merged. - test $rc -ne 0 && VALUE=$(cat log.txt | egrep '^[0-9]+$') - test "$VALUE" = "$EXPECTED_RESULT" && let rc=0 - done - echo - cat log.txt - if test $rc -eq 0; then - echo "===================== Query successful on peer${PEER}.org${ORG} on channel '$CHANNEL_NAME' ===================== " - else - echo "!!!!!!!!!!!!!!! Query result on peer${PEER}.org${ORG} is INVALID !!!!!!!!!!!!!!!!" - echo "================== ERROR !!! FAILED to execute End-2-End Scenario ==================" - echo - exit 1 - fi -} - -# fetchChannelConfig -# Writes the current channel config for a given channel to a JSON file -fetchChannelConfig() { - CHANNEL=$1 - OUTPUT=$2 - - setOrdererGlobals - - echo "Fetching the most recent configuration block for the channel" - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL --cafile $ORDERER_CA - set +x - else - set -x - peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL --tls --cafile $ORDERER_CA - set +x - fi - - echo "Decoding config block to JSON and isolating config to ${OUTPUT}" - set -x - configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config >"${OUTPUT}" - set +x -} - -# signConfigtxAsPeerOrg -# Set the peerOrg admin of an org and signing the config update -signConfigtxAsPeerOrg() { - PEERORG=$1 - TX=$2 - setGlobals 0 $PEERORG - set -x - peer channel signconfigtx -f "${TX}" - set +x -} - -# createConfigUpdate -# Takes an original and modified config, and produces the config update tx -# which transitions between the two -createConfigUpdate() { - CHANNEL=$1 - ORIGINAL=$2 - MODIFIED=$3 - OUTPUT=$4 - - set -x - configtxlator proto_encode --input "${ORIGINAL}" --type common.Config >original_config.pb - configtxlator proto_encode --input "${MODIFIED}" --type common.Config >modified_config.pb - configtxlator compute_update --channel_id "${CHANNEL}" --original original_config.pb --updated modified_config.pb >config_update.pb - configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate >config_update.json - echo '{"payload":{"header":{"channel_header":{"channel_id":"'$CHANNEL'", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . >config_update_in_envelope.json - configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope >"${OUTPUT}" - set +x -} - -# parsePeerConnectionParameters $@ -# Helper function that takes the parameters from a chaincode operation -# (e.g. invoke, query, instantiate) and checks for an even number of -# peers and associated org, then sets $PEER_CONN_PARMS and $PEERS -parsePeerConnectionParameters() { - # check for uneven number of peer and org parameters - if [ $(($# % 2)) -ne 0 ]; then - exit 1 - fi - - PEER_CONN_PARMS="" - PEERS="" - while [ "$#" -gt 0 ]; do - setGlobals $1 $2 - PEER="peer$1.org$2" - PEERS="$PEERS $PEER" - PEER_CONN_PARMS="$PEER_CONN_PARMS --peerAddresses $CORE_PEER_ADDRESS" - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "true" ]; then - TLSINFO=$(eval echo "--tlsRootCertFiles \$PEER$1_ORG$2_CA") - PEER_CONN_PARMS="$PEER_CONN_PARMS $TLSINFO" - fi - # shift by two to get the next pair of peer/org parameters - shift - shift - done - # remove leading space for output - PEERS="$(echo -e "$PEERS" | sed -e 's/^[[:space:]]*//')" -} - -# chaincodeInvoke IS_INIT PEER ORG (PEER ORG) ... -# Accepts as many peer/org pairs as desired and requests endorsement from each -chaincodeInvoke() { - IS_INIT=$1 - shift - parsePeerConnectionParameters $@ - res=$? - verifyResult $res "Invoke transaction failed on channel '$CHANNEL_NAME' due to uneven number of peer and org parameters " - - if [ "${IS_INIT}" -eq "1" ]; then - CCARGS='{"Args":["Init","a","100","b","100"]}' - INIT_ARG="--isInit" - else - CCARGS='{"Args":["invoke","a","b","10"]}' - INIT_ARG="" - fi - - # while 'peer chaincode' command can get the orderer endpoint from the - # peer (if join was successful), let's supply it directly as we know - # it using the "-o" option - if [ -z "$CORE_PEER_TLS_ENABLED" -o "$CORE_PEER_TLS_ENABLED" = "false" ]; then - set -x - peer chaincode invoke -o orderer.example.com:7050 -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt - res=$? - set +x - else - set -x - peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc $PEER_CONN_PARMS ${INIT_ARG} -c ${CCARGS} >&log.txt - res=$? - set +x - fi - cat log.txt - verifyResult $res "Invoke execution on $PEERS failed " - echo "===================== Invoke transaction successful on $PEERS on channel '$CHANNEL_NAME' ===================== " - echo -}