问题标签 [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.
hyperledger-fabric - 超级账本结构 CA 和 Softhsm
我使用 softHSM 配置了超级账本结构 CA 服务器。我在注册新用户时使用的是结构节点 sdk。但我不知道私钥在哪里(生成)。
我已经检查过:
- CA 服务器的 docker 容器的 msp/keystore 目录
- softHSM 令牌目录
请帮我。我会感谢你的帮助。
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
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
文件有问题还是网络有问题。
hyperledger-fabric - 如何在 Hyperledger Fabric 的 NODE-SDK 中设置权限?
在 ChainCode 开发中,网络中何时有多个组织,以防只有特定的组织才能调用链码的特定功能。
在超级账本 Fabric 的 Node-SDK 中是否有可能?如果可能,那么如何在开发中实施?
hyperledger-fabric - 为什么对等节点加入 Hyperledger 结构中的通道必须要有创世块?
对等节点加入通道,创世块的信息是必须的。
为什么对等点需要创世块?
我知道通道配置存储在创世区块中,但
最新的通道配置也可以在最近的区块中使用,那为什么只有创世区块?
创世区块是否提供任何额外信息?
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
网络订购者的政策看起来像这样(我不确定我在这里遇到的问题)
有关相关代码的更多信息:
如果您需要更多信息,请告诉我!任何想法都应该有帮助
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\ "}"}]]
更新:3:Node-SDK 文档指出 CSR 字段应该是 PEM 编码的 PKCS#10 证书签名请求。
- 我尝试利用 node-forge npm 模块生成密钥并使用它签署提案。但是,这会提供 RSA 密钥。
- 尝试使用 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 时生成的证书检查为该用户保存的证书。两者在结构和用于公钥的签名算法上完全相同。
我错过了任何关键部分吗?
hyperledger-fabric - 生产模式下的 Hyperledger Fabric SDK 连接配置文件配置
我正在阅读 Hyperledger Fabric Node SDK 教程以使用此处给出的通用连接配置文件。
在连接配置文件中,有一些敏感信息,例如adminPrivateKey和signedCert是为组织管理员保留的,包括创建/更新通道、安装/实例化链码。生产系统不应该以这种方式暴露这些敏感信息。
有没有其他安全的方法可以在生产环境中进行管理员操作?
hyperledger-fabric - 使用 NODE SDK 列出 Hyperledger Fabric 网络中的所有通道
如何获取 Hyperledger Fabric 网络中所有通道的列表?
如果不可能,我可以列出特定组织加入的所有频道吗?
我知道我可以使用Client类的queryChannels API来获取特定对等方已加入的频道列表,但我至少想知道特定组织中所有对等方的频道名称。