- 1) Install and Instantiate chaincode package
- 음... chaincode를 install 및 instantiate 하는 방법을 알면 되는 영역인거 같다.
- 예를들면,
- peer chaincode install -n {chaincode이름} -v 1.0 -l java -p /etc/hyperledger/chaincode
- peer chaincode instantiate -o {orderer주소} -C {channel이름} -n {chaincode이름} -l java -v 1.0 -c '{"function":"init","Args":[ ... ]}' -P 'OR ("Org1.member","Org2.member", ... )'
- 이런식으로~ peer-node에 chaincode 관련 커맨드 하면 될 것이다.
- 2) Configure endorsement policy
- '보증정책'도 당연히 할 줄 알아야 할것이다.
- chaincode-level '보증정책'
- 예) AND('Org1.member', 'Org2.member', 'Org3.member')
- 예) OR('Org1.member', AND('Org2.member', 'Org3.member'))
- 예) OutOf(2, 'Org1.member', 'Org2.member', 'Org3.member') // 1,2,3중 두명에게 보증
- EXPR(E[, E...]) 은 "표현식(AND,OR,OutOf)" 이다.
- MSP.ROLE 은 "MSP ID" 와 "역할(member,admin,client,peer)" 이다.
- 참고로... "MSP 설정"에 'identity classification' 설정을 해야, peer등의 역할을 할수있는것 같다.
- // TODO : MSP id class
- key-level '보증정책'
- API shim 차원에서, 특정 key 단위로 '보증정책'을 세분화 할수있는 함수가 제공됩니다.
- 예) SetStateValidationParameter(key string, ep []byte)
- 예) GetStateValidationParameter(key string)
- 예) SetPrivateDataValidationParameter(collection, key string, ep []byte) // private-data collection용
- 예) GetPrivateDataValidationParameter(collection, key string) // private-data collection용
- 예) type KeyEndorsementPolicy interface {
- Policy() ([]byte, error)
- AddOrgs(roleType RoleType, organizations ...string)
- DelOrgs(organizations ...string)
- ListOrgs() ([]string) }
- 3) Define collection policy for private data
- private-data에 관한 collection 정의에서 '정책'을 정할수있습니다.
- 예) [
- { "name": "collectionMarbles",
- "policy": "OR('Org1MSP.member','Org2MSP.member')",
- "requiredPeerCount": 0,
- "maxPeerCount": 3,
- "blockToLive":1000000,
- "memberOnlyRead": true },
- { "name": "collectionMarblePrivateDetails",
- "policy": "OR('Org1MSP.member')",
- "requiredPeerCount": 0,
- "maxPeerCount": 3,
- "blockToLive":3,
- "memberOnlyRead": true }]
- name : collection 이름
- policy : collection을 가질수있는organization의 peer들을 정의
- requiredPeerCount : endorse-peer가 private-data를 배부해야할 최소 peer갯수 (미만시, 에러리턴)
- maxPeerCount : endores-peer가 private-date를 배부하려고하는 최대 peer갯수 // TODO : 뭔말?
- blockToLive : private-database에서 TTL 시간이 지나면 자동폐기
- memberOnlyRead : 해당 collention의 organization에 속한 client도 private-data에 접근허용.
- 마찬가지로,
- peer chaincode instantiate ... --collections-config collection.json
- peer chaincode invoke ... -c '{"Args":["write"]}' --transient '{"key1":{"price":99, ... }} | base64'
- peer chaincode query ... -c '{"Args":["read","key1"]}'
- 식으로~ chaincode에 collection을 정의 할수있습니다.
- 그리고 chaincode에서 직접 GetPrivateData(collection,key) 및 PutPrivateData(collection,key,value) 함수를 코딩해서... private-data를 다루는것 입니다.
- private-data는 orderer에게 제출되는 transaction에 포함되지 않는다. 즉, channel의 block에 포함되지 않는다는 것이다!
- 그래서 endorse-peer가 private-data를 배부함에 있어서 가용성이 중요하다. (아니면, 유실위험)
- 즉, maxPeerCount 및 requiredPeerCount 속성으로 가용성을 잘 설정 해야한다.
- organization간에도 마찬가지로 endorse-peer가 private-data를 배부한다.
- // TODO : 'gossip 프로토콜'은 anchor-peer에 의해 ... 음 ...
- 4) Modify or upgrade chaincode
- 기 chaincode도 당연히 수정 및 업그레이드 하는 방법을 알아야 할것같다.
- 실례로,
- peer chaincode install -n {chaincode새이름2} -v 2.0 -l java -p /etc/hyperledger/chaincode
- peer chaincode instantiate -o {orderer주소} -C {channel이름} -n {chaincode새이름2} -l java -v 2.0 -c '{"function":"init","Args":[ ... ]}' -P 'AND ("Org1.member","Org2.member", ... )'
- 이렇게~ 해당 chaincode를 고치고 -> 이름 및 버젼을 바꾸어서 다시 배포하면 잘 되었다.
- 참고적으로 chaincode도 init가 되면서, 하나의 프로세스로 동작을 하게 된다.
- (docker ps으로 새로운 컨테이너가 뜬것을 확인 할 수 있다.)
-끝-
'hyperledger > fabric.자격증 도전記' 카테고리의 다른 글
CHFA 쪽집게 (4) : Membership Service Provider (0) | 2019.09.20 |
---|---|
CHFA 쪽집게 (3) : Diagnostics and Troubleshooting (0) | 2019.09.16 |
CHFA 쪽집게 (2) : Install and Configure Network (0) | 2019.09.16 |
Certified Hyperledger Fabric Developer (CHFD) 이란? (0) | 2019.09.06 |
Certified Hyperledger Fabric Administrator (CHFA) 이란? (0) | 2019.05.07 |