Why peer chaincode instantiate execuate many times successfully

非 Y 不嫁゛ 提交于 2020-01-10 02:17:05

问题


I could execute peer chaincode instantiate many times successfully, it should returns it exist, but no. why?

logs after instantiate command

logs the docker returns

steps:

from my github project chaincode-docker-devmode, I copy msp (peer and orderer use together) 、genesis.block、helloch.tx、docker-compose-with-couch.yaml and so on form other place,it should be ok. When I execute :

docker-compose -f docker-compose-with-couch.yaml up

peer、orderer、couchdb0、cli start and then cli execute script.sh

#script.sh content
peer channel create -c helloch -f helloch.tx -o orderer:7050
peer channel join -b helloch.block

then I simulate cli enviroment using terminal at chaincode-docker-devmode current path by following:

#cli simulation, $pwd  is the chaincode-docker-devmode path
export CORE_VM_ENDPOINT=unix:///var/run/run/docker.sock
export CORE_LOGGING_LEVEL=DEBUG
export CORE_PEER_ID=cli
export CORE_PEER_ADDRESS=127.0.0.1:7051
export CORE_PEER_LOCALMSPID=DEFAULT
export CORE_PEER_MSPCONFIGPATH=$pwd/msp
bash

When I execute peer channel list It could shows I have join helloch

channel. Then I execute :

peer chaincode install -n hello -v 1.0 -l java -p chaincode/hsl-hsl-user-guide-examples-v14/mytest
peer chaincode instantiate -o 127.0.0.1:7050 -C helloch  -n hello -v 1.0 -l java -c "{\"Args\":[\"init\",\"a\", \"100\", \"b\",\"100\"]}"

But I can instantiate many times and the log does not return error as same as above instantiate logs, actually it does not instantiate successfully, why?


回答1:


Instantiate of the chaincode is essentially a transaction, therefore it has to be endorsed, ordered and committed to take effect. Now in your case peer cli instantiate command succeeds since the transaction proposal successfully endorsed and signed proposal submitted to the ordering service. While based on the following log output:

peer        | 2017-09-05 01:09:23.650 UTC [ConnProducer] NewConnection -> ERRO 6da Failed connecting to 127.0.0.1:7050 , error: context deadline exceeded
peer        | 2017-09-05 01:09:23.650 UTC [deliveryClient] connect -> ERRO 6db Failed obtaining connection: Could not connect to any of the endpoints: [127.0.0.1:7050]

Peer cannot get connected to the ordering service endpoint which in your case configured to be 127.0.0.1:7050, therefore eventually instantiate transaction is not committed. Therefore you do able to execute the instantiate command again, since no instantiate transaction record exists on the peer ledger from your previous attempt.

You need to change ordering service endpoint from 127.0.0.1:7050 to orderer:7050 and retry your experiment. This value configured inside configtx.yaml file, e.g.:

Orderer: &OrdererDefaults

    # Orderer Type: The orderer implementation to start
    # Available types are "solo" and "kafka"
    OrdererType: solo

    Addresses:
        - orderer:7050



回答2:


In my case, this was giving me trouble because I did not give the instantiation process enough time before calling an invoke/query transaction.

Try adding a sleep command between your instantiate and invoke/query transaction:

peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n fabcar -l "$LANGUAGE" -v 1.0 -c '{"Args":[""]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

# Sleeping to allow time for chaincode to instantiate on peers
sleep 30

peer chaincode invoke -o orderer.example.com:7050 -C mychannel -n fabcar -c '{"function":"initLedger","Args":[""]}'

This only applies in the case that you are running a "startup" script in a CLI container of some sort. In my case, I have script.sh which runs when I first bring the network up.




回答3:


You can instantiate a chaincode with same name only once.




回答4:


peer channel create -c helloch -f helloch.tx -o 127.0.0.1:7050

after above, you could see the helloch.block detail message by command

configtxgen --inspectBlock helloch.block

It shows

"OrdererAddresses": {
                "Version": "0",
                "ModPolicy": "/Channel/Orderer/Admins",
                "Value": {
                    "addresses": [
                        "127.0.0.1:7050"
                    ]
                }
            },

it seems that the connected orderer address which in helloch.block(channel configuration) comes from genesis.block (which generate from configtx.yaml )



来源:https://stackoverflow.com/questions/46045970/why-peer-chaincode-instantiate-execuate-many-times-successfully

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!