Blockchain (Hyperledger Fabric)/Composer Server

Hyperledger Composer Developer 솔루션

김야키 2019. 1. 23. 19:08

Hyperledger Composer 개발 솔루션 튜토리얼

    • Hyperledger Composer 블록 체인 솔루션 작성 방법
    • 몇 시간 내에 분열하는 블록 체인 혁신 아이디어
    • 실제 Hyperledger Fabric 블록 체인 네트워크와의 트랜잭션 실행
    • 블록 체인 네트워크와 상호 작용하는 샘플 생성
      • Angular 2 Application 생성 및 실행
    • Hyperledger Fabric v1.2 사용
    • Ubuntu Linux 기반
    • VSCode 혹은 Atom 에디터 필요
      • 해당 카테고리의 초기 설정 참조


개발 솔루션 실습


01. 비즈니스 네트워크 구조 만들기

      • Business Network Definition(BND)
        • 비즈니스 네트워크 정의
        • Hyperledger Composer의 핵심 개념
      • Blockchain 솔루션에 대한 데이터 모델, 트랜잭션 로직, 액세스 제어 규칙을 정의
        • Playground에서 정의한 내용을 웹 엡이 아닌 실제 개발 과정
      • BND를 만들기에 적절한 프로젝트 구조 생성
        • Yeoman 생성기를 사용하여 뼈대가 되는 비즈니스 네트워크 생성
        • 기본 뼈대가 되는 구성 요소를 포함하는 디렉토리가 생성 됨
        • Default설정의 모델, 트랜잭션 논리, 액세스 제어 규칭 등
    1. Yeoman을 사용한 비즈니스 네트워크 생성. 

      yo hyperledger-composer:businessnetwork

      • 네트워크 이름, 설명, 작성자 이름, 작성자 Email, 라이센스 선택 및 네임스페이스 필요

    2. 네트워크 명 작성 tutorial-network 

      • Description 작성(선택)

      • 네트워크 작성자 이름

      • 네트워크 작성자 Email

    3. 해당 네트워크의 라이센스 작성 (Default License Apache-2.0)

    4. 네임 스페이스 작성 : org.example.mynetwork

    5. empty network 생성 여부에서 No 선택



02. 비즈니스 네트워크 정의

      • 앞에서 설명한 대로 모델, 트랜잭션 로직, 액세스 제어 규칙을 정의 해야 함
      • 모델의 확장자 명 : .cto
      • 트랜잭션 로직 확장자 명 : .js
      • 액세스 제어 규칙 확장자 명 : .acl
        • 액세스 제어 규칙은 한 네트워크에 하나의 파일만 존재 해야 함
      • 비즈니스 네트워크의 메타 데이터가 포함 되어있는 package.json 패키지도 포함 되어 있음
      • cto, js, acl의 수정 및 추가 작업은 VSCode에서 진행
        • 참여자(Trader) 및 트랜잭션 모델링
        1. models/org.example.mynetwork.cto 파일 수정

/** * My commodity trading network */ namespace org.example.mynetwork asset Commodity identified by tradingSymbol { o String tradingSymbol o String description o String mainExchange o Double quantity --> Trader owner } participant Trader identified by tradeId { o String tradeId o String firstName o String lastName } transaction Trade { --> Commodity commodity --> Trader newOwner }

      • 자바 스크립트 트랜잭션 로직 추가
      1. lib/logic.js 파일 수정

/** * Track the trade of a commodity from one trader to another * @param {org.example.mynetwork.Trade} trade - the trade to be processed * @transaction */ async function tradeCommodity(trade) { trade.commodity.owner = trade.newOwner; let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity'); await assetRegistry.update(trade.commodity); }

      • 액세스 제어 추가
      1. permissions.acl 파일 수정

/** * Access control rules for tutorial-network */ rule Default { description: "Allow all participants access to all resources" participant: "ANY" operation: ALL resource: "org.example.mynetwork.*" action: ALLOW } rule SystemACL { description: "System ACL to permit all access" participant: "ANY" operation: ALL resource: "org.hyperledger.composer.system.**" action: ALLOW }




03. 비즈니스 네트워크 아카이브 생성

      • 네트워크가 정의 되었으므로 배치 가능한 비즈니스 네트워크 아카이브 (.bna) 파일에 패키징이 되어야 함

composer archive create -t dir -n .

      • 해당 네트워크 폴더 내에 tutorial-network@0.0.1.bna 파일이 생기면 성공




04. 비즈니스 네트워크 배포

      • 비즈니스 네트워크 아카이브(.ban) 파일을 만든 후에는 Hyperledger Fabric의 인스턴스로 배포할 수 있음
      • 일반적으로 Fabric의 관리자의 정보 PeerAdmin은 composerchannel 채널에서 체인 코드를 시작하고 Peer에 체인 코드를 설치할 수 있는 권한이 있는 ID를 만들어야 함
      • 개발 환경 설치의 일부르 PeerAdmin의 ID가 만들어져 있음
      • 올바른 자격 증명 검색
        • PeerAdmin 올바른 자격 증명이 있는 비즈니스 네트워크 카드는 개발 환경 설치의 일부로 이미 만들어져 있음
        • tutorial-network 디렉토리에서 비즈니스 네트워크를 설치하는 아래 명령어를 실행

composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna

          1. "Error: card not found: PeerAdmin@hlfv1" 이라는 에러가 발생할 시 PeerAdmin@hlfv1의 카드가 없다는 의미이기 때문에 다시 생성 해 주기 위해서 아래의 절차를 따라야 함
            • 기존에 설치한 fabric-dev-servers 폴더로 이동후 아래 명령을 차례대로 실행
            • './downloadFabric.sh
            • './startFabric.sh'
            • './createPeerAdminCard.sh'
        • 비즈니스 네트워크를 시작 하려면 아래 명령어를 실행

composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card

        1. composer network start 명령에는 비즈니스 네트워크 이름, 네트워크 버전, 관리자 이름, 관리자 페스워드, card가 포함되어 있는 파일을 만들 수 있음
        • 사용 가능한 비즈니스 네트워크 카드로 네트워크 관리자 ID를 가져 오려면 아래 명령어를 실행

composer card import --file networkadmin.card

        1. composer card import 명령에 지정된 파일 이름을 즉, 위의 start에서 만든 파일의 카드를 만들 수 있음
        • 비즈니스 네트워크가 성공적으로 배포 되었는지 확인 하는 Ping을 던지기 위해서 아래 명령어를 실행

composer network ping --card admin@tutorial-network



05. REST 서버 생성
      • Hyperledger Composer는 비즈니스 네트워크를 기반으로 맞춤형 REST API를 생성할 수 있음
      • REST API는 웹 애플리케이션을 개발할 때 유용한 언어 중립적 추상화 계층을 제공 함
        • REST API를 만들려면 tutorial-network 디렉토리에 저장하고 아래의 명령을 실행

          composer-rest-server

        1. Enter the name of the business network card to use:
          • 사용할 비즈니스 네트워크 이름 작성
        2. Specify if you want namespaces in the generated REST API:
          • 생성된 REST API에 네임 스페이스 사용 여부 설정
          • always use namespaces - 항상 네임스페이스 사용
          • use namespaces if conflicting types exist - 충돌하는 유형이 있는 경우에 사용
          • never use namespaces - 사용하지 않음
        3. Specify if you want to use an API key to secure the REST API (y/N)
          • API키를 사용하여 REST API 보호 여부 설정
          • No 입력
        4. Specify if you want to enable authentication for the REST API using Passport (y/N)
          • 패스포트를 사용하여 REST API에 대한 인증 사용 여부 설정
          • No 입력
        5. Specify if you want to enable the explorer test interface (Y/n)
          • Explorer 테스트 인터페이스 사용 여부 설정
          • Yes 입력
        6. Specify a key if you want to enable dynamic logging:
          • 동적 로깅을 사용하려면 키를 작성
          • 공백으로 두면 사용 안함
        7. Specify if you want to enable event publication over WebSockets (Y/n)
          • WebSockets을 통한 이벤트 게시 사용 여부 설정
          • Yes 입력
        8. Specify if you want to enable TLS security for the REST API (y/N)
          • REST API에 대해 TLS보안을 사용 여부 설정
          • No 입력




06. 뼈대가 되는 Angular 애플리케이션 생성

      • Hyperledger Composer는 REST API에 대해 실행중인 Angular 4 응용 프로그램을 생성할 수 있음
      1. REST API를 만들기 위해 tutorial-network 디렉토리로 이동
      2. 아래 명령어 실행
      yo hyperledger-composer:angular
      1. Do you want to connect to a running Business Network? (y/N)
        • 실행중인 비즈니스 네트워크에 연결 여부
        • No 입력
      2. Project name:
        • 생성할 프로잭트 이름 작성
        • 작성된 이름으로 Home디렉터리에 폴더 생성
      3. Description:
        • 해당 프로잭트 설명 작성
        • 공백 가능
      4. Author name:
        • 작성자 이름 작성
      5. Author email:
        • 작성자 Email 작성
      6. License: (Apache-2.0)
        • License 작성
        • Default : Apache-2.0
      7. Business network archive file:
        • 참조할 .bna파일 명
      8. REST server address:
        • 참조할 네트워크 서버 주소
        • Default : http://localhost
      9. REST server port
        • 참조할 네트워크 서버 포트 번호
        • Default : 3000
      10. Are namespaces used in the generated REST API:
        • 네임스페이스 사용 여부 선택
        • Namespaces are used - 네임스페이스 사용
        • Namespaces are not used (선택) - 네임스페이스 사용하지 않음
      • 생성된 프로젝트 디렉토리로 이동 (디렉토리 명은 위에서 작성한 Project name)
      • 'npm start' 명령 수행
      • REST API에 대해 실행중인 Angular 4 애플리케이션이 실행되면 'http://localhost:4200'으로 이동