【问题标题】:Executing fabcar without fabric-ca在没有fabric-ca的情况下执行fabcar
【发布时间】:2017-11-15 10:23:10
【问题描述】:

我构建了一个启用了多个 orgs 和 tls 的 Fabric 网络。加密材料是用 cryptogen 构建的。我不打算在我的示例中使用 fabric-ca。

我通过 CLI 安装并实例化了 fabcar。使用 CLI 命令调用和查询非常有用。

现在,为了使用 nodejs 脚本 query.js 和 invoke.js,我连接了一个私钥和公钥,以便为 Fabcar 创建 PeerAdmin 凭据。我还更改了 .js 文件中的配置,以针对具有 grpcs 的 peers 和 orderers。

每当我执行任何 .js 脚本时,我都会不断收到以下错误:

Create a client and set the wallet location
Set wallet path, and associate user  PeerAdmin  with application
Check user is enrolled, and set a query URL in the network
Caught Error Error: PEM encoded certificate is required.
    at new Endpoint (/home/hl/fabcar/node_modules/fabric-client/lib/Remote.js:146:11)
    at new Remote (/home/hl/fabcar/node_modules/fabric-client/lib/Remote.js:95:20)
    at new Peer (/home/hl/fabcar/node_modules/fabric-client/lib/Peer.js:53:3)
    at Client.newPeer (/home/hl/fabcar/node_modules/fabric-client/lib/Client.js:173:14)
    at Promise.resolve.then.then.then (/home/hl/fabcar/query.js:39:28)
    at <anonymous>

当我尝试在没有 grpcs 的情况下查询链码时,我收到以下错误:

Create a client and set the wallet location
Set wallet path, and associate user  PeerAdmin  with application
Check user is enrolled, and set a query URL in the network
Make query
Assigning transaction_id:  9cbf355cda03db2b1971fe10af27d66686ea9b913eda80f667cac48bada015bf
error: [client-utils.js]: sendPeersProposal - Promise is rejected: Error: Endpoint read failed
    at /home/hl/fabcar/node_modules/grpc/src/client.js:554:15
returned from query
Query result count =  1
error from query =  { Error: Endpoint read failed
    at /home/hl/fabcar/node_modules/grpc/src/client.js:554:15 code: 14, metadata: Metadata { _internal_repr: {} } }
Response is  Error: Endpoint read failed

PeerAdmin 内容:

{"name":"PeerAdmin","mspid":"PeerOrgMSP","roles":null,"affiliation":"","enrollmentSecret":"","enrollment":{"signingIdentity":"[...]","identity":{"certificate":"-----BEGIN CERTIFICATE-----\n[...]-----END CERTIFICATE-----\n"}}}

任何帮助我指出正确的程序或解决上述问题将不胜感激。

【问题讨论】:

    标签: hyperledger-fabric hyperledger


    【解决方案1】:

    我了解您将在没有 Fabric CA 的情况下制作 fabcar。 如果是这样,您将无法使用 Node.js 应用程序,因为它正在使用用户上下文并且您没有注册用户上下文。

    但是你想使用没有CA的fabcar,你可以用cli调用或查询事务。

    1. 连接到 cli 容器,如果你使用 fabcar,cli-container-name 是 'cli' 所以

    docker exec -it cli bash

    1. 在 cli 容器中,您可以调用或查询事务。如下例所示

    对等链码查询 -C mychannel -n fabcar -c '{"Args":["queryAllCars",""]}'

    对等链码查询 -C mychannel -n fabcar -c '{"Args":["queryCar","CAR4"]}'

    调用事务相同

    【讨论】:

      【解决方案2】:

      当您启用 gRPC 时,您必须将 pem 作为参数传递给各种 Hyperledger 元素对象(例如 peer、orderer)的实例化。以 fabcar 为例 (invoke.js):

      // This is a new line
      var options = {                                                                 
          tls_cert: {                                                                 
              pem: fs.readFileSync(path.join(__dirname, './network/tls') + '/peer.cert').toString(),
          }                                                                           
      };                                                                              
      
      ...
      
      // Replace the original instantiation by adding the pem option
      var peer = fabric_client.newPeer('grpcs://fft-zbc03a.4.secure.blockchain.ibm.com:26268', {
          pem: options.tls_cert.pem                                                   
      });                                                                             
      channel.addPeer(peer);                                                          
      // Replace the original instantiation by adding the pem option
      var order = fabric_client.newOrderer('grpcs://fft-zbc03b.4.secure.blockchain.ibm.com:20161', {
          pem: options.tls_cert.pem                                                   
      })                                                                              
      ...
      // Replace the original instantiation by adding the pem option
      event_hub.setPeerAddr('grpcs://fft-zbc03a.4.secure.blockchain.ibm.com:23972', {
          pem: options.tls_cert.pem                                                   
      });                                                                             
      

      上面的代码假定您将正确的证书下载到network/tls/。可以通过向 CA 发送请求来下载这些证书。有关完整示例,请参阅 Bluemix 文档here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 2020-03-04
        • 2013-03-17
        • 1970-01-01
        • 1970-01-01
        • 2020-05-30
        • 2012-04-22
        相关资源
        最近更新 更多