Hyperledger v0.6 剖析

Hyperledger v0.6 anatomy

据我了解,所有对等点都存储在 VM 的结构中。每个节点存储所有区块链历史。

当我想构建一个应用程序时,我应该提供一个界面,用户可以在其中进行更改,该更改将保存在他的对等节点中,共识网络会将更改添加到所有对等节点。

应该是 https://www.altoros.com/blog/wp-content/uploads/2017/02/Hyperledger-Webinar-Thomas-Marckx-architecture.jpg 之类的吧? 因此,每个应用程序的用户向应用程序(后端API)发送请求,应用程序向结构(用户的对等方)发送请求?

这是我的理解,如有错误请指正或确认。

1) 据我了解,所有对等点都存储在 VM 的结构中。

我不明白这个说法。给大家总结一下。

Hyperledger 结构是连接对等点的网络。在 v0.6 中,对等点可以是验证 (VP) 或非验证 (NVP)。副总裁以区块链的形式拥有世界状态和交易历史的完整副本。 NVP 只是 VP 进行交易和查询的渠道。事务可以看到未提交的状态,因此可以在自身上分层以构建一系列块。查询只能看到提交状态(事务肯定在块中的世界状态)。这在交易和可见的世界状态变化之间引入了滞后现象。请注意,可见性已更改 iun v1 结构。

2) 每个节点存储所有区块链历史。

每个 validating 节点存储所有区块链历史和所有世界状态。

3) 当我想构建一个应用程序时,我应该提供一个用户可以进行更改的界面,该更改将保存在他的对等节点中,共识网络会将更改添加到所有对等节点。

应用程序必须在一个或多个智能合约的上下文中构建。智能合约(也称为链代码)具有架构师/开发人员为事务和查询处理创建的 API。 API 的选择很灵活,适合您的应用程序。链码可以访问世界状态,因此很像 servelet。

当您从应用程序发送交易时,对等方会将其打包并发送给所有 VPs,他们将达成共识。如果通过,交易将在所有人身上执行。如果其中一个对等方出现错误,则交易失败。

v0.6 中有一个特点,即失败的交易不会写入区块的交易数组。如果交易没有发出事件,它也不会写入块的事件数组。这导致它或多或少地消失了。我不确定是否发出了拒绝事件,但我怀疑不会。出于这个原因,我总是准确地从我的物联网合约平台 (https://github.com/ibm-watson-iot/blockchain-samples/tree/master/contracts/platform) 发出成功或失败事件,以便我的交易始终在链中留下痕迹。

请注意,fabric v1 将解决此问题。

4) 应该是 https://www.altoros.com/blog/wp-content/uploads/2017/02/Hyperledger-Webinar-Thomas-Marckx-architecture.jpg 之类的?那么,每个应用程序的用户向应用程序(后端 API)发送请求,而应用程序向结构(用户的对等方)发送请求? 以上是我的理解,如有错误请指正或确认。

该图的概括非常自由,但基本上是正确的。在 v0.6 中,每个对等点都部署了自己的每个链码副本。这是自动发生的,因为部署也经过共识,并且是一个与其他交易一样的交易。因此,部署基本上同时发生在所有对等点上。

链代码在 docker 容器中运行(或在对等方的进程中,但对于您自己的链代码请忽略它)并通过 proxy/stub 通过 gRPC 与对等方的 docker 容器通信称为垫片的排列。

--- 注意 ---

Fabric v1 正在彻底改变此协议,因为链代码必须显式安装在要访问它的任何对等点上。 V1 具有特定参与者可见的私有通道(想想子链)(通过他们的俘虏同行,如果我到目前为止理解的话,通常是背书者或订购者),因此链代码将部署到参与者之间打开的通道中,但只有当链代码已经安装在要使用的对等节点上时,部署才能成功。

由此可见,可能的拓扑会有很多种。每个参与者可能有一个对等点,每个对等点都有许多通道,但并非所有参与者都相同。一些参与者可能选择没有对等点,而是使用云中的对等点或在另一个(可能是受信任的)参与者的场所使用对等点。等等。