首页 > 解决方案 > 不同 ORG 的 2 个对等点可以实例化相同的 ChainCode 并提交交易吗?

问题描述

我已经使用 BYFN 创建了一个结构网络,并进行了配置

2 个 ORG,每个 ORG 有 2 个对等节点(每个节点都有自己的 couch-db 作为状态 db)、1 个排序者和 2 个 fabric-ca。

现在,我在 上安装了一个链码(命名为ordering-networkpeer0.org1并在 上peer0.org2启动了链码peer0.org1

设想:

  1. 我可以使用org1管理员凭据或通过创建所有链接到org1.
  2. 我无法启动链代码,peer0.org2但出现以下异常。

    错误:尝试启动业务网络时出错。错误:没有来自任何对等方的有效响应。来自尝试的对等通信的响应是一个错误:错误:2 UNKNOWN:链码错误(状态:500,消息:链码存在ordering-network

  3. 我尝试使用 through 的管理员凭据访问链码org2composer-playground但返回异常

    错误:尝试 ping 时出错。错误:2 未知:执行链代码时出错:交易返回失败:错误:当前身份,名称为“admin”,标识符为“50a2c29340d9011a6530a95ead8ad83effc7804880ce482f8926aabaf6f1bb87”,尚未注册

问题:

  1. 如果单个链码安装在多个对等点上,是否只需要由任何一个对等点(跨组织)启动(实例化)?
  2. 如果我希望双方都能够修改链码,那么流程是什么?通过过程,我的意思是组织的每个对等点都需要在其末尾修改和更新代码,或者任何一个组织的成员都可以更新链码,并且它将在所有对等点上实例化?
  3. 背书策略是否负责确保不同组织的多个对等点参与链码?

为这篇长文道歉,但我无法理解单个链代码如何跨多个组织工作。

链码来源:https ://github.com/monarch0111/ordering-network/

标签: hyperledger-fabrichyperledgerhyperledger-composerhyperledger-fabric-ca

解决方案


  1. 一个链码只需要在一个通道上实例化一次。换句话说,您只需要peer chaincode instantiate ......在通道中的一个对等点上执行命令。如果在通道上实例化链码后再次发出命令,您可能会收到类似于您在场景 2中提到的错误。

  2. 如果您想修改现有的链码,我们也称之为升级链码(在更改版本号时保持相同的链码名称)。您必须将其安装在您希望他们成为背书者的那些对等方上,以便他们可以在执行阶段进行交易模拟。但是,您只需要调用peer chaincode upgrade ......一次,就像实例化链码时的情况一样。这样做就像进行广播并告诉频道的每个成员链代码已升级到更新版本一样。

    为了进一步重申这一点,并不要求通道中的每个节点都安装链码。只有一部分对等方必须这样做,我们称它们为背书对等方。

  3. 背书策略定义了哪些节点/多少节点应该执行交易(交易模拟)并就交易的相同执行结果达成一致。假设您在一个频道中有三个组织,您可以将背书策略指定为 AND('Org1.member', 'Org2.member') 或 AND('Org1.member', 'Org2.member','Org3.member ') 这取决于您的需要。但要说的是,在背书策略中定义来自不同组织的多个对等点有助于确保执行结果是确定性的。

    您可以在此处参考文档以获取更多信息。https://hyperledger-fabric.readthedocs.io/en/release-1.2/endorsement-policies.html

    另外,我建议您从这里查看答案以了解背后的直觉。Hyperledger 区块链背书政策指南/建议


推荐阅读