本文介绍了在远程对等方上找不到事务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在2个实例上使用Hyperledger fabric v1.0设置简单的区块链网络.

我的情况

实例A:订购者和Peer0
实例B:对等体1

我基本上遵循了"入门"页面.

我尝试的是在instanceA上启动了1个订购者和1个对等对象.我安装,实例化,调用并查询了示例链码.

然后,我在instanceB上启动了1个同级.我可以让instanceB上的peer1从instanceA加入我的频道.我可以从instanceA在peer1上安装chaincode.

但是我无法从instanceA执行查询peer1.我至少可以看到instanceB上安装了chaincode.

错误消息是:

Error: Error endorsing query: rpc error: code = 2 desc = failed to obtain cds for mycc - transaction not found mycc/mychannel1


下面是我尝试过的命令..

[InstanceA terminal1] 1.生成orderer.block
$ configtxgen -profile SampleSingleMSPSolo -outputBlock orderer.block

[InstanceA terminal2] 2.启动订购者
$ CORE_PEER_LOCALMSPID =默认CORE_LOGGING_LEVEL =调试ORDERER_GENERAL_LISTENADDRESS = 0.0.0.0 ORDERER_GENERAL_GENESISMETHOD =文件ORDERER_GENERAL_GENESISFILE =./orderer.block

2017-04-08 23:38:41.562 UTC [orderer/multichain] NewManagerImpl -> INFO 001 Starting with system channel testchainid and orderer type solo
2017-04-08 23:38:41.562 UTC [orderer/main] NewServer -> INFO 002 Starting orderer
2017-04-08 23:38:41.562 UTC [orderer/main] main -> INFO 003 Beginning to serve requests
2017-04-08 23:39:39.881 UTC [orderer/multichain] newChain -> INFO 004 Created and starting new chain mychannel1


[InstanceA terminal1] 3.生成channel.tx
$ configtxgen -profile SampleSingleMSPSolo -outputCreateChannelTx channel.tx -channelID mychannel1

[InstanceA终端3] 4.启动peer0
$ CORE_PEER_GOSSIP_EXTERNALENDPOINT = 127.0.0.1:7051 CORE_LOGGING_LEVEL = DEBUG CORE_PEER_LOCALMSPID = DEFAULT对等节点开始--peer-defaultchain = false

[InstanceA terminal1] 5.创建频道
$ CORE_PEER_LOCALMSPID = DEFAULT对等通道创建-o 127.0.0.1:7050 -c mychannel1 -f channel.tx

[InstanceA终端1] 6.将peer0加入到mychannel1
$ CORE_PEER_LOCALMSPID = DEFAULT对等通道加入-b mychannel1.block

Peer joined the channel!
2017-04-08 23:39:54.463 UTC [main] main -> INFO 001 Exiting.....

[InstanceA terminal1] 7.安装一个链码
$ CORE_PEER_LOCALMSPID = DEFAULT对等链代码安装-o 127.0.0.1:7050 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

ncode/go/chaincode_example02
2017-04-08 23:40:05.744 UTC [golang-platform] writeGopathSrc -> INFO 001 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:40:05.744 UTC [container] WriteFolderToTarPackage -> INFO 002 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:40:36.242 UTC [main] main -> INFO 003 Exiting.....

[InstanceA terminal1] 7.实例化链码
$ CORE_PEER_ADDRESS = 127.0.0.1:7051 CORE_PEER_LOCALMSPID = DEFAULT对等链码实例化-o 127.0.0.1:7050 -C mychannel1 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c' {"Args":["init","a","100","b","200"]}'

 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}'
2017-04-08 23:40:39.892 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2017-04-08 23:40:39.893 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2017-04-08 23:40:42.194 UTC [main] main -> INFO 003 Exiting.....

[InstanceA terminal1] 8.调用并查询命令
$ CORE_PEER_ADDRESS = 127.0.0.1:7051对等链代码调用-o 127.0.0.1:7050 -C mychannel1 -n mycc -c'{"Args":["invoke","a","b","10"]} '$ CORE_PEER_ADDRESS = 127.0.0.1:7051对等链代码查询-o 127.0.0.1:7050 -C mychannel1 -n mycc -c'{"Args":["query","a"]}'

Query Result: 90
2017-04-08 23:40:51.664 UTC [main] main -> INFO 001 Exiting.....

[InstanceB terminal1] 9.在instanceB上创建peer1
$ CORE_PEER_MSPCONFIGPATH =/home/kouohhashi/work/src/github.com/hyperledger/fabric/msp/sampleconfig CORE_PEER_GOSSIP_EXTERNALENDPOINT = instanceB:7051 CORE_LOGGING_LEVEL = DEBUG CORE_PEER_LOCALMSPID = DEFAER-对等节点>

[InstanceA terminal1] 10.将实例B上的peer1从instanceA加入到mychannel1
$ CORE_PEER_LOCALMSPID = DEFAULT CORE_PEER_ADDRESS = instanceB:7051对等频道加入-b mychannel1.block

Peer joined the channel!
2017-04-08 23:42:14.799 UTC [main] main -> INFO 001 Exiting.....

[InstanceA terminal1] 11.从实例A在实例B的peer1上安装链码
$ CORE_PEER_LOCALMSPID = DEFAULT CORE_PEER_ADDRESS = instanceB:7051对等链代码安装-o 127.0.0.1:7050 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

2017-04-08 23:42:23.166 UTC [golang-platform] writeGopathSrc -> INFO 001 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:42:23.166 UTC [container] WriteFolderToTarPackage -> INFO 002 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:42:39.191 UTC [main] main -> INFO 003 Exiting.....

[InstanceA terminal1] 12.从instanceA
查询对等体1$ CORE_PEER_ADDRESS = instanceB:7051对等链码查询-o 127.0.0.1:7050 -C mychannel1 -n mycc -c'{"Args":["query","a"]}'


Error: Error endorsing query: rpc error: code = 2 desc = failed to obtain cds for mycc - transaction not found mycc/mychannel1


我正在使用2个ubuntu16.04实例,而根本没有使用docker或vagrant.我通过make native编译了二进制文件.

instanceB上的Peer1可能无法连接instanceA上的订购者,因为我看到了peer1上的错误日志.

2017-04-08 23:42:14.903 UTC [deliveryClient] NewDeliverService -> ERRO 286 Cannot dial to 0.0.0.0:7050, because of grpc: timed out when dialing

看起来peer1尝试连接0.0.0.0而不是instanceA.

通过我将组织名称从SampleOrg更改为DEFAULT的方式,因为我遇到了类似下面的错误.

2017-04-08 05:17:57.919 UTC [gossip/service] configUpdated -> ERRO 25e Tried joining channel mychannel1 but our org( DEFAULT ), isn't among the orgs of the channel: [SampleOrg] , aborting.

我认为这可能是因为instanceB上的peer1未链接到instanceA上的订购者,或者peer0进行的交易未完成并反映在instanceB上.但是我不知道该怎么挖...

请给我帮助.
谢谢.

我终于解决了我的问题.我原来很简单.

解决方案是将订购者的地址从127.0.0.1:7050更改为(InstanceA的IP地址):7050

common/configtx/tool/configtx.yaml

Orderer: &OrdererDefaults

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

    Addresses:
        # - 127.0.0.1:7050
        - <IP Address of InstanceA>:7050

这样做,instanceB上的Peer1开始连接instanceA上的订购器.

看起来"CORE_PEER_COMMITTER_LEDGER_ORDERER环境参数"和"-o选项"已不再使用或被configtx.yaml覆盖.

I'm trying to setup simple blockchain network with Hyperledger fabric v1.0 on 2 instances.

My scenario

Instance A: Orderer and Peer0
Instance B: Peer1

I basically followed the "Use the native binaries" section of "
Getting Started" page.

What I tried is I started 1 orderer and 1 peer on instanceA.I installed, instantiated, invoked and made a query the example chaincode.

Then I started 1 peer on instanceB.I could let peer1 on instanceB join my channel from instanceA. I could install the chaincode on peer1 from instanceA.

But I could not execute query peer1 from instanceA.I can see at least chaincode installed on instanceB.

Error message is:

Error: Error endorsing query: rpc error: code = 2 desc = failed to obtain cds for mycc - transaction not found mycc/mychannel1


Below are commands I tried...

[InstanceA terminal1] 1. generate orderer.block
$ configtxgen -profile SampleSingleMSPSolo -outputBlock orderer.block

[InstanceA terminal2] 2. start orderer
$ CORE_PEER_LOCALMSPID=DEFAULT CORE_LOGGING_LEVEL=DEBUG ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 ORDERER_GENERAL_GENESISMETHOD=file ORDERER_GENERAL_GENESISFILE=./orderer.block

2017-04-08 23:38:41.562 UTC [orderer/multichain] NewManagerImpl -> INFO 001 Starting with system channel testchainid and orderer type solo
2017-04-08 23:38:41.562 UTC [orderer/main] NewServer -> INFO 002 Starting orderer
2017-04-08 23:38:41.562 UTC [orderer/main] main -> INFO 003 Beginning to serve requests
2017-04-08 23:39:39.881 UTC [orderer/multichain] newChain -> INFO 004 Created and starting new chain mychannel1


[InstanceA terminal1] 3. generate channel.tx
$ configtxgen -profile SampleSingleMSPSolo -outputCreateChannelTx channel.tx -channelID mychannel1

[InstanceA terminal3] 4. start peer0
$ CORE_PEER_GOSSIP_EXTERNALENDPOINT=127.0.0.1:7051 CORE_LOGGING_LEVEL=DEBUG CORE_PEER_LOCALMSPID=DEFAULT peer node start --peer-defaultchain=false

[InstanceA terminal1] 5. Create Channel
$ CORE_PEER_LOCALMSPID=DEFAULT peer channel create -o 127.0.0.1:7050 -c mychannel1 -f channel.tx

[InstanceA terminal1] 6. Join peer0 to mychannel1
$ CORE_PEER_LOCALMSPID=DEFAULT peer channel join -b mychannel1.block

Peer joined the channel!
2017-04-08 23:39:54.463 UTC [main] main -> INFO 001 Exiting.....

[InstanceA terminal1] 7. Install a chaincode
$ CORE_PEER_LOCALMSPID=DEFAULT peer chaincode install -o 127.0.0.1:7050 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

ncode/go/chaincode_example02
2017-04-08 23:40:05.744 UTC [golang-platform] writeGopathSrc -> INFO 001 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:40:05.744 UTC [container] WriteFolderToTarPackage -> INFO 002 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:40:36.242 UTC [main] main -> INFO 003 Exiting.....

[InstanceA terminal1] 7. Instantiate the chaincode
$ CORE_PEER_ADDRESS=127.0.0.1:7051 CORE_PEER_LOCALMSPID=DEFAULT peer chaincode instantiate -o 127.0.0.1:7050 -C mychannel1 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}'

 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -c '{"Args":["init","a", "100", "b","200"]}'
2017-04-08 23:40:39.892 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 001 Using default escc
2017-04-08 23:40:39.893 UTC [chaincodeCmd] checkChaincodeCmdParams -> INFO 002 Using default vscc
2017-04-08 23:40:42.194 UTC [main] main -> INFO 003 Exiting.....

[InstanceA terminal1] 8. Invoke and query a command
$ CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode invoke -o 127.0.0.1:7050 -C mychannel1 -n mycc -c '{"Args":["invoke","a","b","10"]}'$ CORE_PEER_ADDRESS=127.0.0.1:7051 peer chaincode query -o 127.0.0.1:7050 -C mychannel1 -n mycc -c '{"Args":["query","a"]}'

Query Result: 90
2017-04-08 23:40:51.664 UTC [main] main -> INFO 001 Exiting.....

[InstanceB terminal1] 9. Create peer1 on instanceB
$ CORE_PEER_MSPCONFIGPATH=/home/kouohhashi/work/src/github.com/hyperledger/fabric/msp/sampleconfig CORE_PEER_GOSSIP_EXTERNALENDPOINT=instanceB:7051 CORE_LOGGING_LEVEL=DEBUG CORE_PEER_LOCALMSPID=DEFAULT peer node start --peer-defaultchain=false

[InstanceA terminal1] 10. Join peer1 on instance B to mychannel1 from instanceA
$ CORE_PEER_LOCALMSPID=DEFAULT CORE_PEER_ADDRESS=instanceB:7051 peer channel join -b mychannel1.block

Peer joined the channel!
2017-04-08 23:42:14.799 UTC [main] main -> INFO 001 Exiting.....

[InstanceA terminal1] 11. Install chaincode on peer1 on instanceB from instance A
$ CORE_PEER_LOCALMSPID=DEFAULT CORE_PEER_ADDRESS=instanceB:7051 peer chaincode install -o 127.0.0.1:7050 -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

2017-04-08 23:42:23.166 UTC [golang-platform] writeGopathSrc -> INFO 001 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:42:23.166 UTC [container] WriteFolderToTarPackage -> INFO 002 rootDirectory = /home/kouohhashi/work/src
2017-04-08 23:42:39.191 UTC [main] main -> INFO 003 Exiting.....

[InstanceA terminal1] 12. Query peer1 from instanceA
$ CORE_PEER_ADDRESS=instanceB:7051 peer chaincode query -o 127.0.0.1:7050 -C mychannel1 -n mycc -c '{"Args":["query","a"]}'


Error: Error endorsing query: rpc error: code = 2 desc = failed to obtain cds for mycc - transaction not found mycc/mychannel1


I'm using 2 ubuntu16.04 instances and not using docker or vagrant at all. I compiled binaries by make native.

Peer1 on instanceB may not connect orderer on instanceA because I saw the error log on peer1.

2017-04-08 23:42:14.903 UTC [deliveryClient] NewDeliverService -> ERRO 286 Cannot dial to 0.0.0.0:7050, because of grpc: timed out when dialing

Looks like peer1 tried to connect 0.0.0.0 instead of instanceA.

By the way I changed the Name of Organizations to DEFAULT from SampleOrg because I got errors like below otherwise.

2017-04-08 05:17:57.919 UTC [gossip/service] configUpdated -> ERRO 25e Tried joining channel mychannel1 but our org( DEFAULT ), isn't among the orgs of the channel: [SampleOrg] , aborting.

I think this may be because peer1 on instanceB was not linked to orderder on instanceA or transaction made by peer0 was not completed and reflected on instanceB. But I have no idea how to dig in...

Please give me help.
Thanks.

解决方案

I finally solved my problem.I turned out to be simple.

The solution was changing addresses of the orderer from 127.0.0.1:7050 to (IP Address of InstanceA):7050

common/configtx/tool/configtx.yaml

Orderer: &OrdererDefaults

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

    Addresses:
        # - 127.0.0.1:7050
        - <IP Address of InstanceA>:7050

By doing this, Peer1 on instanceB start connecting orderer on instanceA.

It looks like "CORE_PEER_COMMITTER_LEDGER_ORDERER environmental parameter" and "-o option" were not used anymore or overwritten by configtx.yaml.

这篇关于在远程对等方上找不到事务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 14:39
查看更多