如何在 Hyperledger Fabric 1.0 中实现去中心化成员资格

How to achieve decentralized membership in Hyperledger Fabric 1.0

目前在 Hyperledger Fabric 1.0 中有一个中央成员服务。我想要一种让它去中心化的方法,这样 atlas 50% 的成员必须同意新成员加入网络。我怎样才能做到这一点?

这个想法基本上是将会员逻辑放在链码中,让会员服务在注册时从链码中获取数据。但是如何强制执行这一点,我的意思是我们如何知道会员服务实际上是从区块链读取而不是作弊。

对于不依赖于集中式 CA 的分散式成员资格,请查看 Blockstack。

这实际上是 Hyperledger Fabric 的原生支持,您描述的行为实际上是频道成员更改的默认行为。

每个频道都以创世块开始。这个创世块的内容定义了通道成员,以及来自这些组织的用户被授权在区块链上执行不同功能的策略。例如,一些用户可能被允许提交交易,但不能读取整个区块链,而其他用户则可以两者都做。

要更改频道成员资格,请提交频道重新配置交易。此交易指定新的成员资格,并且必须包含足够的签名以授权此修改。默认情况下,这是来自大多数组织的管理员的签名。

策略框架其实还是很强大的,稍微加点知识,就可以定义更强大的规则。例如,您可以要求 OrgA 和 3/10 的其他组织签署更改成员资格。或者,您可以要求除一个组织之外的所有组织都同意进行任何成员资格变更,或无限数量的其他排列。

一些您可能会觉得有用的链接:

http://hyperledger-fabric.readthedocs.io/en/latest/configtxgen.html

http://hyperledger-fabric.readthedocs.io/en/latest/policies.html

http://hyperledger-fabric.readthedocs.io/en/latest/configtx.html

在撰写本文时,关于重新配置的文档和工具有点缺乏。您可能会看到的最有用的地方是:

https://github.com/hyperledger/fabric/tree/release/examples/configtxupdate

您必须熟悉两个 protobuf 结构,common.ConfigUpdatecommon.Config。通道是通过向排序服务提交签名的配置更新来创建的,排序服务会生成嵌入创世块中的相应配置。

管理频道成员资格变更的策略指定为 Application 组的 mod_policy 字段,该组是 Channel 组的子组。此字段默认为 Admins,它引用 Application 组中的策略定义 Admins。默认情况下,此策略设置为 Application 组下定义的组织组的 Admins 策略中的 MAJORITY

因此,要在创建频道之前修改此政策,您可以使用 configtxlator 工具将 configtx 解码为 JSON,进行修改,然后使用 [=21] 将其编码回来=] 工具再次。提交此新事务将使用您指定的策略创建频道。

如果您想事后修改会员资格,过程类似。检索当前通道配置,对其进行解码和修改,然后使用 configtxlator 计算代表您的更改的配置更新结构。通过 peer channel signconfigtx 收集签名然后提交以修改您的频道配置。

这个过程目前显然有点手动,但在未来,常见任务应该由 SDK 自动化,工具也应该改进。

注意:configtxlator 是一项 REST 服务,因此可以从您的 SDK 应用程序内部方便地访问它,而不受语言限制。

作为快速附录。您询问如何确定没有人 'cheating' 并且没有真正获得所需的签名。这也是系统内置的。对通道配置的所有更改不仅由订购网络验证,而且由系统中的所有对等方验证。如果到达的配置无法验证,则网络中的所有节点都会注意到,并会停止使用该通道,直到采取纠正性管理措施为止。