Hyperledger fabric 区块链决定论、终止和隔离

Hyperledger fabric 区块链决定论、终止和隔离,hyperledger-fabric,hyperledger,deterministic,Hyperledger Fabric,Hyperledger,Deterministic,这个矩阵比较了虚拟机(对于以太坊)和Docker(对于Hyperledger结构)在确定性、终止性和隔离性参数方面的差异 此图像无法很好地捕获所有信息。例如,对于Hyperledger中的决定论,它提出了合同开发的挑战,而不是Docker行为本身 我很想知道,是什么样的设计决策导致Hyperledger Fabric选择Docker作为容器而不是自己的VM?在Hyperledger Fabric的早期,有很多关于如何最好地实施智能合约的讨论。不同的贡献者一直致力于客户参与/他们自己的项目,并发现

这个矩阵比较了虚拟机(对于以太坊)和Docker(对于Hyperledger结构)在确定性、终止性和隔离性参数方面的差异

此图像无法很好地捕获所有信息。例如,对于Hyperledger中的决定论,它提出了合同开发的挑战,而不是Docker行为本身


我很想知道,是什么样的设计决策导致Hyperledger Fabric选择Docker作为容器而不是自己的VM?

在Hyperledger Fabric的早期,有很多关于如何最好地实施智能合约的讨论。不同的贡献者一直致力于客户参与/他们自己的项目,并发现了EVM中的缺陷(这是有充分理由的,因为尽管EVM是图灵完整的is op代码,但它依赖于gas和账户作为构造,并且确实使复杂的数据建模变得困难,等等)

与其尝试创建一种新的契约语言和执行语言,我们决定,我们应该尝试让人们充分发挥自己选择的编程语言的力量(现在Golang得到了充分的支持,Java是实验性的,JavaScript将在下一个版本中发布)

现在,为了允许多语言合同,而不是创建复杂的嵌入式解释器等,我们选择在进程外编译和运行链码。然后,我们需要找到一种方法来“隔离”(并在一定程度上管理)这些外部流程,使用Docker似乎是一个非常可行的选择

需要注意的几点: -链码进程/容器仅与对等进程通信(即,它们启动与对等进程的通信,而不公开自己的端点) -链码实际上将命令传递给对等方(即,当您执行Get/Put状态时,这实际上通过安全gRPC连接发送到对等方) -对等方实际管理/隔离每个链码调用与其他调用(意味着一个调用无法从另一个调用访问任何状态) -Hyperledger结构本身提供了一种机制,链码必须由对等方的管理员实际安装(这是运行许可区块链的一个好处)。因此,在实际安装任何链码之前,对等方的管理员/所有者可以检查链码并确保它没有进行任何恶意操作

当涉及到非决定论时,我们调查了一些事情。例如,我们研究了各种语言的某些函数的白名单。但最终,使用v1.0体系结构,实际上并不需要确保每个链码调用的非确定性。 在v1.0模型中,每个节点执行链码,输出实际上是状态访问/更改的读/写集。如果链码逻辑成功执行,则对等方对响应进行签名。这就是所谓的模拟和认可。背书的数量(即必须成功运行链码的对等方)可通过策略进行配置。一旦为交易收集了足够多的背书,这些背书将被打包并提交给订购服务,订购服务随后创建订购交易块并将其交付给对等方进行验证和承诺。此逻辑是100%确定的(检查事务是否格式良好,确保有足够的背书来满足策略,最后进行经典的MVCC检查以避免冲突(也称为“双重花费”)


希望这会有所帮助。

感谢您的回复。“这称为模拟和认可。”这与2阶段提交协议有什么不同?有趣的类比。在许多方面它类似于传统的事务协议。您可以像“签名准备”一样查看模拟和认可,然后排序就像发送一堆“提交”消息,然后验证和提交阶段类似于使用执行MVCC,但需要满足策略以及对读/写集执行实际的MVCC检查。