* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger.github.io/composer/latest/tutorials/developer-tutorial

 

Developer Tutorial | Hyperledger Composer

Developer tutorial for creating a Hyperledger Composer solution This tutorial will walk you through building a Hyperledger Composer blockchain solution from scratch. In the space of a few hours you will be able to go from an idea for a disruptive blockchai

hyperledger.github.io

이 튜토리얼은 처음부터 Hyperledger Composer 블록체인 솔루션을 작성하는 과정을 안내합니다. 몇 시간 내에 블록체인 혁신에 대한 아이디어, 실제 Hyperledger Fabric 블록체인 네트워크와의 트랜잭션 실행, 블록체인 네트워크와 상호작용하는 샘플 Angular 2 애플리케이션 생성/실행 등의 작업을 수행할 수 있습니다.

 

이 튜토리얼은 자신의 유즈케이스에 적용할 수 있는 기술 및 리소스에 대한 개요를 제공합니다.

참고: 이 튜토리얼은 Hyperledger Fabric v1.2와 함께 실행되는 Ubuntu Linux의 최신 Hyperledger Composer 빌드에 대해 작성되었으며, Mac 환경에서도 테스트할 수 있습니다.

 

Step One: Creating a business network structure

Hyperledger Composer의 주요 컨셉은 비즈니스 네트워크 정의 (Business network definition, BND)입니다.이는 블록체인 솔루션을 위한 데이터 모델, 트랜잭션 로직, 접근 제어 규칙을 정의합니다. BND를 생성하기 위해 우리는 적절한 프로젝트 구조를 생성해야 합니다.

 

가장 쉬운 방법은 Yeoman generator를 사용해서 비즈니스 네트워크 뼈대를 만드는 것입니다. 이렇게 하면 비즈니스 네트워크의 모든 구성 요소를 포함하는 디렉토리가 생성됩니다.

 

1. Yeoman을 사용해 스비즈니스 네트워크 뼈대를 만듭니다. 이 명령에는 비즈니스 네트워크 이름, 설명, 작성자 이름, 작성자 메일주소, 라이센스 선택 및 네임스페이스가 필요합니다.

yo hyperledger-composer:businessnetwork

2. 네트워크 이름에 tutorial-network를 입력하고, 설명, 작성자 이름, 작성자 메일주소 같은 필요 정보를 입력합니다.

3. 라이센스로 Apache-2.0을 선택합니다.

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

5. 빈 네트워크를 생성할지 말지 물으면 No를 선택합니다.

 

Step Two: Defining a business network

비즈니스 네트워크는 자산, 참가자, 트랜잭션, 접근 제어 규칙, 그리고 부가적인 이벤트와 쿼리로 구성되어 있습니다. 이전 단계에서 생성된 비즈니스 네트워크 뼈대에는 비즈니스 네트워크의 모든 자산, 참가자, 트랜잭션에 대한 클래스 정의를 포함한 모델(.cto)파일이 있습니다. 비즈니스 네트워크 뼈대는 또한 기본적인 접근 제어(permission.acl) 문서와 트랜잭션 처리 함수를 포함한 기본적인 접근 제어 규칙인 가진 스크립트(logic.js)파일 그리고 비즈니스 네트워크의 메타데이터를 포함한 package.json 파일을 갖고 있습니다.

 

Modeling assets, participants, and transactions

처음으로 업데이트할 문서는 모델(.cto) 파일입니다. 이 파일은 Hyperledger Composer Modeling Language를 사용해 작성되어 있습니다. 모델 파일은 자산, 트랜잭션, 참가자, 이벤트에 대한 각 클래스의 정의를 포합합니다. 이는 암묵적으로 modeling language 문서에 있는 Hyperledger Composer System Model을 extend합니다.

1. org.example.mynetwork.cto 모델 파일을 여십시오.

2. 모델 파일 내용을 아래와 같이 변경하세요.

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

3. org.example.mynetwork.cto에 대한 변경사항을 저장하세요.

Adding JavaScript transcation logic

모델 파일에서 자산, 참가자 간 관계를 명시하는 Trade 트랜잭션이 정의되었습니다. 트랜잭션 처리함수 파일은 모델 파일에 정의된 트랜잭션을 실행시키는 JavaScript로직을 갖고 있습니다.

 

Trade 트랜잭션은 간단하게 거래될 Commodity 자산의 식별자를 가져와서 참가자 Trader의 식별자를 새 소유자로 지정합니다.

1. logic.js 스크립트 파일을 여세요.

2. 파일 내용을 아래와 같이 변경하세요.

/**
 * 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. logic.js 변경 내용을 저장하세요.

 

Adding access control

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
}

2. permissions.acl 파일 변경 내용을 저장하세요.

 

 

Step Three: Generate a business network archive

이제 비즈니스 네트워크가 정의되었습니다. 이 비즈니스 네트워크는 배포가능한 비즈니스 네트워크 archive(.bna) 파일에 패키징되어야 합니다.

1. 커맨드 라인을 사용해 tutorial-network 폴더로 이동하세요.

2. tutorial-network 폴더에서, 아래 명령어를 실행하세요.

composer archive create -t dir -n .

명령어가 실행되고나면, tutorial-network 폴더에 생성된 tutorial-network@0.0.1.bna라는 비즈니스 네트워크 archive 파일이 호출됩니다.

 

 

Step Four: Deploying the business network

.bna파일 생성 후, 비즈니스 네트워크는 Hyperledger Fabric 객체로 배포될 수 있습니다. 일반적으로 PeerAdmin identity를 생성하기 위해 패브릭 관리자 정보가 필요합니다. PeerAdmin은 composerchannel 채널에 있는 체인코드를 실행하고 다른 피어들에게 체인코드를 설치하는 권한을 갖고 있습니다. 하지만, 개발환경설치과정에서 PeerAdmin은 이미 생성되어 있습니다.

 

비즈니스 네트워크가 설치된 후, 네트워크를 시작할 수 있습니다. 가장 좋은 방법은 배포 후 비즈니스 네트워크를 관리하기 위해 새 ID를 만드는 것입니다. 이 ID를 네트워크 관리자라고 합니다.

 

Retrieving the correct credentials

올바른 자격 증명을 가진 PeerAdmin 비즈니스 네트워크 카드는 개발환경설치과정에서 이미 생성되어 있습니다.

 

Deploying the business network

Hyperledger Fabric에 비즈니스 네트워크를 배포하려면 피어에 Hyperledger Composer 비즈니스 네트워크가 설치되어 있어야 합니다. 그리고 나서 비즈니스 네트워크를 시작할 수 있습니다. 네트워크 관리자가 되기 위해서는 새로운 참가자, 신원 및 관련 카드를 생성해야 합니다. 마지막으로 네트워크 관리자 비즈니스 네트워크 카드는 사용을 위해 import되어야 합니다. 그리고 그 네트워크가 응답하는지 확인하기 위해 ping을 수행할 수 있습니다.

 

1. 비즈니스 네트워크 설치를 위해 tutorial-network 폴더에서 아래 명령어를 실행하세요.

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

composer network install 커맨드는 PeerAdmin 비즈니스 네트워크 카드와 비즈니스 네트워크를 정의하고 있는 .bna 파일 경로를 필요로 합니다. (이 경우에는 이미 생성 및 import 되어 있습니다.)

 

2. 비즈니스 네트워크 실행을 위해 아래 명령어를 실행하세요.

composer network start 커맨드는 비즈니스 네트워크 카드와 비즈니스 네트워크의 관리자 이름, 비즈니스 네트워크 이름 및 버전, 그리고 비즈니스 네트워크 카드로 import될 파일 이름을 필요로 합니다.

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

 

3. 사용가능한 비즈니스 네트워크 카드로 네트워크 관리자 ID를 가져오려면 다음 명령어를 실행하세요.

composer card import --file networkadmin.card

composer card import 커맨드는 카드 생성을 위해 composer network start에 몇시된 파일 이름을 필요로 합니다.

 

4. 비즈니스 네트워크가 성공적으로 배포되었는지 확인하기 위해 아래 명령어를 실행해 네트워크에 ping을 날려보세요.

composer network ping --card admin@tutorial-network

composer network ping 커맨드는 network ping을 확인하기 위해 비즈니스 네트워크 카드를 필요로 합니다.

 

 

Step Five: Generating a REST server

Hyperledger Composer는 비즈니스 네트워크를 기반으로 맞춤형 REST API를 생성할 수 있습니다. REST API는 웹 애플리케이션을 개발할 때 유용한 언어중심 추상화 계층을 제공합니다.

 

1. REST API 생성을 위해 tutorial-network 폴더로 이동해 아래 명령어를 실행하세요.

composer-rest-server

2. 카드 이름에 admin@tutorial-network를 입력하세요.

3. 생성된 API에서 네임스페이스를 사용할지 물으면 'never use namespaces'를 선택하세요.

4. 생성된 API를 보호할지 물으면 No를 선택하세요.

5. 이벤트 게시를 사용할지 물으면 Yes를 선택하세요.

6. TLS 보안을 사용할지 물으면 No를 선택하세요.

 

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

 

 

Step Six: Generating a skeleton Angular application

Hyperledger Composer는 REST API를 실행하는 Angular 4 응용프로그램을 생성할 수도 있습니다. 

 

1. Angular 4 애플리케이션을 생성하기 위해 tutorial-network 폴더로 이동해 아래 명령어를 실행하세요.

yo hyperledger-composer:angular

2. 실행중인 비즈니스 네트워크에 연결할지 물으면 Yes를 선택하세요.

3. 일반적인 package.json 질문에 대해 입력하세요. (프로젝트명, 설명, 저자명, 이메일, 라이센스)

4. 비즈니스 네트워크 카드로 admin@tutorial-network를 입력하세요.

5. Connect to an existing REST API를 선택하세요.

6. REST 서버 주소로 http://localhost를 입력하세요.

7. 서버 포트로 3000를 입력하세요.

8. Namespaces are not used를 선택하세요.

 

Angular generator는 그리고나서 프로젝트 기반을 생성하고 모든 의존성을 설치합니다. 애플리케이션을 실행하기 위해 angular 프로젝트 폴더로 가서 npm start를 실행하세요. 이 명령어는 http://localhost:4200의 REST API를 실행하는 Angular 4 애플리케이션을 실행시킬 것입니다. 

 

참고: Yo Angular application generator는 단순하고 기본적인 비즈니스 네트워크 모델 정의 (여기서는 trade-network 네트워크 모델 같은)에 기반한 웹 애플리케이션 뼈대를 만들기 위한 것입니다. Angular generator에 관한 상세 설명은 아래 링크를 참고하세요.

https://hyperledger.github.io/composer/latest/applications/web.html

 

Writing Web applications | Hyperledger Composer

Writing Web Applications To interact with a deployed business network, web applications should make REST API calls. To create a custom REST API for a business network, use the composer-rest-server command. To create a skeleton Angular application that can

hyperledger.github.io

 

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger-fabric.readthedocs.io/en/latest/whatis.html#performance-and-scalability

 

Introduction — hyperledger-fabricdocs master documentation

Docs » Introduction Edit on GitHub Introduction In general terms, a blockchain is an immutable transaction ledger, maintained within a distributed network of peer nodes. These nodes each maintain a copy of the ledger by applying transactions that have been

hyperledger-fabric.readthedocs.io

Performance and Scalability

블록체인 플랫폼의 성능은 트랜잭션 크기, 블록 크기, 네트워크 크기, 하드웨어 성능 등 다양한 변수의 영향을 받습니다. Hyperledger 커뮤니티는 현재 성능 및 스케일 작업 그룹 내에서 시험용 세트를 개발중이며, Hyperledger Caliper라고하는 벤치마킹 프레임워크를 구현했습니다.

 

IBM Research 팀은 Hyperledger Fabric의 아키텍처와 성능을 평가한 동료 검토 논문을 발간했으며, 그 작업은 개속 개발되고 블록체인 플랫폼 성능 및 스케일 특성의 결정적인 기준으로 여겨져야 합니다. 이 논문은 Fabric 아키텍처에 대한 심층적인 토론을 제시하고 Hyperledger Fabric v1.1의 예비 릴리즈를 사용해 플랫폼의 팀 내 성능 평가에 대해 보고하고 있습니다.

 

연구팀이 수행한 벤치마킹 작업은 Fabric v.1.1.0 릴리즈에서 상당한 성능 향상을 가져와 v1.0.0 릴리즈 레벨에서 플랫폼의 전체 성능을 두 배 이상 향상시켰습니다.

 

Conclusion

블록체인 플랫폼에 대한 심도깊은 평가는 Hyperledger Fabric을 포함시켜야 합니다.

 

패브릭의 차별화된 기능은 유연한 신뢰가정을 지원하는 허가형 블록체인의 확장성을 증가시켰으며, 이는 플랫폼이 정부, 금융, 공급망, 불류, 의료 등 보다 더 광범위한 기업 유즈케이스를 지원할 수 있도록 해줍니다. 

 

더 중요한 것은 하이퍼레저 패브릭이 (현재) 10개의 하이퍼레저 프로젝트 중 가장 활발하다는 것입니다. 플랫폼을 중심으로한 커뮤니티 구축이 꾸준히 진해오디고 있으며, 이후 출시될 때마다 제공되는 혁신은 다른 기업용 블록체인 플랫폼과 비교할 때 훨씬 앞서고 있습니다.

 

 

'● STUDY ● > Hyperledger' 카테고리의 다른 글

Hyperledger Caliper 시작하기  (0) 2019.07.16
Composer Developer Tutorial  (0) 2019.07.15
Fabric Pluggable Consensus  (0) 2019.07.13
Fabric Privacy and Confidentiality  (0) 2019.07.12
Composer Playground Tutorial  (0) 2019.07.11

* 본 포스팅은 하이퍼레저 패브릭 docs를 번역한 내용으로, 번역 과정에서 잘못된 부분이 있을 수 있습니다.

상세 내용은 하단 링크를 참조 부탁드리며, 잘못된 내용에 대한 피드백은 언제든 환영합니다 : ) 

https://hyperledger-fabric.readthedocs.io/en/latest/whatis.html#pluggable-consensus

 

Introduction — hyperledger-fabricdocs master documentation

Docs » Introduction Edit on GitHub Introduction In general terms, a blockchain is an immutable transaction ledger, maintained within a distributed network of peer nodes. These nodes each maintain a copy of the ledger by applying transactions that have been

hyperledger-fabric.readthedocs.io

트랜잭션 주문은 합의를 위한 모듈식 구성요소로 위임되며 이는 트랜잭션을 실행하고 원장을 유지하는 피어들과 논리적으로 분리됩니다. 특히, 주문 서비스가 그러합니다. 합의가 모듈화되어있기 때문에, 구현할 때 특정 배포 또는 솔루션의 신뢰 가정에 따라 조정할 수 있습니다. 이 모듈식 아키텍처를 통해 플랫폼은 CFT(crash fault-tolerant) 또는 BFT(byzantine fault-tolerant) 주문을 위해 잘 정립된 툴킷에 의존할 수 있습니다.

 

패브릿은 현재 두 가지 CFT 오더링 서비스에 대한 구현을 제공합니다. 첫 번째는 Raft 프로토콜의 etcd 라이브러리를 기반으로 하고, 다른 하나는 카프카 (내부적으로 주키퍼를 사용) 입니다. 현재 사용 가능한 오더링 서비스에 대한 정보는 아래 링크를 참고하세요.

https://hyperledger-fabric.readthedocs.io/en/latest/orderer/ordering_service.html

 

The Ordering Service — hyperledger-fabricdocs master documentation

Docs » Key Concepts » The Ordering Service Edit on GitHub The Ordering Service Audience: Architects, ordering service admins, channel creators This topic serves as a conceptual introduction to the concept of ordering, how orderers interact with peers, the

hyperledger-fabric.readthedocs.io

이들은 상호배타적이지 않다는 점에 유의하세요. 패브릭 네트워크는 여러 애플리케이션 혹은 애플리케이션의 요구사항을 지원하는 다양한 오더링 서비스를 가질 수 있습니다. 

'● STUDY ● > Hyperledger' 카테고리의 다른 글

Composer Developer Tutorial  (0) 2019.07.15
Fabric Performance and Scalability & Conclusion  (0) 2019.07.14
Fabric Privacy and Confidentiality  (0) 2019.07.12
Composer Playground Tutorial  (0) 2019.07.11
Composer Installing  (0) 2019.07.10

+ Recent posts