first-network 실습

박도준·2021년 2월 3일
1

블록체인

목록 보기
13/13

fabric-samples clone하기

Hyperledger에서는 많은 실습 예제를 제공한다. 예제는 fabric-smaples에 위치하고 있다.

이번에 해볼 실습은 first-Network이다.
Fabric v2.0에서는 test-network가 first-network에 대해 교체되었다. 때문에 first-network을 받아오기 위해서는 hyperledger/fabric-samples에서 release-1.4를 branch 옵션을 통해 clone한다.

그리고 샘플에 필요한 binary tool을 설치한다.
이 binary 파일은 bash script를 실행하여 네트워크 구축에 필요한 파일들을 설치하고 fabric-samples 디렉토리에 배치한 다음 도커 이미지를 다운로드한다. 인증서 생성을 위한 cryptogen과 네트워크 구축을 위한 configtxgen과 같은 tool도 다운로드한다.

git clone -b release-1.4 https://github.com/hyperledger/fabric-samples.git

cd fabric-samples

curl -sSL https://goo.gl/6wtTN5 | sudo bash -s 1.4.1 1.4.8

위의 동작을 모두 수행하면 다음과 같이 hyperledger sample들이 다운로드된 것을 확인할 수 있다.

fabric-samples 디렉토리에 바이너리 파일들이 존재하는 것을 볼 수 있다.

그리고 fabric-samples 폴더에 들어가보면 hyperledger fabric 공식 문서에서의 예제들을 볼 수 있다.

여기까지 완료되면 모든 준비는 끝나게 된다.


first-network 실습

first-network란?

BYFN(Build First Network) 시나리오를 가지고 있는 예제로, 각각 2개의 피어 노드를 가지는 두 개의 조직으로 구성된 샘플 Hyperledger Fabric 네트워크를 프로비저닝한다.


byfn.sh로 네트워크 올리기

first-network

  • crypto-config.yaml : 인증서 생성을 위한 조직과 peer 개수, 사용자(어드민 제외) 수 설정, configtxgen tool 사용.
  • configtx.yaml : 채널 생성을 위한 Peer 정보 (Host, Port), MSP 정보, Consortiums(몇 개의 Orgs로 구성할 것이지) 설정, 블록 생성 크기 등과 관련된 설정, cryptogen tool 사용.

실행 단계별 처리 - generate

./byfn.sh generate

generate를 하게되면 필요 환경변수를 import하고 인증서와 아티팩트(Artifacts)를 생성한다.

아티팩트는 genesis block, 채널 설정 정보, 앵커피어 설정 정보 등을 포함한다.

위에서 부터 차례로 빨간 네모의 의미는 아래와 같다.

  • org1, org2의 MSP 인증서 생성
  • Genesis Block 생성
  • 채널 트랜잭션 아티팩트 생성
  • Org1, Org2의 앵커피어 아티팩트 생성

실행 단계별 처리 - up

./byfn.sh up

./byfn.sh up 명령어를 통해 네트워크를 가동한다.

우선 6개의 컨테이너를 실행한다.

  • Orderer
  • Peer0.Org1
  • Peer1.Org1
  • Peer0.Org2
  • Peer1.Org2
  • Cli (Command Line Interface)

START는 Hyperledger Fabric 네트워크가 정상적으로 시작됐음을 의미한다.


'mychannel'의 채널명으로 채널이 생성된다.
그리고 피어 4개가 'mychannel'에 join한다.

  • Peer0.Org1
  • Peer1.Org1
  • Peer0.Org2
  • Peer1.Org2

Org의 Anchor Peer를 각 Org 별로 업데이트 한다.


체인코드를 배포한다.


체인코드를 인스턴스화(초기화)한다.



체인코드 초기값을 확인한다.(Query)

  • a 값 확인 : 100

invoke 트랜잭션을 peer0.org1, peer0.org2로 전송

{"Args":["invoke","a","b","10"]}는 a에서 b로 10을 보내라는 명령


peer1.org2에 체인코드 설치


peer1.org2에서 a의 값을 쿼리한다.

  • a의 값이 100에서 90으로 변경된 것 확인

END는 Hyperledger Fabric 네트워크 실행이 정상적으로 완료되었음을 뜻한다.



실행 단계별 처리 - down

도커 컨테이너를 종료하고 볼륨 정보를 삭제한다.



도커 이미지와 배포한 체인코드 이미지를 삭제한다.



체인코드 실행

위에서 a의 값이 100에서 90으로 바뀌는 것을 확인했는데 어떤 과정으로 바뀌게 되었는지 살펴본다.

전체 체인코드는 아래와 같다.
(위치 : /home/ubuntu/hyperledger/fabric-samples/chaincode/chaincode_example02/go/chaincode_example02.go)

  • '{"Args":["init","a","100","b","200"]}'
    Init 메서드에 a와 b 그리고 a,b의 값을 넘겨준다. a,b는 각각 A,B로 엔티티를 설정한다. a,b의 값은 Aval,Bval로 넘겨받아 값을 형변환한 후, A,B로 Putstate를 통해 원장에 저장한다.

  • '{"Args":["invoke","a","b","10"]}'
    a와 b의 값을 GetState()를 통해 원장에서 가져와 Avalbytes, Bvalbytes에 각각 넣는다.
    Avalbytes, Bvalbytes를 문자열에서 int로 형변환하여 Aval과 Bval에 담는다.
    그리고 넘겨받은 10을 X에 담고
    Aval = Aval - X //Aval = 100 - 10
    Bval = Bval + X //Bval = 100 + 10
    연산을 한다.
    연산이 끝나면 다시 형변환하여 Putstate()를 통해 원장에 기록한다.

  • '{"Args":["query","a"]}’
    쿼리를 통해 a의 값을 출력한다.
    a = 90



이렇게 하이퍼레저 패브릭 first-network 예제 실습을 해보았다. 직접 일일이 코드를 적어보진 않아 자세한 부분까지는 알지 못했으나 전체적인 흐름을 이해하는데 큰 도움이 되었다.

profile
Better late than never

0개의 댓글