Hyperledger fabric Can';t使用Fabric Java SDK基于事务id获取BlockInfo

Hyperledger fabric Can';t使用Fabric Java SDK基于事务id获取BlockInfo,hyperledger-fabric,Hyperledger Fabric,我正在使用Fabric Java SDK查询在Hyperledger Fabric v1.3上运行的链码。 这是我尝试过的步骤: 创建ChannelCLient并使用方法queryByChainCode(),我得到了ProposalResponse的集合 在每个ProposalResponse上,我可以从方法getTransactionID()获取有效负载和transactionID 之后,使用我从上述步骤获得的事务Id通过方法queryBlockByTransactionID()查询Bloc

我正在使用Fabric Java SDK查询在Hyperledger Fabric v1.3上运行的链码。 这是我尝试过的步骤:

  • 创建ChannelCLient并使用方法queryByChainCode(),我得到了ProposalResponse的集合

  • 在每个ProposalResponse上,我可以从方法getTransactionID()获取有效负载和transactionID

  • 之后,使用我从上述步骤获得的事务Id通过方法queryBlockByTransactionID()查询BlockInfo。 因为我想得到包含我的交易的块的正确散列

但我收到错误消息500无法获取txID的块。。。在索引中找不到错误项

我的代码如下所示:

FabricClient fabClient = new FabricClient(adminUserContext);

        ChannelClient channelClient = fabClient.createChannelClient(Config.CHANNEL_NAME);

        Channel channel = channelClient.getChannel();
        Peer peer = fabClient.getInstance().newPeer(Config.ORG1_PEER_0, Config.ORG1_PEER_0_URL);
        EventHub eventHub = fabClient.getInstance().newEventHub("eventhub01", "grpc://localhost:7053");
        Orderer orderer = fabClient.getInstance().newOrderer(Config.ORDERER_NAME, Config.ORDERER_URL);
        channel.addPeer(peer);
        channel.addEventHub(eventHub);
        channel.addOrderer(orderer);
        channel.initialize();

        String transactionId = "";
        Logger.getLogger(QueryChaincode.class.getName()).log(Level.INFO, "Query ");
        Collection<ProposalResponse>  responsesQuery = channelClient.queryByChainCode(chaincode, "query", args);
        for (ProposalResponse pres : responsesQuery) {
            transactionId = pres.getTransactionID();
            String stringResponse = new String(pres.getChaincodeActionResponsePayload());
            Logger.getLogger(QueryChaincode.class.getName()).log(Level.INFO, stringResponse);
            System.out.println("transactionID is:" + transactionId + " chaincode id is: " + pres.getChaincodeID()
            + " peer name is: " + pres.getPeer().getName());
            result += stringResponse;
        }
        BlockInfo blockInfo = channel.queryBlockByTransactionID(transactionId);
FabricClient fabClient=新的FabricClient(adminUserContext);
ChannelClient ChannelClient=fabClient.createChannelClient(Config.CHANNEL\u NAME);
Channel=channelClient.getChannel();
Peer Peer=fabClient.getInstance().newPeer(Config.ORG1\u Peer\u 0,Config.ORG1\u Peer\u 0\u URL);
EventHub EventHub=fabClient.getInstance().newEventHub(“eventhub01”,”grpc://localhost:7053");
order order=fabClient.getInstance().neworder(Config.order\u NAME,Config.order\u URL);
channel.addPeer(peer);
信道.addEventHub(eventHub);
channel.addorder(order);
channel.initialize();
字符串transactionId=“”;
Logger.getLogger(QueryChaincode.class.getName()).log(Level.INFO,“Query”);
收集响应query=channelClient.queryByChainCode(链码,“query”,args);
for(ProposalResponse压力:ResponseQuery){
transactionId=pres.getTransactionID();
String stringResponse=新字符串(pres.getChaincodeActionResponsePayload());
Logger.getLogger(QueryChaincode.class.getName()).log(Level.INFO,stringResponse);
System.out.println(“transactionID为:“+transactionID+”链码id为:“+pres.getChaincodeID()
+对等名称为:“+pres.getPeer().getName());
结果+=响应;
}
BlockInfo BlockInfo=channel.queryBlockByTransactionID(transactionId);
有人能帮我解决如何根据事务ID查询块吗

非常感谢。

BlockchainInfo BlockchainInfo=channel.queryBlockchainInfo();
BlockchainInfo blockchainInfo = channel.queryBlockchainInfo();
Long countBlock = blockchainInfo.getHeight();
blockInfoModel.setSize(countBlock.intValue());

for (int blockNumber = 0; blockNumber < countBlock; blockNumber++) {
    BlockInfo blockInfo = channel.queryBlockByNumber(blockNumber);

    blockInfoModel.getBlocks().add(new BlockInfoModel(
            String.valueOf(blockInfo.getBlockNumber()),
            blockInfo.getChannelId(),
            Hex.encodeHexString(blockInfo.getDataHash()),
            Hex.encodeHexString(blockInfo.getPreviousHash()),
            blockInfo.getTransactionCount(),
            queryDateTransactions(channel, blockInfo)
    ));

}
Long countBlock=blockchainInfo.getHeight(); blockInfoModel.setSize(countBlock.intValue()); 对于(int blockNumber=0;blockNumber