Go 如何设计在另一个对等机上调用同一个链码的链码?

Go 如何设计在另一个对等机上调用同一个链码的链码?,go,hyperledger-fabric,blockchain,hyperledger-chaincode,Go,Hyperledger Fabric,Blockchain,Hyperledger Chaincode,我编写了一个chaincode1(部署在ORG1的一个对等机上),它接受来自客户端应用程序的调用,我希望通过使用第一次调用而不是再次使用客户端应用程序在ORG1的另一个对等机上调用相同的chaincode1。这将允许我将第一个计算的一些数据传递给第二个。可能吗 只有当两个链码运行在同一个对等链码中时,链码才可以查询另一个链码(或链码本身),而无需修改分类账 它甚至可以调用另一个链码(或自身)来修改分类账,前提是它们都在同一对等系统的同一通道上运行 所以这是不可能的 不管怎样,也许你脑子里有一些误

我编写了一个chaincode1(部署在ORG1的一个对等机上),它接受来自客户端应用程序的调用,我希望通过使用第一次调用而不是再次使用客户端应用程序在ORG1的另一个对等机上调用相同的chaincode1。这将允许我将第一个计算的一些数据传递给第二个。可能吗

只有当两个链码运行在同一个对等链码中时,链码才可以查询另一个链码(或链码本身),而无需修改分类账

它甚至可以调用另一个链码(或自身)来修改分类账,前提是它们都在同一对等系统的同一通道上运行

所以这是不可能的


不管怎样,也许你脑子里有一些误解。提交块后,加入到同一通道的所有对等方将同步,以便所有对等方共享同一通道分类账(链和公共世界状态)。因此,如果两个对等方都加入到同一频道,您可能不需要该功能。

只有当它们都在同一对等方运行时,链码才可以查询另一个链码(或链码本身),而无需修改分类账

它甚至可以调用另一个链码(或自身)来修改分类账,前提是它们都在同一对等系统的同一通道上运行

所以这是不可能的


不管怎样,也许你脑子里有一些误解。提交块后,加入到同一通道的所有对等方将同步,以便所有对等方共享同一通道分类账(链和公共世界状态)。因此,如果两个对等方都加入到同一个通道中,您可能不需要该功能。

我需要这种行为,因为第二个需要第一个对等方计算的一些数据(在客户端输入时)。在它执行另一次计算后,事务可以发送到订购服务以添加到块中。这不是Fabric的工作方式。您必须将数据视为属于某个通道(或属于某个子集或组织,在谈论私有事务时),而不是属于某个节点。哪个节点处理哪个事务仅对背书策略重要,但在提交块后,通道中的所有节点共享相同的数据。上述规则适用于链码之间的调用。在您的情况下,如果两个对等方都属于同一个组织,那么哪一个对等方处理(认可)哪一个事务应该无关紧要。最后,两个对等点具有相同的数据(如果两个对等点都加入到相同的通道中)。因此,只需在同一对等计算机中执行这两个计算。提交后,两个对等方都会得到结果。是的,您的贡献非常大,但我需要客户端C在对等方p1上调用带有x的链码(使用p1和p2的密钥加密)并输出f(x)(通过使用其密钥解密),然后p2通过使用其私钥解密来计算f(f(x))。我不能按照你的建议去做,因为这些加密级别意味着调用之间的串行化和并行化对我的业务来说是不可用的。智能合约应该是确定性的。其执行必须是可复制的。事务结果应仅取决于以前的状态和输入参数。如果链码取决于执行它的特定对等方,那么它是不确定的或不可复制的。您的方法违反了Fabric(或区块链)的原则。叉子不是用来喝汤的。我需要这种行为,因为第二个叉子需要第一个叉子计算的一些数据(根据客户机的输入)。在它执行另一次计算后,事务可以发送到订购服务以添加到块中。这不是Fabric的工作方式。您必须将数据视为属于某个通道(或属于某个子集或组织,在谈论私有事务时),而不是属于某个节点。哪个节点处理哪个事务仅对背书策略重要,但在提交块后,通道中的所有节点共享相同的数据。上述规则适用于链码之间的调用。在您的情况下,如果两个对等方都属于同一个组织,那么哪一个对等方处理(认可)哪一个事务应该无关紧要。最后,两个对等点具有相同的数据(如果两个对等点都加入到相同的通道中)。因此,只需在同一对等计算机中执行这两个计算。提交后,两个对等方都会得到结果。是的,您的贡献非常大,但我需要客户端C在对等方p1上调用带有x的链码(使用p1和p2的密钥加密)并输出f(x)(通过使用其密钥解密),然后p2通过使用其私钥解密来计算f(f(x))。我不能按照你的建议去做,因为这些加密级别意味着调用之间的串行化和并行化对我的业务来说是不可用的。智能合约应该是确定性的。其执行必须是可复制的。事务结果应仅取决于以前的状态和输入参数。如果链码取决于执行它的特定对等方,那么它是不确定的或不可复制的。您的方法违反了Fabric(或区块链)的原则。叉子不是用来喝汤的。