본문 바로가기

IT/Block Chain(Hyperledger)

minifabric에 대한 요약 정리

minifabric에 대한 요약 정리

minifabric 정의

Fabric 네트워크와 구성요소(채널, 스마트 컨트렉, 조직 등)구축하기위해 개발자나 관리자를 돕는 도구 입니다.

Minifabric은 오픈소스 프로젝트 이고, Fabric 1.4.1 이상 버전을 지원합니다.

https://github.com/litong01/minifabric

 

litong01/minifabric

Do fabric network the right and easy way. Contribute to litong01/minifabric development by creating an account on GitHub.

github.com

minifabric의 특징

  1. 기본 스펙이나 사용자 고유의 스펙 기반의 fabric 네트워크 배포
  2. 배포된 fabric 네트워크 내리기
  3. 채널 생성, 채널에 피어 조인
  4. 체인코드 설치
  5. 체인코드 승인, 인스턴스(커밋)와 업그레이드
  6. 체인코드 호출과 파라미터
  7. 블록과 트랜잭션 쿼리 가능
  8. 채널 구성에 대한 쿼리, 승인 그리고 업데이트
  9. 프라이빗 데이터 콜렉션
  10. 새로운 조직 가져오기
  11. Fabric 네트워크 확장할 멀티 서버
  12. 연결과 fabric go/python SDK를 위한 월렛 파일, VSCode 익스텐션 추가

환경설정

Virtual Box Ubuntu 19.04 VM

Minifabric OS X와 Linux 환경 지원

Minifabric 구성

1
# 디렉토리 생성 및 불러오기
mkdir -p $PWD/minifab && cd $PWD/minifab && curl -o minifab -sL https://tinyurl.com/twrt8zv && chmod +x minifab

# minifab 실행
./minifab up
cs

기본 네트워크 구성

네트워크 사양을 담은 자체 yaml파일을 활용해 패브릭 네트워크를 구축

  1. 동일한 머신에 돌아가는 네트워크가 있다면, 존재하는 Fabirc Network 없앱니다.
  2. spec.yaml로 파일 이름을 짓고, 워킹 디렉토리에 위치 시킵니다.
  3. ./minifab up 명령을 통해 네트워크를 실행합니다.

특정 yaml file 예시

네트워크 구축

minifab up

네트워크 내리고 모든 요소 정리

minifab cleanup

minifab의 다른 기능 살펴보기

minifab

minifabric에 대한 사실

  1. Minifabric은 hfrd/minifab의 도커허브에 있는 컨테이너로서, 모든 Minifabric과 관련된 업그레이드 사항은 도커허브로 pull 할 것입니다.
  2. Minifabric은 앤서블 플레이북과 약간의 bash 스크립트로 써여져 있습니다.
  3. Minifabric은 도커 엔드포인트에서 CA, Peer, Orderer 노드를 생성, 삭제합니다.
    엔드포인트: 네트워크와 컨테이너를 Attach하는 부분
  4. Minifabric은 Fabric 커멘드라인을 사용하는데, 이는 체인코드 관리, 채널 관리, 채널 구성 등의 다양한 업무를 하기위해 사용됩니다.
  5. Minifabric은 동적으로 요청된 명령에 기반한 많은 bash 스크립트를 생성하는데, 스크립트에서 생성된 모든 Minifabric은 vars/run(이 경로에서 유저는 어떻게 이것들이 실행되는지 배우고 검사할 수 있습니다.)에 저장됩니다.
  6. Minifabric은 매우 깨끗한 워킹 디렉토리를 유지합니다. 실행과정동안 생성된 모든것은 vars 디렉토리에 보관되고, 이것은 cleanup 커맨드를 실행할 때, 완전히 삭제됩니다.
  7. Minifabric은 linux와 os X에서 구동되지만, Windows는 현재 지원 중에 있습니다.

minifabric에 대한 사실2

  1. 모든 인증서는 vars/keyfiles 경로에 생성되고, minifab은 명령어를 생성하고 이는 모든 인증서를 재생성합니다. minifab이 명령어를 다운시키면 생성된 인증서를 제거하지 않습니다.
    이는 각각의 시간에 사용자가 fabric 노드를 올릴 때, 사용자가 인증서를 재생성을 원치 않을 타이밍에 중요하게 작용할 것입니다.
  2. 모든 발견된(discovered) 인증서와 보증 정책 파일은 vars/discover 디렉토리에 보관됩니다.
  3. vscode를 포함한 다양한 툴에서 생성된 프로파일들은 vars/profiles 디렉토리에 보관됩니다.
  4. 초기화 채널 configtx yaml 파일은 vars/configtx.yaml에 있고, 이 파일은 사용자의 패브릭이 설치될 때, 생성됩니다. 한번 사용자의 네트워크가 올라가게 되면, 이 파일은 더 이상 사용되지 않습니다.
  5. Minifabric은 하나의 커맨드 명령 실행이나 혼합된 명령어 실행을 제공합니다.
    예를 들어, 사용자는 minifab install, minifab approve 라는 두개의 커맨드 명령어를 실행할 수 있고, 명령어가 네트워크 설치 커맨드가 아닌 이상, 단순하게 minifab install, approve 처럼 한개의 명령어를 묶어 실행할 수도 있습니다. 모든 커맨드 라인 옵션은(예를 들어, - channel-name -database-type) 모든 명령어에 지정될 수 있습니다. 심지어, 현재 실행이 그 옵션 값을 사용하지 않아도, 옵션값은 저장됩니다.

어떤 사용자와 피어를 사용하는지

  1. 모든 동작을 위해 Minifabric은 각각의 조직의 Admin 유저를 사용합니다. 이 유저 크리덴셜은 vars/keyfiles/xxxOrganizatons/xxxOrgName/users 디릭토리에서 찾아볼 수 있습니다. 향후 Minifabric의 릴리즈에서는 다른 타입의 유저를 가지거나 다양한 옵션을 위한 사용자를 선택해서 허가하는 기능을 추가할 것 입니다.
  2. Minifabric은 어떤 피어가 보증 타겟인지 확인하기 위해 발견된 체인코드 보증정책을 사용합니다. 보증이 올바른 피어로 보내질수 있게 하기 위해 네트워크 맴버십이 변한 뒤나 체인코드 레벨 보증정책이 변할 때, minifab discover 명령을 실행하는 것은 중요합니다. 사용자가 minifab 인보크 명령시에나 사용자가 절대 트랜잭션을 어떤 피어로 보내야할지 모르기에 이는 매우 중요한 이유 중 하나입니다. Minifabric은 vars/keyfiles나 var/discover 디렉토리에서 필요한 인증서를 찾습니다.

멀티 노드 페브릭 네트워크 설치시에 필요할지 모르는 기능들

  1. 사용자의 crypto config 파일을 위치합니다. 이름은 my-crypto-config.yaml로 짓고 vars 디렉토리에 위치시킵니다. minifab의 생성 명령을 이용해, 암호화된 요소들을 생성하기 위해 너의 제공된 구성파일이 사용될 겁니다.

  2. 암호화 요소들을 제공하고 인증서 생성을 완전히 건너 뜁니다.

  3. 사용자는 큰 네트워크 암호화 요소를 한번 생성할 수 있습니다. 그런 다음, 다른 서버에 멀티 서버에 패브릭 네트워크를 설치하기 위해서 커스터마이즈한 spec.yaml을 사용합니다.

  4. Minifabric Context는 기본적으로 변수 이름과 값의 목록을 보여주며, 이는 현재 Minifabric의 상태를 반영합니다. 이 Context는 vars/envsettings 경로에 저장되고 이는 진짜 모든 minifab 명령어 옵션 이름과 현재 값이 포함된 bash 스크립트입니다.
    CC_PARAMETERS, CC_TRANSIENT_DATA, CC_POLICY 변수는 쌍따옴표나 괄호, 공백문자, 콤마 등을 포함하기 때문에 모두 base64로 인코딩 되었습니다. 이 파일을 너가 정확히 어떤 작업을 하는지 알지 못한다면, 바꾸지 않아야합니다. 그리고 이는 극단적으로 중요합니다.

기타 웹비나에서 나온 질문 사항

  1. 멀티 구축은 어떻게 하느냐?
    조그만 네트워크를 배포(org3)
    Peer 노드를 2nd 머신에서 배포 하자
    org를 처음에 셋팅했던 곳에 조인할 수 있다.
    컨솔티엄에 들어가게 되면, 피어를 넣을 수있다.

  2. 디버그
    -f 를 이용하면 할 수 있다?
    spec.yaml에서 debug 모드를 설정할 수 있다.

  1. 도커 환경으로 구성되어 있기 때문에, 쿠버네티스는 사용할 수 없다.