원서 : https://hyperledger-fabric.readthedocs.io/en/release-1.4/endorsement-policies.html
- 모든 chaincode는 보증받을 peer를 명시한, '보증정책'을 가지고 있습니다.
- 즉, '보증정책'은 proposal 실행을 보증하는 organization을 정의하는것 입니다.
- 'transaction 검증' 과정에서, peer는 transaction이 충분히 보증 받았는지? source가 적절한지? 검증합니다.
- 물론, 해당 보증이 '유효한 인증서'의 '유효한 서명'인지? 도 확인 합니다.
- Two ways to require endorsement
- 기본적으로 '보증정책'은 channel의 chaincode에 instantiation시에 명시됩니다.
- 그런데, 특별한 상황(예를들어, 특정 key)에서 다른 '보증정책'이 필요할수있습니다.
- 바로 "state-based 보증"이란것이 필요하다는 것입니다.
- 예를들어, 자동차를 교환하는 상황으로 설명을 하자면...
- 한 자동차의 '보증정책'을 정한다고 합시다. 이럴때 특정 state에 맞게 정해야합니다.
- 특정 전문 감정인이 보증하고, 해당하는 서명도 받길 원할수있다는 의미인것 같습니다.
- 즉, '보증정책'은 디폴트 정책 뿐만아니라, 특정 자산별로도 있을 수 있어야 합니다.
- chaincode-level '보증정책' 과 key-level '보증정책' 을 살펴 보아요.
- Setting key-level endorsement policies
- chaincode-level '보증정책'은 instantiation시, SDK 이나 CLI -p 옵션으로 명시합니다.
- 예) peer chaincode instantiate -C -n mycc -P "AND('Org1.member', 'Org2.member')
- Org1 과 Org2 의 member가 transaction에 서명 해야함.
- MSP의 identity-classification를 활성화 하면, peer만 보증을 할수있도록 제한할수있습니다.
- 예) peer chaincode instantiate -C <channelid> -n mycc -P "AND('Org1.peer', 'Org2.peer')
- instantiation이후, channel에 추가된 새로운 organization는 'chaincode 쿼리'는 할수있습니다. (channel 정책에 따라, 적절한 인가가 된 경우)
- 하지만 'chaincode 실행 or 보증'은 할수없습니다. 따라서 '보증정책'을 수정해줘야 합니다.
- Endorsement policy syntax
- 위 예 처럼, '보증정책'은 역할을 의미하는 용어로 정의 됩니다.
- 즉, '{MSP}.{ROLE}' 이런형식으로~ "MSP ID" 와 "역할(member,admin,client,peer) 입니다.
- 또한, 'EXPR(E[, E...])' 이런형식으로~ "표현식(AND,OR,OutOf)" 을 사용합니다.
- 예) 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중 두명에게 보증
- chaincode-level '보증정책'은 instantiation시, SDK 이나 CLI -p 옵션으로 명시합니다.
- Setting key-level endorsement policies
- (chaincode-level '보증정책'은 chaincode를 instantiation 혹은 upgrade 할때 정할수있는 반면,)
- key-level '보증정책'은 보다 세분화 된 방식으로 정할수있습니다.
- 일반적 transaction의 read&write-set으로 이루어 집니다.
- API shim 차원에서, 특정 key의 '보증정책'을 정하고 검색하는 기능을 제공 합니다.
- 예) SetStateValidationParameter(key string, ep []byte)
- 예) GetStateValidationParameter(key string)
- "private-data collection" 의 특정 key에관해서도 제공합니다.
- 예) SetPrivateDataValidationParameter(collection, key string, ep []byte)
- 예) GetPrivateDataValidationParameter(collection, key string)
- '보증정책'을 셋팅하고 마샬링을 해주는 'shim 라이브러리'가 제공되는점 참고하세요.
- 즉, chaincode개발자가 (organization의 MSP ID 측면에서) '보증정책'을 쉽게 다룰수있습니다.
- 예) type KeyEndorsementPolicy interface {
- Policy() ([]byte, error)
- AddOrgs(roleType RoleType, organizations ...string)
- DelOrgs(organizations ...string)
- ListOrgs() ([]string)
- 예) type KeyEndorsementPolicy interface {
- Validation
- 커밋시, key의 value를 셋팅하는것도 마찬가지로 진행 됩니다.
- 뭐... 특정 Key에 관해서, key-level '보증정책' 과 chaincode-level '보증정책' 관계는 상식적입니다...
- ...
- 만약에 한 transaction이 복수에 key를 수정하고, 각각 다른 key-level '보증정책'과 엮여있으면~
- 모두 만족해야, 유효한 transaction이 됩니다.
-끝-
'hyperledger > fabDoc.Ops-Guides' 카테고리의 다른 글
Access Control Lists (ACL) (0) | 2019.08.03 |
---|---|
Pluggable transaction endorsement and validation (0) | 2019.08.03 |
Channel Configuration (configtx) (0) | 2019.08.03 |
Membership Service Providers (MSP) (0) | 2019.08.03 |
Updating a Channel Configuration (0) | 2019.08.03 |