Hyperledger fabric 向Hyperledger Fabric的本地实例提交事务的问题,Hyperledger Fabric在IBM区块链平台扩展VSCode中预先配置

Hyperledger fabric 向Hyperledger Fabric的本地实例提交事务的问题,Hyperledger Fabric在IBM区块链平台扩展VSCode中预先配置,hyperledger-fabric,hyperledger,ibm-blockchain,Hyperledger Fabric,Hyperledger,Ibm Blockchain,我正在使用Hyperledger Fabric Gateway SDK for Java连接本地HLF网络,默认情况下,该网络可与IBM区块链平台扩展VSCode一起使用。我已经部署了Create-BlockchainNetwork-IBPV20示例()中的智能合约。它与Node.js客户端配合良好,能够提交和查询数据 当我用Java做同样的事情时,问题就来了。我能够连接甚至查询数据,但在尝试提交事务时,我收到以下错误: Exception in thread "main" org.hyperl

我正在使用Hyperledger Fabric Gateway SDK for Java连接本地HLF网络,默认情况下,该网络可与IBM区块链平台扩展VSCode一起使用。我已经部署了Create-BlockchainNetwork-IBPV20示例()中的智能合约。它与Node.js客户端配合良好,能够提交和查询数据

当我用Java做同样的事情时,问题就来了。我能够连接甚至查询数据,但在尝试提交事务时,我收到以下错误:

Exception in thread "main" org.hyperledger.fabric.gateway.ContractException: Failed to send transaction to the orderer
at org.hyperledger.fabric.gateway.impl.TransactionImpl.commitTransaction(TransactionImpl.java:145)
at org.hyperledger.fabric.gateway.impl.TransactionImpl.submit(TransactionImpl.java:96)
at org.hyperledger.fabric.gateway.impl.ContractImpl.submitTransaction(ContractImpl.java:50)
at com.dai.mastexport.mavenproject1.NewClass.main(NewClass.java:80)
Caused by: java.util.concurrent.ExecutionException: java.lang.Exception: Channel mychannel failed to place transaction 8eb41fb6477ee8162bfcedf28be255bb508043c1811794c761e42a359b31c682 on Orderer. Cause: UNSUCCESSFUL. 
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1915)
at org.hyperledger.fabric.gateway.impl.TransactionImpl.commitTransaction(TransactionImpl.java:139)
... 3 more
Caused by: java.lang.Exception: Channel mychannel failed to place transaction 8eb41fb6477ee8162bfcedf28be255bb508043c1811794c761e42a359b31c682 on Orderer. Cause: UNSUCCESSFUL. 
at org.hyperledger.fabric.sdk.Channel.doSendTransaction(Channel.java:5722)
at org.hyperledger.fabric.sdk.Channel.sendTransaction(Channel.java:5533)
at org.hyperledger.fabric.gateway.impl.TransactionImpl.commitTransaction(TransactionImpl.java:138)
... 3 more
Caused by: java.lang.Exception: Channel mychannel unsuccessful sendTransaction to orderer localhost:17076 (grpc://localhost:17076)
at org.hyperledger.fabric.sdk.Channel.doSendTransaction(Channel.java:5704)
... 5 more
Caused by: org.hyperledger.fabric.sdk.exception.TransactionException: Channel mychannel, send transactions failed on orderer OrdererClient{id: 6, channel: mychannel, name: localhost:17076, url: grpc://localhost:17076}. Reason:  timeout after 10000 ms.
at org.hyperledger.fabric.sdk.OrdererClient.sendTransaction(OrdererClient.java:223)
at org.hyperledger.fabric.sdk.Orderer.sendTransaction(Orderer.java:164)
at org.hyperledger.fabric.sdk.Channel.doSendTransaction(Channel.java:5686)
... 5 more
如果我在云端连接到IBM区块链,同样的Java代码也能很好地工作。以下是我的代码供参考:

public class NewClass {

static {
    System.setProperty("org.hyperledger.fabric.sdk.service_discovery.as_localhost", "true");
}

public static void main(String[] args) throws Exception {
    String userName = "admin";
    String pass = "adminpw";
    String msp = "Org1MSP";
    String orgName = "Org1MSP";
    String channelName = "mychannel";
    String connFile = "connection_test.json";


    java.nio.file.Path walletDirectory = java.nio.file.Paths.get("../wallets");
    Wallet wallet = Wallets.newFileSystemWallet(walletDirectory);
    java.nio.file.Path netConfPath = java.nio.file.Paths.get("../conf", connFile);

    // Create a CA client for interacting with the CA.
    NetworkConfig netConf = NetworkConfig.fromJsonFile(netConfPath.toFile());
    HFCAClient caClient = HFCAClient.createNewInstance(netConf.getOrganizationInfo(orgName).getCertificateAuthorities().get(0));
    CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite();
    caClient.setCryptoSuite(cryptoSuite);

    // Check to see if we've already enrolled the admin user.
    Identity user = wallet.get(userName);
    if (user == null) {
        // Enroll the admin user, and import the new identity into the wallet.
        Enrollment enrollment = caClient.enroll(userName, pass);
        user = Identities.newX509Identity(msp, enrollment);
        wallet.put(userName, user);
    }

    Gateway.Builder builder = Gateway.createBuilder();
    builder.identity(wallet, userName).networkConfig(netConfPath).discovery(true);

    // create a gateway connection
    try (Gateway gateway = builder.connect()) {
        Network net = gateway.getNetwork(channelName);
        Contract contract = net.getContract("blockchain-network");
        byte[] result = contract.submitTransaction("AddTrader", "traderA", "Mike", "Smith");
        System.out.println(new String(result));
    }
}
}
我尝试过不同版本的SDK,但运气不佳。到目前为止,我注意到,与来自云的连接配置文件相比,我的本地网络连接配置文件没有pem信息。以下是本地配置文件:

{
"certificateAuthorities": {
    "Org1CA": {
        "caName": "ca",
        "url": "http://localhost:17050"
    }
},
"client": {
    "connection": {
        "timeout": {
            "orderer": "3000",
            "peer": {
                "endorser": "3000"
            }
        }
    },
    "organization": "Org1MSP"
},
"name": "Org1",
"organizations": {
    "Org1MSP": {
        "certificateAuthorities": [
            "Org1CA"
        ],
        "mspid": "Org1MSP",
        "peers": [
            "Org1Peer1"
        ]
    }
},
"peers": {
    "Org1Peer1": {
        "url": "grpc://localhost:17051"
    }
},
"version": "1.0.0"
}

当尝试连接到由IBM区块链扩展创建的结构时,预计不会有任何pem信息。您提供的日志表明,向订购方提交事务时出现了一些问题。我假设您已经尝试拆除本地结构并重新启动它?是的,我尝试拆除并重新启动,并从模板创建新环境。每次都是同样的错误。在调试中,我可以看到从对等方收到响应,但下一步发送到订购方失败。正如我之前提到的,使用具有相同连接配置文件的Node.js客户端运行时不会出现任何问题。因此,这可能是java sdk的一个问题。那么,您可能想向jira提出一个问题,也许您可以尝试在上向vscode扩展团队提出一个问题,尽管他们可能会回来说这是sdk的一个问题,但也许他们可以看看他们是否遇到了同样的问题?你解决了这个问题吗?我有一个类似的问题,因为我在做某种PoC,我迫不及待地要解决这个问题。因此,我简单地切换到Node SDK,并能够实现我的应用程序的所有功能。当尝试连接到由IBM区块链扩展创建的结构时,不需要任何pem信息。您提供的日志表明,向订购方提交事务时出现了一些问题。我假设您已经尝试拆除本地结构并重新启动它?是的,我尝试拆除并重新启动,并从模板创建新环境。每次都是同样的错误。在调试中,我可以看到从对等方收到响应,但下一步发送到订购方失败。正如我之前提到的,使用具有相同连接配置文件的Node.js客户端运行时不会出现任何问题。因此,这可能是java sdk的一个问题。那么,您可能想向jira提出一个问题,也许您可以尝试在上向vscode扩展团队提出一个问题,尽管他们可能会回来说这是sdk的一个问题,但也许他们可以看看他们是否遇到了同样的问题?你解决了这个问题吗?我有一个类似的问题,因为我在做某种PoC,我迫不及待地要解决这个问题。因此,我只需切换到NodeSDK,就可以实现我的应用程序的所有功能。