이번 단계별 튜토리얼에서는 비즈니스 네트워크 설정, 자산정의, 참가자 및 트랜잭션 정의, 참여자 및 자산 생성을 통한 네트워크 테스트, 그리고 트랜잭션 제출을 통해 자산 소유권을 변경하는 방법에 대해 설명합니다. 이 튜토리얼은 Playground 환경을 사용하여 Hyperledger Composer 개념을 소개하기 위한 것입니다.
Step One: Open the Hyperledger Composer Playground
/**
* 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);
}
이 함수는 단순히 들어오는 Trade 트랜잭션의 newOwner 속성을 기반으로 commodity의 owner 속성을 변경합니다. 그리고 나서 변경된 Commodity는 asset registry로 다시 들어오고 Commodity 인스턴스를 저장하는데 사용됩니다.
Step Six: Access control
Access control 파일은 비즈니스 네트워크의 접근 제어 규칙을 정의합니다. 우리 네트워크는 단순하기 때문에 default access control 파일을 수정할 필요가 없습니다. 기본 파일은 현재 참가자인 networkAdmin에게 비즈니스 네트워크와 시스템 레벨에서의 동작에 대한 전체 접근 권한을 부여합니다.
여러 개의 모델이나 스크립트 파일을 갖고 있어도, access control 파일은 한 개만 가질 수 있습니다.
이제 우리는 두 명의 참가자를 가지고 있습니다. 이제 두 참가자 간 거래할 무언가가 필요합니다. 자산을 생성하는 것은 참가자를 생성하는 것과 매우 유사합니다. 우리가 생성할 Commodity는 owner 속성을 가지고 있으며 이는 TRADE!이라는 tradeId를 가진 Trader가 소유하고 있음을 의미합니다.
1. 먼저 Assets 아래 Commodity 탭을 클릭한 후 Create New Asset을 클릭하세요.
Step Eleven: Transferring the commodity between the participants
우리는 두 명의 참가자와 그들 간 거래할 수 있는 Commodity를 갖고 있습니다. 이제 Trade 트랜잭션을 테스트 해보겠습니다.
트랜잭션은 Hyperledger Composer의 비즈니스 네트워크에서 일어나는 모든 변화의 기본이 되는 것입니다. 이 튜토리얼 후에 스스로 연습해보고 싶다면 My Business Network화면에서 다른 비즈니스 네트워크를 생성하고 좀 더 고급 비즈니스 네트워크 템플릿을 사용해 보세요.
5. 자산의 data 섹션으로 넘어가 우리가 보유한 자산의 소유자가 TRADER1에서 TRADER2로 변경되었는지 확인하세요. 아마 resource:org.example.mynetwork.Trader#TRADER2와 같은 문구를 확인할 수 있을 것입니다.
6. 비즈니스 네트워크 내 모든 트랜잭션 기록을 보기 위해 왼쪽의 All Transactions를 클릭하세요. 여기에는 제출된 모든 트랜잭션의 리스트가 있습니다. UI를 사용해 Trader같은 참가자를 생성하거나, Commodity같은 자산을 생성하거나 한 행동은 우리 비즈니스 네트워크 모델에서 트랜잭션으로 정의되어있지 않더라도 모두 트랜잭션으로 기록됩니다. 이런 트랜잭션을 '시스템 트랜잭션'이라고 부르며 모든 비즈니스 네트워크에 공통으로 적용됩니다. 이는 Hyperledger Composer Runtime에 정의되어 있습니다.
Logging out of the business network
이제 트랜잭션이 성공적으로 동작했으므로 비즈니스 네트워크 접속을 종료해야 합니다. 우리가 처음 시작했던 My Business Network 화면에서 끝나야 합니다.
우측 상단의 admin이라는 버튼을 클릭하세요. 이 버튼은 로그아웃할 사용자의 현재 신원 리스트를 보여줍니다. 드롭다운 메뉴를 펼치기 위해 admin을 클릭하고 My Business Network를 클릭하세요.
Deploying a Business Network to a real Fabric
Playground를 로컬에서 사용하면 로컬 저장소에서 동작하는 "웹 브라우저"에 연결할 수 있습니다. 혹은 일반적으로 "hlfv1"이라 불리는 그룹에서 실제 Fabric에 연결할 수 있습니다.
실제 Fabric에 연결하는 경우 PeerAdmin 및 ChannelAdmin 역할을 가진 카드를 생성했을 가능성이 싰습니다. 이 카드는 보통 PeerAdmin이라고 합니다. 이는 Composer로 네트워크를 배포 및 업데이트 하는 데 사용됩니다.
네트워크를 실제 패브릭에 배포할 때 배포 버튼을 클릭하기 전에 완료해야할 추가 필드가 있습니다. 바로 네트워크 관리자의 세부 정보를 제공하는 것입니다.
배포 화면의 맨 아래로 스크롤하면 CREDENTIALS FOR NETWORK ADMINISTRATOR를 찾을 수 있습니다. 간단한 패브릭 개발 및 테스트 네트워크의 경우 ID와 비밀번호를 제공할 수 있습니다. (ID : admin / Secret : adminpw)
ID와 Secret이 지정되면 배포 버튼을 클릭하고 Step Three에서 튜토리얼을 시작할 수 있습니다.
사용자 정의 혹은 패브릭 제품을 사용하는 경우 패브릭 관리자에게 네트워크 관리자에 대한 자세한 내용을 문의하십시오.
Updating a Business Network when connected to a real Fabric
실제 Fabric을 사용하고 변경사항 배포를 클릭하면 드롭다운 목록에서 Installation 카드 및 Upgrade 카드를 지정하라는 팝업창이 나타납니다. 일반적으로 초기 네트워크 배포에 사용된 것과 동일한 PeerAdmin 카드를 지정합니다. 확실치 않은 경우 패브릭 관리자에게 문의하십시오.
카드를 선택하고 업그레이드 버튼을 클릭하세요. 실제 패브릭에서는 완료하는 데 몇 분이 걸리 수 있습니다.
다음으로 스크립트를 실행하십시오. 실행 중에 sudo를 잠시 사용하기 때문에 암호를 입력하라는 메시지가 나타납니다.
./prereqs-ubuntu.sh
[Installing the development environment]
다음 지침에 따라 Hyperledger Composer 개발 도구 (주로 비즈니스 네트워크를 만드는데 사용됨)를 설치하고 Hyperledger Fabric (주로 비즈니스 네트워크를 로컬로 실행/배포하는데 사용됨)을 설치하십시오. 제작한 비즈니스 네트워크는 다른 환경에서 Hyperledger Fabric 런타임에도, 예를 들어 클라우드 플랫폼 같은 곳에도 배포할 수 있습니다.
Before you begin
pre-requisites 설치 지침에 따라 필수 사전 요구사항을 설치했는지 확인하십시오.
이 가이드에서는 이전에 도구를 설치한 적이 없다고 가정합니다. 그렇지 않은 경우, 이 가이드를 따라하기 전에 이전 설정이 완전히 지워졌는지 확인할 수 있습니다. 이를 수행하는 방법을 배우려면 부록으로 이동합니다.
Composer는 유연성을 제공하고 개발자, 테스트 및 배포 시나리오의 수를 최대화하기 위해 npm으로 설치할 수 있는 구성요소 세트가 제공되며 CLI에서 제어할 수 있습니다. 이 가이드는 모든 것을 먼저 설치한 다음 개발환경을 제어하는 방법을 알려줍니다.
Installing components
Step1 : Install the CLI tools
Composer 개발자를 위한 몇 가지 유용한 CLI 도구가 있습니다. 가장 중요한 것은 모든 필수 작업을 포함하고 있는 composer-cli입니다. 이것을 먼저 설치한 다음 우리는 generator-hyperledger-composer, composer-rest-server, Yeoman을 설치합니다. 마지막 3가지는 개발환경의 핵심파트는 아니지만 비즈니스 네트워크와 상호작용하는 애플리케이션을 개발할 때나 튜토리얼을 따라할 때 유용할 것입니다.
다음 npm 명령에는 su 또는 sudo를 사용하지 마십시오.
1. 필수 CLI 도구:
npm install -g composer-cli@0.20
2. RESTful API로 비즈니스 네트워크를 노출하기 위해 컴퓨터에서 REST 서버를 실행하는 유틸리티:
2. VSCode를 열고 Extensions로 이동한 다음 마켓플레이스에서 Hyperledger Composer extension을 검색하여 설치하십시오.
Step 4 : Install Hyperledger Fabric
이 단계는 비즈니스 네트워크를 배포할 로컬 Hyperledger Fabric 런타임을 제공합니다.
1. 원하는 디렉토리 (~/fabric-dev-servers로 가정) 에서 Hyperledger Fabric을 설치할 수 있는 도구가 들어있는 .tar.gz 파일을 획득하세요.
mkdir ~/fabric-dev-servers && cd ~/fabric-dev-servers curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz tar -xvf fabric-dev-servers.tar.gz
원하는 경우 zip도 사용할 수 있습니다. .tar.gz파일을 fabric-dev-servers.zip으로 바꾸고 tar -xvf 명령을 unzip 명령으로 바꿉니다.
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./downloadFabric.sh
2. 다운로드하여 추출한 스크립트를 사용해 Hyperledger Fabric v1.2 런타임을 다운로드하십시오:
축하합니다. 이제 일반적인 개발환경에 필요한 모든 것을 설치했습니다. 이 환경에서 블록체인 비즈니스 네트워크를 개발하고 테스트하기 위해 할 수 있는 가장 일반적인 것들에 대해 알아보세요.
[Controlling your dev environment]
Starting and stopping Hyperledger Fabric
기본 설정을 따르면 ~/fabric-dev-servers에서 찾을 수 있는 스크립트들을 사용해 런타임을 제어합니다.
처음으로 새 런타임을 시작할 때는 시작 스크립트를 실행한 다음 PeerAdmin 카드를 생성해야 합니다:
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./startFabric.sh ./createPeerAdminCard.sh
~/fabric-dev-servers/stopFabric.sh를 사용하여 런타임을 시작 및 중지하고, ~/fabric-dev-servers/startFabric.sh를 사용하여 다시 시작할 수 있습니다.
개발 세션이 끝나면 ~/fabric-dev-servers/stopFabric.sh를 싱행한 다음 ~/fabric-dev-servers/teardownFabric.sh를 실행합니다. teardown 스크립트를 실행한 경우 다음에 런타임을 시작할 때 처음 시작할 때와 마찬가지로 새로운 PeerAdmin 카드를 만들어야 합니다.
로컬 런타임은 개발 용도로 자주 시작, 중지 및 해제하기 위한 것입니다. 좀 더 영구적인 상태의 런타임을 원한다면 dev 환경 외부에서 하나를 실행하고 비즈니스 네트워크를 배포할 수 있습니다. 예를 들어 Kubernets를 통해 실행하거나 IBM Cloud 같은 관리 플랫폼에서 실행할 수 있습니다.
[Start the web app ("Playground")]
웹앱을 시작하기 위해 다음 명령어를 실행하세요:
composer-playground
보통 다음 주소에서 브라우저를 자동으로 엽니다.
http://localhost:8080/login
웹 애플리케이션의 "My Business Network" 화면에서 createPeerAdminCard 스크립트로 만든 PeerAdmin@hlfv1 카드를 볼 수 있습니다. 이 카드가 보이지 않으면 런타임이 제대로 시작된 것이 아닙니다.
축하합니다. 모든 구성요소가 실행중입니다. 또한 dev 세션을 끝내면 중지하고 해제하는 방법을 알 수 있습니다.