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
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
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