모종닷컴

Composer 개발 튜토리얼 본문

3학년/Hyperledger fabric

Composer 개발 튜토리얼

모종 2018. 5. 17. 22:15
반응형

[출처 : https://hyperledger.github.io/composer/latest/tutorials/developer-tutorial]


Step 1: 비즈니스 네트워크 구조 만들기


하이퍼레저 컴포저의 핵심 개념은 BND(Business network definition,비즈니스 네트워크 정의)입니다. BND는 데이터 모델, 트랜잭션 로직, 우리의 블록 체인 룰을 정의합니다. 


쉽게 시작하는 방법은 Yeoman generator를 사용하여 비즈니스 네트워크 뼈대를 만드는 것입니다. Yeoman generator는 모든 비즈니스 네트워크의 구성을 포함하는 폴더를 만들것입니다. 


1. 

yo hyperledger-composer:businessnetwork


2. 네트워크의 이름, 설명, 작성자 이름, 작성자 이메일을 입력합니다


3. 라이센스를 선택합니다.


4. 네임스페이스로 "org.example.mynetwork"를 선택합니다


5. No를 선택합니다.


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


비즈니스 네트워크는 assets, participants, transactions, access control rules로 구성되어 있습니다.

생성된 비즈니스 네트워크 뼈대 안 파일들은다음과 같습니다.

.cto : 모든 assets, participants, transactions에 대한 클래스 정의를 포함 된 파일

permissions.acl : 기본 액세스 제어 규칙이 있는 문서

logic.js : 트랜잭션 프로세서 기능들을 포함하는 파일

package.json : 비즈니스 네트워크 메타데이터 --> 위의 설정했던 네트워크 이름, 설명, 작성자, 작성자 이메일도 안에 입력되어있음을 확인할 수 있습니다. 


1. 먼저 cto파일을 설정합니다 (/tutorial-network/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
}


2. 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);
}


3. access control을 추가합니다

/**
 * 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
}


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


지금 비즈니스 네트워크는 정의되어졌습니다. 이것들은 반드시 배포 가능한 비즈니스 네트워크 보관 .bna파일로 패키지되어야합니다.


1. tutorial-network 폴더에서 다음을 실행합니다.

composer archive create -t dir -n .

다음이 실행되면 비즈니스 네트워크 아카이브 파일(tutoral-network@0.0.1.bna)이 생성됩니다


Step 4: 비즈니스 네트워크 배포시키기


.bna 파일을 만들고 난 후 비즈니스 네트워크는 하이퍼레저 패브릭의 인스턴스로 배포될 수 있습니다. 일반적으로 피어에 체인 코드를 설치하고 채널에서 체인 코드를 시작하는 권한이 있는 PeerAdmin ID를 만들어야 합니다.. 하지만 개발 환경 설치의 일부로 이미 PeerAdmin Id가 생성되어있습니다. 

 

또한 PeerAdmin 비즈니스 네트워크 카드에 대한 자격증명은 이미 개발 환경 설치 부분에서 생성되었습니다.

[해석이 맞나 모르겠네요... ]


Hyperledger 패브릭에 비즈니스 네트워크를 배포하려면 Hyperledger Composer 비즈니스 네트워크를 피어에 설치 한 다음 비즈니스 네트워크를 시작해야하며 ,네트워크 관리자가 되기 위해 새로운 참가자, ID 및 관련카드를 만들어야 합니다. 


1. fabric-dev-servers 폴더에서 startFabric.sh로 패브릭을 실행합니다(설치 단계에서 설명을 했기에 대충 말하고 넘기겠습니다~)



2. 비즈니스 네트워크를 설치하기 위해 tutorial-network폴더에서 다음을 실행합니다.

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


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

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

--> 산출물로 네트워크 비즈니스 카드인 "networkadmin.card"가 생성된다고 나온다.

--> 이미 증명된 PeerAdmin@hlfv1이라는 비즈니스 카드를 통하여 관련카드를 만들어낸 것....이 맞지 않을까요 ㅠㅠ 어렵습니다(위에 밑줄친 부분을 보면 이 부분을 말하는 것 같은데..)


4. 사용 가능한 비즈니스 네트워크 카드로 네트워크 관리자 identity를 import하기 위해 다음 명령을 실행합니다.

composer card import --file networkadmin.card


5. 비즈니스 네트워크가 정상적으로 배포되었는지 확인하기 위해 다음의 명령을 실행합니다.

composer network ping --card admin@tutorial-network


Step 5: REST 서버 생성시키기

Hyperledger Composer는 비즈니스 네트워크를 기반으로 맞춤형 REST API를 생성 할 수 있습니다. 


1. REST API를 만들기 위해 tutorial-network 폴더에서 다음을 실행합니다

composer-rest-server

2. 방금 전에 만들었던 admin@tutorial-network를 카드 이름으로 입력합니다


3. namespaces in the generated API에 관하여 물어볼 때 never user namespaces를 선택합니다


4. secure the generated API에 관하여 물을 때 No


5. enable event publication에 관한 내용은 Yes


6. TLS security관한 내용이 나오면 No를 선택합니다.


생성 된 API는 배포 된 블록 체인 및 비즈니스 네트워크에 연결됩니다. 


Step 6: 응용 프로그램 생성시키기

하이퍼레저 컴포저는 실행중인 REST API에 대해 Angular 4 응용 프로그램을 생성 할 수도 있습니다. 


1. Angular 4 응용 프로그램을 생성하기 위해 tutorial-network폴더로 들어가 다음 명령을 실행합니다

yo hyperledger-composer:angular

2. 구동 중인 비즈니스 네트워크에 연결할건지 물으면 YES


3.tutorial-network/package.json에 있는 (프로젝트 이름, 설명, 작성자 이름, 작성자 메일. 라이센스)를 그대로 쳐줍니다


4. 비즈니스 네트워크 카드에는 admin@tutorial-network를 입력합니다.


5.Connect to an existing REST API를 선택합니다


6.레스트 서버 주소에 대하여 http://localhost를 입력합니다


7. 서버 포트 :3000으로 입력


8. Namespaces are not uesd 를 선택합니다


Angular generator는 프로젝트의 scaffolding을 생성하고 모든 의존성을 설치합니다. 응용 프로그램을 실행하려면 angualr project 폴더에서 "npm start"명령어를 실행합니다. http://localhost:4200 에서 REST API에 대해 실행중인 Angular 4 애플리케이션이 실행됩니다. 


반응형