Building Your First Network: first-network
Source. https://hyperledger-fabric.readthedocs.io/en/latest/build_network.html
Notice
2020-02-11: Fabric v1.4 -> Farbic v2.0 기준으로 업데이트
Prerequisites
Linux 환경에서 Hyperledger Fabric을 실행하기 위해 미리 설치해야 하는 SW 리스트는 아래와 같다. 별도로 버전이 명시되지 않은 SW는 최신 버전을 다운로드 받는다.
Docker: 17.06 이상 설치
Docker Compose
Go: 1.13.x 이상 설치
Node.js: version 8.9.x, 10.15.3 이상 설치 (9.x는 지원되지 않는 것으로 확인)
npm
Hyperledger Fabric (이하 HLF)에서 사용자에게 초기 네트워크 테스트를 위해서 제공하는 소스 코드이다.
Github Repository에서 fabric-samples를 다운로드 받는다. 모든 명령어는 실습의 편의를 위해 루트 권한으로 실행한다.
Docker Hub에 기존에 배포되어 있는 HLF Docker image를 다운로드받아 설치한다.
설치되는 docker image는 아래와 같다.
fabric-peer: 일반 피어
fabric-orderer: 블록 생성을 담당하는 피어
fabric-ccenv: 체인코드 실행 환경
fabric-tools: configtxgen, cryptogen 등 네트워크 구성에 사용하는 유틸
fabric-ca: 자체 CA
fabric-couchdb: NoSQL 기반 데이터베이스
fabric-kafka: 트랜잭션 오더링 엔진
fabric-zookeeper: 트랜잭션 오더링 엔진
설치 스크립트(https://raw.githubusercontent.com/hyperledger/fabric/master/scripts/bootstrap.sh)의 실행이 종료되면 실습 환경에 설치된 Docker image의 리스트를 확인할 수 있다. 또한 ~/fabric-samples에 bin, config 디렉토리가 생성되고, 생성된 디렉토리 내에 configtxgen, cryptogen 등 블록체인 네트워크를 쉽게 만들기 위해 IBM에서 제공한 툴과 설정 파일(.yaml)이 설치됨을 확인할 수 있다.
이제 first-network 예제를 실행해보자.
byfn.sh 실행 전에 반드시 네트워크 중지 및 실행 중인 컨테이너 삭제 명령어를 입력해야 코드 실행 중 에러가 나지 않는다.
네트워크 실행 명령어를 입력하여 first-network 예제를 실행하면, 아래 그림과 같이 5개의 orderer와 두 개의 org (하나의 org는 두 개의 peer로 구성됨) 로 이루어진 네트워크가 구축된다. 피어 간에 원장을 공유하기 위한 네트워크(채널)의 이름은 mychannel이다.
코드 동작 순서는 아래와 같다.
Security Credential 생성: peer와 orderer의 인증서 및 서명 키 (crypto-config에 위치)
Genesis Block 생성: channel-artifacts\genesis.block
채널 설정 트랜잭션 생성: channel-artifacts\channel.tx
앵커 피어 설정 트랜잭션 생성
Org1의 앵커 피어 설정: channel-artifacts\Org1MSPanchors.tx
Org2의 앵커 피어 설정: channel-artifacts\Org2MSPanchors.tx
컨테이너 생성 및 실행
채널 생성: channel.tx를 이용하여 mychannel 이라는 채널을 생성
생성된 채널에 피어 참여: peer0.org1~peer1.org2 총 4개의 피어를 mychannel에 참여 시킴
앵커 피어 업데이트
Org1: peer0.org1
Org2: peer0.org2
체인 코드 패키지 설치 -> 검증 및 배포 -> 실행
peer0.org1과 peer0.org2에서 체인코드 실행(init): "a = 100, b = 100"
peer0.org2에서 체인코드를 실행(invoke)하여 원장에 저장된 a와 b의 상태를 업데이트: "a에서 10만큼 b에게 전달"
peer0.org1에서 체인코드 실행(query): "a? 90"
체인코드 위치: /fabric-samples/chaincode/abstore/go/abstore.go
first-network 예제 실행을 중지하고 구동 중인 컨테이너를 삭제하려면 아래 명령어를 입력한다.
Last updated