티스토리 뷰

반응형

 네트워크 구조

※ 여기에서 도형의 색깔은 각각 6개의 호스트를 의미합니다. 도형의 색깔이 같으면, 동일한 호스트 내에서 실행되는 컨테이너입니다.

총 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)\"}"

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함