Hyperledger Fabric 프라이빗 데이터는 버전 1.2에 도입된 새로운 기능입니다. Fabric 프라이빗 데이터는 사이드 데이터베이스(SideDB)를 사용하여 여러 채널 멤버 간의 프라이빗 데이터를 저장하므로 채널 위에 보다 유연한 계층을 제공합니다. . 이 기사에서는 체인 코드 개발에서 패브릭 프라이빗 데이터를 사용하는 방법을 소개합니다.
fabric 개인 데이터는 SideDB를 사용하여 개인 데이터를 저장합니다. 이는 채널 위에 보다 세분화된 데이터 개인 정보 보호 메커니즘을 제공하는 것과 같습니다. 이 글에서는 패브릭 프라이빗 데이터의 목적, 기본 개념 및 적용 시나리오를 소개합니다.
패브릭 프라이빗 데이터란 무엇인가요?
Hyperledger Fabric에서 데이터 개인정보 보호를 달성하는 현재 방법은 채널을 사용하는 것입니다. 그러나 데이터 프라이버시 보호를 위해 대규모 네트워크에 수많은 채널을 만드는 것은 공무원들만이 아닙니다. 관리 정책, 체인 코드 버전, 회원 서비스 제공(MSP) 등 추가 오버헤드가 발생하기 때문입니다. 채널에서 모든 데이터는 공개 또는 비공개입니다. 따라서 채널 외부의 회원에게 자산을 양도하려는 경우에는 번거로운 일이 됩니다. 이것이 Hyperledger Fabric이 개인 트랜잭션을 도입하는 이유입니다. Farbic 개인 데이터를 사용하면 채널의 어떤 구성원이 데이터에 액세스할 수 있는지 정의하는 정책을 기반으로 개인 데이터 세트를 생성할 수 있습니다. Fabric 개인 데이터는 정책을 추가하는 것만으로 간단하게 관리할 수 있습니다. 이를 통해 특정 데이터를 일부 회원에게만 공개할 수 있습니다.
Hyperledger Fabric의 대리석 예시를 생각해 보세요. 보유자 및 가격 정보를 제외한 모든 대리석 데이터는 공개될 수 있습니다. 이 두 데이터는 타인에게 공개될 수 없으며 가격도 타인에게 알려져서는 안 됩니다. 어쩌면 대리석을 판매하는 사람이 실제 소유자인지 확인해야 하기 때문에 이 데이터를 추적해야 할 수도 있습니다. 가상의 대리석 감사 회사가 이를 확인하기 위해 파트너 역할을 할 수 있습니다. 채널을 사용하면 모든 활동이 원장 상태로 기록되며 누구나 볼 수 있습니다.
fabric private data 위의 문제를 어떻게 해결하나요?
위 사진에서 첫 번째 세트인 Channel Read-Write Set"은 패브릭 프라이빗 데이터를 도입하지 않습니다. 두 번째 세트인 프라이빗 상태 파티션 1은 서로 다른 기관에 속한 두 노드 간의 공유 프라이빗 상태를 보여줍니다.
세 번째 세트인 프라이빗 상태는 노드 간에 복제됩니다. 파티션 2&3은 특정 구성원이 패브릭 개인 데이터 세트를 사용할 수 있음을 보여줍니다. 이는 각 대리석 판매자 및 감사자에 대해 개인 데이터 세트를 설정할 수 있음을 의미합니다. 데이터는 여전히 기본 상태 및 원장에 저장됩니다. #
승인된 노드는 개인 데이터베이스의 실제 데이터뿐만 아니라 기본 원장의 데이터 해시도 볼 수 있습니다. 승인되지 않은 노드는 개인 데이터베이스를 동기화하지 않으며, 주 원장에 있는 데이터 해시만 볼 수 있습니다. 해시는 되돌릴 수 없으므로 이러한 승인되지 않은 노드는 실제 데이터를 볼 수 없습니다. fabric.private 데이터로 해결된 문제는 다음과 같습니다. 🎜🎜#Hyperledger Fabric의 고전적인 fabcar 예제를 사용하여 개인 데이터 세트를 사용하는 방법을 보여줍니다. initLedger 기능은 네트워크의 누구나 볼 수 있는 데이터 세트에 10개의 새로운 자동차를 생성합니다. 이제 개인 데이터베이스를 생성해 보겠습니다. 이 데이터는 우리가 보유하고 있는 다른 회원 차고에만 공유됩니다. #
먼저 개인 데이터 세트 이름과 액세스 정책이 포함된 데이터 세트 구성 파일 collections_config.json이 필요합니다. 정책은 OR, AND 등과 같은 기존 정책 논리를 사용할 수 있는 보증 정책과 유사합니다.[ { "name": "carCollection", "policy": "OR ('Org1MSP.member','Org2MSP.member')", "requiredPeerCount": 0, "maxPeerCount": 3, "blockToLive":1000000 } ]
패브릭 프라이빗 데이터를 지원하도록 체인 코드 수정#🎜 🎜#
다음은 원래 createCar 함수입니다.
async createCar(stubHelper: StubHelper, args: string[]) { const verifiedArgs = await Helpers.checkArgs<any>(args[0], Yup.object() .shape({ key: Yup.string().required(), make: Yup.string().required(), model: Yup.string().required(), color: Yup.string().required(), owner: Yup.string().required(), })); let car = { docType: 'car', make: verifiedArgs.make, model: verifiedArgs.model, color: verifiedArgs.color, owner: verifiedArgs.owner }; await stubHelper.putState(verifiedArgs.key, car); }개인 데이터 세트 carCollection에 데이터를 추가하려면 대상 데이터 세트를 지정해야 합니다.
await stubHelper.putState(verifiedArgs.key, car, {privateCollection: 'carCollection'});다음으로 차량을 쿼리하려면 대상 프라이빗 데이터 세트도 지정해야 합니다.
async queryPrivateCar(stubHelper: StubHelper, args: string[]) { const verifiedArgs = await Helpers.checkArgs<any>(args[0], Yup.object() .shape({ key: Yup.string().required(), })); const car = await stubHelper.getStateAsObject(verifiedArgs.key, {privateCollection: 'carCollection'}); if (!car) { throw new NotFoundError('Car does not exist'); } return car; }#🎜🎜 #마찬가지로 삭제 및 업데이트 작업의 경우 대상 프라이빗 데이터 세트를 지정해야 합니다. 조작할 데이터 세트입니다. fabric 프라이빗 데이터 체인코드 모범 사례
물론 일부 데이터는 Hyperledger Fabric 네트워크의 모든 사람에게 표시됩니다. 그러나 이 데이터 중 일부는 비공개이고 비공개 데이터세트에 보관되어 있으므로 데이터세트 구성 파일에 정의된 피어만 액세스할 수 있습니다.
데이터를 더 쉽게 추출할 수 있도록 공개 데이터세트와 비공개 데이터세트 모두에서 동일한 키를 사용하여 데이터를 저장하는 것이 좋습니다. 마지막으로, 이 글이 여러분에게 도움이 되기를 바랍니다.
더 많은 관련 튜토리얼을 알고 싶다면 PHP 중국어 웹사이트를 주목해주세요!
위 내용은 Fabric 프라이빗 데이터 초보자의 실무 경험의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!