From c20d68b18312e068ba1ec01e584d8094dfae360b Mon Sep 17 00:00:00 2001 From: Baohua Yang Date: Wed, 1 Nov 2017 20:26:11 +0800 Subject: [PATCH] Add missing files --- hyperledger_fabric/1.0.3/base-dev.yaml | 97 +++++++ hyperledger_fabric/1.0.3/base-kafka.yaml | 256 ++++++++++++++++++ .../1.0.3/scripts/init_chaincode_dev.sh | 105 +++++++ .../1.0.3/scripts/test_fetch.sh | 28 ++ 4 files changed, 486 insertions(+) create mode 100644 hyperledger_fabric/1.0.3/base-dev.yaml create mode 100644 hyperledger_fabric/1.0.3/base-kafka.yaml create mode 100644 hyperledger_fabric/1.0.3/scripts/init_chaincode_dev.sh create mode 100644 hyperledger_fabric/1.0.3/scripts/test_fetch.sh diff --git a/hyperledger_fabric/1.0.3/base-dev.yaml b/hyperledger_fabric/1.0.3/base-dev.yaml new file mode 100644 index 00000000..b18a4dee --- /dev/null +++ b/hyperledger_fabric/1.0.3/base-dev.yaml @@ -0,0 +1,97 @@ +# This is the development compose file to config env and command +# Notice that chaincode is executed inside docker in default net mode +# https://github.com/yeasy/docker-compose-files + +# Depends on the yeasy/hyperledger-fabric image. + +version: '2' + +services: + orderer.example.com: # There can be multiple orderers + extends: + file: base.yaml + service: orderer-base + image: yeasy/hyperledger-fabric:1.0.3 + container_name: orderer.example.com + hostname: orderer.example.com + ports: + - "7050:7050" + environment: + # Kafka related configurations + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + volumes: + - $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric + # for solo case + #- ./solo/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block + #- ./solo/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp + #- ./solo/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls + # for kafka case + - ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp + - ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls + #command: bash -c 'bash /tmp/orderer_build.sh; orderer start' # use this if to debug orderer + command: bash -c 'orderer start' # use this if to debug orderer + + peer0.org1.example.com: + extends: + file: base.yaml + service: peer-base + image: yeasy/hyperledger-fabric:latest + container_name: peer0.org1.example.com + hostname: peer0.org1.example.com + environment: + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + volumes: + - $GOPATH/src/github.com/hyperledger/fabric:/go/src/github.com/hyperledger/fabric + # e2e mode configuration + #- ./solo/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp + #- ./solo/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls + # kafka mode configuration + - ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp + - ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls + ports: + - 7051:7051 + - 7052:7052 + - 7053:7053 + #command: bash -c 'bash /tmp/peer_build.sh; peer node start' + command: bash -c 'peer node start' + #command: bash -c 'peer node start --peer-chaincodedev=true' # DEV mode + + cli: + extends: + file: base.yaml + service: cli-base + image: yeasy/hyperledger-fabric:1.0.3 + container_name: fabric-cli + hostname: fabric-cli + tty: true + environment: + - CORE_PEER_ID=fabric-cli + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1 + - CORE_PEER_LOCALMSPID=Org1MSP + - 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 + volumes: + - $GOPATH/src/github.com/hyperledger/fabric:/opt/gopath/src/github.com/hyperledger/fabric + #- /tmp/:/tmp/ + - ./scripts:/tmp/scripts + # e2e mode configuration + #- ./solo/channel-artifacts:/tmp/channel-artifacts + #- ./solo/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml + #- ./solo/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml + #- ./solo/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto + #- ./solo/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples + # kafka mode configuration + - ./kafka/channel-artifacts:/tmp/channel-artifacts + - ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml + - ./kafka/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml + - ./kafka/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto + - ./kafka/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples diff --git a/hyperledger_fabric/1.0.3/base-kafka.yaml b/hyperledger_fabric/1.0.3/base-kafka.yaml new file mode 100644 index 00000000..eae03a75 --- /dev/null +++ b/hyperledger_fabric/1.0.3/base-kafka.yaml @@ -0,0 +1,256 @@ +# All elements in this file should depend on the base.yaml +# Provided a Kafka enabled fabric network with: + +# ca.org1.example.com +# ca.org2.example.com +# orderer.example.com +# peer0.org1.example.com +# peer1.org1.example.com +# peer0.org2.example.com +# peer1.org2.example.com +# 3 zookeeper nodes +# 4 kafka nodes +# cli + +version: '2' # v3 does not support 'extends' yet + +services: + ca.org1.example.com: + extends: + file: base.yaml + service: ca-base + container_name: ca.org1.example.com + hostname: ca.org1.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca-org1 + - 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/c843d3f021118963ce5d340e95286e8869bb7bd051454cd4166aa2887a2ad451_sk + ports: + - "7054:7054" + volumes: + - ./kafka/crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config + 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/c843d3f021118963ce5d340e95286e8869bb7bd051454cd4166aa2887a2ad451_sk -b admin:adminpw -d' + + ca.org2.example.com: + extends: + file: base.yaml + service: ca-base + container_name: ca.org2.example.com + hostname: ca.org2.example.com + environment: + - FABRIC_CA_SERVER_CA_NAME=ca-org2 + - 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/1ee551a8753171c0377366e96a1d7ec01afddb868c9483cc501b6f8ac7ae752f_sk + ports: + - "8054:7054" + volumes: + - ./kafka/crypto-config/peerOrganizations/org2.example.com/ca/:/etc/hyperledger/fabric-ca-server-config + 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/1ee551a8753171c0377366e96a1d7ec01afddb868c9483cc501b6f8ac7ae752f_sk -b admin:adminpw -d' + + orderer.example.com: # There can be multiple orderers + extends: + file: base.yaml + service: orderer-base + container_name: orderer.example.com + hostname: orderer.example.com + ports: + - "7050:7050" + environment: + # Kafka related configurations + - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s + - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s + - ORDERER_KAFKA_VERBOSE=true + volumes: + - ./kafka/channel-artifacts/orderer.genesis.block:/var/hyperledger/orderer/orderer.genesis.block + - ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp + - ./kafka/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls + command: orderer start + + cli: + extends: + file: base.yaml + service: cli-base + container_name: fabric-cli + hostname: fabric-cli + tty: true + environment: + - CORE_PEER_ID=fabric-cli + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 # default to operate on peer0.org1 + - CORE_PEER_LOCALMSPID=Org1MSP + - 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 + volumes: + - ./scripts:/tmp/scripts + - ./kafka/channel-artifacts:/tmp/channel-artifacts + - ./kafka/configtx.yaml:/etc/hyperledger/fabric/configtx.yaml + - ./kafka/crypto-config.yaml:/etc/hyperledger/fabric/crypto-config.yaml + - ./kafka/crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto + - ./kafka/examples:/opt/gopath/src/github.com/hyperledger/fabric/examples + +## following are peer nodes ## + + peer0.org1.example.com: + extends: + file: base.yaml + service: peer-base + container_name: peer0.org1.example.com + hostname: peer0.org1.example.com + environment: + - CORE_PEER_ID=peer0.org1.example.com + - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + volumes: + - ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp + - ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls + ports: + - 7051:7051 + - 7052:7052 + - 7053:7053 + + peer1.org1.example.com: + extends: + file: base.yaml + service: peer-base + container_name: peer1.org1.example.com + hostname: peer1.org1.example.com + environment: + - CORE_PEER_ID=peer1.org1.example.com + - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:7051 + - CORE_PEER_CHAINCODELISTENADDRESS=peer1.org1.example.com:7052 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051 + - CORE_PEER_LOCALMSPID=Org1MSP + volumes: + - ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp + - ./kafka/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls + ports: + - 8051:7051 + - 8052:7052 + - 8053:7053 + + peer0.org2.example.com: + extends: + file: base.yaml + service: peer-base + container_name: peer0.org2.example.com + hostname: peer0.org2.example.com + environment: + - CORE_PEER_ID=peer0.org2.example.com + - CORE_PEER_ADDRESS=peer0.org2.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.example.com:7051 + - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org2.example.com:7052 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org2.example.com:7051 + - CORE_PEER_LOCALMSPID=Org2MSP + volumes: + - ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/msp:/etc/hyperledger/fabric/msp + - ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls:/etc/hyperledger/fabric/tls + ports: + - 9051:7051 + - 9052:7052 + - 9053:7053 + + peer1.org2.example.com: + extends: + file: base.yaml + service: peer-base + container_name: peer1.org2.example.com + hostname: peer1.org2.example.com + environment: + - CORE_PEER_ID=peer1.org2.example.com + - CORE_PEER_ADDRESS=peer1.org2.example.com:7051 + - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.example.com:7051 + - CORE_PEER_CHAINCODELISTENADDRESS=peer1.org2.example.com:7052 + - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org2.example.com:7051 + - CORE_PEER_LOCALMSPID=Org2MSP + volumes: + - ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/msp:/etc/hyperledger/fabric/msp + - ./kafka/crypto-config/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls:/etc/hyperledger/fabric/tls + ports: + - 10051:7051 + - 10052:7052 + - 10053:7053 + + +# ZooKeeper services, at least 3 nodes + zookeeper0: + extends: + file: base.yaml + service: zookeeper-base + container_name: zookeeper0 + hostname: zookeeper0 + environment: + - ZOO_MY_ID=1 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + + zookeeper1: + extends: + file: base.yaml + service: zookeeper-base + container_name: zookeeper1 + hostname: zookeeper1 + environment: + - ZOO_MY_ID=2 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + + zookeeper2: + extends: + file: base.yaml + service: zookeeper-base + container_name: zookeeper2 + hostname: zookeeper2 + environment: + - ZOO_MY_ID=3 + - ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 server.3=zookeeper2:2888:3888 + +# Kafka services, at least 4 node to tolerant work with 1 node failure + kafka0: + extends: + file: base.yaml + service: kafka-base + container_name: kafka0 + hostname: kafka0 + environment: + - KAFKA_BROKER_ID=0 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + + kafka1: + extends: + file: base.yaml + service: kafka-base + container_name: kafka1 + hostname: kafka1 + environment: + - KAFKA_BROKER_ID=1 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + + kafka2: + extends: + file: base.yaml + service: kafka-base + container_name: kafka2 + hostname: kafka2 + environment: + - KAFKA_BROKER_ID=2 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 + + kafka3: + extends: + file: base.yaml + service: kafka-base + container_name: kafka3 + hostname: kafka3 + environment: + - KAFKA_BROKER_ID=3 + - KAFKA_DEFAULT_REPLICATION_FACTOR=3 + - KAFKA_MIN_INSYNC_REPLICAS=2 + - KAFKA_ZOOKEEPER_CONNECT=zookeeper0:2181,zookeeper1:2181,zookeeper2:2181 diff --git a/hyperledger_fabric/1.0.3/scripts/init_chaincode_dev.sh b/hyperledger_fabric/1.0.3/scripts/init_chaincode_dev.sh new file mode 100644 index 00000000..632e2f06 --- /dev/null +++ b/hyperledger_fabric/1.0.3/scripts/init_chaincode_dev.sh @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +# This script will build and start and test chaincode in DEV mode + +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +echo +echo " ============================================== " +echo " ==========initialize businesschannel========== " +echo " ============================================== " +echo + +echo_b "Channel name : "$CHANNEL_NAME + +## Create channel +echo_b "Creating channel..." +channelCreate + +sleep 1 + +## Join all the peers to the channel +echo_b "Having peer0 join the channel..." +channelJoin 0 + +sleep 1 + +## Set the anchor peers for each org in the channel +#echo_b "Updating anchor peers for peer0/org1... no use for only single channel" +#updateAnchorPeers 0 + +# We suppose the binary is there, otherwise, run `go build` under the chaincode path +chaincodeStartDev 0 1.0 +sleep 1 + +## Install chaincode on all peers +echo_b "Installing chaincode on peer0..." +chaincodeInstall 0 1.0 + +sleep 1 + +# Instantiate chaincode on all peers +# Instantiate can only be executed once on any node +echo_b "Instantiating chaincode on the channel..." +chaincodeInstantiate 0 + +sleep 1 + +echo +echo_g "===================== All GOOD, initialization completed ===================== " +echo + +echo +echo " _____ _ _ ____ " +echo "| ____| | \ | | | _ \ " +echo "| _| | \| | | | | |" +echo "| |___ | |\ | | |_| |" +echo "|_____| |_| \_| |____/ " +echo + +exit 0 + + +echo "Starting chaincode in dev mode..." +cd $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 +go build +CORE_CHAINCODE_LOGLEVEL=debug \ +CORE_PEER_ADDRESS=peer0.org1.example.com:7052 \ +CORE_CHAINCODE_ID_NAME=mycc:1.0 \ +./chaincode_example02 & + +echo "Install chaincode" +CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ +peer chaincode install \ +-n mycc \ +-v 1.0 \ +-p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 + +echo "Instantiate chaincode" +CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ +peer chaincode instantiate \ +-n mycc \ +-v 1.0 \ +-c '{"Args":["init","a","100","b","200"]}' \ +-o orderer.example.com:7050 \ +-C businesschannel + +echo "Invoke chaincode..." +CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ +peer chaincode invoke \ +-n mycc \ +-c '{"Args":["invoke","a","b","10"]}' \ +-o orderer.example.com:7050 \ +-C businesschannel + +echo "Query chaincode..." +CORE_PEER_ADDRESS=peer0.org1.example.com:7051 \ +peer chaincode query \ +-n mycc \ +-c '{"Args":["query","a"]}' \ +-o orderer.example.com:7050 \ +-C businesschannel diff --git a/hyperledger_fabric/1.0.3/scripts/test_fetch.sh b/hyperledger_fabric/1.0.3/scripts/test_fetch.sh new file mode 100644 index 00000000..a0c2b4b4 --- /dev/null +++ b/hyperledger_fabric/1.0.3/scripts/test_fetch.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# This script will fetch blocks for testing. + +# Importing useful functions for cc testing +if [ -f ./func.sh ]; then + source ./func.sh +elif [ -f scripts/func.sh ]; then + source scripts/func.sh +fi + +echo_b "Channel name: $CHANNEL_NAME" + +echo_b "====================Fetching blocks================================" + +echo_b "Fetch block 0" +channelFetch 0 0 + +echo_b "Fetch block 1" +channelFetch 0 1 + +echo_b "Fetch block 2" +channelFetch 0 2 + +echo_b "Fetch block 3" +channelFetch 0 3 + +echo_g "Block fetching done!" \ No newline at end of file