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설정의 모델, 트랜잭션 논리, 액세스 제어 규칭 등
Yeoman을 사용한 비즈니스 네트워크 생성.
yo hyperledger-composer:businessnetwork
네트워크 이름, 설명, 작성자 이름, 작성자 Email, 라이센스 선택 및 네임스페이스 필요
네트워크 명 작성
tutorial-network
Description 작성(선택)
네트워크 작성자 이름
네트워크 작성자 Email
해당 네트워크의 라이센스 작성 (Default License
Apache-2.0)
네임 스페이스 작성 :
org.example.mynetwork
empty network 생성 여부에서
선택No
02. 비즈니스 네트워크 정의
- 앞에서 설명한 대로 모델, 트랜잭션 로직, 액세스 제어 규칙을 정의 해야 함
- 모델의 확장자 명 : .cto
- 트랜잭션 로직 확장자 명 : .js
- 액세스 제어 규칙 확장자 명 : .acl
- 액세스 제어 규칙은 한 네트워크에 하나의 파일만 존재 해야 함
- 비즈니스 네트워크의 메타 데이터가 포함 되어있는 package.json 패키지도 포함 되어 있음
- cto, js, acl의 수정 및 추가 작업은 VSCode에서 진행
- 참여자(Trader) 및 트랜잭션 모델링
- 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
}
- 자바 스크립트 트랜잭션 로직 추가
- 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); }
- 액세스 제어 추가
- 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
- "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
- composer network start 명령에는 비즈니스 네트워크 이름, 네트워크 버전, 관리자 이름, 관리자 페스워드, card가 포함되어 있는 파일을 만들 수 있음
- 사용 가능한 비즈니스 네트워크 카드로 네트워크 관리자 ID를 가져 오려면 아래 명령어를 실행
composer card import --file networkadmin.card
- composer card import 명령에 지정된 파일 이름을 즉, 위의 start에서 만든 파일의 카드를 만들 수 있음
- 비즈니스 네트워크가 성공적으로 배포 되었는지 확인 하는 Ping을 던지기 위해서 아래 명령어를 실행
composer network ping --card admin@tutorial-network
- Hyperledger Composer는 비즈니스 네트워크를 기반으로 맞춤형 REST API를 생성할 수 있음
- REST API는 웹 애플리케이션을 개발할 때 유용한 언어 중립적 추상화 계층을 제공 함
REST API를 만들려면
디렉토리에 저장하고 아래의 명령을 실행tutorial-network
composer-rest-server
- Enter the name of the business network card to use:
- 사용할 비즈니스 네트워크 이름 작성
- Specify if you want namespaces in the generated REST API:
- 생성된 REST API에 네임 스페이스 사용 여부 설정
- always use namespaces - 항상 네임스페이스 사용
- use namespaces if conflicting types exist - 충돌하는 유형이 있는 경우에 사용
- never use namespaces - 사용하지 않음
- Specify if you want to use an API key to secure the REST API (y/N)
- API키를 사용하여 REST API 보호 여부 설정
- No 입력
- Specify if you want to enable authentication for the REST API using Passport (y/N)
- 패스포트를 사용하여 REST API에 대한 인증 사용 여부 설정
- No 입력
- Specify if you want to enable the explorer test interface (Y/n)
- Explorer 테스트 인터페이스 사용 여부 설정
- Yes 입력
- Specify a key if you want to enable dynamic logging:
- 동적 로깅을 사용하려면 키를 작성
- 공백으로 두면 사용 안함
- Specify if you want to enable event publication over WebSockets (Y/n)
- WebSockets을 통한 이벤트 게시 사용 여부 설정
- Yes 입력
- 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 응용 프로그램을 생성할 수 있음
- REST API를 만들기 위해 tutorial-network 디렉토리로 이동
- 아래 명령어 실행
- Do you want to connect to a running Business Network? (y/N)
- 실행중인 비즈니스 네트워크에 연결 여부
- No 입력
- Project name:
- 생성할 프로잭트 이름 작성
- 작성된 이름으로 Home디렉터리에 폴더 생성
- Description:
- 해당 프로잭트 설명 작성
- 공백 가능
- Author name:
- 작성자 이름 작성
- Author email:
- 작성자 Email 작성
- License: (Apache-2.0)
- License 작성
- Default : Apache-2.0
- Business network archive file:
- 참조할 .bna파일 명
- REST server address:
- 참조할 네트워크 서버 주소
- Default : http://localhost
- REST server port
- 참조할 네트워크 서버 포트 번호
- Default : 3000
- Are namespaces used in the generated REST API:
- 네임스페이스 사용 여부 선택
- Namespaces are used - 네임스페이스 사용
- Namespaces are not used (선택) - 네임스페이스 사용하지 않음
yo hyperledger-composer:angular
- 생성된 프로젝트 디렉토리로 이동 (디렉토리 명은 위에서 작성한 Project name)
- 'npm start' 명령 수행
- REST API에 대해 실행중인 Angular 4 애플리케이션이 실행되면 'http://localhost:4200'으로 이동
'Blockchain (Hyperledger Fabric) > Composer Server' 카테고리의 다른 글
Hyperledger Fabric 웹 앱으로 실행 (0) | 2019.01.22 |
---|---|
Hyperledger Fabric 실행 및 중지 (0) | 2018.12.24 |