프로젝트 막판에 Hyperledger fabric과 웹 서버의 연동을 위해 fabric-jdk-java 를 사용하는데 이 때부터 로그가 이상하게 찍히기 시작하였다.



이런식으로 로그가 뜨다가 말았는데, 왼쪽에 보면 이미 실행되었다는 것을 알 수 있고, 위에서는 로그와 관련하여 warning이 발생하였다.


내용이 무엇인가 로그와 관련해서 무엇인가 찾을 수 없다는 것 같다고 해서, Hyperldger 쪽에서 뭔가 로그와 관련된게 같이 붙은것 같다 생각하였다.





요놈이 의심이 가서 gradle에서 compile을 할 떄 다음과 같이 이부분을 제외 시켜보았다.









일단 잘 제외된 것 같고 이를 실행시켜보자






으아아아아 잘된다 ㅠㅠ


이와 같이 잘되던 로그쪽에서 프로젝트에 무엇인가 붙인 후 제대로 작동하지 않는다면 다음과 같은 작업을 해보자 

[출처 : 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 애플리케이션이 실행됩니다. 



*설치 전 준비사항


- 운영체제 : 우분투 14.04 LTS 64bit / 우분투 16.06 LTS 64bit 또는 Mac OS 10.12


- 도커 엔진 : v17.03 또는 그 이상버전


- 도커 컴포즈 : v1.8 또는 그 이상버전


- nodejs : v8.9 또는 그 이상버전


- npm : v5.x 


- git  : v2.9.x 또는 그 이상


- 파이썬 : 2.7.x 


- 코드 에디터, 여기서는 VSCode를 추천한다고 합니다. 

(설치는 --> https://code.visualstudio.com/docs/setup/linux )


우분투에 설치는 지원해주는 쉘 스크립트를 사용하시면 될 것 같습니다.


쉘 스크립트 실행하시기 전에 주의하실 점은


-일반 유저로 로그인

-prerequisites할때는 curl을 사용하지만, 압축을 풀때는 sudo를 사용

-일반유저로 ubuntu.sh 를 실행하라. 중간에 루트 패스워드를 요구할수도 있음.

-npm, sudo, su를 사용하지말 것


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

chmod u+x prereqs-ubuntu.sh

좀 더 자세한 내용이 필요하다면 

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

[출처 : https://hyperledger.github.io/composer/latest/installing/installing-prereqs.html#ubuntu]




*개발환경 설치


필수 :

composer-cli -> 이곳에 모든 필수 operation들이 포함


네트워크와 상호작용하는 튜토리얼 또는 응용 프로그램을 개발할 때 필요 :  

generator-hyperledger-composer      

composer-rest-server                    

Yeoman


Step 1: 컴포저 개발자들을 위한 CLI 도구들 설치


1. 필수 CLI 도구 설치

npm install -g composer-cli


2. composer-rest-server 설치 ->  RESTful API로 비즈니스 네트워크를 노출하기 위해 컴퓨터에 REST 서버를 실행하는 유틸리티

npm install -g composer-rest-server


3. 응용 프로그램 assets 생성에 유용한 유틸리티

npm install -g generator-hyperledger-composer


4.Yeoman은 응용 프로그램을 생성하기 위한 툴, 그리고 그것은 generator-hyperledger-compose 유틸리티들이다.

npm install -g yo


Step 2: Playground 설치

npm install -g composer-playground

Step 3: 통합 개발 환경 셋팅


1. VSCode를 연다


2.왼쪽 Extensions(확장)을 클릭 후 Hyperledger Composer를 검색하여 설치한다.


Step 4: Hyperledger Fabric 설치


1. 다음 파일을 다운받고, 압축을 풀어준다

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

2. 제공하는 쉘스크립트를 이용하여 Hyperledger Fabric 다운받는다.

cd ~/fabric-dev-servers
./downloadFabric.sh


3. 서버를 시작해보자

    cd ~/fabric-dev-servers
    ./startFabric.sh
    ./createPeerAdminCard.sh


4.서버 끄기

    ./stopFabric.sh

Congratulations, you've now installed everything required for the typical Developer Environment. 



[출처 : https://hyperledger.github.io/composer/latest/installing/development-tools.html]

Flag

parameter Type 

Explain 

-asOrg

string 

parameter로 받은 조직 이름(Org name)으로 구성 생성을 수행하며, 해당 조직에 대해 설정할 권한이 있는 쓰기 집합의 값만 포함함

 -channelID

string 

configtx에서 사용한 채널 ID 기본값은 testchainid 

-inspectBlock 

string 

지정된 경로에 있는 블록에 포함 된 구성을 인쇄 

 -inspectChannelCreateTx

string 

트랜잭션에 포함 된 구성을 지정된 경로에 인쇄 

outputAnchorPeersUpdate

string 

config update를 만들어 앵커 피어를 업데이트합니다(기본 채널 생성과 첫 번째 업데이트에만 적용) 

-outputBlock 

string 

genesis block을 작성하는 경로 

-outputCreateChannelTx 

string 

채널 생성 트랜잭션 configtx를 작성하는 경로 

 -printOrg

string 

조직의 정의를 JSON으로 인쇄 

 -profile

string 

생성에 사용할 configtx.yaml의 profile 

 -version

 

버전 정보 출력 




[참조]http://hyperledger-fabric.readthedocs.io/en/latest/commands/configtxgen.html <- 예시도 들어있기에  한번 보는 것도 나쁘지 않음.

genesis블록 구성을 위해서 기본으로 제공해주었던 configtx파일에 추가적으로 Oraganization에 Org3를 추가하고.. configtxgen으로 생성하려는데..  


"~found character that cannnot start any token."


뭐지 왜 에러가 나는 것일까 아...오.. 


기본적으로 파일 profile에서 제공하는 TwoOrgsOrdererGenesis헤더로 쭉 진행하고 후에 추가하는 방법도 있지만..

이왕 하는 거 정확히 알고 넘어가고 싶어서 찾아봤다..   

(*후에 추가하는 방법을 알고싶다면 --> 클릭)


역시 겁나 안나온다. hyperledger는 정보가 너무 없다 후우..


그래도 갓스택오버플로우로 어찌어찌 비슷한 내용의 에러가 있어서 보다가 엄청난 걸 알게되었다.


"Check if you are using tabs. YAML doesn't allow tabs; it requires spaces."


YAML에서는 tab을 못쓴답니다 여러분!! 스페이스바로 채워주었더니 잘 되더라 끄읏~~ 




hyperledger/fabric 빌드 중에 생긴 오류입니다.


열심히 구글링을 했지만 이런 오류를 다룬 글은 없는 것 같아 올립니다.


"..pkcs11.go:26:18:fatal error:ltdl.h:No such file or directory"



https://hyperledger-fabric.readthedocs.io/en/v1.1.0-alpha/dev-setup/devenv.html 에서 가장 아랫부분을 봐주시길 바랍니다.



영어를 워낙에 못하지만 대충 읽어보면 


너희 libtool 그리고 libtdhl-dev 패키지가 인스톨 되었는지 확인하라고 합니다. 그렇지 않으면 너는 ltdl.h 헤더의 부재 에러를 겪을 수 있다고 합니다. 


위에 에러가 무엇인지 드디어 찾았습니다 ㅠㅠ


위의 명령어를 통해 필요한 패키지와 툴을 다운받고 난 후에야 무사히 build를 할 수 있었습니다.









  1. 2018.04.03 23:15

    비밀댓글입니다

+ Recent posts