APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Hyperledger Composer
Korea Polytechnics (dept. of smart finance)
한국폴리텍대학 스마트금융과
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
intro
source : https://hyperledger.github.io/composer/latest/introduction/introduction
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
intro
 Hyperledger Composer enables architects and developers to quickly create "full-stack" blockchain
solutions. I.e. business logic that runs on the blockchain, REST APIs that expose the blockchain logic to
web or mobile applications, as well as integrating the blockchain with existing enterprise systems of
record.
source : https://hyperledger.github.io/composer/latest/introduction/solution-architecture.html
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
prerequisites
 Virtual Box에 Ubuntu(LTS 16.04) 설치
 Root 이외 계정 추가시 계정명을 hyper 로 입력(password: hyper)
 Disk 용량 : 60GB 이상
 메모리 : 6~8 GB 이상
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper 계정에 sudo 권한 부여
 sudo visudo 실행 (편집화면은 VI 에디터 아님)
아래 적색 박스 부분 입력하여 hyper계정에 sudo 권한 부여
편집 완료 후, Ctrl+X로 Exit하면
저장이름이 /etc/sudoers.d.tmp로 나오는데,
.tmp를 삭제하고 엔터키를 입력하여 저장한다.
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
개발환경 설치
curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh
chmod u+x prereqs-ubuntu.sh
./prereqs-ubuntu.sh
soruce .bashrc
python2.7, docker, node, npm 을 설치
위에서 설정된 환경변수를 바로 반영시킴
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyperledger composer 도구 설치
npm install -g composer-cli
npm install -g composer-rest-server
npm install -g generator-hyperledger-composer
npm install -g yo
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyperledger fabric composer shell 다운로드
mkdir fabric-tools
cd fabric-tools
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
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyperledger fabric docker 이미지 다운로드
sudo ./downloadFabric.sh
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyperledger compser 시작과 종료
 ./startFarbric.sh
 실행 상태 확인 : docker ps
 ./stopFabric.sh
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
1강
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
visualstudio code (선택)
 https://code.visualstudio.com/download
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
VisualStudio Code – adding extension (선택)
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground 맛보기
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Asset 3597은 Participant 7144가 소유자이며
2222의 값을 가졌다.
Asset 3597의 값을 33333으로 업데이트
업데이트후 이벤트 발생 확인
Playground 맛보기
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
모델 생성
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Overview
 Pain Point
가시성 저하
실시간 정보확인
 With Blockchain …
정보 접근성 향상 (실시간성)
비용감소
Main Office
B2B Partner
Customer
사진 출처 : http://www.thejobnews.kr/news/articleView.html?idxno=1836
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Business Domain Model (.cto)
 Namespace
 Resource (Assets, Participants, Tx, Events)
ModelModel
import is possible
Model
Model
Model
Model
Model
Model
Model
spreading is also possible
but, namespace is only confined in one model
so, model file name convention is like this : namespace.cto
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
we need 3 models
 truck.cto
 participant.cto
 dispatcher.cto
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Truck 모델 생성
hyper@hwy:~/fabric-tools/kopodeliverysvc/models$ more org.kopo.deliverysvc.truck.cto
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Write your model definitions here
*/
namespace org.kopo.deliverysvc.truck
participant User identified by email {
o String email
}
asset SampleAsset identified by assetId {
o String assetId
o String value
}
transaction ChangeAssetValue {
o String newValue
--> Asset relatedAsset
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Truck 모델 수정
namespace org.kopo.deliverysvc.truck
/** Kopo has truck*/
asset Truck identified by truckId {
o String truckId // truck plate number
o Ownership ownershipType default="OWNED"
o String location // 차고지
o String fee
o Integer status // 0. not departed 100. departed 200. on delivery
o String memo optional
}
enum Ownership {
o LEASED
o OWNED
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Participant 모델 생성
namespace org.kopo.deliverysvc.participant
abstract participant KOPOParticipant identified by parcelKey {
o String parcelKey
o String startingPoint
o String endPoint
o String estimatedPrice
o String fee
o Integer status // 0. not departed 100. departed 200. on delivery 300. arrived ...
o String memo optional
}
concept Contact {
o String fName
o String lname
o String email
o String mobile
o String tel
}
participant KOPONetworkAdmin extends KOPOParticipant {
}
participant KOPOCustomer extends KOPOParticipant {
o Contact senderContact
o Contact receiverContact
}
participant KOPOB2BPartner extends KOPOParticipant {
o String kind
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Dispatcher 모델링
namespace org.kopo.deliverysvc.dispatcher
import org.kopo.deliverysvc.truck.Truck
asset Dispatcher identified by dispatcherNumber {
o String dispatcherNumber
o Route route
o String[] aliasDispatcherNumber
--> Truck truck optional
}
concept Route {
o String origin
o String destination
o String[] stops
}
강서01 배차에 Truck0001, Truck0002 … 할당
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
CLI Tool의 활용 bna 생성
 bna 파일 만들기
 mkdir dist
 composer archive create -a dist/kopodeliverysvc.bna --sourceType dir --
sourceName .
hyper@hwy:~/fabric-tools/kopodeliverysvc$ composer archive create -a dist/kopodeliverysvc1.bna --sourceType dir --sourceName .
Creating Business Network Archive
Looking for package.json of Business Network Definition
Input directory: /home/hyper/fabric-tools/kopodeliverysvc
Found:
Description: kopo delivery service
Name: kopodeliverysvc
Identifier: kopodeliverysvc@0.0.1
Written Business Network Definition Archive file to
Output file: dist/kopodeliverysvc1.bna
Command succeeded
package.json 이 위치한 경로에서 실행해야 함
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test
 Test  Asset  Truck  Create New Asset
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test (Asset Mapping)
 Test  Asset  Dispatcher  Create New Asset
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Number validation
namespace org.kopo.deliverysvc.truck
/** Kopo has truck*/
asset Truck identified by truckId {
o String truckId // truck plate number
o Ownership ownershipType default="OWNED"
o String location // 차고지
o String fee
o Integer status range = [0, 1000] // 0. not departed 100. departed 200. on delivery
o String memo optional
}
enum Ownership {
o LEASED
o OWNED
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
String validation
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test
 모델 변경 사항 반영
Define  해당 모델 CTO 파일 내용 수정 후 Deploy changes 클릭
 Dispatcher 번호 부여 규칙 변경으로 인하여 기존 Asset 삭제됨
 번호 부여 규칙에 맞게 재입력 필요
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
transactions
Participants
Transactions Events
Execute
Emits
Subscriber
Receives
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
transactions
 dispatcher.cto 하단에 추가
// 배차 할당
transaction allocateDispatcher {
o String origin
o String destination
o String[] stops
}
// 배차 할당 성공시 배차고유번호 부여
event dispatcherAllocated {
o String dispatcherNumber
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
transactions
transaction allocateDispatcher {
…
}
event dispatcherAllocated {
…
}
Annotations
JS function()
Composer API
Emits event
cto
JavaScript
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
transactions
transaction allocateDispatcher {
…
}
event dispatcherAllocated {
…
}
Annotations
JS function()
Composer API
Emits event
cto
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
transactions Scrpt.js
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
중간 점검
 최종 Model file (cto) 업로드
 Lib 디렉토리 생성하고 해당 위치에 script.js 업로드
 Bna 생성하기
composer archive create -a dist/kopodeliverysvc.bna --sourceType dir --
sourceName .
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test
 Bna 업로드 및 확인
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test
 Test  Submit Transaction
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Playground test
 Result
 배차는 완료되었는데 트럭은 아직 할당하지 않았음
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Model 수정(배차정보에 트럭 할당)
 Dispatcher.cto
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Transactions (배차정보에 트럭 할당)
이번에는 bna를 다시 빌드하지 않고,
Play ground 에서 변경 사항을
반영한 후에 deploy 기능으로 테스트해 보자.
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
결과 확인 (배차정보에 트럭 할당)
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Named query & deploy
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
named query
https://hyperledger.github.io/composer/v0.19/reference/query-language
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
named query test
쿼리 자체의 이상여부만 확인 가능함
실제 hyperledger fabric에서 구동하여 확인해야 함
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper@hwy:~/fabric-tools/kopodeliverysvc$ composer archive create -a dist/kopodeliverysvc.bna --sourceType dir --sourceName .
Creating Business Network Archive
Looking for package.json of Business Network Definition
Input directory: /home/hyper/fabric-tools/kopodeliverysvc
Found:
Description: kopo delivery service
Name: kopodeliverysvc
Identifier: kopodeliverysvc@0.0.1
Written Business Network Definition Archive file to
Output file: dist/kopodeliverysvc.bna
Command succeeded
사전 조건 : ./startFabric.sh 실행
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ pwd
/home/hyper/fabric-tools/kopodeliverysvc/dist
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ ll
total 16
drwxrwxr-x 2 hyper hyper 4096 Sep 27 11:36 ./
drwxrwxr-x 5 hyper hyper 4096 Sep 27 11:34 ../
-rw-rw-r-- 1 hyper hyper 8101 Sep 27 11:35 kopodeliverysvc.bna
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ composer network install -a ./kopodeliverysvc.bna -c PeerAdmin@hlfv1
✔ Installing business network. This may take a minute...
Successfully installed business network kopodeliverysvc, version 0.0.1
Command succeeded
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ composer network start -n kopodeliverysvc -c PeerAdmin@hlfv1 -V 0.0.1 -A admin -S adminpw
Starting business network kopodeliverysvc at version 0.0.1
Processing these Network Admins:
userName: admin
✔ Starting business network definition. This may take a minute...
Successfully created business network card:
Filename: admin@kopodeliverysvc.card
Command succeeded
Package.json
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ composer card import -f admin@kopodeliverysvc.card
Successfully imported business network card
Card file: admin@kopodeliverysvc.card
Card name: admin@kopodeliverysvc
Command succeeded
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ ll
total 20
drwxrwxr-x 2 hyper hyper 4096 Sep 27 11:44 ./
drwxrwxr-x 5 hyper hyper 4096 Sep 27 11:34 ../
-rw-rw-r-- 1 hyper hyper 1017 Sep 27 11:44 'admin@kopodeliverysvc.card'
-rw-rw-r-- 1 hyper hyper 8101 Sep 27 11:35 kopodeliverysvc.bna
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper@hwy:~$ cd .composer
hyper@hwy:~/.composer$ ll
total 20
drwxrwxr-x 5 hyper hyper 4096 Sep 26 06:13 ./
drwxr-xr-x 10 hyper hyper 4096 Sep 26 08:07 ../
drwxrwxr-x 4 hyper hyper 4096 Sep 27 11:47 cards/
drwxrwxr-x 4 hyper hyper 4096 Sep 27 11:47 client-data/
drwxrwxr-x 2 hyper hyper 4096 Sep 26 06:12 logs/
hyper@hwy:~/.composer$ cd cards/
hyper@hwy:~/.composer/cards$ ll
total 16
drwxrwxr-x 4 hyper hyper 4096 Sep 27 11:47 ./
drwxrwxr-x 5 hyper hyper 4096 Sep 26 06:13 ../
drwxr-x--- 3 hyper hyper 4096 Sep 27 11:47 'admin@kopodeliverysvc'/
drwxr-x--- 3 hyper hyper 4096 Sep 26 06:13 'PeerAdmin@hlfv1'/
hyper@hwy:~/.composer/cards$ cd ~/fabric-tools/kopodeliverysvc/dist/
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ composer network ping -c admin@kopodeliverysvc
The connection to the network was successfully tested: kopodeliverysvc
Business network version: 0.0.1
Composer runtime version: 0.20.9
participant: org.hyperledger.composer.system.NetworkAdmin#admin
identity: org.hyperledger.composer.system.Identity#32a89531df78bf0ba5040216314687ba7c6837adf0c315b909da71ced1918cdc
Command succeeded
카드의 위치와 이름 확인
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ composer network list -c admin@kopodeliverysvc
✔ List business network from card admin@kopodeliverysvc
models:
- org.hyperledger.composer.system
- org.kopo.deliverysvc.dispatcher
- org.kopo.deliverysvc.participant
- org.kopo.deliverysvc.truck
scripts:
- lib/script.js
registries:
org.kopo.deliverysvc.dispatcher.Dispatcher:
id: org.kopo.deliverysvc.dispatcher.Dispatcher
name: Asset registry for org.kopo.deliverysvc.dispatcher.Dispatcher
registryType: Asset
org.kopo.deliverysvc.truck.Truck:
id: org.kopo.deliverysvc.truck.Truck
name: Asset registry for org.kopo.deliverysvc.truck.Truck
registryType: Asset
org.kopo.deliverysvc.participant.KOPOB2BPartner:
id: org.kopo.deliverysvc.participant.KOPOB2BPartner
name: Participant registry for org.kopo.deliverysvc.participant.KOPOB2BPartner
registryType: Participant
org.kopo.deliverysvc.participant.KOPOCustomer:
id: org.kopo.deliverysvc.participant.KOPOCustomer
name: Participant registry for org.kopo.deliverysvc.participant.KOPOCustomer
registryType: Participant
org.kopo.deliverysvc.participant.KOPONetworkAdmin:
id: org.kopo.deliverysvc.participant.KOPONetworkAdmin
name: Participant registry for org.kopo.deliverysvc.participant.KOPONetworkAdmin
registryType: Participant
Command succeeded
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper@hwy:~/fabric-tools/kopodeliverysvc/dist$ composer-rest-server -c admin@kopodeliverysvc -n always -w true
Discovering types from business network definition ...
Discovering the Returning Transactions..
Discovered types from business network definition
Generating schemas for all types in business network definition ...
Registering named query: AllDispatchers
Registering named query: AllDispatchersWithSkipLimit
Registering named query: DispatchersOriginAndDestination
Generated schemas for all types in business network definition
Adding schemas for all types to Loopback ...
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org_kopo_deliverysvc_dispatcher_Route".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Swagger: skipping unknown type "org.kopo.deliverysvc.dispatcher.Dispatcher".
Added schemas for all types to Loopback
Web server listening at: http://localhost:3000
Browse your REST API at http://localhost:3000/explorer
localhost:3000/explorer
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
시험 데이터 입력 Named query 검증
localhost:3000/explorer
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
시험 데이터 입력 Named query 검증
localhost:3000/explorer
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Source : https://stackoverflow.com/questions/48070818/how-to-restart-the-fabric-composer-without-losing-the-existing-data
How to restart the fabric composer without losing the existing data?
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Skip/Limit in queries returning all results, ignoring parameters
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
ID management
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
[ID 추가] playground test
B2B 파트너 추가
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
[ID 추가] playground test
택배 사용 고객 추가
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
[ID 추가] playground test
ID 발급(B2B)
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
ID 발급(일반 사용자 고객)
[ID 추가] playground test
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
[ID 추가] playground test
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Participant 추가(B2B 파트너)
{
"kind": "파트너",
"parcelKey": "092819_1234567",
"startingPoint": "화곡",
"endPoint": "방화",
"estimatedPrice": "2500",
"fee": "500",
"status": 0,
"memo": "테스트"
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
Participant 추가(일반 사용자 고객)
{
"senderContact": {
"fName": "길동",
"lname": "홍",
"email": "string",
"mobile": "string",
"tel": "string"
},
"receiverContact": {
"fName": "순신",
"lname": "이",
"email": "string",
"mobile": "string",
"tel": "string"
},
"parcelKey": "092819-15131513",
"startingPoint": "방화",
"endPoint": "신도림",
"estimatedPrice": "2500",
"fee": "500",
"status": 0,
"memo": "테스트"
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
{
"parcelKey": "092819-11111111",
"startingPoint": "대구",
"endPoint": "전주",
"estimatedPrice": "2500",
"fee": "500",
"status": 0,
"memo": "테스트"
}
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
 Permissions.acl 추가하여 bna 생성  upgrade
composer archive create -a dist/kopodeliverysvc.bna --sourceType dir --sourceName .
composer network install -a dist/kopodeliverysvc.bna -c PeerAdmin@hlfv1
composer network upgrade -n kopodeliverysvc -c PeerAdmin@hlfv1 -V 0.0.3
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
hyper@hwy:~/$ composer identity issue -u 092819-11111111 -a org.kopo.deliverysvc.participant.KOPONetworkAdmin#092819-11111111 -c
admin@kopodeliverysvc –x
Issue identity and create Network Card for: 092819-11111111
✔ Issuing identity. This may take a few seconds...
Successfully created business network card file to
Output file: 092819-11111111@kopodeliverysvc.card
Command succeeded
hyper@hwy:~/$ composer identity issue -u bespin -a org.kopo.deliverysvc.participant.KOPONetworkAdmin#092819-11111111 -c admin@kopodeliverysvc -x
Issue identity and create Network Card for: bespin
✔ Issuing identity. This may take a few seconds...
Successfully created business network card file to
Output file: bespin@kopodeliverysvc.card
Command succeeded hyper@hwy:~/fabric-tools/fabric-scripts/hlfv12/composer$ composer card import -f bespin@kopodeliverysvc.card
Successfully imported business network card
Card file: bespin@kopodeliverysvc.card
Card name: bespin@kopodeliverysvc
Command succeeded
hyper@hwy:~/fabric-tools/fabric-scripts/hlfv12/composer$ composer network ping -c bespin@kopodeliverysvc
The connection to the network was successfully tested: kopodeliverysvc
Business network version: 0.0.2
Composer runtime version: 0.20.9
participant: org.kopo.deliverysvc.participant.KOPONetworkAdmin#092819-11111111
identity: org.hyperledger.composer.system.Identity#88c9ec94bcf8e8bf05e4b31324e83a6e621f4e9b96c4d5a91a28d61d7ba7974f
Command succeeded
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
{
"truckId": "TRK001",
"ownershipType": "LEASED",
"location": "seoul",
"fee": "0",
"status": 0,
"memo": "string"
}
AccessException: Participant 'org.kopo.deliverysvc.participant.KOPONetworkAdmin#092819-11111111’
does not have 'CREATE' access to resource 'org.hyperledger.composer.system.AddAsset
Package.json
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
rule KopoNetworkAdminPermissionSystem {
description: "can READ the system registries"
participant: "ANY"
operation: READ
resource: "org.hyperledger.composer.system.**"
action: ALLOW
}
rule NetworkControlPermission {
description: "give admin ALL access to system resources"
participant: "org.hyperledger.composer.system.NetworkAdmin"
operation: ALL
resource: "org.hyperledger.composer.system.*"
action: ALLOW
}
rule ParticipantRegistryControlPermission {
description: "give admin ALL access to KOPO participant types"
participant: "org.hyperledger.composer.system.NetworkAdmin"
operation: ALL
resource: "org.kopo.deliverysvc.participant.*"
action: ALLOW
}
rule ParticipantRegistryControlPermission2 {
description: "give admin ALL access to KOPO participant types"
participant: "org.kopo.deliverysvc.participant.KOPONetworkAdmin"
operation: ALL
resource: "org.hyperledger.composer.system.*"
action: ALLOW
}
rule ParticipantRegistryControlPermission3 {
description: "give admin ALL access to KOPO participant types"
participant: "org.kopo.deliverysvc.participant.KOPONetworkAdmin"
operation: ALL
resource: "org.kopo.deliverysvc.participant.*"
action: ALLOW
}
1. ACL 추가
composer archive create -a dist/kopodeliverysvc.bna --sourceType dir --sourceName .
composer network install -a dist/kopodeliverysvc.bna -c PeerAdmin@hlfv1
composer network upgrade -n kopodeliverysvc -c PeerAdmin@hlfv1 -V 0.0.3
2. Package.json 버전 수정
3. Bna 재빌드 및 네트워크 배포
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
rule ParticipantRegistryControlPermission4 {
description: "give admin ALL access to KOPO
participant types"
participant: "org.kopo.deliverysvc.participan
t.KOPONetworkAdmin"
operation: ALL
resource: "org.kopo.deliverysvc.truck.*"
action: ALLOW
}
composer archive create -a dist/kopodeliverysvc.bna --sourceType dir --sourceName .
composer network install -a dist/kopodeliverysvc.bna -c PeerAdmin@hlfv1
composer network upgrade -n kopodeliverysvc -c PeerAdmin@hlfv1 -V 0.0.3
2. Package.json 버전 수정
3. Bna 재빌드 및 네트워크 배포
1. ACL 수정
4. Rest server 실행 (카드명 주의  issue한 카드로 지정)
5. Asset(Truck) 추가 테스트
APCPCWM_4828539:WP_0000010WP_0000010APCPCWM_4828539:WP_0000010WP_000001
[ACL] For more details…
 https://hyperledger.github.io/composer/latest/reference/acl_language
 https://hyperledger.github.io/composer/latest/tutorials/acl-trading

Hyperledger composer