Gom3rye

Hyperledger composer 빌드 후 네트워크 만들기 본문

졸업 프로젝트

Hyperledger composer 빌드 후 네트워크 만들기

Gom3rye 2022. 5. 27. 23:49

What is hyperledger composer?

Hyperledger Fabric에서 제공하는 개발 툴로, REST 방식(Representational State Transfer)의 API를 지원하는 모델링 언어

  • 블록체인 비즈니스 네트워크를 구축하는데 사용한다.
  • Smart contract 및 원장 간 계약을 작동시킨다.
  • 스마트 계약 개발 및 분산 원장 내의 배포를 가속한다.

Hyperledger composer 빌드

1. Hyperledger composer 개발 환경을 위해 URL을 통해 데이터를 전송하는 오픈소스인 curl 명령어를 통해 개발 환경을 세팅해준다.

curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh

(나의 경우 permission denied가 떠서 sudo를 붙인채 명령어를 실행해주었다. 권한이 있고 없음의 문제이르모 sudo를 없이 명령어를 쳐 본 후 오류가 난다면 계속 sudo를 붙여주면 된다.)

2. 소유자에게 실행 권한을 추가해 준다.

(위와 같은 이유로 sudo를 붙인채 명령어를 실행해주었다.)

chmod u+x prereqs-ubuntu.sh

3. prereqs-ubuntu.sh 파일을 실행시킨다.

./prereqs-ubuntu.sh

그러면 위의 사진처럼 Installing Hyperledger Composer prereqs for Ubuntu bionic 이라는 문구가 나오면 쫘르르륵 설치가 된다.

 

이제 본격적으로 설치를 해준다.

npm install -g composer-cli@0.20

명령어를 치면 위처럼 화려한 문구들이 나오지만 겁먹지 말자. 마지막에 Success가 나온다.
(만약 Error가 뜨면서 설치가 안 되면 npm update 명령어를 친 후 다시 npm install -g composer-cli@0.20 를 입력하면 된다.)

npm install -g composer-rest-server@0.20

마찬가지로 화려한 문구들이 나오지만 괜찮다.

이 때 composer-rest-server는 블록체인 네트워크를 외부 애플리케이션과 쉽게 연결하기 위한 REST API를 제공하는 역할을 한다. (루프백 LoopBack 이라는 Node.js기반 Open API 프레임워크 기반으로 구성되어 있다.)

npm install -g generator-hyperledger-composer@0.20

npm install -g yo

npm install -g composer-playground

그럼 이제 설치는 다 끝났고 composer-playground 명령어를 통해 실행시켜본다.

composer-playground

새 탭에서 localhost:8080 을 입력하면 아래와 같은 composer 창이 뜰 것이며 이제 이를 통해 네트워크를 구축하면 된다.

Hyperledger composer 로 네트워크 만들기

1. Deploy a new business network 를 누른다.

2. 자신이 만들 네트워크에 대한 설명을 간단히 쓴다.
네트워크를 처음부터 구축하려면 비즈니스 네트워크를 선택해야 하기 때문에 빈 비즈니스 네트워크를 클릭한 후 Deploy를 누른다.

3. 이제 비즈니스 네트워크를 만들고 구축했으므로 지갑에 비즈니스 네트워크 튜토리얼 네트워크용 admin이라는 새 비즈니스 네트워크 카드가 표시된다.
지갑에는 배치된 여러 비즈니스 네트워크에 연결하기 위한 비즈니스 네트워크 카드가 포함될 수 있다.


외부 블록체인에 연결할 때 업무용 네트워크 카드는 업무용 네트워크 연결에 필요한 모든 것을 나타낸다. 여기에는 연결 세부 정보, 인증 자료 및 메타데이터가 포함된다.

비즈니스 네트워크에 연결하기 위해 Connect now를 누른다.

4. 이제 여기에 비즈니스 네트워크 정의를 구성하는 파일을 생성하고 편집한다.

빈 비즈니스 네트워크 템플릿을 선택했기 때문에 제공된 템플릿 파일을 수정해야 하는데 먼저 모델 파일을 업데이트 하면 된다. 모델 파일은 비즈니스 네트워크의 자산, 참가자, 트랜잭션 및 이벤트를 정의하는 것이다.

Model File을 클릭 후

에서 기존 코드를 삭제하고 아래과 같이 바꾼다.

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
}

(이 도메인 모델은 단일 자산 유형 물품 및 단일 참가자 유형 거래자와 물품의 소유자를 수정하는 데 사용되는 단일 트랜잭션 유형 거래를 정의한다.)

 

이제 도메인 모델이 정의되었으므로 비즈니스 네트워크에 대한 트랜잭션 로직을 정의할 수 있다. Composer는 비즈니스 네트워크의 논리를 JavaScript 함수를 사용하여 표현한다. 이러한 기능은 트랜잭션이 처리되도록 제출될 때 자동으로 실행된다.

 

5. 위의 창에서 Add a file을 클릭한 후 Script File을 클릭하고 추가를 클릭한다.

스크립트 파일에서 코드 행을 삭제하고 다음 코드로 바꾼다.

async function tradeCommodity(trade) {
    trade.commodity.owner = trade.newOwner;
    let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
    await assetRegistry.update(trade.commodity);
}

들어오는 거래 트랜잭션의 새 소유자 속성을 기준으로 물품의 소유자 속성을 간단히 변경하는 함수다. 그런 다음 수정된 물품은 물품 인스턴스를 저장하는 데 사용되는 assetRegistry에 다시 보관된다.

 

액세스 제어 파일은 비즈니스 네트워크에 대한 액세스 제어 규칙을 정의한다. 네트워크가 간단하므로 기본 액세스 제어 파일을 편집할 필요가 없고 기본 파일은 현재 참여자 네트워크 관리자에게 비즈니스 네트워크 및 시스템 수준 작업에 대한 전체 액세스 권한을 부여한다.

여러 모델 또는 스크립트 파일을 가질 수 있지만 모든 비즈니스 네트워크에는 하나의 액세스 제어 파일만 있을 수 있다.

6. Deploy changes를 클릭한다.

이제 모델, 스크립트 및 액세스 제어 파일이 있으므로 비즈니스 네트워크를 구축하고 테스트해야 한다. Deploy changes를 클릭하여 비즈니스 네트워크를 업그레이드 한다.

 

7. Test 탭을 클릭해 상품의 소유권을 변경하기 위해 비즈니스 네트워크를 테스트 한다.

8. 비즈니스 네트워크에 가장 먼저 추가해야 할 것은 두 명의 참가자이므로 Create New Participant를 눌러 참가자를 생성한다.

9. 아래 코드를 추가하고 Create New를 눌러 Trader1을 만들어 준다. (사진에는 짤렸지만 밑에 Create New 버튼이 있다.)

{
  "$class": "org.example.mynetwork.Trader",
  "tradeId": "TRADER1",
  "firstName": "Jenny",
  "lastName": "Jones"
}

아래와 같이 생성된 것을 볼 수 있다.

10. Trader2를 만들어준다.

{
  "$class": "org.example.mynetwork.Trader",
  "tradeId": "TRADER2",
  "firstName": "Amy",
  "lastName": "Williams"
}

11. Commodity 탭을 눌러 Create New Asset을 눌러준다.

12. Asset data 코드를 입력해준다.

{
  "$class": "org.example.mynetwork.Commodity",
  "tradingSymbol": "ABC",
  "description": "Test commodity",
  "mainExchange": "Euronext",
  "quantity": 72.297,
  "owner": "resource:org.example.mynetwork.Trader#TRADER1"
}

13. Sumit Transaction을 눌러 지금까지 만든 트랜잭션을 Test해본다.

14. Transaction data 코드를 아래와 같이 입력한다.

{
  "$class": "org.example.mynetwork.Trade",
  "commodity": "resource:org.example.mynetwork.Commodity#ABC",
  "newOwner": "resource:org.example.mynetwork.Trader#TRADER2"
}

15. 자산에 대한 데이터 섹션을 확장하여 자산이 TRADER1에서 TRADER2로 소유권이 변경되었는지 확인한다.

728x90
반응형