티스토리 뷰
[Blockchain 네트워크 구성] Hyperledger Fabric v1.2에서 Private Data 저장 및 조회
miiingo 2018. 7. 13. 12:03네트워크 구조
총 6개의 호스트에 6개의 org와 5개의 kafka, zookeeper 컨테이너를 나눠서 실행시키고 데이터의 접근을 제어하기 위해 각각의 채널을 생성하였습니다.
그런데, Hyperledger Fabric 1.2.0 버전이 릴리즈됨에 따라 각 org별로 채널을 따로 구성할 필요가 없이 Private Data를 이용해 데이터에 대한 접근을 제어할 수 있게 되었습니다.
그래서 각 org의 채널을 없애고, 전체 채널인 honeybeechannel에 모든 org의 peer를 조인한 뒤 Private 데이터를 설정하였습니다. 여기에서는 Hyperledger Fabric 1.2.0 버전에 대한 네트워크 구성을 완료하고, 채널 생성 및 조인이 완료된 상태에서 org1 및 org5의 Private Data 저장 방법에 대해 설명합니다.
체인코드 설정
marblesp 체인코드 설치
org1과 org5의 peer에 체인코드를 설치합니다.
다음 명령은 org1 호스트의 cli 컨테이너에서 실행하는 것을 기준으로 작성되었습니다.
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
CORE_PEER_ADDRESS=peer1.org1.honeybee.com:7056 \
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
CORE_PEER_ADDRESS=peer1.org5.honeybee.com:7056 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode install -n marblesp -v 1.0 -p github.com/chaincode/marbles02_private/go/
collections_config.json 파일 설정
Private Data를 설정하기 위해서는 collections_config.json 파일에 대한 설정이 필요합니다.
Private Data를 계속 유지하기 위해 blockToLive
값은 0
으로 설정합니다.
[
{
"name": "collectionMarbles",
"policy": "OR('org1MSP.member', 'org5MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 3,
"blockToLive":0
},
{
"name": "collectionMarblePrivateDetails",
"policy": "OR('org1MSP.member')",
"requiredPeerCount": 0,
"maxPeerCount": 3,
"blockToLive":0
}
]
org1과 org5만 접근 가능한 collectionMarbles
와 org1만 접근 가능한 collectionMarblePrivateDetails
정책을 설정합니다. (자신이 원하는 다른 org로 변경해도 무방합니다.)
marblesp 체인코드 인스턴스화
collections_config.json 파일에서 설정한 정책을 기반으로 marblesp 체인코드를 인스턴스화합니다.
peer chaincode instantiate -o orderer.org1.honeybee.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/honeybee.com/orderers/orderer.org1.honeybee.com/msp/tlscacerts/tlsca.honeybee.com-cert.pem -C honeybeechannel -n marblesp -v 1.0 -c '{"Args":["init"]}' -P "OR('org1MSP.member','org5MSP.member')" --collections-config $GOPATH/src/github.com/chaincode/marbles02_private/collections_config.json
체인코드 실행
체인코드 invoke 실행
이제 invoke를 실행해보겠습니다.
org1에서는 marble1을, org5에서는 marble2를 생성합니다.
peer chaincode invoke -o orderer.org1.honeybee.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/honeybee.com/orderers/orderer.org1.honeybee.com/msp/tlscacerts/tlsca.honeybee.com-cert.pem -C honeybeechannel -n marblesp -c '{"Args":["initMarble","marble1","blue","35","tom","99"]}'
CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode invoke -o orderer.org5.honeybee.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/honeybee.com/orderers/orderer.org5.honeybee.com/msp/tlscacerts/tlsca.honeybee.com-cert.pem -C honeybeechannel -n marblesp -c '{"Args":["initMarble","marble2","blue","35","tom","99"]}'
체인코드 query 실행
query 명령을 통해 데이터를 조회해봅니다.
org1에서는 기본 데이터(readMarble
)와 Private 데이터(readMarblePrivateDetails
) 모두 조회가 가능하지만, org5에서는 기본 데이터(readMarble
)만 조회 가능합니다.
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarble","marble2"]}'
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble2"]}'
CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarble","marble1"]}'
CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarble","marble2"]}'
CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble1"]}'
CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 \
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp \
CORE_PEER_LOCALMSPID="org5MSP" \
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/peers/peer0.org5.honeybee.com/tls/ca.crt \
peer chaincode query -C honeybeechannel -n marblesp -c '{"Args":["readMarblePrivateDetails","marble2"]}'
org5에서 Private 데이터(readMarblePrivateDetails
) 조회 시 다음과 같은 오류가 출력됩니다.
Error: endorsement failure during query. response: status:500 message:"{\"Error\":\"Failed to get private details for marble1: GET_STATE failed: transaction ID: 6b5de1991f77887d83765a3caf460d31fe6f9f0dca812719c50703aaeeea2156: Private data matching public hash version is not available. Public hash version = &version.Height{BlockNum:0x8, TxNum:0x0}, Private data version = (*version.Height)(nil)\"}"
'Blockchain > Blockchain 네트워크 구성' 카테고리의 다른 글
[Blockchain 네트워크 구성] Peer-to-Peer 연결 오류 해결 (0) | 2018.07.19 |
---|---|
[Blockchain 네트워크 구성] Hyperledger Fabric v1.2 Private Data 저장 오류 해결 (0) | 2018.07.13 |
[blockchain-explorer] Hyperledger Explorer 설치 및 실행(Node v8.x) (0) | 2018.06.19 |
[Blockchain 네트워크 구성] Node-RED에서 Composer Card not found 오류 해결 (0) | 2018.06.15 |
[Blockchain 네트워크 구성] Node-RED에 Composer Card 추가 방법 (0) | 2018.06.15 |
- Total
- Today
- Yesterday
- Blockchain
- Hyperledger Fabric v1.1
- Private Data
- 어서와 데이터는 처음이지
- 기초 of 기초 데이터 개념
- 암브로셔스
- 알고리즘
- Hyperledger Fabric v1.2
- Hyperledger Indy
- 빅데이터 강의
- 블록체인
- 문제풀이
- 코딩테스트
- 하이퍼레저 페브릭
- 하이퍼레저 인디
- 하이퍼레저 패브릭
- 빅데이터
- ambrosus
- DOCs
- 빅데이터 기초
- 빅데이터 교육
- 직딩잇템
- 코테
- Hyperledger Fabric
- javascript
- 코딜리티
- ubuntu
- 블록 체인
- codility
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |