不同ORG的2个对等方可以实例化相同的ChainCode并提交事务吗?

时间:2018-08-04 13:13:47

标签: hyperledger-fabric hyperledger hyperledger-composer hyperledger-fabric-ca

我已使用BYFN创建具有配置的光纤网络

  

2个ORG,每个ORG都有2个对等点(每个对等点都有各自的沙发状态数据库作为状态db),1个订购者和2个Fabric-ca。

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

场景:

  1. 我能够使用org1管理员凭据或通过创建都链接到org1的参与者身份来在链码上提交交易。
  2. 除了以下例外情况,我无法在peer0.org2上启动链码。

      

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

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

      

    错误:尝试ping错误。错误:2 UNKNOWN:错误执行链代码:事务返回失败:错误:当前标识为名称“ admin”,标识符为“ 50a2c29340d9011a6530a95ead8ad83effc7804880ce482f8926aabaf6f1bb87”的当前身份

问题:

  1. 如果在多个对等节点上安装了单个链码,是否仅需要由任何一个对等节点(跨组织)启动(实例化)?
  2. 如果我希望两个对等方都能修改链码,将如何处理?通过过程,我的意思是每个组织的同级都需要在其末端修改和更新代码,或者任何一个组织的成员都可以更新链码,并且将在所有同级上实例化该代码。
  3. 背书政策是否负责确保不同组织的多个同级参与一个链码?

很抱歉,但是我无法理解单个链码如何在多个组织中工作。

ChainCode的来源:https://github.com/monarch0111/ordering-network/

2 个答案:

答案 0 :(得分:2)

  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 Blockchain Endorsement Policy Guidelines/Recommendation

答案 1 :(得分:0)

1-不需要。在每个对等节点中都安装了链码后,必须仅执行一次网络实例化。

2-以下是工作流程的简要概述:

  • a-客户端应用程序向安装在对等方上的链码提交请求。
  • b-每个对等方的链代码都认可该交易 以及背书政策。
  • c-如果交易收集到足够的认可,则可以提交 然后链码修改数据库的状态(更改 资产的价值)和分类帐。

official documentation

3-是的,背书策略定义了哪些对等方必须背书该交易才被视为有效。