SlideShare une entreprise Scribd logo
1  sur  66
Télécharger pour lire hors ligne
하이퍼렛저 패브릭 실습 가이드
타임게이트 기술연구소
Hyperledger Fabric 실습
CONTENTS
1. 개요
2. 실습 환경 구성
3. 실습 시나리오
4. 목표 구성도
5. 도커(Docker) 아키텍처 및 주요 명령어
6. Hyperledger Fabric 아키텍처
7. 실습 절차 (Step-by-Step)
8. 실습 화면 설명 및 실행 결과 (Case #1 ~ 3)
1. 개요
• 2개의 Org 와 Peer 4개를 가지는 1개의 Channel 로 구성된 Hyperledger 네트워크
를 구축하는 실습에 대한 가이드를 제공하는 것을 목적으로 한다.
• Hyperledger Architecture 구성요소에 대한 기본적인 이해가 필요하다.
• 기본적인 도커(Docker) 명령어를 사용 할 수 있어야 한다.
- 도커 관련 참고자료 : https://www.slideshare.net/pyrasis/docker-fordummies-44424016
• 실습환경
- 우분투 OS 가상머신 이미지를 사용
2. 실습 환경 구성
• 가상 이미지를 사용하기 위해 VirtualBox 를 설치한다.
• 실습에 사용할 가상머신 이미지는 구글 드라이브에서 다운로드 받아 사용한다.
• 설치 가이드 및 이미지 파일은 아래 링크를 참조
- 설치 가이드 : https://drive.google.com/open?id=1C15j2gBQkH8B_v1jpOZh15i6c4-t241P
- 가상머신 이미지 파일 : https://drive.google.com/open?id=1bZ5Gne9WLFLnKuDsGAhGNVyGPE91Ut7I
• 설치 가이드를 통해 가상 머신 가져오기 (import) 가 완료되면 가상머신 전원을 시
작하여, 우분투 OS 에 접속 후 터미널을 실행한다. (접속계정 아래 참조)
- OS 접속 계정 : bcadmin / passw0rd
- 실습 명령어 실행 경로 : $HOMEfabric_samplesfirst_network
3. 실습 시나리오
실습은 3가지 케이스로 진행한다.
[기본 Level DB를 사용하는 실습]
 Case #1 hyperledger fabric 에서 기본적으로 제공하는 shell 스크립트 명령어를 실행하는 방법
 Case #2 step-by-step 으로 hyperledger fabric 네트워크를 구성 및 시작하는 방법
[Document Type DB 인 Couch DB 를 사용하는 실습]
 Case #3 Couch DB 사용하여 step-by-step 으로 hyperledger fabric 네트워크 구축하는 방법
4. 목표 구성도
• Org 별 2개의 Peer 를 갖는 채널 구성
• Org 에 1개의 Anchor Peer 설정
• 채널 이름 : mychannel
5. 도커(Docker) 아키텍처
도커 아키텍처 및 주요 명령어
5.1 도커(Docker) 아키텍처
<이미지 출처 : https://docs.docker.com/engine/docker-overview/#docker-architecture>
Docker host = 가상머신
5.2 도커(Docker) 주요 명령어
• 이미지 조회 : docker images
• 수행중인 컨테이너 조회 : docker ps
• 호스트에서 컨테이너로 복사 : docker cp <호스트 파일> <컨테이너 ID>:<경로>
• 컨테이너 구동/정지 : docker start/stop <컨테이너 ID>
• 컨테이너 삭제 : docker rm <컨테이너 ID>
• 이미지 삭제 : docker rmi <이미지 ID>
• 컨테이너 로그 확인 : docker logs <컨테이너 ID>
• 새로운 컨테이너에서 명령 수행 : docker run <이미지 ID>
• 기존 컨테이너에서 명령 수행 : docker exec <컨테이너 ID>
• 컨테이너 로그 확인 : docker logs <컨테이너 ID>
참고 자료 : https://www.slideshare.net/pyrasis/docker-fordummies-44424016
<이미지 출처 : https://docs.docker.com/engine/docker-overview/#docker-architecture>
5.3 docker-compose yaml 파일
6. Hyperledger Fabric 아키텍처
Peer, Channel, Organization, Orderer
6.1 피어(Peers) & 채널(Channels)
 피어 (Peer)의 특징
 모든 피어는 원장(ledger)을 가진다. -> Committer peer
 체인코드가 배포 된 피어는 보증인 역할 수행 한다. ( 유효한 트랜잭션 보증을 위한 충분 조건이 보증 정책에 의해 정의됨 )
 피어는 트랜잭션을 실행하며, 같은 채널에 있는 피어들은 동일한 원장을 가지며 원장 상태를 업데이트 한다.
원장에는 트랜잭션이 기록되며, 상태 (state) 값은 Key-Value Store(DB) 인 Level DB 에서 관리한다.
 채널 (Channel)의 특징
 구성원(조직), 구성원 당 앵커 피어, 공유 원장, 체인코드 응용 프로그램 및 주문 서비스 노드(들) 에 의해 정의됨
 네트워크 상의 각 트랜잭션은 채널에서 실행되며, 각 당사자는 인증되고 해당 채널에서 거래할 권한이 있어야 함
 채널에 참여하는 각 피어는 Membership Services Provider(MSP) 가 제공한 자체 ID를 가짐
 채널 피어 및 서비스에 대한 각 피어를 인증함
P1, P2는 Chaincode 가 배포되어
있기 때문에, Endorser Peer 로
불리며 트랜잭션을 보증하는 역할을
수행한다.
6.2 피어(Peer), 조직(Organization)
 블록체인 네트워크는 단일 조직 보다 조직 집합에 의해서
관리됨.
 앵커 피어(Anchor peer) : 조직 간 통신역할을 담당하는
피어
-> P1, P3, P5, P7, P8 에 해당함.
-> 앵커 피어는 1개 또는 다수개로 설정될 수 있음 /
SPoF (Single Point of Failure) 를 방지하기 위함
앵커피어(Anchor peer) 를 통해서 다른
조직(Org) 의 멤버 정보를 알게 된다.
6.3 피어(Peer) 와 Orderer
1
2 2
3 3
4 4
5
6 7
8 8
1 : 클라이언트에서 트랜잭션 요청
2 : 트랜잭션 요청에 대해 보증(Endorser) 피어로 전달
3 : 보증 피어에서 시뮬레이션 실행 및 RW Set 생성
4~5 : 트랜잭션 요청에 대한 응답
6 : 트랜잭션 보증 정책을 만족할 경우 Orderer 에 트랜잭션을 전달
7 : Orderer 의해 트랜잭션의 순서가 정렬 된 후 채널 내 모든 피어에게 broadcast
8 : 모든 피어는 ledger 에 업데이트
Orderer 는 트랜잭션의 순서를 정렬하여 블록을 만들고.
채널(channel)에 있는 다른 피어들에게 원장을 업데이트
하도록 블록정보를 전파하는 역할을 한다.
클라이언트(A1) 에서 트랜잭션이 발생하여 원장에 기록되기 까지의
흐름도
6.4 트랜잭션 패키징 및 검증
Orderer 는 트랜잭션의 순서를 정렬하여 블록을 만들고 채널(channel)에 있는
다른 피어들에게 원장을 업데이트 하도록 블록정보를 전파하는 역할을 한다.
7. 실습 절차 (Step-by-Step)
1. 필요 환경변수 Import
2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정
3. 네트워크 기동
4. 채널 생성  Orderer 에 의함
5. 각 Peer Join
6. Org 의 Anchor Peer 설정  각 Org 별
7. Chain Code 디플로이
8. Chain Code 초기화
9. 블록(? 계정) 초기값 확인
10. 블록 값 변경
11. 블록 변경 상태 확인  다른 peer에서도 확인
12. 네트워크 down
8.1 실습 Case #1
Shell 스크립트 실행
실습 절차
• 실습 실행경로 : $HOMEfabric_samplesfirst_network
- byfn : Build your first network
- sh 스크립트 실행 전에 ‘docker ps’ 를 실행하여 실행되고 있는 컨테이너가 있는지 확인
• 아래 순서대로 명령어를 실행한다.
1. ./byfn.sh generate 실행
2. ./byfn.sh up 실행
3. ./byfn.sh down 실행
실행 단계별 처리 내용
1. 필요 환경변수 Import
2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정
3. 네트워크 기동
4. 채널 생성  Orderer 에 의함
5. 각 Peer Join
6. Org 의 Anchor Peer 설정  각 Org 별
7. Chain Code 디플로이
8. Chain Code 초기화
9. 블록 초기값 확인
10. 블록 값 변경
11. 블록 변경 상태 확인  다른 peer에서도 확인
12. 네트워크 down./byfn.sh down
B
C
./byfn.sh generate A
./byfn.sh up
A 단계 실행
1. 필요 환경변수 Import
2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정
org1, org2 의 MSP 인증서 생성
(MSP: Membership Service Provider)
Genesis Block 생성
채널 트랜잭션 아티팩트 생성
Org1, Org2 의 앵커피어 아티팩트 생성
./byfn.sh generate A
A 단계 실행 후
1. 필요 환경변수 Import
2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정
A 단계 완료 후 생성한 파일을 하기 경로에서 확인한다.
- 경로 : $HOMEfabric_samplesfirst_networkchannel_artifacts
생성 된 파일 : channel.tx, genesis.block, Org1Mspanchors.tx, Org2MSPanchors.tx
./byfn.sh generate A
B 단계 실행(1)
6개의 컨테이너를 실행
- Orderer
- Peer0.Org1
- Peer1.Org1
- Peer0.Org2
- Peer1.Org2
- Cli (Command Line Interface)
채널명 ‘mychannel’ 로 채널 생성
Hyperledger Fabric 네트워크 시작
./byfn.sh up B
3. 네트워크 기동
4. 채널 생성  Orderer 에 의함
B 단계 실행(2)
피어 4개 ‘mychannel’ 에 Join
- Peer0.Org1
- Peer1.Org1
- Peer0.Org2
- Peer1.Org2
./byfn.sh up B 5. 각 Peer 채널에 Join
B 단계 실행(3)
Org1 Anchor Peer 업데이트
Org2 Anchor Peer 업데이트
./byfn.sh up B
6. Org 의 Anchor Peer 설정  각 Org 별
7. Chain Code 디플로이
체인코드 배포
- peer0.org1
- peer0.org2
B 단계 실행(4)
체인코드 인스턴스화(초기화)
./byfn.sh up B
8. Chain Code 초기화
9. 블록 초기값 확인
체인코드 초기값 확인
- a 값 확인 : 100
 피어에서 주로 사용하는 체인코드 명령어
- Install : 체인코드 설치(배포)
- Instantiate : 체인코드 인스턴스화(초기화)
- Invoke : 체인코드 실행
- Query : 체인코드 조회
B 단계 실행(5)
체인코드 블록 값 변경
- peer0.org1, peer0, org2 로
트랜잭션 전송
(peer0.org1 과 peer0.org2 는
chaincode 가 배포 되어 있는
Endoerser Peer 이기 때문임)
- 체인코드 설명 : ‘invoke’ 코드
a 에서 b로 10을 보내라는
method 임
./byfn.sh up B
10. 블록 값 변경
11. 블록 변경 상태 확인  다른 peer에서도 확인
블록 변경 값 확인 확인
- peer1.org2 에서 값 확인
- a 값 90 확인
(100->90 으로 변경된 것을 확인)
peer1.org2 에 체인코드 배포
B 단계 실행(6)
./byfn.sh up B 3~11 까지 완료 후 docker ps 실행
• 네트워크 기동 후 orderer, peer0.org1, peer0.org2, peer1.org1, peer1.org2, cli 컨테이너 6개가 프로세스화 되어 실행됨.
• 체인코드 배포(설치) 후 체인코드 3개의 docker image가 생성되며,
• 컨테이너 3개가 프로세스화 되어 실행됨.
- dev-peer0.org1
- dev-peer0.org2
- dev-peer1.org2
1
2
3
C 단계 실행
12. 네트워크 down./byfn.sh down C
도커 컨테이너 종료
볼륨 정보 삭제
~/channel_artifacts/ 경로에 생성
한 아티팩트 파일 삭제
도커 이미지 삭제
- 배포한 체인코드 이미지도 삭
제
8.2 실습 Case #2
Step-by-step 실습
실습 가상머신 바탕화면에 있는
command_summary_1 파일을 참조한다.
실습 절차 (Step-by-Step)
1. 필요 환경변수 Import
2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정
3. 네트워크 기동
4. 채널 생성  Orderer 에 의함
5. 각 Peer Join
6. Org 의 Anchor Peer 설정  각 Org 별
7. Chain Code 디플로이
8. Chain Code 초기화
9. 블록(? 계정) 초기값 확인
10. 블록 값 변경
11. 블록 변경 상태 확인  다른 peer에서도 확인
12. 네트워크 down
인증서 생성
명령어 : $GOPATH/src/github.com/hyperledger/fabric/.build/bin/cryptogen generate --config=./crypto-config.yaml
Orderer genesis block 생성
명령어 :
export FABRIC_CFG_PATH=$PWD
$GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsOrdererGenesis  -
outputBlock ./channel-artifacts/genesis.block
채널 트랜잭션 아티팩트 생성
명령어 :
export CHANNEL_NAME=mychannel
$GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsChannel  -
outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
Org1, Org2 에 대한 Anchor peer 아티팩트 생성
명령어 :
export CHANNEL_NAME=mychannel
$GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsChannel  -
outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
$GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsChannel  -
outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
Fabric Network 기동
명령어 : CHANNEL_NAME=mychannel TIMEOUT=30 docker-compose -f docker-compose-cli.yaml up -d
Channel 생성
명령어 (CLI 컨테이너로 접속)
docker exec -it cli bash
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exa
mple.com/msp/tlscacerts/tlsca.example.com-cert.pem
Org1의 Peer0, Peer1 합류
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.cr
t
peer channel join -b mychannel.block
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer1.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.cr
t
peer channel join -b mychannel.block
Org2의 Peer0, Peer1 합류
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.cr
t
peer channel join -b mychannel.block
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
export CORE_PEER_ADDRESS=peer1.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.cr
t
peer channel join -b mychannel.block
Org1의 Anchor Peer 설정 ( peer0.org1)
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.cr
t
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacer
ts/tlsca.example.com-cert.pem
Org2의 Anchor Peer 설정 (peer0.org2)
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" 
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.cr
t
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacer
ts/tlsca.example.com-cert.pem
Chaincode 디플로이 (peer0.org1 에)
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" 
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.cr
t
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
Chaincode 초기화 (Instantiate, Policy 적용)
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" 
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca
.crt
peer chaincode instantiate -o orderer.example.com:7050 --tls true--cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlsca
certs/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P 'AND
('''Org1MSP.peer''', '''Org2MSP.peer''') ‘
peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem -C
mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
블록 초기화값 확인 ( a==100, b==200 )
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca
.crt
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}’
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
블록값 Update ( a->b, 10 전송)
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca
.crt
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem -C
mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
블록 변경값 확인 (a와 b)
명령어 :
export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto
export
CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP"
export
CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca
.crt
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}’
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
8.3 실습 Case #3
Couch DB 사용하기
실습 가상머신 바탕화면에 있는
command_summary_2 파일을 참조한다.
기존 Fabric Network shutdown
명령어 : CHANNEL_NAME=mychannel TIMEOUT=30 docker-compose -f docker-compose-cli.yaml down
docker rm $(docker ps –aq)
CouchDB 구성으로 Network start
명령어 : CHANNEL_NAME=mychannel TIMEOUT=10000 docker-compose -f docker-compose-cli.yaml –f docker-compose-
couch.yaml up -d
Channel 생성 (mychannel  소스 버그..)
명령어 : docker exec –it cli bash
Peer0 Org1 환경변수 설정 후
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl
e.com/msp/tlscacerts/tlsca.example.com-cert.pem
Peer 참여 (Peer0.Org1)
Peer 참여 (Peer1.Org1)
Peer 참여 (Peer0.Org2)
Peer 참여 (Peer1.Org2)
Anchor Peer 설정1(Peer0.Org1)
Anchor Peer 설정2(Peer0.Org2)
Peer1.org2 노드에 marbles02 체인코드 디플로이
명령어 : peer chaincode install –n marbles02 –v 1.0 –p
github.com/hyperledger/fabric/examples/chaincode/go/marbles02/go
Chaincode 초기화(Instantiate..)
명령어 : peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/tlsca/tlsca.example.com
-cert.pem -C mychannel -n marbles02 -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
데이터 적재 (marble1, marble2,marble3, marble4)
적재 데이터 확인 (owner == tom ) : CouchDB 사용시
명령어 : peer chaincode query -C mychannel -n marbles02 -c
'{"Args":["queryMarbles","{"selector":{"owner":"tom"}}"]}'
소유권 이관 (marble2  jerry ) 및 결과 조회
소유권 이관 명령어 : peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl
e.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marbles02 -c
'{"Args":["transferMarble","marble2","jerry"]}'
명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["readMarble","marble2"]}'
색상에 따른 소유권이전 및 조회 (blue  jerry)
소유권 이전 명령어 : peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl
e.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marbles02 -c
'{"Args":["transferMarblesBasedOnColor","blue","jerry"]}'
조회 명령어 : peer chaincode query -C mychannel -n marbles02 -c
'{"Args":["queryMarbles","{"selector":{"color":"blue"}}"]}'
전체 marble 조회
명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["getMarblesByRange","marble1","marble9"]}'
데이터 삭제 (marble1) 및 조회
삭제 명령어 : peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile
/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl
e.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marbles02 -c '{"Args":["delete","marble1"]}'
조회 명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["getMarblesByRange","marble1","marble9"]}'
이력 조회 ( marble2 & marble1)
기존 Fabric Network shutdown
Address
서울특별시 성동구 아차산로 17
11층 (성수동 1가, 서울숲엘타워)
우편번호 04789
Telephone
Tel : (02)575-0409
Fax: (02)6003-1987

Contenu connexe

Tendances

Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networkingLorenzo Fontana
 
FIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LDFIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LDFIWARE
 
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in ProductionKong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in ProductionFIWARE
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - WebinarNAVER CLOUD PLATFORMㅣ네이버 클라우드 플랫폼
 
Docker advance topic
Docker advance topicDocker advance topic
Docker advance topicKalkey
 
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Takuya Ueda
 
[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험NHN FORWARD
 
実践! Argo cd &amp; rollouts による canary release(cndt2021)
実践! Argo cd &amp; rollouts による canary release(cndt2021) 実践! Argo cd &amp; rollouts による canary release(cndt2021)
実践! Argo cd &amp; rollouts による canary release(cndt2021) HayatoOkuma1
 
Splunkで実践するKubernetesの運用監視とオブザーバビリティ
Splunkで実践するKubernetesの運用監視とオブザーバビリティSplunkで実践するKubernetesの運用監視とオブザーバビリティ
Splunkで実践するKubernetesの運用監視とオブザーバビリティKunihiko Ikeyama
 
FIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE
 
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...OpenStack Korea Community
 
FIWARE Training: NGSI-LD Advanced Operations
FIWARE Training: NGSI-LD Advanced OperationsFIWARE Training: NGSI-LD Advanced Operations
FIWARE Training: NGSI-LD Advanced OperationsFIWARE
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking ExplainedThomas Graf
 
KubeConEU - NATS Deep Dive
KubeConEU - NATS Deep DiveKubeConEU - NATS Deep Dive
KubeConEU - NATS Deep Divewallyqs
 
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm NATS
 
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결 kafka를 이용한 매체 전송
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결   kafka를 이용한 매체 전송[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결   kafka를 이용한 매체 전송
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결 kafka를 이용한 매체 전송ChoiYura
 
Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021TomStraub5
 

Tendances (20)

Understanding docker networking
Understanding docker networkingUnderstanding docker networking
Understanding docker networking
 
Packer
Packer Packer
Packer
 
FIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LDFIWARE Wednesday Webinars - Introduction to NGSI-LD
FIWARE Wednesday Webinars - Introduction to NGSI-LD
 
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in ProductionKong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
Kong, Keyrock, Keycloak, i4Trust - Options to Secure FIWARE in Production
 
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
클라우드의 대세 쿠버네티스란 무엇인가?(윤성훈 클라우드 솔루션 아키텍트) - Webinar
 
Docker advance topic
Docker advance topicDocker advance topic
Docker advance topic
 
gRPC
gRPCgRPC
gRPC
 
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
 
[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험[2018] 오픈스택 5년 운영의 경험
[2018] 오픈스택 5년 운영의 경험
 
実践! Argo cd &amp; rollouts による canary release(cndt2021)
実践! Argo cd &amp; rollouts による canary release(cndt2021) 実践! Argo cd &amp; rollouts による canary release(cndt2021)
実践! Argo cd &amp; rollouts による canary release(cndt2021)
 
Splunkで実践するKubernetesの運用監視とオブザーバビリティ
Splunkで実践するKubernetesの運用監視とオブザーバビリティSplunkで実践するKubernetesの運用監視とオブザーバビリティ
Splunkで実践するKubernetesの運用監視とオブザーバビリティ
 
FIWARE Training: IoT and Legacy
FIWARE Training: IoT and LegacyFIWARE Training: IoT and Legacy
FIWARE Training: IoT and Legacy
 
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
[OpenInfra Days Korea 2018] (Track 1) TACO (SKT All Container OpenStack): Clo...
 
FIWARE Training: NGSI-LD Advanced Operations
FIWARE Training: NGSI-LD Advanced OperationsFIWARE Training: NGSI-LD Advanced Operations
FIWARE Training: NGSI-LD Advanced Operations
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking Explained
 
KubeConEU - NATS Deep Dive
KubeConEU - NATS Deep DiveKubeConEU - NATS Deep Dive
KubeConEU - NATS Deep Dive
 
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
Simple and Scalable Microservices: Using NATS with Docker Compose and Swarm
 
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결 kafka를 이용한 매체 전송
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결   kafka를 이용한 매체 전송[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결   kafka를 이용한 매체 전송
[ 2021 AI + X 여름 캠프 ] 2. 장비 상호 연결 kafka를 이용한 매체 전송
 
Docker Swarm入門
Docker Swarm入門Docker Swarm入門
Docker Swarm入門
 
Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021Developing Terraform Modules at Scale - HashiTalks 2021
Developing Terraform Modules at Scale - HashiTalks 2021
 

Similaire à 하이퍼레저 패브릭 실습자료

Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis병준 김
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기Hyperledger Korea User Group
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxwonyong hwang
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3Ji-Woong Choi
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래NAVER D2
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 rockplace
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTHosang Jeon
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기Ted Won
 
ChainHero web application hyperledger fabric analysis v 1.0
ChainHero web application hyperledger fabric analysis v 1.0ChainHero web application hyperledger fabric analysis v 1.0
ChainHero web application hyperledger fabric analysis v 1.0병준 김
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideChan Shik Lim
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTLOGISPOT
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Sangcheol Hwang
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System환석 주
 

Similaire à 하이퍼레저 패브릭 실습자료 (20)

Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
 
Deploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptxDeploying Hyperledger Fabric on Kubernetes.pptx
Deploying Hyperledger Fabric on Kubernetes.pptx
 
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
[오픈소스컨설팅]Docker기초 실습 교육 20181113_v3
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
Docker osc 0508
Docker osc 0508Docker osc 0508
Docker osc 0508
 
[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래[1A6]Docker로 보는 서버 운영의 미래
[1A6]Docker로 보는 서버 운영의 미래
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성 Jenkins를 활용한 Openshift CI/CD 구성
Jenkins를 활용한 Openshift CI/CD 구성
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
ChainHero web application hyperledger fabric analysis v 1.0
ChainHero web application hyperledger fabric analysis v 1.0ChainHero web application hyperledger fabric analysis v 1.0
ChainHero web application hyperledger fabric analysis v 1.0
 
K8s in action02
K8s in action02K8s in action02
K8s in action02
 
Kubernetes on Premise Practical Guide
Kubernetes on Premise Practical GuideKubernetes on Premise Practical Guide
Kubernetes on Premise Practical Guide
 
Introduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOTIntroduction to Docker - LOGISPOT
Introduction to Docker - LOGISPOT
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
kt-cloud
kt-cloudkt-cloud
kt-cloud
 
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
Tech planet 2015 Docker 클라우드 구축 프로젝트 - d4
 
Block chain bidding_System
Block chain bidding_SystemBlock chain bidding_System
Block chain bidding_System
 

Plus de TIMEGATE

UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동TIMEGATE
 
OpenSource License
OpenSource LicenseOpenSource License
OpenSource LicenseTIMEGATE
 
Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안TIMEGATE
 
시계열분석의 이해
시계열분석의 이해시계열분석의 이해
시계열분석의 이해TIMEGATE
 
스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration스플렁크 Machine Learning Integration
스플렁크 Machine Learning IntegrationTIMEGATE
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요TIMEGATE
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detectionTIMEGATE
 
마이크로소프트 QnA Maker를 이용한 챗봇 만들기
마이크로소프트  QnA Maker를 이용한 챗봇 만들기마이크로소프트  QnA Maker를 이용한 챗봇 만들기
마이크로소프트 QnA Maker를 이용한 챗봇 만들기TIMEGATE
 
통계의 힘 (도서정리)
통계의 힘 (도서정리)통계의 힘 (도서정리)
통계의 힘 (도서정리)TIMEGATE
 

Plus de TIMEGATE (9)

UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동
 
OpenSource License
OpenSource LicenseOpenSource License
OpenSource License
 
Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안Ethereum 스마트 컨트랙트 보안
Ethereum 스마트 컨트랙트 보안
 
시계열분석의 이해
시계열분석의 이해시계열분석의 이해
시계열분석의 이해
 
스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detection
 
마이크로소프트 QnA Maker를 이용한 챗봇 만들기
마이크로소프트  QnA Maker를 이용한 챗봇 만들기마이크로소프트  QnA Maker를 이용한 챗봇 만들기
마이크로소프트 QnA Maker를 이용한 챗봇 만들기
 
통계의 힘 (도서정리)
통계의 힘 (도서정리)통계의 힘 (도서정리)
통계의 힘 (도서정리)
 

하이퍼레저 패브릭 실습자료

  • 1. 하이퍼렛저 패브릭 실습 가이드 타임게이트 기술연구소 Hyperledger Fabric 실습
  • 2. CONTENTS 1. 개요 2. 실습 환경 구성 3. 실습 시나리오 4. 목표 구성도 5. 도커(Docker) 아키텍처 및 주요 명령어 6. Hyperledger Fabric 아키텍처 7. 실습 절차 (Step-by-Step) 8. 실습 화면 설명 및 실행 결과 (Case #1 ~ 3)
  • 3. 1. 개요 • 2개의 Org 와 Peer 4개를 가지는 1개의 Channel 로 구성된 Hyperledger 네트워크 를 구축하는 실습에 대한 가이드를 제공하는 것을 목적으로 한다. • Hyperledger Architecture 구성요소에 대한 기본적인 이해가 필요하다. • 기본적인 도커(Docker) 명령어를 사용 할 수 있어야 한다. - 도커 관련 참고자료 : https://www.slideshare.net/pyrasis/docker-fordummies-44424016 • 실습환경 - 우분투 OS 가상머신 이미지를 사용
  • 4. 2. 실습 환경 구성 • 가상 이미지를 사용하기 위해 VirtualBox 를 설치한다. • 실습에 사용할 가상머신 이미지는 구글 드라이브에서 다운로드 받아 사용한다. • 설치 가이드 및 이미지 파일은 아래 링크를 참조 - 설치 가이드 : https://drive.google.com/open?id=1C15j2gBQkH8B_v1jpOZh15i6c4-t241P - 가상머신 이미지 파일 : https://drive.google.com/open?id=1bZ5Gne9WLFLnKuDsGAhGNVyGPE91Ut7I • 설치 가이드를 통해 가상 머신 가져오기 (import) 가 완료되면 가상머신 전원을 시 작하여, 우분투 OS 에 접속 후 터미널을 실행한다. (접속계정 아래 참조) - OS 접속 계정 : bcadmin / passw0rd - 실습 명령어 실행 경로 : $HOMEfabric_samplesfirst_network
  • 5. 3. 실습 시나리오 실습은 3가지 케이스로 진행한다. [기본 Level DB를 사용하는 실습]  Case #1 hyperledger fabric 에서 기본적으로 제공하는 shell 스크립트 명령어를 실행하는 방법  Case #2 step-by-step 으로 hyperledger fabric 네트워크를 구성 및 시작하는 방법 [Document Type DB 인 Couch DB 를 사용하는 실습]  Case #3 Couch DB 사용하여 step-by-step 으로 hyperledger fabric 네트워크 구축하는 방법
  • 6. 4. 목표 구성도 • Org 별 2개의 Peer 를 갖는 채널 구성 • Org 에 1개의 Anchor Peer 설정 • 채널 이름 : mychannel
  • 7. 5. 도커(Docker) 아키텍처 도커 아키텍처 및 주요 명령어
  • 8. 5.1 도커(Docker) 아키텍처 <이미지 출처 : https://docs.docker.com/engine/docker-overview/#docker-architecture> Docker host = 가상머신
  • 9. 5.2 도커(Docker) 주요 명령어 • 이미지 조회 : docker images • 수행중인 컨테이너 조회 : docker ps • 호스트에서 컨테이너로 복사 : docker cp <호스트 파일> <컨테이너 ID>:<경로> • 컨테이너 구동/정지 : docker start/stop <컨테이너 ID> • 컨테이너 삭제 : docker rm <컨테이너 ID> • 이미지 삭제 : docker rmi <이미지 ID> • 컨테이너 로그 확인 : docker logs <컨테이너 ID> • 새로운 컨테이너에서 명령 수행 : docker run <이미지 ID> • 기존 컨테이너에서 명령 수행 : docker exec <컨테이너 ID> • 컨테이너 로그 확인 : docker logs <컨테이너 ID> 참고 자료 : https://www.slideshare.net/pyrasis/docker-fordummies-44424016 <이미지 출처 : https://docs.docker.com/engine/docker-overview/#docker-architecture>
  • 11. 6. Hyperledger Fabric 아키텍처 Peer, Channel, Organization, Orderer
  • 12. 6.1 피어(Peers) & 채널(Channels)  피어 (Peer)의 특징  모든 피어는 원장(ledger)을 가진다. -> Committer peer  체인코드가 배포 된 피어는 보증인 역할 수행 한다. ( 유효한 트랜잭션 보증을 위한 충분 조건이 보증 정책에 의해 정의됨 )  피어는 트랜잭션을 실행하며, 같은 채널에 있는 피어들은 동일한 원장을 가지며 원장 상태를 업데이트 한다. 원장에는 트랜잭션이 기록되며, 상태 (state) 값은 Key-Value Store(DB) 인 Level DB 에서 관리한다.  채널 (Channel)의 특징  구성원(조직), 구성원 당 앵커 피어, 공유 원장, 체인코드 응용 프로그램 및 주문 서비스 노드(들) 에 의해 정의됨  네트워크 상의 각 트랜잭션은 채널에서 실행되며, 각 당사자는 인증되고 해당 채널에서 거래할 권한이 있어야 함  채널에 참여하는 각 피어는 Membership Services Provider(MSP) 가 제공한 자체 ID를 가짐  채널 피어 및 서비스에 대한 각 피어를 인증함 P1, P2는 Chaincode 가 배포되어 있기 때문에, Endorser Peer 로 불리며 트랜잭션을 보증하는 역할을 수행한다.
  • 13. 6.2 피어(Peer), 조직(Organization)  블록체인 네트워크는 단일 조직 보다 조직 집합에 의해서 관리됨.  앵커 피어(Anchor peer) : 조직 간 통신역할을 담당하는 피어 -> P1, P3, P5, P7, P8 에 해당함. -> 앵커 피어는 1개 또는 다수개로 설정될 수 있음 / SPoF (Single Point of Failure) 를 방지하기 위함 앵커피어(Anchor peer) 를 통해서 다른 조직(Org) 의 멤버 정보를 알게 된다.
  • 14. 6.3 피어(Peer) 와 Orderer 1 2 2 3 3 4 4 5 6 7 8 8 1 : 클라이언트에서 트랜잭션 요청 2 : 트랜잭션 요청에 대해 보증(Endorser) 피어로 전달 3 : 보증 피어에서 시뮬레이션 실행 및 RW Set 생성 4~5 : 트랜잭션 요청에 대한 응답 6 : 트랜잭션 보증 정책을 만족할 경우 Orderer 에 트랜잭션을 전달 7 : Orderer 의해 트랜잭션의 순서가 정렬 된 후 채널 내 모든 피어에게 broadcast 8 : 모든 피어는 ledger 에 업데이트 Orderer 는 트랜잭션의 순서를 정렬하여 블록을 만들고. 채널(channel)에 있는 다른 피어들에게 원장을 업데이트 하도록 블록정보를 전파하는 역할을 한다. 클라이언트(A1) 에서 트랜잭션이 발생하여 원장에 기록되기 까지의 흐름도
  • 15. 6.4 트랜잭션 패키징 및 검증 Orderer 는 트랜잭션의 순서를 정렬하여 블록을 만들고 채널(channel)에 있는 다른 피어들에게 원장을 업데이트 하도록 블록정보를 전파하는 역할을 한다.
  • 16. 7. 실습 절차 (Step-by-Step) 1. 필요 환경변수 Import 2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정 3. 네트워크 기동 4. 채널 생성  Orderer 에 의함 5. 각 Peer Join 6. Org 의 Anchor Peer 설정  각 Org 별 7. Chain Code 디플로이 8. Chain Code 초기화 9. 블록(? 계정) 초기값 확인 10. 블록 값 변경 11. 블록 변경 상태 확인  다른 peer에서도 확인 12. 네트워크 down
  • 17. 8.1 실습 Case #1 Shell 스크립트 실행
  • 18. 실습 절차 • 실습 실행경로 : $HOMEfabric_samplesfirst_network - byfn : Build your first network - sh 스크립트 실행 전에 ‘docker ps’ 를 실행하여 실행되고 있는 컨테이너가 있는지 확인 • 아래 순서대로 명령어를 실행한다. 1. ./byfn.sh generate 실행 2. ./byfn.sh up 실행 3. ./byfn.sh down 실행
  • 19. 실행 단계별 처리 내용 1. 필요 환경변수 Import 2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정 3. 네트워크 기동 4. 채널 생성  Orderer 에 의함 5. 각 Peer Join 6. Org 의 Anchor Peer 설정  각 Org 별 7. Chain Code 디플로이 8. Chain Code 초기화 9. 블록 초기값 확인 10. 블록 값 변경 11. 블록 변경 상태 확인  다른 peer에서도 확인 12. 네트워크 down./byfn.sh down B C ./byfn.sh generate A ./byfn.sh up
  • 20. A 단계 실행 1. 필요 환경변수 Import 2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정 org1, org2 의 MSP 인증서 생성 (MSP: Membership Service Provider) Genesis Block 생성 채널 트랜잭션 아티팩트 생성 Org1, Org2 의 앵커피어 아티팩트 생성 ./byfn.sh generate A
  • 21. A 단계 실행 후 1. 필요 환경변수 Import 2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정 A 단계 완료 후 생성한 파일을 하기 경로에서 확인한다. - 경로 : $HOMEfabric_samplesfirst_networkchannel_artifacts 생성 된 파일 : channel.tx, genesis.block, Org1Mspanchors.tx, Org2MSPanchors.tx ./byfn.sh generate A
  • 22. B 단계 실행(1) 6개의 컨테이너를 실행 - Orderer - Peer0.Org1 - Peer1.Org1 - Peer0.Org2 - Peer1.Org2 - Cli (Command Line Interface) 채널명 ‘mychannel’ 로 채널 생성 Hyperledger Fabric 네트워크 시작 ./byfn.sh up B 3. 네트워크 기동 4. 채널 생성  Orderer 에 의함
  • 23. B 단계 실행(2) 피어 4개 ‘mychannel’ 에 Join - Peer0.Org1 - Peer1.Org1 - Peer0.Org2 - Peer1.Org2 ./byfn.sh up B 5. 각 Peer 채널에 Join
  • 24. B 단계 실행(3) Org1 Anchor Peer 업데이트 Org2 Anchor Peer 업데이트 ./byfn.sh up B 6. Org 의 Anchor Peer 설정  각 Org 별 7. Chain Code 디플로이 체인코드 배포 - peer0.org1 - peer0.org2
  • 25. B 단계 실행(4) 체인코드 인스턴스화(초기화) ./byfn.sh up B 8. Chain Code 초기화 9. 블록 초기값 확인 체인코드 초기값 확인 - a 값 확인 : 100  피어에서 주로 사용하는 체인코드 명령어 - Install : 체인코드 설치(배포) - Instantiate : 체인코드 인스턴스화(초기화) - Invoke : 체인코드 실행 - Query : 체인코드 조회
  • 26. B 단계 실행(5) 체인코드 블록 값 변경 - peer0.org1, peer0, org2 로 트랜잭션 전송 (peer0.org1 과 peer0.org2 는 chaincode 가 배포 되어 있는 Endoerser Peer 이기 때문임) - 체인코드 설명 : ‘invoke’ 코드 a 에서 b로 10을 보내라는 method 임 ./byfn.sh up B 10. 블록 값 변경 11. 블록 변경 상태 확인  다른 peer에서도 확인 블록 변경 값 확인 확인 - peer1.org2 에서 값 확인 - a 값 90 확인 (100->90 으로 변경된 것을 확인) peer1.org2 에 체인코드 배포
  • 27. B 단계 실행(6) ./byfn.sh up B 3~11 까지 완료 후 docker ps 실행 • 네트워크 기동 후 orderer, peer0.org1, peer0.org2, peer1.org1, peer1.org2, cli 컨테이너 6개가 프로세스화 되어 실행됨. • 체인코드 배포(설치) 후 체인코드 3개의 docker image가 생성되며, • 컨테이너 3개가 프로세스화 되어 실행됨. - dev-peer0.org1 - dev-peer0.org2 - dev-peer1.org2 1 2 3
  • 28. C 단계 실행 12. 네트워크 down./byfn.sh down C 도커 컨테이너 종료 볼륨 정보 삭제 ~/channel_artifacts/ 경로에 생성 한 아티팩트 파일 삭제 도커 이미지 삭제 - 배포한 체인코드 이미지도 삭 제
  • 29. 8.2 실습 Case #2 Step-by-step 실습 실습 가상머신 바탕화면에 있는 command_summary_1 파일을 참조한다.
  • 30. 실습 절차 (Step-by-Step) 1. 필요 환경변수 Import 2. 인증서와 아티팩트(Artifacts) 생성  채널이름 결정 3. 네트워크 기동 4. 채널 생성  Orderer 에 의함 5. 각 Peer Join 6. Org 의 Anchor Peer 설정  각 Org 별 7. Chain Code 디플로이 8. Chain Code 초기화 9. 블록(? 계정) 초기값 확인 10. 블록 값 변경 11. 블록 변경 상태 확인  다른 peer에서도 확인 12. 네트워크 down
  • 31. 인증서 생성 명령어 : $GOPATH/src/github.com/hyperledger/fabric/.build/bin/cryptogen generate --config=./crypto-config.yaml
  • 32. Orderer genesis block 생성 명령어 : export FABRIC_CFG_PATH=$PWD $GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsOrdererGenesis - outputBlock ./channel-artifacts/genesis.block
  • 33. 채널 트랜잭션 아티팩트 생성 명령어 : export CHANNEL_NAME=mychannel $GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsChannel - outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
  • 34. Org1, Org2 에 대한 Anchor peer 아티팩트 생성 명령어 : export CHANNEL_NAME=mychannel $GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsChannel - outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP $GOPATH/src/github.com/hyperledger/fabric/.build/bin/configtxgen -profile TwoOrgsChannel - outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
  • 35. Fabric Network 기동 명령어 : CHANNEL_NAME=mychannel TIMEOUT=30 docker-compose -f docker-compose-cli.yaml up -d
  • 36. Channel 생성 명령어 (CLI 컨테이너로 접속) docker exec -it cli bash peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exa mple.com/msp/tlscacerts/tlsca.example.com-cert.pem
  • 37. Org1의 Peer0, Peer1 합류 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.cr t peer channel join -b mychannel.block export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=peer1.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.cr t peer channel join -b mychannel.block
  • 38. Org2의 Peer0, Peer1 합류 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.cr t peer channel join -b mychannel.block export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=peer1.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer1.org2.example.com/tls/ca.cr t peer channel join -b mychannel.block
  • 39. Org1의 Anchor Peer 설정 ( peer0.org1) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.cr t peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacer ts/tlsca.example.com-cert.pem
  • 40. Org2의 Anchor Peer 설정 (peer0.org2) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.cr t peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacer ts/tlsca.example.com-cert.pem
  • 41. Chaincode 디플로이 (peer0.org1 에) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.cr t peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
  • 42. Chaincode 초기화 (Instantiate, Policy 적용) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org2.example.com:7051 export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca .crt peer chaincode instantiate -o orderer.example.com:7050 --tls true--cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlsca certs/tlsca.example.com-cert.pem -C mychannel -n mycc -l golang -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P 'AND ('''Org1MSP.peer''', '''Org2MSP.peer''') ‘ peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
  • 43. 블록 초기화값 확인 ( a==100, b==200 ) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca .crt peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}’ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
  • 44. 블록값 Update ( a->b, 10 전송) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca .crt peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
  • 45. 블록 변경값 확인 (a와 b) 명령어 : export CORE_PEER_CRYPTO_BASE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto export CORE_PEER_MSPCONFIGPATH=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=$CORE_PEER_CRYPTO_BASE/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca .crt peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}’ peer chaincode query -C mychannel -n mycc -c '{"Args":["query","b"]}'
  • 46. 8.3 실습 Case #3 Couch DB 사용하기 실습 가상머신 바탕화면에 있는 command_summary_2 파일을 참조한다.
  • 47. 기존 Fabric Network shutdown 명령어 : CHANNEL_NAME=mychannel TIMEOUT=30 docker-compose -f docker-compose-cli.yaml down docker rm $(docker ps –aq)
  • 48. CouchDB 구성으로 Network start 명령어 : CHANNEL_NAME=mychannel TIMEOUT=10000 docker-compose -f docker-compose-cli.yaml –f docker-compose- couch.yaml up -d
  • 49. Channel 생성 (mychannel  소스 버그..) 명령어 : docker exec –it cli bash Peer0 Org1 환경변수 설정 후 peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl e.com/msp/tlscacerts/tlsca.example.com-cert.pem
  • 56. Peer1.org2 노드에 marbles02 체인코드 디플로이 명령어 : peer chaincode install –n marbles02 –v 1.0 –p github.com/hyperledger/fabric/examples/chaincode/go/marbles02/go
  • 57. Chaincode 초기화(Instantiate..) 명령어 : peer chaincode instantiate -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/tlsca/tlsca.example.com -cert.pem -C mychannel -n marbles02 -v 1.0 -c '{"Args":["init"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
  • 58. 데이터 적재 (marble1, marble2,marble3, marble4)
  • 59. 적재 데이터 확인 (owner == tom ) : CouchDB 사용시 명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["queryMarbles","{"selector":{"owner":"tom"}}"]}'
  • 60. 소유권 이관 (marble2  jerry ) 및 결과 조회 소유권 이관 명령어 : peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl e.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marbles02 -c '{"Args":["transferMarble","marble2","jerry"]}' 명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["readMarble","marble2"]}'
  • 61. 색상에 따른 소유권이전 및 조회 (blue  jerry) 소유권 이전 명령어 : peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl e.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marbles02 -c '{"Args":["transferMarblesBasedOnColor","blue","jerry"]}' 조회 명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["queryMarbles","{"selector":{"color":"blue"}}"]}'
  • 62. 전체 marble 조회 명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["getMarblesByRange","marble1","marble9"]}'
  • 63. 데이터 삭제 (marble1) 및 조회 삭제 명령어 : peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.exampl e.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n marbles02 -c '{"Args":["delete","marble1"]}' 조회 명령어 : peer chaincode query -C mychannel -n marbles02 -c '{"Args":["getMarblesByRange","marble1","marble9"]}'
  • 64. 이력 조회 ( marble2 & marble1)
  • 66. Address 서울특별시 성동구 아차산로 17 11층 (성수동 1가, 서울숲엘타워) 우편번호 04789 Telephone Tel : (02)575-0409 Fax: (02)6003-1987