HLF:由于连接被拒绝而无法提交交易

时间:2020-05-11 18:48:14

标签: java hyperledger-fabric gateway

我正在使用命令./byfn.sh up -l java -a运行HLF 1.4.4的BYFN网络(因为我需要证书颁发机构)。

然后我按如下方式运行客户端网关实现:

public static void main(String[] args) throws IOException {
    Path walletDirectory = Paths.get("wallet");
    Wallet wallet = Wallet.createFileSystemWallet(walletDirectory);
    Path networkConfigFile = Paths.get("config","byfn","connection-org1.json");
    Gateway.Builder builder = Gateway.createBuilder()
            .identity(wallet, "myuser")
            .networkConfig(networkConfigFile);
    try (Gateway gateway = builder.connect()) {
        Network network = gateway.getNetwork("mychannel");
        Contract contract = network.getContract("mycc");
        byte[] createProductResult = contract.submitTransaction("init","ann","100","bob","200");
        System.out.println(new String(createProductResult, StandardCharsets.UTF_8));
    } catch (ContractException | TimeoutException | InterruptedException e) {
        e.printStackTrace();
    }
}

我收到以下异常:

log4j:WARN No appenders could be found for logger (org.hyperledger.fabric.sdk.helper.Config).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.hyperledger.fabric.gateway.GatewayRuntimeException: org.hyperledger.fabric.sdk.exception.ProposalException: org.hyperledger.fabric.sdk.exception.TransactionException: org.hyperledger.fabric.sdk.exception.ProposalException: getConfigBlock for channel mychannel failed with peer peer1.org1.example.com.  Status FAILURE, details: Channel Channel{id: 1, name: mychannel} Sending proposal with transaction: c80f175762349397d9d1abdd07c0d1e359e6ad2d76df205cae0953827fad6d76 to Peer{ id: 3, name: peer1.org1.example.com, channelName: mychannel, url: grpcs://localhost:8051, mspid: Org1MSP} failed because of: gRPC failure=Status{code=UNAVAILABLE, description=io exception, cause=io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/0:0:0:0:0:0:0:1:8051
Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:336)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:685)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Unknown Source)
}
    at org.hyperledger.fabric.gateway.impl.TransactionImpl.submit(TransactionImpl.java:121)
    at org.hyperledger.fabric.gateway.impl.ContractImpl.submitTransaction(ContractImpl.java:50)
    at com.isprint.axr.ext.hyperledger.isprint_fabric.isprint_chaincode.ChaincodeEventTester.main(ChaincodeEventTester.java:44)
Caused by: org.hyperledger.fabric.sdk.exception.ProposalException: org.hyperledger.fabric.sdk.exception.TransactionException: org.hyperledger.fabric.sdk.exception.ProposalException: getConfigBlock for channel mychannel failed with peer peer1.org1.example.com.  Status FAILURE, details: Channel Channel{id: 1, name: mychannel} Sending proposal with transaction: c80f175762349397d9d1abdd07c0d1e359e6ad2d76df205cae0953827fad6d76 to Peer{ id: 3, name: peer1.org1.example.com, channelName: mychannel, url: grpcs://localhost:8051, mspid: Org1MSP} failed because of: gRPC failure=Status{code=UNAVAILABLE, description=io exception, cause=io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/0:0:0:0:0:0:0:1:8051
Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:336)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:685)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Unknown Source)
}
    at org.hyperledger.fabric.sdk.Channel.sendProposalToPeers(Channel.java:4387)
    at org.hyperledger.fabric.sdk.Channel.sendProposal(Channel.java:4358)
    at org.hyperledger.fabric.sdk.Channel.sendTransactionProposal(Channel.java:3908)
    at org.hyperledger.fabric.gateway.impl.TransactionImpl.sendTransactionProposal(TransactionImpl.java:161)
    at org.hyperledger.fabric.gateway.impl.TransactionImpl.submit(TransactionImpl.java:94)
    ... 2 more
Caused by: org.hyperledger.fabric.sdk.exception.TransactionException: org.hyperledger.fabric.sdk.exception.ProposalException: getConfigBlock for channel mychannel failed with peer peer1.org1.example.com.  Status FAILURE, details: Channel Channel{id: 1, name: mychannel} Sending proposal with transaction: c80f175762349397d9d1abdd07c0d1e359e6ad2d76df205cae0953827fad6d76 to Peer{ id: 3, name: peer1.org1.example.com, channelName: mychannel, url: grpcs://localhost:8051, mspid: Org1MSP} failed because of: gRPC failure=Status{code=UNAVAILABLE, description=io exception, cause=io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/0:0:0:0:0:0:0:1:8051
Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:336)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:685)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Unknown Source)
}
    at org.hyperledger.fabric.sdk.Channel.parseConfigBlock(Channel.java:2023)
    at org.hyperledger.fabric.sdk.Channel.loadCACertificates(Channel.java:1843)
    at org.hyperledger.fabric.sdk.Channel.sendProposalToPeers(Channel.java:4385)
    ... 6 more
Caused by: org.hyperledger.fabric.sdk.exception.ProposalException: getConfigBlock for channel mychannel failed with peer peer1.org1.example.com.  Status FAILURE, details: Channel Channel{id: 1, name: mychannel} Sending proposal with transaction: c80f175762349397d9d1abdd07c0d1e359e6ad2d76df205cae0953827fad6d76 to Peer{ id: 3, name: peer1.org1.example.com, channelName: mychannel, url: grpcs://localhost:8051, mspid: Org1MSP} failed because of: gRPC failure=Status{code=UNAVAILABLE, description=io exception, cause=io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/0:0:0:0:0:0:0:1:8051
Caused by: java.net.ConnectException: Connection refused: no further information
    at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
    at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
    at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:336)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:685)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:632)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:549)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:511)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:918)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Unknown Source)
}
    at org.hyperledger.fabric.sdk.Channel.getConfigBlock(Channel.java:962)
    at org.hyperledger.fabric.sdk.Channel.getConfigBlock(Channel.java:917)
    at org.hyperledger.fabric.sdk.Channel.parseConfigBlock(Channel.java:2006)
    ... 8 more

我的连接配置文件connection-org1.json如下:

{
    "name": "first-network-org1",
    "version": "1.0.0",
    "client": {
        "organization": "Org1",
        "connection": {
            "timeout": {
                "peer": {
                    "endorser": "300"
                }
            }
        }
    },
    "organizations": {
        "Org1": {
            "mspid": "Org1MSP",
            "peers": [
                "peer0.org1.example.com",
                "peer1.org1.example.com"
            ],
            "certificateAuthorities": [
                "ca.org1.example.com"
            ]
        }
    },
    "peers": {
        "peer0.org1.example.com": {
            "url": "grpcs://localhost:7051",
            "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE-----\nMIICWDCCAf6gAwIBAgIRAKrxtnIt60WwVlxou+Yn+GcwCgYIKoZIzj0EAwIwdjEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs\nc2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNTExMTUxMzAwWhcNMzAwNTA5MTUx\nMzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE\nBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G\nA1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABFoZ234d5vigS+CHsYlYndhpLuXvz9t7/jQCVtp2iALALTzHUsx9Tgic\nubaJQwGCsBI3EgHTAm6007FI4ADRHIKjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV\nHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV\nHQ4EIgQgp12o6NQmdVZWfsKnT1juqLy4dFO1QjWrNZPOJp+ULvkwCgYIKoZIzj0E\nAwIDSAAwRQIhAOqB48Kdu1Zlmo1/dj5/3LOjRvMOyBVnwKKB4HrnhggWAiAF2GiG\nlmmpNH0zQlPMeGeOTy/0shPLNmg6wiYBllqxTA==\n-----END CERTIFICATE-----\n"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer0.org1.example.com",
                "hostnameOverride": "peer0.org1.example.com"
            }
        },
        "peer1.org1.example.com": {
            "url": "grpcs://localhost:8051",
            "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE-----\nMIICWDCCAf6gAwIBAgIRAKrxtnIt60WwVlxou+Yn+GcwCgYIKoZIzj0EAwIwdjEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHzAdBgNVBAMTFnRs\nc2NhLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNTExMTUxMzAwWhcNMzAwNTA5MTUx\nMzAwWjB2MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UE\nBxMNU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEfMB0G\nA1UEAxMWdGxzY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABFoZ234d5vigS+CHsYlYndhpLuXvz9t7/jQCVtp2iALALTzHUsx9Tgic\nubaJQwGCsBI3EgHTAm6007FI4ADRHIKjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNV\nHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNV\nHQ4EIgQgp12o6NQmdVZWfsKnT1juqLy4dFO1QjWrNZPOJp+ULvkwCgYIKoZIzj0E\nAwIDSAAwRQIhAOqB48Kdu1Zlmo1/dj5/3LOjRvMOyBVnwKKB4HrnhggWAiAF2GiG\nlmmpNH0zQlPMeGeOTy/0shPLNmg6wiYBllqxTA==\n-----END CERTIFICATE-----\n"
            },
            "grpcOptions": {
                "ssl-target-name-override": "peer1.org1.example.com",
                "hostnameOverride": "peer1.org1.example.com"
            }
        }
    },
    "certificateAuthorities": {
        "ca.org1.example.com": {
            "url": "https://localhost:7054",
            "caName": "ca-org1",
            "tlsCACerts": {
                "pem": "-----BEGIN CERTIFICATE-----\nMIICUTCCAfigAwIBAgIRAOttyY3NnByP4BUQfUbG1jwwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjAwNTExMTUxMzAwWhcNMzAwNTA5MTUxMzAw\nWjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UE\nAxMTY2Eub3JnMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IA\nBJijx0yyFg/SDgORwWl3nlBBo07uLAl9wxuYoTfWDd58St5okE49oHmvaQ7vNnLz\nae+zKDdcmnmolQILGf2Cx8yjbTBrMA4GA1UdDwEB/wQEAwIBpjAdBgNVHSUEFjAU\nBggrBgEFBQcDAgYIKwYBBQUHAwEwDwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg\nBDY7SapulIovgCeMzTPoEsgm+YcbmUcRkbZlwDDBVcAwCgYIKoZIzj0EAwIDRwAw\nRAIgH4yLakUh5QueNtAPuPlXCPbp7Msnu9FRmcnep2YnLZMCIF26TCeP1vPnVZod\nQJmisnJtxBYpYNFE3K+V+/NHkLpx\n-----END CERTIFICATE-----\n"
            },
            "httpOptions": {
                "verify": false
            }
        }
    }
}

用户身份是通过运行以下代码创建的:

public class EnrollAdmin {

    private static final String ADMIN_ID = "admin";
    private static final String USER_ID = "myuser";
    private static final String ORG_ID = "Org1MSP";
    private static final String DEP = "org1.department1";

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

    public static void main(String[] args) throws Exception {

        // Create a CA client for interacting with the CA.
        //Properties props = null;
        Properties props = new Properties();
        props.put("pemFile", "config/byfn/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem");
        props.put("allowAllHostNames", "true");
        HFCAClient caClient = HFCAClient.createNewInstance("https://localhost:7054", props);
        CryptoSuite cryptoSuite = CryptoSuiteFactory.getDefault().getCryptoSuite();
        caClient.setCryptoSuite(cryptoSuite);

        // Create a wallet for managing identities
        Wallet wallet = Wallet.createFileSystemWallet(Paths.get("wallet"));

        // Check to see if we've already enrolled the admin user.
        boolean adminExists = wallet.exists(ADMIN_ID);
        if (adminExists) {
            System.out.println("An identity for the admin user '" + ADMIN_ID + "' already exists in the wallet");
            return;
        }

        // Enroll the admin user, and import the new identity into the wallet.
        final EnrollmentRequest enrollmentRequestTLS = new EnrollmentRequest();
        enrollmentRequestTLS.addHost("localhost");
        enrollmentRequestTLS.setProfile("tls");
        Enrollment enrollAdmin = caClient.enroll(ADMIN_ID, "adminpw", enrollmentRequestTLS);
        Identity idenAdmin = Identity.createIdentity(ORG_ID, enrollAdmin.getCert(), enrollAdmin.getKey());
        wallet.put(ADMIN_ID, idenAdmin);
        System.out.println("Successfully enrolled user \"admin\" and imported it into the wallet");

        // Check to see if we've already enrolled the user.
        boolean userExists = wallet.exists(USER_ID);
        if (userExists) {
            System.out.println("An identity for the user '" + USER_ID + "' already exists in the wallet");
            return;
        }

        User admin = new User() {

            @Override
            public String getName() {
                return ADMIN_ID;
            }

            @Override
            public Set<String> getRoles() {
                return null;
            }

            @Override
            public String getAccount() {
                return null;
            }

            @Override
            public String getAffiliation() {
                return DEP;
            }

            @Override
            public Enrollment getEnrollment() {
                return new Enrollment() {

                    @Override
                    public PrivateKey getKey() {
                        return idenAdmin.getPrivateKey();
                    }

                    @Override
                    public String getCert() {
                        return idenAdmin.getCertificate();
                    }
                };
            }

            @Override
            public String getMspId() {
                return ORG_ID;
            }

        };

        // Register the user, enroll the user, and import the new identity into the wallet.
        RegistrationRequest registrationRequest = new RegistrationRequest(USER_ID);
        registrationRequest.setAffiliation(DEP);
        registrationRequest.setEnrollmentID(USER_ID);
        String enrollmentSecret = caClient.register(registrationRequest, admin);
        Enrollment enrollUser = caClient.enroll(USER_ID, enrollmentSecret);
        Identity idenUser = Identity.createIdentity(ORG_ID, enrollUser.getCert(), enrollUser.getKey());
        wallet.put(USER_ID, idenUser);
        System.out.println("Successfully enrolled user '" + USER_ID + "' and imported it into the wallet");
    }
}

https://hyperledger-fabric.readthedocs.io/en/release-1.4/build_network.html#create-join-channel中,我以为我可能错过了设置环境变量的方法,因此我也尝试在Eclipse运行配置中设置以下VM参数,但似乎没有什么区别:

-DCORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
-DCORE_PEER_ADDRESS=peer0.org1.example.com:7051
-DCORE_PEER_LOCALMSPID=Org1MSP
-DCORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

0 个答案:

没有答案