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를 다운로드 받는다. 모든 명령어는 실습의 편의를 위해 루트 권한으로 실행한다.

Clone fabric-samples
$ git clone https://github.com/hyperledger/fabric-samples.git
$ cd fabric-samples

Docker Hub에 기존에 배포되어 있는 HLF Docker image를 다운로드받아 설치한다.

Download the latest HLF docker image
$ curl -sSL https://bit.ly/2ysbOFE | bash -s

설치되는 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)이 설치됨을 확인할 수 있다.

Move to the first-network directory
$ cd first-network

이제 first-network 예제를 실행해보자.

byfn.sh 실행 전에 반드시 네트워크 중지 및 실행 중인 컨테이너 삭제 명령어를 입력해야 코드 실행 중 에러가 나지 않는다.

Bring up the first-network
$ ./byfn.sh generate // 네트워크 세팅
$ ./byfn.sh up    // 네트워크 실행

네트워크 실행 명령어를 입력하여 first-network 예제를 실행하면, 아래 그림과 같이 5개의 orderer와 두 개의 org (하나의 org는 두 개의 peer로 구성됨) 로 이루어진 네트워크가 구축된다. 피어 간에 원장을 공유하기 위한 네트워크(채널)의 이름은 mychannel이다.

코드 동작 순서는 아래와 같다.

  1. Security Credential 생성: peer와 orderer의 인증서 및 서명 키 (crypto-config에 위치)

  2. Genesis Block 생성: channel-artifacts\genesis.block

  3. 채널 설정 트랜잭션 생성: channel-artifacts\channel.tx

  4. 앵커 피어 설정 트랜잭션 생성

    1. Org1의 앵커 피어 설정: channel-artifacts\Org1MSPanchors.tx

    2. Org2의 앵커 피어 설정: channel-artifacts\Org2MSPanchors.tx

  5. 컨테이너 생성 및 실행

  6. 채널 생성: channel.tx를 이용하여 mychannel 이라는 채널을 생성

  7. 생성된 채널에 피어 참여: peer0.org1~peer1.org2 총 4개의 피어를 mychannel에 참여 시킴

  8. 앵커 피어 업데이트

    1. Org1: peer0.org1

    2. Org2: peer0.org2

  9. 체인 코드 패키지 설치 -> 검증 및 배포 -> 실행

    1. peer0.org1과 peer0.org2에서 체인코드 실행(init): "a = 100, b = 100"

    2. peer0.org2에서 체인코드를 실행(invoke)하여 원장에 저장된 a와 b의 상태를 업데이트: "a에서 10만큼 b에게 전달"

    3. peer0.org1에서 체인코드 실행(query): "a? 90"

체인코드 위치: /fabric-samples/chaincode/abstore/go/abstore.go

first-network 예제 실행을 중지하고 구동 중인 컨테이너를 삭제하려면 아래 명령어를 입력한다.

Bring down the first-network
$ ./byfn.sh down

Last updated