하이퍼레저 메모

Programming 2020. 9. 3. 16:01

 

https://steemit.com/kr/@cillic/hyperledger-fabric-2

이미지 썸네일 삭제

[HyperLedger Fabric 개발하기] 2. 하이퍼레저 패브릭 예제파일 다운로드 — Steemit

안녕하세요! 전편에서는 하이퍼레져 패브릭을 실행시키기 위한 환경설정을 구축하였습니다. 못보고 오신분들은 아래의 링크를 참조하셔서 꼭! 환경설정을 해주시고 오셔야 합니다. HyperLedger… by cillic

steemit.com

first-network 예제받기

 

 

------------------설치메뉴얼

 

1. Virtual Box 가상머신 만들기

- 메모리 4GB, 하드디스크 50GB

- 지금 새 가상 하드디스크 만들기

- VDI(VirtualBox 디스크 이미지)

- 고정크기

 

2. 우분투 설치: 18.04.X LTS

3. cURL 설치

sudo apt install curl

curl -V

 

4. 도커 설치

curl -fsSL https://get.docker.com/ | sudo sh

 

도커는 기본적으로 root권한 필요

리눅스 시스템의 현재 사용자를 도커 그룹에 추가해 관리자 이외의 권한으로도 도커 서버/클라이언트 수행할 수 있도록 변경

sudo usermod -aG docker $USER

sudo reboot

docker -v

 

도커컴포즈 설치

sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose

 

5. GOLANG 설치

cd /usr/local

sudo wget https://storage.googleapis.com/golang/go1.11.1.linux-amd64.tar.gz

sudo tar -C /usr/local -xzf go1.11.1.linux-amd64.tar.gz

 

환경변수 설정

echo 'export PATH=$PATH:/usr/local/go/bin' | sudo tee -a /etc/profile && \

echo 'export GOPATH=$HOME/go' | tee -a $HOME/.bashrc && \

echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' | tee -a $HOME/.bashrc && \

mkdir -p $HOME/go/{src,pkg,bin}

sudo reboot

go version

 

6. git 설치

sudo apt install -y git

git --version

 

7. 파이썬 설치

sudo apt install -y python

python --version

 

8. Node.js, npm 설치

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

sudo reboot

nvm install 8

nvm use 8

npm install npm@5.6.0 -g

node -v

npm -v

 

9. VSCode 설치: 홈페이지

10. JAVA, JDK 설치

sudo add-apt-repository ppa:openjdk-r/ppa

sudo apt update

sudo apt install openjdk-8-jdk openjdk-8-jre

javac -version

java -version

 

11. Gradle 설치

sudo apt install gradle

 

12. IntelliJ 설치: 홈페이지에서 받아 압축 해제

 

13. 하이퍼레저 패브릭 설치

cd $GOPATH/src

curl -sSL http://bit.ly/2ysbOFE | bash -s -- 1.4.3 1.4.3 0.4.15

 

하이퍼레저 패브릭 동작확인

cd $GOPATH/src/fabric-samples/first-network

./byfn.sh -h

./byfn.sh generate

./byfn.sh up

./byfn.sh down

 

하이퍼레저 컴포저 개발환경 구성

curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh

chmod u+x prereqs-ubuntu.sh

./prereqs-ubuntu.sh

 

하이퍼레저 컴포저 설치

npm install -g composer-cli@0.20

npm install -g composer-rest-server@0.20

npm install -g generator-hyperledger-composer@0.20

npm install -g yo

npm install -g composer-playground

composer-playground

------------------------

 

 

하이퍼레저 패브릭 애플리케이션 개발 관련 내용

cd $GOPATH/src

mkdir stream-music && cd stream-music

mkdir basic-network && cd basic-network

mkdir crypto-config

touch crypto-config.yaml

touch configtx.yaml

touch docker-compose.yaml

export FABRIC_CFG_PATH=$PWD

cp -r $GOPATH/src/fabric-samples/bin ./

cd $GOPATH/src/stream-music/basic-network

code crypto-config.yaml

 

./bin/cryptogen generate --config=./crypto-config.yaml

 

cd $GOPATH/src/stream-music/basic-network

code configtx.yaml

 

mkdir config

./bin/configtxgen -profile OrdererGenesis -outputBlock ./config/genesis.block

./bin/configtxgen -profile Channel1 - outputCreateChannelTx ./config/channel1.tx -channelID channelsales1

./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/Sales1Organchors.tx -channelID channelsales1 -asOrg Sales1Org

./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/CustomerOrganchors.tx -channelID channelsales1 -asOrg CustomerOrg

 

 

도커 컨테이너 내리기

docker stop $(docker ps -a -q)

docker rm $(docker ps -a -q)

docker imasges | grep 'func-cc'

docker volume prune

 

docker rm $(docker ps -aqf name=/orderer.acornpub.com)

docker rm $(docker ps -aqf name=/peer0.sales1.acornpub.com)

docker rm $(docker ps -aqf name=/peer1.sales1.acornpub.com)

docker rm $(docker ps -aqf name=/peer0.customer.acornpub.com)

docker rm $(docker ps -aqf name=/peer1.customer.acornpub.com)

docker rm $(docker ps -aqf name=/cli)

 

 

 

https://medium.com/decipher-media/%ED%95%98%EC%9D%B4%ED%8D%BC%EB%A0%88%EC%A0%80-%ED%8C%A8%EB%B8%8C%EB%A6%AD-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B5%AC%EC%A1%B0-hyperledger-fabric-network-structure-d7fd9c759983

이미지 썸네일 삭제

하이퍼레저 패브릭 네트워크 구조 [Hyperledger Fabric Network Structure]

Writer : Jung Sungdong

medium.com

 

PANI 003 Error reading configuration: Unsupported Config Type "" 오류

- /go/src/fabric-samples/stream-music-2/basic-network를 FABRIC_CFG_PATH로.

  • 0열 선택0열 다음에 열 추가
  • 0행 선택0행 다음에 행 추가

셀 전체 선택

열 너비 조절

행 높이 조절

export FABRIC_CFG_PATH=$PWD

  • 셀 병합
  • 행 분할
  • 열 분할
  • 너비 맞춤
  • 삭제

 

$ ./bin/cryptogen generate --config=./crypto-config.yaml

$ ./bin/configtxgen -profile OrdererGenesis -outputBlock ./config/genesis.block

$ ./bin/configtxgen -profile Channel1 -outputCreateChannelTx ./config/channel1.tx

$ ./bin/configtxgen -profile Channel2 -outputCreateChannelTx ./config/channel2.tx

$ ./bin/configtxgen -profile Channel1 -outputCreateChannelTx ./config/channel1.tx -channelID

$ ./bin/configtxgen -profile Channel2 -outputCreateChannelTx ./config/channel2.tx

$ ./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/Sales1Organchors.tx -channelID channelsales1 -asOrg Sales1Org

$ ./bin/configtxgen -profile Channel2 -outputAnchorPeersUpdate ./config/Sales2Organchors.tx -channelID channelsales2 -asOrg Sales2Org

$ ./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/CustomerOrganchorsChannel1.tx -channelID channelsales1 -asOrg CustomerOrg

$ ./bin/configtxgen -profile Channel2 -outputAnchorPeersUpdate ./config/CustomerOrganchorsChannel2.tx -channelID channelsales2 -asOrg CustomerOrg

 

 

./bin/cryptogen generate --config=./crypto-config.yaml

mkdir config

./bin/configtxgen -profile OrdererGenesis -outputBlock ./config/genesis.block

./bin/configtxgen -profile Channel1 -outputCreateChannelTx ./config/channel1.tx -channelID channel1

./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/IndividualOrganchors.tx -channelID channel1 -asOrg IndividualOrg

./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/EnterpriselOrganchors.tx -channelID channel1 -asOrg EnterpriseOrg

./bin/configtxgen -profile Channel1 -outputAnchorPeersUpdate ./config/VerifierOrganchors.tx -channelID channel1 -asOrg VerifierOrg

 

 

 

도커컴포즈 실행

docker-compose -f docker-compose.yaml up -d orderer.recruit.net peer0.individual.recruit.net peer0.enterprise.recruit.net peer0.verifier.recruit.net cli

 

Individual 조직 peer0 노드 CLI 실행

docker exec -it cli bash

 

 

EnterpriseOrg 조직 peer0 노드 CLI 실행

docker exec -e "CORE_PEER_LOCALMSPID=EnterpriseOrg" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/hyperledger/fabric/peer/crypto/peerOrganizations/enterprise.recruit.net/users/Admin@enterprise.recruit.net/msp" -e "CORE_PEER_ADDRESS=peer0.enterprise.recruit.net:7051" -it cli bash

 

 

VerifierOrg 조직 peer0 노드 CLI 실행

docker exec -e "CORE_PEER_LOCALMSPID=VerifierOrg" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/hyperledger/fabric/peer/crypto/peerOrganizations/verifier.recruit.net/users/Admin@verifier.recruit.net/msp" -e "CORE_PEER_ADDRESS=peer0.verifier.recruit.net:7051" -it cli bash

 

 

채널 생성 및 Individual 조직의 peer0 노드를 channel1 채널에 가입 및 앵커 피어 지정 업데이트

peer channel create -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/channel1.tx &&

peer channel join -b channel1.block &&

peer channel update -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/IndividualOrganchors.tx

 

EnterpriseOrg 조직 peer0 노드를 channel1 채널에 가입 및 앵커 피어 지정 업데이트

peer channel join -b channel1.block

peer channel update -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/EnterpriseOrganchors.tx

 

VerifierOrg 조직 peer0 노드를 channel1 채널에 가입 및 앵커 피어 지정 업데이트

peer channel join -b channel1.block

peer channel update -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/VerifierOrganchors.tx

 

 

Chaincode 설치 및 인스턴스화

peer chaincode install -n func-cc -v 1.0 -p hyperledger/fabric/peer/chaincode/go &&

peer chaincode instantiate -o orderer.recruit.net:7050 -C channel1 -n func-cc -v 1.0 -c '{"Args":[""]}' -P "OR ('IndividualOrg.member')"

peer chaincode upgrade -o orderer.recruit.net:7050 -C channel1 -n func-cc -v 1.1 -c '{"Args":[""]}' -P "OR ('IndividualOrg.member')"

 

Batch

채널 생성 및 Individual 조직의 peer0 노드를 channel1 채널에 가입 및 앵커 피어 지정 업데이트

Chaincode 설치 및 인스턴스화

peer channel create -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/channel1.tx &&

peer channel join -b channel1.block &&

peer channel update -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/IndividualOrganchors.tx &&

peer chaincode install -n func-cc -v 1.0 -p hyperledger/fabric/peer/chaincode/go &&

peer chaincode instantiate -o orderer.recruit.net:7050 -C channel1 -n func-cc -v 1.0 -c '{"Args":[""]}' -P "OR ('IndividualOrg.member')" &&

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"initWallet", "Args":[""]}'

 

 

설치된 Chaincode 목록조회

peer chaincode list --installed

 

Chaincode 수정하기

1. 소스코드 수정

2. 버전 변경하여 다시 설치

peer chaincode install -n func-cc -v 2.0 -p hyperledger/fabric/peer/chaincode/go

 

3. 변경된 버전 설치

peer chaincode upgrade -o orderer.recruit.net:7050 -C channel1 -n func-cc -v 1.1 -c '{"Args":[""]}' -P "OR ('IndividualOrg.member')"

 

 

 

Chaincode 수정했지만 반영이 안 될 때

Chaincode 도커 이미지 제거

docker image list

docker image rm -f 3baa6abf8ac8

 

 

체인코드 등록 후 테스트 순서

Wallet 초기화

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"initWallet", "Args":[""]}'

 

Wallet 설정

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"setWallet", "Args":["INDIVIDUAL", "indv"]}'

 

2. Wallet 호출

peer chaincode query -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"getWallet", "Args":["indv"]}'

 

3. Resume 생성

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"setResume", "Args":["My First Resume", "JHKim", "32", "indv"]}'

 

4. Resume 호출

peer chaincode query -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"getResume", "Args":["MS0"]}'

 

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"updateResumeTitle", "Args":["Modified Title!!!!"]}'

 

 

API error (404): network ...not found 에러

COMPOSE_PROJECT_NAME가 설정되지 않았으므로, docker-compose.yaml 파일이 위치하는 곳에 .env 파일을 만들어 아래처럼 작성

COMPOSE_PROJECT_NAME=net

 

npm init

package.json 작성

npm install --save

 

*** connection.json의 adminPrivateKey는 docker-compose-ca.yaml에 적는 그 값과는 다른 값임

 

 

테스트 주소

http://218.150.182.180:8080/api/getWallet?walletid=1Q2W3E4R

http://218.150.182.180:8080/api/getWallet?walletid=5T6Y7U8I

http://218.150.182.180:8080/api/getAllResume

http://218.150.182.180:8080/api/purchaseResume?walletid=5T6Y7U8I&resumekey=MS0

 

 

하이퍼레저 패브릭 실전 프로젝트 소스코드

https://github.com/hyblekorea/hyperledger-fabric-stream-music/blob/master/stream-music/application/rest/server.js

 

 

 

 

 

채널 생성 및 Individual 조직의 peer0 노드를 channel1 채널에 가입 및 앵커 피어 지정 업데이트

Chaincode 설치 및 인스턴스화

peer channel create -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/channel1.tx &&

peer channel join -b channel1.block &&

peer channel update -o orderer.recruit.net:7050 -c channel1 -f /etc/hyperledger/configtx/IndividualOrganchors.tx &&

peer chaincode install -n func-cc -v 1.0 -p hyperledger/fabric/peer/chaincode/go &&

peer chaincode instantiate -o orderer.recruit.net:7050 -C channel1 -n func-cc -v 1.0 -c '{"Args":[""]}' -P "OR ('IndividualOrg.member')"

 

 

소스테스트

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"initWallet", "Args":[""]}' &&

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"setWallet", "Args":["INDIVIDUAL", "indv"]}' &&

peer chaincode query -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"getWallet", "Args":["indv"]}' &&

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"setResume", "Args":["My First Resume", "JHKim", "32", "indv"]}'

 

peer chaincode invoke -o orderer.recruit.net:7050 -C channel1 -n func-cc -c '{"function":"updateResumeTitle", "Args":["MS0", "Modified Title!!!!"]}'

 

 

 

 

 

 

admin