提交交易后,在超级账本结构中的同级之间达成共识

时间:2018-11-04 23:08:08

标签: hyperledger-fabric hyperledger hyperledger-composer

假设我已经在同一个组织中的两个同伴之间开始架构。通过composer运行我的应用程序/ rest-server并提交事务之后。我可以通过继续地址http://localhost:6984/_utils/#/_all_dbs来更改peer1的Couchdb实例的值。现在,两个对等方彼此之间不同步-应用程序应该抛出一些错误,但事实并非如此。通常,因为它仅从第一个对等点(即peer1)获取数据。

那么,首先,如何从多个对等方获取数据-如果我也想从对等方2获取数据?

第二,为什么它要从状态数据库而不是从分类帐中获取数据?

第三,即使提交后数据也应保持同步,我该如何配置呢?如果某个对等方篡改了其数据库,则应将其通知。我已经阅读了共识部分,并得到了正确的事务和块顺序,但是如果有人篡改状态数据库怎么办?

2 个答案:

答案 0 :(得分:0)

  1. 如果您能够使用强大的认可策略(例如AND)为一个对等方更改状态数据库中的条目,则由于两个对等方的数据不同,您的交易将无法通过验证。这是去中心化网络最重要的优点之一。

  2. 状态数据库和分类帐不是一回事。 this应该可以帮助您了解两者之间的区别。

  3. Hyperledger Fabric网络的每个参与成员本身都是已知实体(因为Fabric是许可的区块链)。也就是说,更改单个对等方的状态数据库将再次导致上述情况#1,其中事务中的读/写集对于多个对等方将不匹配(因为它们的状态数据库包含资产的不同值)。这将导致交易无效。现在,这只是一个问题,网络如何知道损坏的对等方(以及随后的状态db)。相同的解决方案可能有多种。

但最重要的是,Fabric是一个许可的区块链网络,状态数据库也必须在网络之外也受到严格的访问保护和授权。

答案 1 :(得分:0)

您修改了世界数据库这一事实并不意味着任何事情。您对该数据库所做的任何更改都不代表分类帐。

分类账本身,其中的区块和交易存储在物理文件中。世界状态数据库只是每个资产当前状态的集合。这是一个很好的设计,因为应用程序不会在乎项目经过的每个状态更改,而只会在意当前状态。只要有需要,就可以轻松地重新创建世界状态数据库。

现在,您不应该直接对世界状态数据库进行任何更改,因为这没有用。任何更改都需要通过同级成员提交的提案进行适当的处​​理,然后再由订购者进行。只有当一切都遵循后,更改才会进入分类账并与每个对等节点同步,世界状态数据库将反映出这一点。

就应该从何处获取数据而言,答案是没有关系。每个对等方都将拥有分类账的精确副本,因此,如果您从对等方1或2获得数据是不相关的,那将是同一回事。

同样,仅仅因为您更改了世界状态,这并不意味着任何事情,分类帐没有被触及,但是您的应用程序从世界状态数据库报告了当前状态,由于您的更改,现在这是不正确的。