Instantiation of signed chaincode packages in Hyperledger Fabric - hyperledger-fabric

I am trying to apply the packaging method for the chaincode which enables me to enforce signatures from multiple organizations and make sure that chaincode cannot be effectively instantiated if signatures from relevant participants in the channel are not collected.
a) From Org1 context:
# peer chaincode package -n mycc -p github.com/chaincode/chaincode_example02/go/ -v 1 -s -S -i "AND('Org1.admin','Org2.admin')" ccpack.out
2018-12-03 22:49:46.032 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2018-12-03 22:49:46.032 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
root#bdc554f0a918:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode signpackage ccpack.out signedccpack.out
Wrote signed package to signedccpack.out successfully
root#bdc554f0a918:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install signedccpack.out
2018-12-03 22:50:21.125 UTC [chaincodeCmd] install -> INFO 001 Installed remotely response:<status:200 payload:"OK" >
b) From Org2 context:
root#bdc554f0a918:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode signpackage ccpack.out signedccpack.out
Wrote signed package to signedccpack.out successfully
root#bdc554f0a918:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode install signedccpack.out
2018-12-03 22:50:32.414 UTC [chaincodeCmd] install -> INFO 001 Installed remotely response:<status:200 payload:"OK" >
c) From either Org context:
root#bdc554f0a918:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C channel1 -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
2018-12-03 22:50:42.946 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2018-12-03 22:50:42.950 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Error: could not assemble transaction, err proposal response was not successful, error code 500, msg cannot get package for chaincode (mycc:1.0)
d) The chaincode is present on Org1 Peer 1:
root#af99b3698322:/var/hyperledger/production/chaincodes# ls
mycc.1
e) The chaincode is present on Org2 Peer 1:
root#2fd1355259a8:/var/hyperledger/production/chaincodes# ls
mycc.1
Any recommendations as to the process or the cli syntax structure would be greatly appreciated.

Related

Upgrading chaincode in hyperledger fabric gives no errors, but doesn't reflect changes

I'm trying to update a chaincode with a 3 nodes blockchain using Hyperledger Fabric 1.4.4, raft and multi ordering.
I'm using ansible to deploy the BC : https://github.com/Altoros/Ansible-Fabric-Starter
What I'm trying to do is upgrading the chaincode.
I first log in the cli container in a node:
ubuntu#ip-172-31-46-199:~$ docker exec -it cli.org0.domain bash
root#56e6868e66a0:/etc/hyperledger/artifacts# export CORE_PEER_ADDRESS=peer0.org0.domain:7051 && peer chaincode install -n main -v 1.0.1 -p main -l golang
2021-03-18 16:54:45.475 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2021-03-18 16:54:45.475 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2021-03-18 16:54:47.599 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
root#56e6868e66a0:/etc/hyperledger/artifacts# export CORE_PEER_ADDRESS=peer0.org0.domain:7051 && peer chaincode upgrade -n main -v 1.0.1 -c "{\"Args\":[\"GetMeasuresBetween\",\"2019-03-29T12:00:00Z\", \"2019-03-29T14:00:00Z\"]}" -o orderer2.domain:7050 -C org0 --tls --cafile /etc/hyperledger/artifacts/crypto-config/ordererOrganizations/domain/tlsca/tlsca.domain-cert.pem
2021-03-18 17:03:09.896 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2021-03-18 17:03:09.897 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Everything seems to be working.
But when I try to invoke the chaincode where I changed a debug message
peer chaincode invoke --cafile /etc/hyperledger/artifacts/crypto-config/ordererOrganizations/domain/tlsca/tlsca.domain-cert.pem --tls -o orderer2.domain:7050 -C org0 -n main -c "{\"Args\":[\"AddMeasure\",\"ACC00000000\",\"23547901584620111112\",\"Conso\",\"BASE\",\"1010\",\"2019-11-01T08:30:01Z\"]}"
it is also working well, but I cannot see in the logs the new debug message, only seeing old one.
Is it something I am missing ? When invoking the chaincode, will it always take the latest version ?
After you install the new version on each peer, you need to then perform an upgrade operation (analogous to doing install and instantiate when you deployed the initial version of the chaincode).

Chaincode path does not exist

Problem:
I have set up a Hyperledger Fabric network. When I try to install a chaincode it is only installed in the first peer. But when I try to install chaincode on other peers it was failed by saying that chaincode does not exist.
This is the command I issued on the first peer.
peer chaincode install -n fabcar -v 1.0.0 -l node -p /opt/gopath/src/github.com/chaincode/fabcar/javascript-low-level
This is the output after the command.
2020-03-01 07:27:26.245 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-03-01 07:27:26.245 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2020-03-01 07:27:26.705 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:
This is the command I issued on the second peer.
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/doctor.hrm.com/users/Admin#doctor.hrm.com/msp CORE_PEER_ADDRESS=peer1.doctor.hrm.com:10051 CORE_PEER_LOCALMSPID="DoctorMSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/doctor.hrm.com/peers/peer1.doctor.hrm.com/tls/ca.crt peer chaincode install -n fabcar -v 1.0.0 -l node -p /opt/gopath/src/github.com/fabcar/javascript-low-level
This is the error that was given to me.
2020-03-01 07:34:28.268 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2020-03-01 07:34:28.268 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Error: error getting chaincode code fabcar: path to chaincode does not exist: /opt/gopath/src/github.com/fabcar/javascript-low-level
Can someone help me with this to find the issue?
Check your GOPATH set in cli container docker-compose.yaml file.
If GOPATH=/opt/gopath then you should give path inside src folder. So you should give path in peer chaincode install as github.com/fabcar/javascript-low-level
so your command will be
peer chaincode install -n fabcar -v 1.0.0 -l node -p github.com/chaincode/fabcar/javascript-low-level
so check your GOPATH set in cli container of docker-compose.yaml and accordingly set the path in peer chaincode install command

Error: could not send: EOF on instantiating chaincode

I am getting
Error: could not send: EOF
on instantiating chaincode in HF. I followed the correct steps for installing binaries, images etc.
After installation I used following command in the first-network directory to install and instantiate chaincode:
./byfn.sh generate
./byfn.sh up
docker exec -it cli bash
peer chaincode install -n fabcar -v 1.0 -p github.com/chaincode/fabcar/javascript -l node
On executing last command this is the output that I got:
2019-03-28 09:22:04.047 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2019-03-28 09:22:04.048 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2019-03-28 09:22:04.950 UTC [chaincodeCmd] install -> INFO 003 Installed remotely response:<status:200 payload:"OK" >
then I used the command to instantiate chaincode which is:
peer chaincode instantiate -n fabcar -v 1.0 -C mychannel -c '{"Args":[]}' -l node
And the output was an error like this:
2019-03-28 09:23:25.743 UTC [chaincodeCmd] InitCmdFactory -> INFO 001 Retrieved channel (mychannel) orderer endpoint: orderer.example.com:7050
2019-03-28 09:23:25.747 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default escc
2019-03-28 09:23:25.747 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default vscc
Error: could not send: EOF
I think I missed something but I am not sure.
Can anyone tell where I went wrong. Thanks in advance.
I found that adding the TLS certificate options to the instantiate command worked for me. I am using Golang for my chaincode language
Install: (for reference)
peer chaincode install \
-n mycc \
-v 1.0 \
-p myorg/chaincode
Instantiate:
peer chaincode instantiate \
-C mychannel \
-n mycc \
-v 1.0 \
-c '{"Args":["wallet","123"]}' \
--tls true \
--cafile /myorg/hyperledger/fabric/peer/crypto-config/ordererOrganizations/myorg.org/orderers/orderer.myorg.org/msp/tlscacerts/tlsca.myorg.org-cert.pem
I didn't have to specify the following options though including them did not break anything:
-P "OR ('MYORGMSP.peer')" \
-l golang \
I changed the CLI container to mount my crypto material at /myorg/hyperledger/fabric/peer/crypto-config which differs from the default location used by other examples.

Hyperledger - peer unable to instantiate chaincode after joining channel

I currently have a running Kafka-based hyperledger running on docker.
The full container list is as such:
2x orderer
2x peer
1x certificate-authority
3x zookeeper
4x kafka nodes
1x cli tools
I have sucessfully created a channel using cli by the following command
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/msp/users/Admin#company/msp" peer0.company peer channel create -o orderer0.company:7050 -c messagebus -f /etc/hyperledger/configtx/channel.tx
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/msp/users/Admin#company/msp" peer0.company peer channel join -b messagebus.block
I can see the peer is joined using the following command:
docker exec cli peer channel list
2019-01-07 16:54:41.784 UTC [channelCmd] InitCmdFactory -> INFO 003 Endorser and orderer connections initialized
Channels peers has joined:
messagebus
I then want to init and instantiate my chaincode as such
#install the chaincode
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/company/users/Admin#company/msp" cli peer chaincode install -n testnet -v 1.0 -p "$CC_SRC_PATH" -l "$LANGUAGE"
2019-01-07 16:46:23.154 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2019-01-07 16:46:23.154 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
2019-01-07 16:46:23.615 UTC [chaincodeCmd] install -> INFO 005 Installed remotely response:<status:200 payload:"OK" >
#instantiate the chaincode
docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/company/users/Admin#company/msp" cli peer chaincode instantiate -o orderer0.company:7050 -C messagebus -n testnet -l "$LANGUAGE" -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
2019-01-07 16:46:24.210 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 003 Using default escc
2019-01-07 16:46:24.210 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 004 Using default vscc
Error: error endorsing chaincode: rpc error: code = Unknown desc = access denied: channel [messagebus] creator org [Org1MSP]
As the final line shows, the access is denied to the channel.
I am also unable to join a Java SDK client to the channel and receive similar access denied errors.
I see the following logs in the peer0 container:
2019-01-07 16:46:23.611 UTC [endorser] callChaincode -> INFO 0f1 [][bfb2e2d4] Entry chaincode: name:"lscc"
2019-01-07 16:46:23.614 UTC [lscc] executeInstall -> INFO 0f2 Installed Chaincode [gmex] Version [1.0] to peer
2019-01-07 16:46:23.614 UTC [endorser] callChaincode -> INFO 0f3 [][bfb2e2d4] Exit chaincode: name:"lscc" (2ms)
2019-01-07 16:46:23.614 UTC [comm.grpc.server] 1 -> INFO 0f4 unary call completed {"grpc.start_time": "2019-01-07T16:46:23.61Z", "grpc.service": "protos.Endorser", "grpc.method": "ProcessProposal", "grpc.peer_address": "XXX.XXX.X.XXX:123", "grpc.code": "OK", "grpc.call_duration": "3.771114ms"}
2019-01-07 16:46:24.214 UTC [protoutils] ValidateProposalMessage -> WARN 0f5 channel [messagebus]: MSP error: the supplied identity is not valid: x509: certificate signed by unknown authority (possibly because of "x509: ECDSA verification failure" while trying to verify candidate authority certificate "ca.company")
this leads me to believe the peer is not correctly setup... however it is able to create the channel successfully.
Any pointers would be appreciated

Fail to instantiate the chaincode in first network of fabric-samples

The official hyperledger fabric v1.0.0 gives a simple demo by using docker.
What i am doing is to avoid docker and directly run them on the machine. Thanks to the answer from my previous question, I have successfully launched 1 solo orderer, two peers (each from one org), created and joined the channels from peers, installed the chaincode on two peers.
The client side's command to install chaincode is
peer chaincode install -n myC1 -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
Both peers return the following message and I think it should be correct.
2017-09-11 16:34:26.361 SGT [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2017-09-11 16:34:26.361 SGT [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2017-09-11 16:34:26.556 SGT [main] main -> INFO 003 Exiting.....
However, when i try to instantiate the chaincode as follows
peer chaincode instantiate -o orderer.example.com:7040 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n myC1 -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')
Client console returns the error message
2017-09-11 17:00:18.181 SGT [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2017-09-11 17:00:18.181 SGT [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
Error: Error endorsing chaincode: rpc error: code = Unknown desc = Failed to init chaincode(handler not found for chaincode myC1:1.0)
The console of Peer0.org2 gives NO error message. But Peer0.org1's console gives the following:
2017-09-11 17:00:18.183 SGT [chaincode] Launch -> ERRO 032 sending init failed(handler not found for chaincode myC1:1.0)
2017-09-11 17:00:18.184 SGT [endorser] simulateProposal -> ERRO 033 failed to invoke chaincode name:"lscc" on transaction a665c5305c5e3f158d272e4a39b04611e5335406e2a7c7057f11d32d8e07670e, error: Failed to init chaincode(handler not found for chaincode myC1:1.0)
Can any one help me to solve this problem and give me a simple explanation??

Resources