git clone https://github.com/9bow/fabric-dev-net.git
cd fabric-dev-net
export FABRIC_CFG_PATH=$PWD
export CHANNEL_NAME=mychan
export IMAGE_TAG=latest
crypto-config.yaml
설정 확인 및 수정- 인증서 및 키 파일 생성
./bin/cryptogen generate --config=./crypto-config.yaml # 실행 결과 # myorg.mycompany.com
configtx.yaml
설정 확인 및 수정- Genesis Block 생성
mkdir channel-artifacts
./bin/configtxgen -profile MyCompanyOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
# 실행 결과
# 2018-05-26 13:00:33.236 KST [common/tools/configtxgen] main -> INFO 001 Loading configuration
# 2018-05-26 13:00:33.243 KST [msp] getMspConfig -> INFO 002 Loading NodeOUs
# 2018-05-26 13:00:33.244 KST [common/tools/configtxgen] doOutputBlock -> INFO 003 Generating genesis block
# 2018-05-26 13:00:33.244 KST [common/tools/configtxgen] doOutputBlock -> INFO 004 Writing genesis block
channel.tx
생성./bin/configtxgen -profile MyOrgChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME # 실행 결과 # 2018-05-26 13:01:43.223 KST [common/tools/configtxgen] main -> INFO 001 Loading configuration # 2018-05-26 13:01:43.229 KST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx # 2018-05-26 13:01:43.229 KST [msp] getMspConfig -> INFO 003 Loading NodeOUs # 2018-05-26 13:01:43.246 KST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 004 Writing new channel tx
- AnchorPeer 정의 (Org별로 하나(또는 그 이상))
./bin/configtxgen -profile MyOrgChannel -outputAnchorPeersUpdate ./channel-artifacts/MyOrgMSPanchors.tx -channelID $CHANNEL_NAME -asOrg MyOrgMSP # 실행 결과 # 2018-05-26 13:02:17.514 KST [common/tools/configtxgen] main -> INFO 001 Loading configuration # 2018-05-26 13:02:17.521 KST [common/tools/configtxgen] doOutputAnchorPeersUpdate -> INFO 002 Generating anchor peer update # 2018-05-26 13:02:17.521 KST [common/tools/configtxgen] doOutputAnchorPeersUpdate -> INFO 003 Writing anchor peer update
base/docker-compose-base.yaml
설정 확인 및 수정base/peer-base.yaml
설정 확인 및 수정docker-compose-cli.yaml
설정 확인 및 수정- Docker Container 실행 및 cli Container에 진입
CHANNEL_NAME=$CHANNEL_NAME docker-compose -f docker-compose-cli.yaml up -d # 실행 결과 # Creating network "mycompany_mynet" with the default driver # Creating volume "mycompany_orderer.mycompany.com" with default driver # Creating volume "mycompany_peer0.myorg.mycompany.com" with default driver # Creating volume "mycompany_peer1.myorg.mycompany.com" with default driver # Pulling orderer.mycompany.com (hyperledger/fabric-orderer:latest)... # ... # Creating peer1.myorg.mycompany.com ... done # Creating peer0.myorg.mycompany.com ... done # Creating orderer.mycompany.com ... done # Creating cli ... done docker exec -it cli bash
- 기본 Channel 생성
export CHANNEL_NAME=mychan peer channel create -o orderer.mycompany.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/mycompany.com/orderers/orderer.mycompany.com/msp/tlscacerts/tlsca.mycompany.com-cert.pem # 실행 결과 # 2018-05-26 04:10:06.487 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized # 2018-05-26 04:10:06.515 UTC [channelCmd] InitCmdFactory -> INFO 002 Endorser and orderer connections initialized # 2018-05-26 04:10:06.719 UTC [main] main -> INFO 003 Exiting.....
- 생성 Channel 조인
peer channel join -b $CHANNEL_NAME.block # 실행 결과 # 2018-05-26 04:10:32.681 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized # 2018-05-26 04:10:32.719 UTC [channelCmd] executeJoin -> INFO 002 Successfully submitted proposal to join channel # 2018-05-26 04:10:32.719 UTC [main] main -> INFO 003 Exiting.....
- Anchor Peer 갱신
peer channel update -o orderer.mycompany.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/MyOrgMSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/mycompany.com/orderers/orderer.mycompany.com/msp/tlscacerts/tlsca.mycompany.com-cert.pem # 실행 결과 # 2018-05-26 04:11:01.550 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized # 2018-05-26 04:11:01.571 UTC [channelCmd] update -> INFO 002 Successfully submitted channel update # 2018-05-26 04:11:01.571 UTC [main] main -> INFO 003 Exiting.....
- Install Chaincode
export CHANNEL_NAME=mychan peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/ # 실행 결과 # 2018-05-26 04:11:48.341 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc # 2018-05-26 04:11:48.341 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc # 2018-05-26 04:11:48.646 UTC [main] main -> INFO 003 Exiting.....
- Initiate Chaincode
peer chaincode instantiate -o orderer.mycompany.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/mycompany.com/orderers/orderer.mycompany.com/msp/tlscacerts/tlsca.mycompany.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('MyOrgMSP.member')" # 실행 결과 # 2018-05-26 04:12:09.067 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc # 2018-05-26 04:12:09.067 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc # 2018-05-26 04:12:27.822 UTC [main] main -> INFO 003 Exiting.....
- Query
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' # 실행 결과 # 2018-05-26 04:12:55.603 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc # 2018-05-26 04:12:55.603 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc # Query Result: 100 # 2018-05-26 04:12:55.607 UTC [main] main -> INFO 003 Exiting.....
- Invoke
peer chaincode invoke -o orderer.mycompany.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/mycompany.com/orderers/orderer.mycompany.com/msp/tlscacerts/tlsca.mycompany.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["invoke","a", "b", "200"]}' # 실행 결과 # 2018-05-26 04:13:19.555 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc # 2018-05-26 04:13:19.555 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc # 2018-05-26 04:13:19.561 UTC [chaincodeCmd] chaincodeInvokeOrQuery -> INFO 003 Chaincode invoke successful. result: status:200 # 2018-05-26 04:13:19.562 UTC [main] main -> INFO 004 Exiting.....
- Query
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}' # 실행 결과 # 2018-05-26 04:13:46.718 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc # 2018-05-26 04:13:46.718 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc # Query Result: -100 # 2018-05-26 04:13:46.723 UTC [main] main -> INFO 003 Exiting.....
- 현재 실행 중인 Docker Container들의 상태 확인
docker ps
- Container의 Log 확인
# docker logs [Container Name] docker logs orderer.mycompany.com
- Fabric Network 종료
# docker-compose-cli.yaml 파일이 존재하는 곳에서 실행 docker-compose -f docker-compose-cli.yaml down