【问题标题】:How can I design a chaincode that invokes the same one on another peer?如何设计一个在另一个对等点上调用相同的链代码?
【发布时间】:2020-04-21 15:47:55
【问题描述】:

我编写了一个链代码 1(部署在 ORG1 的一个对等方上),它接受来自客户端应用程序的调用,我想通过使用第一次调用而不是再次使用客户端应用程序在 ORG1 的另一个对等方上调用相同的链代码 1。这将允许我将第一个计算的一些数据传递给第二个。是否可以?

【问题讨论】:

    标签: go hyperledger-fabric blockchain hyperledger-chaincode


    【解决方案1】:

    一个链码可以在不修改分类帐的情况下查询另一个链码(或它自己)只有当它们都在同一个节点中运行时

    它甚至可以调用另一个链代码(或它自己)来修改分类帐只有当它们都在同一个节点的同一个通道上运行时

    所以不可能

    不管怎样,也许你心里有一些误解。在提交块后,加入同一通道的所有对等点都会同步,因此它们都共享相同的通道分类帐(链和公共世界状态)。因此,如果两个节点都加入同一个频道,您可能不需要该功能。

    【讨论】:

    • 我需要这种行为,因为第二个需要由第一个计算的一些数据(在客户端的输入上)。在它执行另一个计算之后,可以将交易发送到排序服务以添加到一个块中。
    • 这不是 Fabric 的工作方式。您必须将数据视为属于一个通道(或属于一个子集或组织,当谈到私人交易时),而不是属于一个节点。哪个节点处理哪个事务只对背书策略很重要,但在提交区块后,通道中的所有节点共享相同的数据。上面的规则适用于链码之间的调用。
    • 在您的情况下,如果两个对等方都属于同一个组织,则哪个对等方处理(认可)哪个交易并不重要。最后,两个对等点都有相同的数据(如果都加入了相同的通道)。因此,只需在同一个对等方中执行这两个计算。提交后,双方都会有结果。
    • 是的,您的贡献非常好,但我需要客户端 C 在对等点 p1 上调用带有 x 的链码(使用 p1 和 p2 的密钥加密)并输出 f(x)(通过使用它的密钥),然后 p2 通过用它的私钥解密来计算 f(f(x))。我不能按照你的建议做,因为这些加密级别表明调用之间的序列化和并行对我的业务来说是不可用的。
    • 智能合约应该是确定性的。它的执行必须是可重现的。交易结果应该只取决于之前的状态和输入参数。如果你的链码依赖于它正在执行的特定对等点,那么它就不是确定性的或可重现的。您的方法违背了 Fabric(或区块链)的原则。叉子不是用来喝汤的。
    猜你喜欢
    • 2012-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多