[Hyperledger] Composer 튜토리얼 실습하기

Hyperledger Composer 튜토리얼 실습하기

개발 환경 구축에 이은 실습 포스팅이다. 튜토리얼에는 playground 튜토리얼과 개발자 튜토리얼이 있는데, playground 튜토리얼은 포스팅하지 않아도 될 것 같아 '개발자 튜토리얼’을 기준으로 포스팅할 것이다. 이번에도 공식 사이트를 참고하여 작성한다.


1. 비즈니스 네트워크 구조 정의

블록체인 솔루션에 관한 데이터 모델, 트랜잭션 논리 및 액세스 제어 규칙을 정의한다. 가장 쉬운 방법은 Yeoman 생성기를 사용하여 스켈레톤 비즈니스 네트워크를 만드는 것이다. 이렇게 하면 비즈니스 네트워크의 모든 구성 요소를 포함하는 디렉토리가 생성된다.

Yeoman을 사용하여 스켈레톤 비즈니스 네트워크를 만들어 보자.

1
yo hyperledger-composer:businessnetwork

위의 명령어를 실행하면 묻는 항목들은 다음과 같이 설정하면 된다.

1
2
3
4
5
6
Bushiness network name: tutorial-network
Description: tutorial(자유롭게 적어도 됨)
Author name: admin(자유롭게 적어도 됨)
Author email: admin@tutorial.com(자유롭게 적어도 됨)
License: Apache-2.0
Namespace: org.example.mynetwork

그리고 '빈 네트워크를 설정하시겠습니까?'의 질문에는 No를 선택하면 된다.


2. 비즈니스 네트워크 정의하기

튜토리얼 비즈니스 네트워크에는 assets, participants, transactions과 access control, optionally events, queries가 포함된다. 먼저, 모델 파일을 수정해 보자. GUI에 익숙한 나는 VS Code로 해당 위치에 직접 접근해서 수정했다. VS Code에서 '폴더 열기’로 tutorial-network를 열어 두자.

1. org.example.mynetwork.cto 파일 수정

tutorial-network/models/org.example.mynetwork.cto 파일을 열고, 아래의 내용을 덮어씌운다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 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
}

2.logic.js 스크립트 파일 수정

tutorial-network/lib/logic.js 파일을 열고 아래의 내용으로 바꾼 후 저장한다.

1
2
3
4
5
6
7
8
9
10
/**
* 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);
}

3. permissions.acl 수정

tutorial-network/permissions.acl 파일을 아래와 같이 수정한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 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
}

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

tutorial-network 디렉토리에서 다음의 명령을 실행한다. (점 빼먹지 말기! 마지막에 점! 점!!! 점 빼먹으면 인자값을 받지 못했다는 에러를 뿜음.)

1
composer archive create -t dir -n .

4. 비즈니스 네트워크에 배포

비즈니스 네트워크에 배포하기 전, startFabric.shcreatePeerAdminCard.sh을 먼저 실행해야 한다. 실행 전에 아래의 코드를 실행시키면 당연히 에러[1]가 난다.

1. Fabric 실행 및 PeerAdminCard 생성

fabric-tools 디렉토리에서 명령어를 실행한다.

1
2
./startFabric.sh
./createPeerAdminCard.sh

2. 비즈니스 네트워크 설치

tutorial-network 디렉토리에서 다음의 명령어로 비즈니스 네트워크를 실행한다.

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

3. 비즈니스 네트워크 시작

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

4. 관리자 ID 가져오기

사용 가능한 비즈니스 네트워크 카드로 관리자 id를 가져온다.

1
composer card import --file networkadmin.card

5. 배포 확인

비즈니스 네트워크가 제대로 배포되었는지 확인하기 위해 ping을 날려 본다.

1
composer network ping --card admin@tutorial-network

5. REST 서버 생성

Hyperledger Composer는 비즈니스 네트워크를 기반으로 맞춤형 REST API를 생성 할 수 있다. 진짜, 완전, 정말 편한 기능이다. REST API를 자동으로 만들어 준다. 먼저, tutorial-network 디렉토리에 접근하여 다음의 명령을 실행하자.

1
composer-rest-server

이것저것 뭘 입력하라고 하는데, 다음과 같은 순서로 입력하면 된다.

1
2
3
4
5
Enter the name of the business network card to use: admin@tutorial-network
Specify if you want namespaces in the generated REST API: never use namespaces
Specify if you want to enable authentication for the REST API using Passport: No
Specify if you want to enable event publication over WebSocket: Yes
Specify if you want to enable TLS security for the REST API: No

중간에 잘못 입력했다면 ctrl+c로 빠져나와서 다시 처음부터 입력하면 된다.


6. 응용 프로그램 생성

Hyperledger Composer는 REST API로 실행 중인 Angular 4 Application을 생성 할 수도 있다. 단, 기존에 열려 있던 터미널이 아닌(REST API가 열려 있는 터미널이 아닌) 새 터미널 창으로 실행해야 한다. 이번에도 tutorial-network 디렉토리에서 다음을 실행해 보자.

1
yo hyperledger-composer:angular

그리고 다음과 같이 입력하면 된다.

1
2
3
4
5
6
7
8
9
10
11
Do you want to connect to a running Business Network? Yes
Project name: tutorial-network
Description: tutorial
Author name: admin
Author email: admin@tutorial-network
License: Apache-2.0
Name of the Business Network card: admin@tutorial-network
Do you want to generate a new REST API or connect to an existing REST API?: Connect to an existing REST API
REST server address: http://localhost
REST server port: 3000
Should namespaces be used in the generated REST API? Namespaces are not used

실행은 어떻게 하느냐? tutorial-network/tutorial-network 디렉토리 안에서 npm start 명령어로 실행하면 된다. Angular App 확인은 http://localhost:4200에서 할 수 있다.




  1. Error: Error trying install business network. Error: No valid responses from any peers. Response from attempted peer comms was an error: Error: 14 UNAVAILABLE: Connect Failed ↩︎

Share