티스토리 뷰
[Blockchain 네트워크 구성] Hyperledger Fabric v1.2 Private Data 저장 오류 해결
miiingo 2018. 7. 13. 13:31Private Data 저장 및 조회에 관련된 테스트 내용은 Hyperledger Fabric v1.2에서 Private Data 저장 및 조회 글을 참고하시기 바랍니다.
오류 발생
honeybee 네트워크에서 Private Data를 저장하기 위해 테스트하는 도중, invoke 명령에서 다음과 같은 오류가 발생하였습니다.
명령은 org1의 cli 컨테이너에서 org5의 peer0을 기준으로 실행하였습니다.
root@5a1435e84230:/opt/gopath/src/github.com/hyperledger/fabric/peer# 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 marblesp5 -c '{"Args":["initMarble","marble5","blue","35","tom","99"]}'
Error: endorsement failure during invoke. chaincode result: <nil>
총 6개의 org(org1 ~ org6) 중 org4번과 org6번에서만 해당 오류가 발생하였고, 나머지 org에서는 정상적으로 invoke 및 query가 가능하였습니다...
로그 확인
위와 같은 오류를 해결하기 위해, orderer 컨테이너와 peer0.org5 컨테이너의 로그를 확인해 보겠습니다.
orderer.org5.honeybee.com 컨테이너 로그 확인
2018-07-09 23:47:50.006 UTC [orderer/common/broadcast] Handle -> WARN 057 Error reading from <org1 호스트의 IP 주소>:41848: rpc error: code = Canceled desc = context canceled
===================================================================================
오류로 인해 명령이 정상적으로 수행되지 않았기 때문에 출력되는 로그인 것 같습니다.
peer0.org5.honeybee.com 컨테이너 로그 확인
다음으로 peer0.org5.honeybee.com 컨테이너의 로그를 확인해보니 다음과 같은 오류가 출력되었습니다.
2018-07-09 23:47:40.464 UTC [golang-platform] GenerateDockerBuild -> INFO 075 building chaincode with ldflagsOpt: '-ldflags "-linkmode external -extldflags '-static'"'
2018-07-09 23:47:40.464 UTC [golang-platform] GenerateDockerBuild -> INFO 076 building chaincode with tags:
2018-07-09 23:47:49.996 UTC [chaincode-platform] func1 -> ERRO 077 Failed to generate platform-specific docker build: Error returned from build: 2 "# github.com/chaincode/marbles02_private/go
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:212:28: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:232:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:244:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:262:6: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:281:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:305:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:329:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:344:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:357:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: too many errors
"
2018-07-09 23:47:49.996 UTC [dockercontroller] deployImage -> ERRO 078 Error building images: Failed to generate platform-specific docker build: Error returned from build: 2 "# github.com/chaincode/marbles02_private/go
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:212:28: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:232:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:244:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:262:6: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:281:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:305:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:329:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:344:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:357:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: too many errors
"
2018-07-09 23:47:49.996 UTC [dockercontroller] deployImage -> ERRO 079 Image Output:
********************
********************
2018-07-09 23:47:50.000 UTC [chaincode] Launch -> ERRO 07a start failed: Failed to generate platform-specific docker build: Error returned from build: 2 "# github.com/chaincode/marbles02_private/go
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:212:28: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:232:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:244:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:262:6: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:281:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:305:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:329:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:344:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:357:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: too many errors
"
error starting container
error starting container
2018-07-09 23:47:50.000 UTC [endorser] SimulateProposal -> ERRO 07b [honeybeechannel][8f76d85e] failed to invoke chaincode name:"marblesp5" , error: Failed to generate platform-specific docker build: Error returned from build: 2 "# github.com/chaincode/marbles02_private/go
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:212:28: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:232:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:244:12: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:262:6: stub.PutPrivateData undefined (type shim.ChaincodeStubInterface has no field or method PutPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:281:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:305:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:329:25: stub.GetPrivateData undefined (type shim.ChaincodeStubInterface has no field or method GetPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:344:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:357:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: stub.DelPrivateData undefined (type shim.ChaincodeStubInterface has no field or method DelPrivateData)
chaincode/input/src/github.com/chaincode/marbles02_private/go/marbles_chaincode_private.go:363:12: too many errors
"
error starting container
error starting container
failed to execute transaction 8f76d85e36bb58bc65e87182877d92b0df4f1b2c0a456ec081f3c901164e7821
github.com/hyperledger/fabric/core/chaincode.(*ChaincodeSupport).Execute
/opt/gopath/src/github.com/hyperledger/fabric/core/chaincode/chaincode_support.go:181
github.com/hyperledger/fabric/core/endorser.(*SupportImpl).Execute
/opt/gopath/src/github.com/hyperledger/fabric/core/endorser/support.go:141
github.com/hyperledger/fabric/core/endorser.(*Endorser).callChaincode
/opt/gopath/src/github.com/hyperledger/fabric/core/endorser/endorser.go:136
github.com/hyperledger/fabric/core/endorser.(*Endorser).SimulateProposal
오류 해결
peer0.org5.honeybee.com 컨테이너에서 출력된 로그를 검색해보니, hyperledger/fabric-ccenv
이미지가 없어서 발생한 오류였습니다.
실제로 각 호스트에서 docker image ls
명령을 통해 이미지를 확인해보니 org4와 org6의 호스트에서만 해당 버전에 맞는 hyperledger/fabric-ccenv
이미지가 존재하지 않았습니다.
따라서 org4와 org6에서 hyperledger/fabric-ccenv:1.2.0
, hyperledger/fabric-ccenv:latest
이미지를 다운로드하고 네트워크를 다시 시작합니다. 기존에 hyperledger/fabric-ccenv:latest
이미지가 존재하고 있었다면, 버전이 안맞을 수도 있으니 해당 이미지를 제거하고 다시 다운로드합니다.
# 기존에 hyperledger/fabric-ccenv:latest 이미지가 있었던 경우, 해당 이미지 제거 후 재다운로드 필요
docker image rm hyperledger/fabric-ccenv:latest
docker image pull hyperledger/fabric-ccenv:1.2.0
docker image pull hyperledger/fabric-ccenv:latest
깔끔하게 모든 docker 이미지를 제거하고 다시 다운로드해도 됩니다.
docker image rm -f $(docker image ls -aq)
cd /opt/gopath/src/github.com/hyperledger
rm -rf fabric-samples
curl -sSL http://bit.ly/2ysbOFE | bash -s 1.2.0
네트워크를 다시 실행하면서 볼륨 데이터를 모두 지우기 때문에 기존에 조인했던 피어들이 모두 사라지게 됩니다. 따라서, peer0.org5
, peer1.org5
에 대한 조인 명령과 체인코드 install 명령을 다시 수행한 뒤 체인코드를 업그레이드하고 invoke 명령을 수행해주어야 합니다.
# peer0.org5를 honeybeechannel 채널에 조인
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp CORE_PEER_ADDRESS=peer0.org5.honeybee.com:7051 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 channel join -b honeybeechannel.block
# peer1.org5를 honeybeechannel 채널에 조인
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org5.honeybee.com/users/Admin@org5.honeybee.com/msp CORE_PEER_ADDRESS=peer1.org5.honeybee.com:7056 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 channel join -b honeybeechannel.block
# 체인코드 2.0 버전 설치
peer chaincode install -n marblesp5 -v 2.0 -p github.com/chaincode/marbles02_private/go/
CORE_PEER_ADDRESS=peer1.org1.honeybee.com:7056 \
peer chaincode install -n marblesp5 -v 2.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 marblesp5 -v 2.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 marblesp5 -v 2.0 -p github.com/chaincode/marbles02_private/go/
# 체인코드 업그레이드
peer chaincode upgrade -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 marblesp5 -v 2.0 -c '{"Args":["init"]}' -P "OR('org1MSP.member','org5MSP.member')" --collections-config $GOPATH/src/github.com/chaincode/marbles02_private/collections_config5.json
# 체인코드 invoke 수행
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 marblesp5 -c '{"Args":["initMarble","marble5","blue","35","tom","99"]}'
invoke 명령이 정상적으로 수행 완료되면, query 명령을 실행해봅니다.
# 체인코드 query 수행
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 marblesp5 -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 marblesp5 -c '{"Args":["readMarblePrivateDetails","marble5"]}'
query 명령도 정상적으로 수행 완료되는 것을 확인할 수 있습니다!
'Blockchain > Blockchain 네트워크 구성' 카테고리의 다른 글
[Blockchain 네트워크 구성] Apache JMeter를 이용한 Hyperledger fabric-rest API 성능 테스트 (0) | 2018.07.20 |
---|---|
[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 |
- Total
- Today
- Yesterday
- 코딜리티
- Blockchain
- 블록 체인
- Hyperledger Fabric v1.2
- Private Data
- 하이퍼레저 페브릭
- 암브로셔스
- Hyperledger Indy
- 하이퍼레저 패브릭
- Hyperledger Fabric
- 알고리즘
- 하이퍼레저 인디
- docker
- 기초 of 기초 데이터 개념
- DOCs
- 블록체인
- 코테
- 빅데이터 강의
- 빅데이터 교육
- ambrosus
- ubuntu
- 문제풀이
- javascript
- 빅데이터
- Hyperledger Fabric v1.1
- 빅데이터 기초
- 코딩테스트
- codility
- 어서와 데이터는 처음이지
- 직딩잇템
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |