2017-09-05 39 views
1

我可以成功执行多次peer chaincode instantiate,它应该返回它的存在,但不是。为什么?为什么peer chaincode实例成功执行多次

logs after instantiate command

logs the docker returns

步骤

my github project chaincode-docker-devmode,我复制MSP(对等体和订货人一起使用),genesis.block,helloch.tx,搬运工-撰写-与 - couch.yaml等形成其他地方,应该没问题。当我执行:

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

对等体,订货人,couchdb0,CLI开始,然后执行CLI script.sh

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

然后我使用终端在chaincode-搬运工-DEVMODE电流路径模拟CLI环境由以下:

#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 

当我执行peer channel list这可能表明我加入helloch

频道。然后我执行:

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\"]}" 

但我可以实例很多次,日志不返回错误as same as above instantiate logs,其实它并没有成功实例,为什么呢?

回答

3

链代码的实例化本质上是一个事务,因此它必须经过认可,排序并承诺生效。现在,在您的案例中,由于交易提案已成功通过并签署了提交给订购服务的提案,所以peer cli instantiate命令成功。虽然基于以下日志输出:

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] 

同行无法获得连接到你的情况配置为127.0.0.1:7050订购服务端点,因此最终实例事务未提交。因此,您可以再次执行instantiate命令,因为您之前的尝试没有在对等分类帐中存在实例化事务记录。

您需要将订购服务终端从127.0.0.1:7050更改为orderer:7050,然后重试您的实验。里面configtx.yaml文件中配置该值,如:

Orderer: &OrdererDefaults 

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

    Addresses: 
     - orderer:7050 
+0

非常感谢你,你是对的!我非常兴奋。 –

+0

欢迎:),我相信这也解决了您的其他问题:https://stackoverflow.com/questions/46035198/why-chaincode-instantiate-success-but-query-failed –

+0

是的,他们是同样的问题。谢谢,我们可以沟通,我可以收到你的电子邮件吗? –

0

您可以仅实例化一个具有相同名称的链式代码。

+0

我知道只有一个,但是从我的例子,我实例很多次,码头工人日志不返回错误信息。我支持实例化不成功,但我找不到原因?你可以看我上面添加的日志并帮助我解决它吗? –

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

以上后,可以通过命令看到helloch.block详细消息

configtxgen --inspectBlock helloch.block 

它显示

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

它似乎helloch.block(通道配置)中的连接的订购者地址来自ge NESIS。块(从configtx.yaml产生)