裕华# 2024-02-29 17:08 采纳率: 0%
浏览 17
已结题

关于#hyperledger#的问题,如何解决?

我使用centos7安装hyperledger-fabric2.5.6,安装官网上的安装的是链码是chaincode-java,使用

<dependency>
            <groupId>org.hyperledger.fabric</groupId>
            <artifactId>fabric-gateway</artifactId>
            <version>1.4.0</version>
        </dependency>

来调用hyperledger
我的代码是:

 Reader certReader = Files.newBufferedReader(Paths.get("src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/cert.pem"));
        X509Certificate  certificate = Identities.readX509Certificate(certReader);
        Identity identity = new X509Identity("Org1MSP", certificate);
        Reader keyReader = Files.newBufferedReader(Paths.get("src\\main\\resources\\crypto-config\\peerOrganizations\\org1.example.com\\users\\User1@org1.example.com\\msp\\keystore\\0cc19466192b35304c4f5f44de099d0649afd88b83e0c75c51434373af53b3a0_sk"));
        PrivateKey privateKey = Identities.readPrivateKey(keyReader);
        Signer signer = Signers.newPrivateKeySigner(privateKey);
        ManagedChannel grpcChannel = Grpc.newChannelBuilder("192.168.10.128:7051", TlsChannelCredentials.newBuilder()
                        .trustManager(TLS_CERT_PATH.toFile()).build())
                        .overrideAuthority(OVERRIDE_AUTH)
                .build();
        Gateway.Builder builder = Gateway.newInstance()
                .identity(identity)
                .signer(signer)
                .connection(grpcChannel);
        try (Gateway gateway = builder.connect()) {
            Network network = gateway.getNetwork("mychannel");
            Contract contract = network.getContract("basic");
                byte[] putResult = contract.submitTransaction("put","time", LocalDateTime.now().toString());
            System.out.println(new String(putResult, StandardCharsets.UTF_8));
            byte[] getResult = contract.evaluateTransaction("get");
            System.out.println(new String(getResult, StandardCharsets.UTF_8));
        } finally {
            grpcChannel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS);
        }

运行后contract.submitTransaction("put","time", LocalDateTime.now().toString());报错内容如下:

org.hyperledger.fabric.client.EndorseException: io.grpc.StatusRuntimeException: ABORTED: failed to endorse transaction, see attached details for more info

    at org.hyperledger.fabric.client.GatewayClient.endorse(GatewayClient.java:73)
    at org.hyperledger.fabric.client.ProposalImpl.endorse(ProposalImpl.java:74)
    at org.hyperledger.fabric.client.Proposal.endorse(Proposal.java:65)
    at org.hyperledger.fabric.client.ContractImpl.submitTransaction(ContractImpl.java:47)
    at com.donation.system.Test21.test1(Test21.java:45)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: io.grpc.StatusRuntimeException: ABORTED: failed to endorse transaction, see attached details for more info
    at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:268)
    at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:249)
    at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:167)
    at org.hyperledger.fabric.protos.gateway.GatewayGrpc$GatewayBlockingStub.endorse(GatewayGrpc.java:455)
    at org.hyperledger.fabric.client.GatewayClient.endorse(GatewayClient.java:71)
    ... 7 more
Error details:
    address: peer0.org1.example.com:7051; mspId: Org1MSP; message: error validating proposal: access denied: channel [mychannel] creator org unknown, creator is malformed


请问这个应该怎么解决?

  • 写回答

13条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-02-29 17:09
    关注

    引自免费微信小程序:皆我百晓生

    在Hyperledger Fabric中,当你遇到EndorseException: io.grpc.StatusRuntimeException: ABORTED: failed to endorse transaction错误时,通常意味着背书节点(endorser)在对交易提案进行验证和背书的过程中出现了问题。从您提供的错误信息可以得出以下结论:

    Error details:
        address: peer0.org1.example.com:7051; mspId: Org1MSP; message: error validating proposal: access denied: channel [mychannel] creator org unknown, creator is malformed
    

    这个问题指出,当尝试在peer0.org1.example.com上背书交易时,由于身份验证失败而导致访问被拒绝。具体来说,Fabric无法识别提议者的组织,或者提议者证书与给定的MSP(成员服务提供者)不匹配。

    解决步骤:

    1. 检查链码部署和通道配置

      • 确保你已将链码正确安装、实例化到通道mychannel上的Org1MSP所属的背书节点上。
      • 检查通道配置文件以确保Org1MSP是该通道的参与者,并且拥有足够的权限来执行交易。
    2. 确认用户身份材料正确性

      • 检查证书路径是否正确无误,尤其是您正在使用的用户证书(cert.pem)和私钥(0cc19466192b35304c4f5f44de099d0649afd88b83e0c75c51434373af53b3a0_sk)是否对应于Org1MSP中的用户User1@org1.example.com
      • 确认用户User1已被添加到通道mychannel并具有执行操作的足够权限。
    3. 更新依赖版本

      • 注意到你的代码使用的是fabric-gateway 1.4.0版本,而Fabric版本是2.5.6。虽然这不一定导致上述错误,但为了兼容性和最佳实践,建议升级fabric-gateway至与Fabric核心版本相匹配或兼容的版本。
    4. 重新生成身份材料

      • 如果经过上述检查后仍存在问题,可能需要重新生成正确的身份材料,并确保它们被正确地分发到相应的目录结构中。

    以下是调整后的部分代码示例,注意保持环境变量和文件路径的一致性:

    // 确保读取证书和私钥的路径正确无误
    Path certPath = Paths.get("src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/signcerts/cert.pem");
    Path keyPath = Paths.get("src/main/resources/crypto-config/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/keystore/0cc19466192b35304c4f5f44de099d0649afd88b83e0c75c51434373af53b3a0_sk");
    
    try (Reader certReader = Files.newBufferedReader(certPath);
         Reader keyReader = Files.newBufferedReader(keyPath)) {
    
        // 读取证书和私钥
        X509Certificate certificate = Identities.readX509Certificate(certReader);
        PrivateKey privateKey = Identities.readPrivateKey(keyReader);
    
        // 创建Identity和Signer对象
        Identity identity = new X509Identity("Org1MSP", certificate);
        Signer signer = Signers.newPrivateKeySigner(privateKey);
    
        // ...其余代码不变...
    
    } catch (IOException e) {
        System.err.println("Failed to read the certificate or private key.");
        e.printStackTrace();
    }
    

    最后,请确保客户端应用程序能够成功连接到网络,并且与通道及链码相关的所有配置都是最新的并且一致。如果问题依然存在,可能需要查看排序节点和Peer节点的日志以获取更详细的错误信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月1日
  • 创建了问题 2月29日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表