- PDC = Private Data Collections
- 컬렉션 : 해당 컬렉션을 관리하는 정책이 포함된 컬렉션 정의 파일을 사용하여 지정
- 순서
1. 자산 전송 개인 데이터 샘플 사용 사례
- 컬렉션 정의 JSON 파일 빌드
- 체인코드 API를 사용하여 비공개 데이터 읽기 및 쓰기
- 프라이빗 데이터 스마트 계약을 채널에 배포
- 신원 등록
- 비공개 데이터로 자산 만들기
- 인증된 피어로 프라이빗 데이터 쿼리
- 권한이 없는 피어로 비공개 데이터 쿼리
- 자산 이전
- 개인 데이터 제거
- 프라이빗 데이터에 인덱스 사용
- 추가 리소스
자산 전송 개인 데이터 샘플 사용 사례
- 세 개의 프라이빗 데이터 컬렉션(assetCollection, Org1MSPPrivateCollection, Org2MSPPrivateCollection)을 사용하여 Org1과 Org2 간에 자산을 전송하는 방법 가정
- Org1의 구성원은 새 자산(소유자)을 생성
- assetCollection : 인용 데이터 콜렉션, 소유자의 ID를 포함하여 자산의 public 세부사항 저장
- 자산도 소유자가 제공한 감정된 가격으로 생성
- 소유자 조직의 컬렉션 : 감정된 가격 저장, 각 참가자가 자산 이전에 동의하는 데 사용
- Org1MSPPrivateCollection : 소유자가 동의한 초기 감정가 저장
- 자산을 구매하려면 구매자는 자산 소유자와 동일한 감정된 가격에 동의
- 구매자(Org2의 구성원)가 스마트 계약 기능 'AgreeToTransfer'를 사용하여 거래에 대한 동의를 작성하고 감정가에 동의
- 이 값은 Org2MSPPrivateCollection 컬렉션에 저장
- 이제 자산 소유자는 스마트 계약 기능 'TransferAsset'을 사용하여 자산을 구매자에게 양도 가능
- 'TransferAsset' 기능은 채널 원장의 해시를 사용하여 소유자와 구매자가 자산을 이전하기 전에 동일한 감정가에 동의했는지 확인
컬렉션 정의 JSON 파일 빌드
- 조직이 비공개 데이터로 거래하려면 채널의 모든 조직이 컬렉션 정의 파일을 빌드해야 함.
- 컬렉션 정의 파일 : 각 체인코드와 연결된(조직이 체인코드에서 읽고 쓸 수 있는 모든) private 데이터 컬렉션 정의
- private 데이터 콜렉션에 저장된 데이터는 채널의 모든 구성원이 아닌 특정 조직의 피어에게만 분배
- 각 컬렉션의 속성
name
: 컬렉션의 이름
policy
: 컬렉션 데이터를 유지할 수 있는 조직 피어를 정의
requiredPeerCount
: 체인코드 보증 조건으로 private 데이터를 배포하는 데 필요한 피어 수
maxPeerCount
: 데이터 중복성을 위해 현재 승인 피어가 데이터 배포를 시도할 다른 피어의 수
- 보증하는 피어가 다운되면, private 데이터를 가져오기 위한 요청이 있는 경우 커밋 시간에 이러한 다른 피어 사용 가능
blockToLive
: 매우 민감한 정보(가격, 개인정보)의 경우, 데이터가 블록 측면에서 private 데이터베이스에 있어야 하는 기간
- 데이터는 private 데이터베이스에서 이 지정된 블록 수 동안 유지되며 그 후에는 제거 -> 이 데이터를 네트워크에서 더 이상 사용x
- private 데이터를 제거하지 않으려면 blockToLive 속성을 0으로 설정
memberOnlyRead
: true 값은 수집 구성원 조직 중 하나에 속하는 클라이언트만 private 데이터에 대한 읽기 액세스가 허용되도록 피어가 자동으로 시행함
memberOnlyWrite
: true 값은 수집 구성원 조직 중 하나에 속하는 클라이언트만 개인 데이터에 대한 쓰기 액세스가 허용되도록 피어가 자동으로 시행함
endorsementPolicy
: private 데이터 콜렉션에 쓰기 위해 충족해야 하는 보증 정책을 정의
- 컬렉션 수준 보증 정책은 체인코드 수준 정책보다 우선
- 조직이 어떤 컬렉션에도 속하지 않은 경우에도 동일한 컬렉션 정의 파일을 배포
- 컬렉션 파일에 명시적으로 정의된 컬렉션 외에도 각 조직은 해당 조직에서만 읽을 수 있는 피어의 암시적 컬렉션에 액세스 가능
- 여기의 자산 전송 프라이빗 데이터 예제
- collections_config.json 파일 : 세 가지 private 데이터 컬렉션 정의(assetCollection, Org1MSPPrivateCollection 및 Org2MSPPrivateCollection)를 정의
// collections_config.json
[
{
"name": "assetCollection",
"policy": "OR('Org1MSP.member', 'Org2MSP.member')",
"requiredPeerCount": 1,
"maxPeerCount": 1,
"blockToLive":1000000,
"memberOnlyRead": true,
"memberOnlyWrite": true
},
{
"name": "Org1MSPPrivateCollection",
"policy": "OR('Org1MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 1,
"blockToLive":3,
"memberOnlyRead": true,
"memberOnlyWrite": false,
"endorsementPolicy": {
"signaturePolicy": "OR('Org1MSP.member')"
}
},
{
"name": "Org2MSPPrivateCollection",
"policy": "OR('Org2MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 1,
"blockToLive":3,
"memberOnlyRead": true,
"memberOnlyWrite": false,
"endorsementPolicy": {
"signaturePolicy": "OR('Org2MSP.member')"
}
}
]
- assetCollection 컬렉션 정의
policy
속성 : Org1과 Org2 모두 해당 피어에 컬렉션을 저장할 수 있음을 지정
- memberOnlyRead 및 memberOnlyWrite 매개변수 : Org1 및 Org2 클라이언트만 이 컬렉션을 읽고 쓸 수 있도록 지정
- Org1MSPPrivateCollection 컬렉션 정의
- Org1의 피어만 프라이빗 데이터베이스에 프라이빗 데이터를 가질 수 있음.
- 업데이트는 피어에 컬렉션을 저장하는 조직에서 보증
- Org2MSPPrivateCollection 컬렉션 정의
- Org2의 피어만 프라이빗 데이터베이스에 프라이빗 데이터를 가질 수 있음.
endorsementPolicy
매개변수 : 컬렉션별 보증 정책을 생성
- 업데이트는 피어에 컬렉션을 저장하는 조직에서 보증
- 이 컬렉션 정의 파일은 피어 수명 주기 chaincode commit 명령을 사용하여 체인코드 정의가 채널에 커밋될 때 배포됨.
체인코드 API를 사용하여 비공개 데이터 읽기 및 쓰기
- 체인코드에서 데이터 정의 구축
- asset transfer private 데이터 샘플의 private 데이터를 데이터에 액세스하는 방법에 따른 개별 데이터 정의
type Asset struct {
Type string `json:"objectType"`
ID string `json:"assetID"`
Color string `json:"color"`
Size int `json:"size"`
Owner string `json:"owner"`
}
type AssetPrivateDetails struct {
ID string `json:"assetID"`
AppraisedValue int `json:"appraisedValue"`
}
type AssetPrivateDetails struct {
ID string `json:"assetID"`
AppraisedValue int `json:"appraisedValue"`
}
- GetPrivateData(), PutPrivateData()를 사용하여 PDC에 private 데이터를 r/w 가능
- 이 프라이빗 데이터는 피어의 프라이빗 상태 db(퍼블릭 상태 db와 별개)에 저장되며, 가십 프로토콜을 통해 인증된 피어 간에 전파
컬렉션 데이터 읽기
- 체인코드 API GetPrivateData() : private 데이터 쿼리
- 사용 매개 변수
- collection name
- the data key
- assetCollection 컬렉션은 Org1 및 Org2의 피어가 사이드 데이터베이스에 프라이빗 데이터를 가질 수 있도록 허용
- Org1MSPPrivateCollection 컬렉션은 Org1의 피어만 사이드 데이터베이스에서 프라이빗 데이터를 가질 수 있도록 허용
- Org2MSPPrivateCollection 컬렉션은 Org2의 피어만 사이드 데이터베이스에서 프라이빗 데이터를 가질 수 있도록 허용
- 구현 세부 정보는 다음 두 자산 전송 개인 데이터 기능을 참조하십시오.
assetID, color, size and owner
속성 값을 쿼리하기 위한 ReadAsset.
appraisedValue
속성 값을 쿼리하기 위한 ReadAssetPrivateDetails.
private 데이터 쓰기
- 체인코드 API PutPrivateData() : private 데이터를 개인 데이터베이스에 저장
- 컬렉션 이름 필요
- asset transfer private 데이터 샘플에는 세 가지 다른 프라이빗 데이터 컬렉션이 포함되어 있지만 체인코드에서 두 번 호출됨.(이 시나리오에서는 Org1 역할을 함).
- assetCollection 컬렉션 : 프라이빗 데이터 assetID, 색상, 크기 및 소유자를 작성
- Org1MSPPrivateCollection 컬렉션 : 개인 데이터 appraisedValue를 작성
- Org2 역할을 하는 경우 Org1MSPPrivateCollection을 Org2MSPPrivateCollection으로 변환.
좋은 정보 얻어갑니다, 감사합니다.