hospital-log/backend/blockchain/network/deployChaincode.sh

116 lines
5.4 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# -----------------------------------------------------------------------------
# Chaincode deployment helper based on chaincode.txt guide
# -----------------------------------------------------------------------------
CHANNEL_NAME=${CHANNEL_NAME:-mychannel}
CC_NAME=${CC_NAME:-logVerification}
CC_VERSION=${CC_VERSION:-1.0}
CC_SEQUENCE=${CC_SEQUENCE:-1}
CC_LABEL="${CC_NAME}_${CC_VERSION}"
CC_SRC_PATH=${CC_SRC_PATH:-./chaincode/logVerification}
CLI_CONTAINER=${CLI_CONTAINER:-cli}
ORDERER_ADDRESS=${ORDERER_ADDRESS:-orderer.hospital.com:7050}
ORDERER_TLS_HOSTNAME=${ORDERER_TLS_HOSTNAME:-orderer.hospital.com}
ORG_ROOT=/opt/gopath/src/github.com/hyperledger/fabric/peer
ORDERER_CA=${ORDERER_CA:-${ORG_ROOT}/organizations/ordererOrganizations/hospital.com/orderers/orderer.hospital.com/msp/tlscacerts/tlsca.hospital.com-cert.pem}
MSP_PATH=${MSP_PATH:-${ORG_ROOT}/organizations/peerOrganizations/hospital.com/users/Admin@hospital.com/msp}
PEER0_TLS=${ORG_ROOT}/organizations/peerOrganizations/hospital.com/peers/peer0.hospital.com/tls/ca.crt
PEER1_TLS=${ORG_ROOT}/organizations/peerOrganizations/hospital.com/peers/peer1.hospital.com/tls/ca.crt
PEER2_TLS=${ORG_ROOT}/organizations/peerOrganizations/hospital.com/peers/peer2.hospital.com/tls/ca.crt
PACKAGE_FILE=${CC_LABEL}.tar.gz
info() { echo "[INFO] $*"; }
err() { echo "[ERROR] $*" >&2; }
run_cli() {
docker exec "${CLI_CONTAINER}" bash -lc "$*"
}
set_peer_env() {
local tls=$1 addr=$2
echo "export CORE_PEER_TLS_ENABLED=true"
echo "export CORE_PEER_LOCALMSPID=HospitalMSP"
echo "export CORE_PEER_TLS_ROOTCERT_FILE=${tls}"
echo "export CORE_PEER_MSPCONFIGPATH=${MSP_PATH}"
echo "export CORE_PEER_ADDRESS=${addr}"
}
create_channel_artifacts() {
info "Creating channel ${CHANNEL_NAME}"
run_cli "export ORDERER_CA=${ORDERER_CA}; \
peer channel create -o ${ORDERER_ADDRESS} -c ${CHANNEL_NAME} -f ./channel-artifacts/${CHANNEL_NAME}.tx --outputBlock ./channel-artifacts/${CHANNEL_NAME}.block --tls --cafile \$ORDERER_CA"
run_cli "export ORDERER_CA=${ORDERER_CA}; \
peer channel fetch config ./channel-artifacts/config_block.pb -o ${ORDERER_ADDRESS} --ordererTLSHostnameOverride ${ORDERER_TLS_HOSTNAME} -c ${CHANNEL_NAME} --tls --cafile \$ORDERER_CA"
}
join_peers() {
info "Joining peers to ${CHANNEL_NAME}"
run_cli "$(set_peer_env ${PEER0_TLS} peer0.hospital.com:7051 | paste -sd ';' -) ; peer channel join -b ./channel-artifacts/${CHANNEL_NAME}.block"
run_cli "$(set_peer_env ${PEER1_TLS} peer1.hospital.com:8051 | paste -sd ';' -) ; peer channel join -b ./channel-artifacts/${CHANNEL_NAME}.block"
run_cli "$(set_peer_env ${PEER2_TLS} peer2.hospital.com:9051 | paste -sd ';' -) ; peer channel join -b ./channel-artifacts/${CHANNEL_NAME}.block"
}
package_chaincode() {
info "Packaging chaincode ${CC_LABEL}"
run_cli "rm -f ${PACKAGE_FILE}"
run_cli "peer lifecycle chaincode package ${PACKAGE_FILE} --path ${CC_SRC_PATH} --lang node --label ${CC_LABEL}"
}
install_chaincode() {
info "Installing package on peers"
run_cli "$(set_peer_env ${PEER0_TLS} peer0.hospital.com:7051 | paste -sd ';' -); peer lifecycle chaincode install ${PACKAGE_FILE}"
run_cli "$(set_peer_env ${PEER1_TLS} peer1.hospital.com:8051 | paste -sd ';' -); peer lifecycle chaincode install ${PACKAGE_FILE}"
run_cli "$(set_peer_env ${PEER2_TLS} peer2.hospital.com:9051 | paste -sd ';' -); peer lifecycle chaincode install ${PACKAGE_FILE}"
}
query_package_id() {
info "Querying installed chaincode for package ID"
PACKAGE_ID=$(docker exec "${CLI_CONTAINER}" bash -lc "$(set_peer_env ${PEER0_TLS} peer0.hospital.com:7051 | paste -sd ';' -); peer lifecycle chaincode queryinstalled | grep 'Label: ${CC_LABEL}' | sed -n 's/^Package ID: \([^,]*\),.*/\1/p'")
if [[ -z ${PACKAGE_ID} ]]; then
err "Failed to find package ID for label ${CC_LABEL}"
exit 1
fi
echo "PACKAGE_ID=${PACKAGE_ID}"
}
approve_chaincode() {
info "Approving chaincode for HospitalMSP"
run_cli "$(set_peer_env ${PEER0_TLS} peer0.hospital.com:7051 | paste -sd ';' -); \
peer lifecycle chaincode approveformyorg -o ${ORDERER_ADDRESS} --ordererTLSHostnameOverride ${ORDERER_TLS_HOSTNAME} --channelID ${CHANNEL_NAME} --name ${CC_NAME} --version ${CC_VERSION} --package-id ${PACKAGE_ID} --sequence ${CC_SEQUENCE} --tls --cafile ${ORDERER_CA}"
}
check_commit_readiness() {
info "Checking commit readiness"
run_cli "$(set_peer_env ${PEER0_TLS} peer0.hospital.com:7051 | paste -sd ';' -); \
peer lifecycle chaincode checkcommitreadiness -o ${ORDERER_ADDRESS} --channelID ${CHANNEL_NAME} --name ${CC_NAME} --version ${CC_VERSION} --sequence ${CC_SEQUENCE} --tls --cafile ${ORDERER_CA} --output json"
}
commit_chaincode() {
info "Committing chaincode definition"
run_cli "peer lifecycle chaincode commit -o ${ORDERER_ADDRESS} --ordererTLSHostnameOverride ${ORDERER_TLS_HOSTNAME} --channelID ${CHANNEL_NAME} --name ${CC_NAME} --version ${CC_VERSION} --sequence ${CC_SEQUENCE} --tls --cafile ${ORDERER_CA} --peerAddresses peer0.hospital.com:7051 --tlsRootCertFiles ${PEER0_TLS}"
}
main() {
local CREATE_CHANNEL=${CREATE_CHANNEL:-false}
if [[ ${CREATE_CHANNEL} == "true" ]]; then
create_channel_artifacts
join_peers
fi
package_chaincode
install_chaincode
query_package_id
approve_chaincode
check_commit_readiness
commit_chaincode
info "Chaincode ${CC_NAME} (version ${CC_VERSION}, sequence ${CC_SEQUENCE}) deployed on ${CHANNEL_NAME}."
info "If this chaincode requires initialization, invoke with --isInit before normal use."
}
main "$@"