116 lines
5.4 KiB
Bash
116 lines
5.4 KiB
Bash
|
|
#!/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 "$@"
|