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