보증정책이 크게 두가지 레벨로 나뉨
- 채널 단에서의 보증정책
- 체인코드 단에서의 보증정책
- LifecycleEndorsement 정책: 체인코드 정의를 승인하는 사람을 관리
- 누가 체인코드를 승인했는 지
- 누가 체인코드를 피어에 인스톨할 수 있는 지
- Endorsement 정책: 체인코드를 위한 기본적인 보증 정책
Minifabric을 통해 보증정책을 쉽게 바꿀 수 있음 이를 json파일로 제공함
사용자의 네트워크에 organization을 들여놓기
- channelquery 명령어로 채널 구성을 검색함
- vars/JoinRequest_org3cococom.json, 파일에 새로운 org를 조인하는 것을 찾음
- groups/application/groups 요소 아래의 json 파일에 조인 요청 json파일의 전체 컨텐츠를 집어넣는다. 버전도 증가시켜야 한다.
- channelsign 과 channelupdate 명령을 실행한다.
채널 구성 json 파일을 업데이트할 때,
1. 만약 엘레먼트가 수정되었다면, 오직 변화된 엘레먼트 버전만 사용.
2. 새로운 엘러먼트들은 버전 0에서 시작.
3. 그룹 버전은 그룹에서 엘레먼트들이 추가되고, 삭제될때 변함.
피어를 채널에 가져오기
- nodeimport 명령어를 이용해 오더러 노드를 임포트한다.
- install 명령어를 이용해 peer들을 새로운 조직 안에 체인코드를 설치하고, 이 단계 이후에 체인코드 이미지가 설치되었는지 확인한다.
- join 명령어를 이용해 새로운 조직에 피어들을 조인한다.
- 이제 새로운 조직은 승인을 필요로 하므로, 존재하는 org는 approve command를 이용해 현재 체인코드 라이프사이클 정책에 기반한 quorum을 승인시키는 과정을 진행한다.
- commit 명령어를 이용해 org중 하나는 체인코드를 커밋할 수 있다.
- docker ps 명령어를 이용해 새로운 org가 체인코드 컨테이너를 가지고 있는지 확인한다.
프라이빗 데이터 콜렉션
- 프라이빗 데이터를 핸들링하는 체인코드를 설치할 때, minifab flag -r 또는--chaincode-private 를 설정을 true로 한다. 이는 데이터 체인코드명_collection_config.json 형태로 vars 디렉토리 안에 콜렉션 구성파일을 생성한다.
- 데이터 콜렉션 파일에 변화를 줘보자. 생성된 파일은 오직 뼈대만 제공하기 때문에, 사용자는 반드시 사용자의 체인코드에 기반한 파일을 만들어야 한다. 데이터 콜렉션 구성파일은 체인코드에 특유하다.
- 데이터 콜렉션 구성이 있는 경우, 체인코드는 다른 체인 코드와 동일한 방식으로 승인하고 커밋한다.
- -t 또는 --transient-parameters 플래그를 쓰면, 체인코드 선언과 인보크를 위한 임시 데이터 지정이 가능하다.
아래 명령어는 유튜브 Developing with Minifabric: Policies and Organizations 실습을 기반으로 작성
www.youtube.com/watch?v=c1Ab57IrgZg&feature=youtu.be
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# 콜렉션 구성 파일 만들어 줌
./minifab install -n privatemarbles -r true
cat vars/privatemarbles_collection_config.json
# 뼈대만 제공해주므로, 체인코드에 기반해 바꿔줘야 함
sudo vars/privatemarbles_collection_config.json
./minifab approve,commit,initialize -p ''
docker ps --format "{{.Names}}" -f name=private
MARBLE = $( echo '{"name":"marble1","color":"blue","size":35,"owner":"tom","price":99}' | base 64 | tr -d \\n )
./minifab invoke -p "initMarble"' -t '{"marble":"'$MARBLE'"}'
MARBLE = $( echo '{"name":"marble2","color":"red","size":50,"owner":"tom","price":102}' | base 64 | tr -d \\n )
./minifab invoke -p "initMarble"' -t '{"marble":"'$MARBLE'"}'
MARBLE = $( echo '{"name":"marble3","color":"green","size":70,"owner":"tom","price":103}' | base 64 | tr -d \\n )
./minifab invoke -p "initMarble"' -t '{"marble":"'$MARBLE'"}'
# QUERY
./minifab query -p "readMarble", "marble"' -t '' # --> 성공
# QUERY PRIVATE DATA
./minifab query -p "readMarblePrivateDetails", "marble"' -t '' # --> 성공
# QUERTY PRIVATE DATA(org 바꿔서)
./minifab query -p "readMarblePrivateDetails", "marble"' -t '' -o org1.example.com # --> 실패
|
cs |
'IT > Block Chain(Hyperledger)' 카테고리의 다른 글
[Hyperledger] Hyperledger Fabric 버전 확인하기 (0) | 2021.02.03 |
---|---|
Minifabric 구성요소와 VScode (0) | 2020.10.07 |
minifabric 실행 (0) | 2020.10.06 |
minifabric에 대한 요약 정리 (0) | 2020.10.05 |
[fabric2.0 정리]수동으로 체인코드 설치 및 업그레이드 (0) | 2020.07.17 |