从fabric到chaincode的GetState总是返回空值

时间:2018-01-17 09:31:16

标签: blockchain hyperledger-fabric hyperledger leveldb

我在chaincode dev mode内建立了一个区块链网络,其中包含三个组织和六个基于官方chaincode example的同行。我直接将链代码示例部署到区块链网络上。以peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'之类的方式调用链代码没有问题。但是每当我通过GetState (key)实现查询的链码查询分类帐时,它总是返回empty value,即使我可以通过调用GetStateByRange("","")来获取键/值对,它返回所有键/值对。我检查了安装了链代码的对等体的日志。日志如下所示。

    2018-01-17 09:01:26.670 UTC [chaincode] processStream -> DEBU 961 [43697748]Received message GET_STATE from shim
    2018-01-17 09:01:26.670 UTC [chaincode] handleMessage -> DEBU 962 [43697748]Fabric side Handling ChaincodeMessage of type: GET_STATE in state rea
    2018-01-17 09:01:26.670 UTC [chaincode] afterGetState -> DEBU 963 [43697748]Received GET_STATE, invoking get state from ledger
    2018-01-17 09:01:26.670 UTC [chaincode] filterError -> DEBU 964 Ignoring NoTransitionError: no transition
    2018-01-17 09:01:26.670 UTC [chaincode] func1 -> DEBU 965 [43697748] getting state for chaincode test, key , channel chainplaza
    2018-01-17 09:01:26.671 UTC [stateleveldb] GetState -> DEBU 966 GetState(). ns=test, key=
    2018-01-17 09:01:26.671 UTC [chaincode] func1 -> DEBU 967 [43697748]No state associated with key: a. Sending RESPONSE with an empty payload
    2018-01-17 09:01:26.671 UTC [chaincode] 1 -> DEBU 968 [43697748]handleGetState serial send RESPONSE
    2018-01-17 09:01:26.671 UTC [chaincode] processStream -> DEBU 969 [43697748]Received message COMPLETED from shim
    2018-01-17 09:01:26.671 UTC [chaincode] handleMessage -> DEBU 96a [43697748]Fabric side Handling ChaincodeMessage of type: COMPLETED in state rea
    2018-01-17 09:01:26.671 UTC [chaincode] handleMessage -> DEBU 96b [43697748e1ea4c6f0f6af336f6c413583716c8ec1d59c10118ecfd49bf581509]HandleMessage
    2018-01-17 09:01:26.671 UTC [chaincode] notify -> DEBU 96c notifying Txid:43697748e1ea4c6f0f6af336f6c413583716c8ec1d59c10118ecfd49bf581509
    2018-01-17 09:01:26.671 UTC [chaincode] Execute -> DEBU 96d Exit

奇怪的是[stateleveldb] GetState -> DEBU 966 GetState(). ns=test, key=key部分是空的。在区块链正常工作时,key的值应为GetState(key)的参数。

那么什么样的错误会导致这样的情况呢? 我使用的链码可以找到here

1 个答案:

答案 0 :(得分:0)

我自己找到了原因。这是因为fabric在您实例化链码时使用ccenv图像来构建链码。此图像在其GOPATH中具有指定版本的结构源代码以构建链代码。我想图像中的结构源代码版本应该与用于构建/编译结构的源代码相同(包括对等/顺序等)。并且在映像中的结构源代码的供应商中存在依赖项目(github.com/miekg/pkcs11)。这个项目负责加密的东西。在我的chaincode项目中,我还在其他链代码中出售了github.com/miekg/pkcs11但是使用了不同的提交版本。它似乎会引起冲突。但我并不确切知道它是如何引起冲突的。我删除了自己的pkcs11后。所有的问题都没有用。