{"id":18059426,"url":"https://github.com/9bow/fabric-dev-net","last_synced_at":"2025-04-05T11:42:53.641Z","repository":{"id":86212177,"uuid":"134913205","full_name":"9bow/fabric-dev-net","owner":"9bow","description":"Hyperledger Fabric Development Network Environment","archived":false,"fork":false,"pushed_at":"2018-05-26T10:07:30.000Z","size":25975,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-02T23:41:49.603Z","etag":null,"topics":["development-environment","hyperledger-fabric","sample"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/9bow.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-25T23:21:39.000Z","updated_at":"2019-04-26T13:45:59.000Z","dependencies_parsed_at":"2023-04-21T00:09:28.389Z","dependency_job_id":null,"html_url":"https://github.com/9bow/fabric-dev-net","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9bow%2Ffabric-dev-net","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9bow%2Ffabric-dev-net/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9bow%2Ffabric-dev-net/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/9bow%2Ffabric-dev-net/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/9bow","download_url":"https://codeload.github.com/9bow/fabric-dev-net/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332524,"owners_count":20921852,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["development-environment","hyperledger-fabric","sample"],"created_at":"2024-10-31T03:22:11.489Z","updated_at":"2025-04-05T11:42:53.625Z","avatar_url":"https://github.com/9bow.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 준비\n### Clone repo\n  ```sh\n    git clone https://github.com/9bow/fabric-dev-net.git\n    cd fabric-dev-net\n  ```\n\n### 환경 변수 설정\n  ```sh\n    export FABRIC_CFG_PATH=$PWD\n    export CHANNEL_NAME=mychan\n    export IMAGE_TAG=latest\n  ```\n\n\n## 설정 및 필요 파일 생성\n### 인증서 생성 (`./bin/cryptogen`)\n* `crypto-config.yaml` 설정 확인 및 수정\n* 인증서 및 키 파일 생성\n  ```sh\n    ./bin/cryptogen generate --config=./crypto-config.yaml\n    # 실행 결과\n    # myorg.mycompany.com\n  ```\n\n### Genesis Block 등 생성 (`./bin/configtxgen`)\n* `configtx.yaml` 설정 확인 및 수정\n*  Genesis Block 생성\n  ```sh\n    mkdir channel-artifacts\n    ./bin/configtxgen -profile MyCompanyOrdererGenesis -outputBlock ./channel-artifacts/genesis.block\n    # 실행 결과\n    # 2018-05-26 13:00:33.236 KST [common/tools/configtxgen] main -\u003e INFO 001 Loading configuration\n    # 2018-05-26 13:00:33.243 KST [msp] getMspConfig -\u003e INFO 002 Loading NodeOUs\n    # 2018-05-26 13:00:33.244 KST [common/tools/configtxgen] doOutputBlock -\u003e INFO 003 Generating genesis block\n    # 2018-05-26 13:00:33.244 KST [common/tools/configtxgen] doOutputBlock -\u003e INFO 004 Writing genesis block\n  ```\n* `channel.tx` 생성\n  ```sh\n    ./bin/configtxgen -profile MyOrgChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME\n    # 실행 결과\n    # 2018-05-26 13:01:43.223 KST [common/tools/configtxgen] main -\u003e INFO 001 Loading configuration\n    # 2018-05-26 13:01:43.229 KST [common/tools/configtxgen] doOutputChannelCreateTx -\u003e INFO 002 Generating new channel configtx\n    # 2018-05-26 13:01:43.229 KST [msp] getMspConfig -\u003e INFO 003 Loading NodeOUs\n    # 2018-05-26 13:01:43.246 KST [common/tools/configtxgen] doOutputChannelCreateTx -\u003e INFO 004 Writing new channel tx\n  ```\n* AnchorPeer 정의 (Org별로 하나(또는 그 이상))\n  ```sh\n    ./bin/configtxgen -profile MyOrgChannel -outputAnchorPeersUpdate ./channel-artifacts/MyOrgMSPanchors.tx -channelID $CHANNEL_NAME -asOrg MyOrgMSP\n    # 실행 결과\n    # 2018-05-26 13:02:17.514 KST [common/tools/configtxgen] main -\u003e INFO 001 Loading configuration\n    # 2018-05-26 13:02:17.521 KST [common/tools/configtxgen] doOutputAnchorPeersUpdate -\u003e INFO 002 Generating anchor peer update\n    # 2018-05-26 13:02:17.521 KST [common/tools/configtxgen] doOutputAnchorPeersUpdate -\u003e INFO 003 Writing anchor peer update\n  ```\n\n## Fabric Network 실행\n### docker base 설정 파일 수정 및 실행\n* `base/docker-compose-base.yaml` 설정 확인 및 수정\n* `base/peer-base.yaml` 설정 확인 및 수정\n* `docker-compose-cli.yaml` 설정 확인 및 수정\n* Docker Container 실행 및 cli Container에 진입\n  ```sh\n    CHANNEL_NAME=$CHANNEL_NAME docker-compose -f docker-compose-cli.yaml up -d\n    # 실행 결과\n    # Creating network \"mycompany_mynet\" with the default driver\n    # Creating volume \"mycompany_orderer.mycompany.com\" with default driver\n    # Creating volume \"mycompany_peer0.myorg.mycompany.com\" with default driver\n    # Creating volume \"mycompany_peer1.myorg.mycompany.com\" with default driver\n    # Pulling orderer.mycompany.com (hyperledger/fabric-orderer:latest)...\n    # ...\n    # Creating peer1.myorg.mycompany.com ... done\n    # Creating peer0.myorg.mycompany.com ... done\n    # Creating orderer.mycompany.com     ... done\n    # Creating cli                       ... done\n    docker exec -it cli bash\n  ```\n\n### 기본 Channel 설정\n* 기본 Channel 생성\n  ```sh\n    export CHANNEL_NAME=mychan\n    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\n    # 실행 결과\n    # 2018-05-26 04:10:06.487 UTC [channelCmd] InitCmdFactory -\u003e INFO 001 Endorser and orderer connections initialized\n    # 2018-05-26 04:10:06.515 UTC [channelCmd] InitCmdFactory -\u003e INFO 002 Endorser and orderer connections initialized\n    # 2018-05-26 04:10:06.719 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n* 생성 Channel 조인\n  ```sh\n    peer channel join -b $CHANNEL_NAME.block\n    # 실행 결과\n    # 2018-05-26 04:10:32.681 UTC [channelCmd] InitCmdFactory -\u003e INFO 001 Endorser and orderer connections initialized\n    # 2018-05-26 04:10:32.719 UTC [channelCmd] executeJoin -\u003e INFO 002 Successfully submitted proposal to join channel\n    # 2018-05-26 04:10:32.719 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n* Anchor Peer 갱신\n  ```sh\n    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\n    # 실행 결과\n    # 2018-05-26 04:11:01.550 UTC [channelCmd] InitCmdFactory -\u003e INFO 001 Endorser and orderer connections initialized\n    # 2018-05-26 04:11:01.571 UTC [channelCmd] update -\u003e INFO 002 Successfully submitted channel update\n    # 2018-05-26 04:11:01.571 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n\n### Chaincode 설치 및 실행\n* Install Chaincode\n  ```sh\n    export CHANNEL_NAME=mychan\n    peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/\n    # 실행 결과\n    # 2018-05-26 04:11:48.341 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 001 Using default escc\n    # 2018-05-26 04:11:48.341 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 002 Using default vscc\n    # 2018-05-26 04:11:48.646 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n* Initiate Chaincode\n   ```sh\n    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')\"\n    # 실행 결과\n    # 2018-05-26 04:12:09.067 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 001 Using default escc\n    # 2018-05-26 04:12:09.067 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 002 Using default vscc\n    # 2018-05-26 04:12:27.822 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n* Query\n  ```sh\n    peer chaincode query -C $CHANNEL_NAME -n mycc -c '{\"Args\":[\"query\",\"a\"]}'\n    # 실행 결과\n    # 2018-05-26 04:12:55.603 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 001 Using default escc\n    # 2018-05-26 04:12:55.603 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 002 Using default vscc\n    # Query Result: 100\n    # 2018-05-26 04:12:55.607 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n* Invoke\n  ```sh\n    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\"]}'\n    # 실행 결과\n    # 2018-05-26 04:13:19.555 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 001 Using default escc\n    # 2018-05-26 04:13:19.555 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 002 Using default vscc\n    # 2018-05-26 04:13:19.561 UTC [chaincodeCmd] chaincodeInvokeOrQuery -\u003e INFO 003 Chaincode invoke successful. result: status:200\n    # 2018-05-26 04:13:19.562 UTC [main] main -\u003e INFO 004 Exiting.....\n  ```\n* Query\n  ```sh\n    peer chaincode query -C $CHANNEL_NAME -n mycc -c '{\"Args\":[\"query\",\"a\"]}'\n    # 실행 결과\n    # 2018-05-26 04:13:46.718 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 001 Using default escc\n    # 2018-05-26 04:13:46.718 UTC [chaincodeCmd] checkChaincodeCmdParams -\u003e INFO 002 Using default vscc\n    # Query Result: -100\n    # 2018-05-26 04:13:46.723 UTC [main] main -\u003e INFO 003 Exiting.....\n  ```\n\n### 기타 명령어\n* 현재 실행 중인 Docker Container들의 상태 확인\n  ```sh\n    docker ps\n  ```\n* Container의 Log 확인\n  ```sh\n    # docker logs [Container Name]\n    docker logs orderer.mycompany.com\n  ```\n* Fabric Network 종료\n  ```sh\n    # docker-compose-cli.yaml 파일이 존재하는 곳에서 실행\n    docker-compose -f docker-compose-cli.yaml down\n  ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9bow%2Ffabric-dev-net","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F9bow%2Ffabric-dev-net","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F9bow%2Ffabric-dev-net/lists"}