问题标签 [hyperledger-fabric-sdk-js]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
253 浏览

hyperledger-fabric - 超级账本结构 CA 和 Softhsm

我使用 softHSM 配置了超级账本结构 CA 服务器。我在注册新用户时使用的是结构节点 sdk。但我不知道私钥在哪里(生成)。

我已经检查过:

  • CA 服务器的 docker 容器的 msp/keystore 目录
  • softHSM 令牌目录

请帮我。我会感谢你的帮助。

0 投票
2 回答
3080 浏览

node.js - Hyperledger Fabric 1.4:尝试连接 ChannelEventHub.connect(true) 时出错。错误:将 ChannelEventhub 连接到对等点时出错

这是我之前提出的问题(此处)的后续问题,我正在尝试实施@david_k 建议的解决方案。

我使用 Fabcar 示例作为基础并在此基础上进行构建。

我运行了 startFabric.sh,我收到了“成功提交加入频道的提案”的消息

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel create -o orderer.example.com :7050 -c mychannel -f /etc/hyperledger/configtx/channel.tx

2019-03-11 08:54:51.857 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser 和 orderer 连接已初始化

2019-03-11 08:54:52.076 UTC [cli.common] readBlock -> INFO 002 收到的块:0

将 peer0.org1.example.com 加入频道。

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/msp/users/Admin@org1.example.com/msp" peer0.org1.example.com peer channel join -b mychannel.block

2019-03-11 08:54:52.387 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser 和 orderer 连接已初始化

2019-03-11 08:54:52.481 UTC [channelCmd] executeJoin -> INFO 002 成功提交加入频道的提案

然后我尝试使用 Fabric Node SDK(fabric-client)从“Channel”类初始化 channelEventHub,以订阅从我的链代码发出的事件。

我收到以下错误:

提交交易失败:错误:发现失败::错误:名称为“peer1.org1.example.com”的对等体未分配给此通道

之后我尝试使用 Channel Object 中的 getPeers() 函数,但得到了一个空数组,否则它应该返回一个在通道上注册的对等方数组。

我控制台记录了对等点,它返回 []。

我的连接配置文件 JSON 如下(它是基本网络中的一个,我没有更改它。)

{"name":"basic-network","version":"1.0.0", "client":{"organization":"Org1", "connection":{"timeout":{"peer":{"背书人":"300"},"orderer":"300"}}}, "channels": {"mychannel": { "orderers":["orderer.example.com"], "peers": { "peer0 .org1.example.com":{} } } },"organizations":{"Org1":{"mspid":"Org1MSP","peers":["peer0.org1.example.com"],"certificateAuthorities ":["ca.example.com"]},"Org2":{"mspid":"Org2MSP","peers":["peer0.org2.example.com"],"certificateAuthorities":["ca.example.com"]}},"orderers":{"orderer.example .com":{"url":"grpc://localhost:7050"}},"peers":{"peer0.org1.example.com":{"url":"grpc://localhost:7051" },"peer0.org2.example.com":{"url":"grpc://localhost:7052"}},"certificateAuthorities":{"ca.example.com":{"url":"com":{"url":"grpc://localhost:7051"},"peer0.org2.example.com":{"url":"grpc://localhost:7052"}},"certificateAuthorities": {"ca.example.com":{"url":"com":{"url":"grpc://localhost:7051"},"peer0.org2.example.com":{"url":"grpc://localhost:7052"}},"certificateAuthorities": {"ca.example.com":{"url":"http://localhost:7054 ","caName":"ca.example.com"}}}

在这里你可以清楚地看到对等体是在通道中定义的。

我不明白为什么会收到此错误。任何有关如何解决此问题的指示将不胜感激。

更新:

fabric_client.IKeyValueStore我创建了一个实现接口的 StateStore 类

实例化它。然后使用设置状态存储

之后我创建了一个用户并使用以下命令设置用户上下文

然后我设置了管理员签名权限(不确定是否需要)。然后将用户保存到 State Store。

等待fabric_client.setAdminSigningIdentity(admin_pk,admin_cert,admin_mspid);

等待 fabric_client.saveUserToStateStore();

然后我控制台记录了EventHub,清楚的显示有clientContext。

但是,当我尝试使用 连接时EventHub.connect(true),我收到以下错误。

无法提交事务:错误:将 ChannelEventhub 连接到对等点时出错,clientContext 尚未正确初始化,缺少 userContext 或管理员身份或缺少 signedEvent

0 投票
1 回答
3243 浏览

hyperledger-fabric - 从超级账本结构中的节点 sdk 初始化网络通道时出错

背景: 我已经修改了第一个网络文件(到一个有 2 个组织和每个对等点的网络)并在上面安装了我自己的链代码。此外,我制作了一个 connection.yaml 文件来与网络交互。

问题: 但是当我尝试从nodeSDK获取网络通道并建立网关时,我遇到了这个错误:

错误:[网络]:_initializeInternalChannel:无法初始化通道。尝试联系 2 位同行。最后一个错误是 Error: 2 UNKNOWN: Stream removed

无法评估事务:错误:无法初始化通道。尝试联系 2 位同行。最后一个错误是 Error: 2 UNKNOWN: Stream removed

您可以在下面找到我客户端的代码。执行时可能会出现错误gateway.getNetwork('mychannel')

这是我的 connection.yaml 文件:

我一直无法弄清楚是connection.yaml文件有问题还是网络有问题。

0 投票
0 回答
97 浏览

hyperledger-fabric - Hyperledger Fabric 1.4:使用 Internet 连接实例化链码(节点)时出错

手头的问题是我们想在未连接到互联网的服务器上部署区块链网络。

在 Peer 上实例化链码时失败,因为它需要下载用于链码的 fabric-shim 包。它的日志可以在下面找到。

是否有任何解决方法,或者我们可以捆绑 npm 包并在实例化链代码时指向结构以将该包用作 npm 模块的目录?

错误日志

0 投票
2 回答
290 浏览

hyperledger-fabric - 如何在 Hyperledger Fabric 的 NODE-SDK 中设置权限?

在 ChainCode 开发中,网络中何时有多个组织,以防只有特定的组织才能调用链码的特定功能。

在超级账本 Fabric 的 Node-SDK 中是否有可能?如果可能,那么如何在开发中实施?

0 投票
1 回答
395 浏览

hyperledger-fabric - 为什么对等节点加入 Hyperledger 结构中的通道必须要有创世块?

对等节点加入通道,创世块的信息是必须的。

为什么对等点需要创世块?

我知道通道配置存储在创世区块中,但
最新的通道配置也可以在最近的区块中使用,那为什么只有创世区块?

创世区块是否提供任何额外信息?

0 投票
1 回答
335 浏览

hyperledger-fabric - 如何使用 node SDK 向 Orderer 发送更新通道配置请求?

更新通道配置的过程有 03 个主要阶段:

  • (1) 从 Orderer 获取最新的配置。
  • (2) 修改配置。
  • (3) 签署并发送交易给 Orderer 以更新通道配置。

我在尝试调用updateChannel()函数时在步骤 (3) 遇到错误:

{状态:'BAD_REQUEST',

信息:'错误授权更新:错误验证 DeltaSet:不满足 [Value] /Channel/Orderer/BatchSize 的策略:未能达到 1 个子策略的隐式阈值,需要剩余 1 个'}

我按照hyperledger-sdk-node repo 中关于 Channel update的代码here

网络订购者的政策看起来像这样(我不确定我在这里遇到的问题)

有关相关代码的更多信息:

如果您需要更多信息,请告诉我!任何想法都应该有帮助

0 投票
2 回答
1224 浏览

hyperledger-fabric - 在 Hyperledger Fabric 中为用户身份设置 PEM 属性

我有一个使用一个 Fabric CA 运行的单组织设置。CA 服务器与 MySQL 一起运行。我正在使用 NodeSDK 连接和发布交易到链码。

我可以为同行和订购者设置国家、州、地区、组织和组织单位属性。但是,当我向 Fabric 注册和注册“用户”时,并非所有属性都已设置。从证书文件中可以看出,仅设置了通用名称和组织单位属性。

以下是我用于注册和注册用户的代码段:

在这里,“用户”是我在我的应用程序中使用的参与者的模型。Common Name (CN) 设置为“enrollmentID”,Organization Unit 设置为“role”+“affiliation”,生成的用户证书包含以下信息:

正如我们所见,Issuer 的完整 C、ST、L、O、OU 和 CN 属性是可用的。这属于各自组织的 MSP。但是,只有用户的 CN 和 OU 可用。

那么有没有一种方法可以在注册或注册用户时设置用户的其他属性(C、ST、L 和 O)。还是我们必须从发行者信息中推断出这些属性?

更新:1:我检查了 node-sdk 内部调用的 fabric-ca-client cli 选项。检查了注册API。它也没有提供设置 C、ST、L 和 O 的选项。

更新:fabric-ca 是否支持将这些属性设置为主题名称?

更新:2:通过fabric-ca-client 的文档并按照@nyet 的建议,我观察到我们可以在csr.names 属性中设置这些值并将其提供给enroll 命令的'csr' 参数。下面更新的代码片段:

adminIdentity = gateway.getCurrentIdentity();

但是,我收到一个错误,上面写着:

未能注册 smithdoe20,错误:%o 消息=注册失败,错误 [[{"code":0,"message":"{\"code\":9002,\" message\":\"CSR 解码失败\ "}"}]], stack=Error: Enrollment failed with errors [[{"code":0,"message":"{\"code\":9002,\"message\":\"CSR Decode failed\ "}"}]]

类似的 JIRA 问题:https ://jira.hyperledger.org/browse/FAB-14051?jql=project%20%3D%20FAB%20AND%20statusCategory%20!%3D%20Done%20AND%20type%20%3D%20Bug %20AND%20component%20%3D%20fabric-sdk-node%20AND%20project%20%3D%20FAB%20ORDER%20BY%20createdDate%20ASC

更新:3:Node-SDK 文档指出 CSR 字段应该是 PEM 编码的 PKCS#10 证书签名请求。

  1. 我尝试利用 node-forge npm 模块生成密钥并使用它签署提案。但是,这会提供 RSA 密钥。
  2. 尝试使用 node-pem。也没有成功。

最后,尝试生成 ECDSA 密钥并使用以下命令离线创建 CSR: 1. 密钥生成:openssl ecparam -name prime256v1 -genkey -noout -out my-key.pem 2. CSR:openssl req -new -sha256 -key my-key.pem -out my.csr

从文件系统中读取此 CSR 并将其传递给 Enrollment Request,如下所示:

能够成功注册用户。

现在,当我们传递 CSR 时,fabric-ca 不会返回我们的注册密钥。因此,我从文件系统的#1 命令中检索了私钥,并尝试将这个用户的身份详细信息保存在 X509 钱包中,如下所示:

但是,这会引发以下错误:

错误:[crypto_ecdsa_aes]:importKey - {“消息”:“不理解除 ECDSA 私钥和证书之外的 PEM 内容”,“堆栈”:“错误:不理解除 ECDSA 私钥和证书之外的 PEM 内容... .

接下来,我尝试使用 fabric-ca 在我们不提供 CSR 时生成的证书检查为该用户保存的证书。两者在结构和用于公钥的签名算法上完全相同。

我错过了任何关键部分吗?

0 投票
0 回答
184 浏览

hyperledger-fabric - 生产模式下的 Hyperledger Fabric SDK 连接配置文件配置

我正在阅读 Hyperledger Fabric Node SDK 教程以使用此处给出的通用连接配置文件。
在连接配置文件中,有一些敏感信息,例如adminPrivateKeysignedCert是为组织管理员保留的,包括创建/更新通道、安装/实例化链码。生产系统不应该以这种方式暴露这些敏感信息。
有没有其他安全的方法可以在生产环境中进行管理员操作?

0 投票
1 回答
1014 浏览

hyperledger-fabric - 使用 NODE SDK 列出 Hyperledger Fabric 网络中的所有通道

如何获取 Hyperledger Fabric 网络中所有通道的列表?
如果不可能,我可以列出特定组织加入的所有频道吗?

我知道我可以使用Client类的queryChannels API来获取特定对等方已加入的频道列表,但我至少想知道特定组织中所有对等方的频道名称。