hyperledger Fabric sdk 尝试在已有通道的情况下创建通道

问题描述 投票:0回答:1

我的问题是,我的超级账本 Java 应用程序在已经创建通道的情况下尝试创建通道,但我不知道为什么。我不知道该怎么做,但希望有人能提供帮助

    private static final String CHANNEL_NAME = System.getenv().getOrDefault("CHANNEL_NAME", "assecodschannel");
    private static final String CHAINCODE_NAME = System.getenv().getOrDefault("CHAINCODE_NAME", "ccv1");

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

    // helper function for getting connected to the gateway
    public static Gateway connect() throws Exception {

        // Load a file system based wallet for managing identities.
        Path walletPath = Paths.get("wallet");
        Wallet wallet = Wallets.newFileSystemWallet(walletPath);
        System.out.println("TLS Cert Content: " + new String(Files.readAllBytes(Paths.get("tls-cert.pem"))));
        System.out.println("CA Cert Content: " + new String(Files.readAllBytes(Paths.get("ca.crt"))));

        Path networkConfigPath = Paths.get("template","connections.yml");

        Gateway.Builder builder = Gateway.createBuilder();
        builder.identity(wallet, "User").networkConfig(networkConfigPath).discovery(true);
        return builder.connect();
    }

public byte[] getAllAssets() throws ContractException {
    System.out.println("Before connecting to the network");
    try (Gateway gateway = connect()) {
        System.out.println("After connecting to the network");
//        System.out.println(gateway.getNetwork("assecodschannel").getChannel().joinPeer());
        gateway.getNetwork("assecodschannel").getChannel();
        System.out.println("jj");
        Network network = gateway.getNetwork("assecodschannel");
                System.out.println("huj");
        Contract contract = network.getContract("chaincode");
        return contract.evaluateTransaction("GetAllAssets");
    }
    catch(Exception e){
        System.err.println(e);
        System.exit(1);
        return null;
    }

}

还有我的网络配置,connections.yml:

name: "AssecoDS-network"
version: "1.0"
x-type: "hlfv1"

client:
  organization: AssecoDS
  connection:
    timeout:
      peer:
        endorser: '300'
      orderer: '300'
channels:
  assecodschannel:
    orderers:
      - orderer1.assecods.pl
    peers:
      peer1.assecods.pl:
        endorsingPeer: true
        chaincodeQuery: true
        ledgerQuery: true
        eventSource: true
        discover: true

organizations:
  AssecoDS:
    mspid: AssecoDSMSP
    peers:
      - peer1.assecods.pl
    certificateAuthorities:
      - ca.assecods.pl

orderers:
  orderer1.assecods.pl:
    url: 100.64.192.62:7050
    grpcOptions:
      ssl-target-name-override: orderer1.assecods.pl
      grpc-max-send-message-length: -1
    tlsCACerts:
      path: ca.crt

peers:
  peer1.assecods.pl:
    url: 100.64.192.62:7051
    eventUrl: 100.64.192.62:7053
    grpcOptions:
      ssl-target-name-override: peer1.assecods.pl
      grpc.keepalive_time_ms: 120001
    tlsCACerts:
      path: /home/hubert/Desktop/hyperledger-fabric-generic-network-master/application-java/tls-cert.pem

certificateAuthorities:
  ca.assecods.pl:
    url: https://localhost:7054
    httpOptions:
      verify: false
    registrar:
      - enrollId: admin
        enrollSecret: adminpw
    caName: ca.assecods.pl

和连接.yaml:

---
name: AssecoDS-network
version: 1.0.0
client:
  organization: AssecoDS
  connection:
    timeout:
      peer:
        endorser: '300'
      orderer: '300'
channels:
  assecodschannel:
    orderers:
    - orderer1.assecods.pl
    peers:
     peer1.assecods.pl: {}
organizations:
  AssecoDS:
    mspid: AssecoDSMSP
    peers:
    - peer1.assecods.pl
    certificateAuthorities:
    - ca.assecods.pl
orderers:
  orderer1.assecods.pl:
    url: 127.0.0.1:7050
peers:
  peer1.assecods.pl:
    url: 127.0.0.1:7051
    tlsCACerts:
      pem: /home/hubert/Desktop/hyperledger-fabric-generic-network-master/application-java/tls-cert.pem
certificateAuthorities:
  ca.assecods.pl:
    url: 127.0.0.1:7054
    caName: ca.assecods.pl
    httpOptions:
      verify: false
    tlsCACerts:
      pem: /home/hubert/Desktop/hyperledger-fabric-generic-network-master/application-java/tls-cert.pem
    registrar:
    - enrollId: admin
      enrollSecret: adminpw


Screenshot of an error

我尝试过更改网络配置,从网络配置中删除通道部分,手动将对等点添加到没有网络配置的通道,以及许多较小的更改。我得到的唯一结果是频道没有配置或频道没有对等点

java blockchain hyperledger-fabric hyperledger
1个回答
0
投票

我认为这里发生的事情是,当您的网关客户端获取有关网络拓扑的服务发现信息时,它正在寻找

assecodschannel
的定义。当它尝试将其添加到您的连接配置文件提供的网络信息时,它会发现重复项,因为您的连接配置文件已经包含
assecodschannel
的定义。

使用服务发现时,您的连接配置文件只需包含足够的信息,以便客户端能够连接到网络对等点。不需要通道定义。作为示例,请参阅 Fabric-gateway-java API 的服务发现测试所使用的连接配置文件:

https://github.com/hyperledger/fabric-gateway-java/blob/b4b5bb6335b5369be329d0b92e4699bd60c6c148/src/test/java/org/hyperledger/fabric/gateway/connection-discovery.json

还有用于为 Fabric 样本使用的测试网络生成连接配置文件的模板:

https://github.com/hyperledger/fabric-samples/blob/02d9f8c58b8416019682120dc179fa8146ae7dad/test-network/organizations/ccp-template.json

请注意,两者都不包含通道定义。

另请注意,从 Fabric v2.5 开始,旧版 Java SDK 已被弃用。如果您正在使用(或可以使用)Fabric v2.4 或更高版本,则应使用较新的 Fabric Gateway 客户端 API。这简化了客户端连接体验,并且根本不需要连接配置文件。

© www.soinside.com 2019 - 2024. All rights reserved.