Hyperledger Fabric 中的共享基础设施

Shared infrastructure in Hyperledger Fabric

我正在检查一个用例是否可以共享对等点、调用链代码函数以及与不同的 MSP 执行交易。这是一个用例,其中一些组织需要共享环境,这些组织不愿意在基础设施上花钱,但可能希望网络运营商使用区块链网络 运行。

例如,具有 MSP org1 的网络运营商创建了一个 Hyperledger Fabric 网络。 org4 想加入网络但没有任何同行。 CA 容器将用于此 org4org4 身份是否可以调用 org1 对等点上的交易? 我实际上试过了。检查下面其余客户端的日志:

[Service Discovery Turned On]
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - start - org4
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer0.org1.com:7051 - org1
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer1.org1.com:7051 - org1
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer1.networkoperator.com:7051 - networkoperator
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer0.networkoperator.com:7051 - networkoperator
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer0.org2.com:7051 - org2
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer1.org2.com:7051 - org2
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer0.org3.com:7051 - org3
2021-04-02T04:19:27.643Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer1.org3.com:7051 - org3
2021-04-02T04:19:27.643Z - debug: [RoundRobinQueryHandler]: constructor: peers=[]

以上日志显示 rest-client 尝试将 MSP id 与对等方匹配

没有服务发现的日志:

[Service Discovery Turned Off]
2021-04-02T04:39:11.091Z - debug: [Channel]: _getServiceEndpoints - start - org4
2021-04-02T04:39:11.091Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer0.org1.com - org1
2021-04-02T04:39:11.091Z - debug: [Channel]: _getServiceEndpoints - Endorser mspid not matched, not added peer1.org1.com - org1
2021-04-02T04:39:11.091Z - debug: [RoundRobinQueryHandler]: constructor: peers=[]

一般来说,这些组织会加入共享基础设施,当他们准备好使用自己的基础设施时,就会迁移到它。同时,他们将通过他们的身份调用链代码函数

在这种情况下,org4 将仅使用网络运营商提供给它的密码 material 来连接到网络并调用链码。以下对我来说没有意义。

Is it possible for org4 identity to invoke transactions on org1 peers?

根据我的理解,只要你有 cyrpto material 连接到 HLF,并且你有正确的连接配置文件,org4 运行的 HLF 客户端最终会向所有对等方发布交易,在HLF客户端查看模拟结果,然后将交易发送给orderer,以便将其提交给peer。

因此,在您的情况下,我们将创建一个供 org4 使用的新用户,然后 org4 将使用该加密 material 来调用链码。任何组织提交的交易最终都会被所有参与组织的基础设施执行,所以有人不想贡献基础设施,他们只会使用加密 material 连接到 HLF 网络,而不是添加和重用现有的链码领先于同行。

fabric-sdk 试图将调用者的 MSP ID 与可用背书者的 MSP ID 进行匹配,但整个交易失败,因为没有与调用者的 MSP ID 匹配的对等点。我必须禁用服务发现,将特定对等点添加到目标对等点列表中才能使其正常工作。

一些代码:

const endorsingPeers = channel.getEndorsers('org1');

if (endorsingPeers.length > 0) transaction = transaction.setEndorsingPeers(endorsingPeers);
    
const response_payloads = await  transaction.evaluate(JSON.stringify(args))