权限
GoQuorum 支持两种网络许可模型。
Basic network permissioning: :控制哪些节点可以连接到给定节点以及给定节点可以拨出到哪些节点。
Enhanced network permissioning: 通过具有 基于智能合约的许可模型 ,专为企业级需求而设计。 这为管理节点、帐户和帐户级访问控制提供了极大的灵活性。 提供两个版本的增强网络许可:
v1 :这是原始权限模型。 使用此模型时,权限规则仅在交易条目时应用,涉及存储在节点内存中的权限数据。
v2 :这增强了原始模型。 使用此模型时,权限规则在交易输入和区块铸造时都适用于存储在权限合约中的数据。
基本网络 权限
基本网络许可是一项控制哪些节点可以连接到给定节点以及给定节点可以拨出到哪些节点的功能。它通过在启动节点时提供 --permissioned 命令行选项在单个节点级别进行管理。
如果设置了 --permissioned 选项,节点将查找名为 <data-dir>/permissioned-nodes.json 的文件。此文件包含此节点可以连接到并接受来自的连接的节点的白名单。因此,启用许可后,只有在 permissioned-nodes.json 文件中列出的节点才会成为网络的一部分。如果指定了 --permissioned 选项但没有节点添加到 permissioned-nodes.json 文件,则该节点既不能连接到任何节点,也不能接受任何传入连接。
permissioned-nodes.json 文件遵循以下模式,它类似于用于指定给定节点始终连接到的静态节点列表的 <data-dir>/static-nodes.json 文件:
示例文件:(为清楚起见,节点 id 被截断)
增强的权限模型
增强的权限模型通过具有基于智能合约的权限模型来满足企业级需求。 这为管理节点、帐户和帐户级访问控制提供了极大的灵活性。
该模型的概述如下所示:
关键定义
网络 - 一组互连的节点,代表包含组织的企业区块链
组织 - 一组角色、以太坊账户和节点,具有与网络交互的各种权限
子组织 - 根据业务需要在组织内进一步细分
账户 - 一个以太坊账户,它是一个 EOA (外部账户)
投票者 - 一个能够为某个动作投票的账户
角色 - 组织中命名的工作职能
节点 - 属于网络的一部分并属于组织或子组织的 geth 节点
如上所述,在增强权限模型中,网络包括一组组织。在网络级别定义的网络管理员帐户可以提议和批准新的组织加入网络,并可以指定一个帐户作为组织管理帐户。组织管理员帐户可以创建角色、创建子组织、为其帐户分配角色以及添加属于组织的任何其他节点。子组织可以拥有自己的一组角色、帐户和子组织。组织管理帐户管理和控制组织级别的所有活动。组织管理员可以创建管理员角色并将其分配给不同的帐户以管理子组织的管理。帐户的访问权限是根据分配给它的角色衍生的。该帐户将能够通过链接到子组织或整个组织级别的任何节点进行交易。
示例网络视图如下所示:
权限智能合约设计
权限模型完全建立在智能合约之上。 智能合约设计如下:
权限智能合约设计遵循代理 - 实现 - 存储模式,允许在不改变存储或接口层的情况下更改实现逻辑。智能合约的简要说明如下:
PermissionsUpgradable.sol: 该合约存储当前执行合约的地址,由监护人(以太坊账户)所有。只有监护人才能更改执行合约地址。
PermissionsInterface.sol: 这是接口契约,保存着权限相关操作的接口。它没有业务逻辑,将请求转发给当前的实现合约
PermissionsImplementation.sol: 此合约具有权限操作的业务逻辑。它只能从
PermissionsImplementation.sol 中定义的有效接口接收请求,并与所有存储合约进行交互以进行相应的操作。
OrgManager.sol :此合约存储组织和子组织的数据。它可以接收来自 PermissionsUpgradable.sol 中定义的有效实现合约的请求
AccountManager.sol: 此合约接收来自 PermissionsUpgradable.sol 中定义的有效实施合约的请求。它存储所有帐户的数据、它们与组织和各种角色的联系。该合约还存储帐户的状态。帐户可以处于以下任何状态 -PendingApproval, Active, Suspended, Blacklisted 或 Revoked
NodeManager.sol :此合约接收来自 PermissionsUpgradable.sol 中定义的有效实施合约的请求。它存储节点的数据、它与组织或子组织的链接以及节点的状态。节点可以处于以下任一状态 - PendingApproval, Approved, Deactivated 或 Blacklisted
RoleManager.sol : 此合约接收来自 PermissionsUpgradable.sol 中定义的有效实施合约的请求。它存储各种角色和它所链接的组织的数据。角色级别的访问权限可以是以下任何一种:
Readonly 只允许读取操作
Transact 允许价值转移但不允许合约部署访问的交易
ContractDeploy 允许价值转移和合约部署访问
FullAccess 允许除了价值转移和合约部署之外的额外网络级别访问
如果角色被撤销,与该角色相关联的所有帐户都将失去所有访问权限
VoterManager.sol :此合约接收来自 PermissionsUpgradable.sol 中定义的有效实施合约的请求。 它在网络级别存储有效选民的数据,这些数据可以批准已识别的活动,例如向网络添加新组织。 任何链接到预定义网络管理员角色的帐户都将被标记为投票者。 每当执行需要投票的网络级别活动时,都会在该合约中添加一个投票项目,每个投票者账户都可以为该活动投票。 该活动在多数投票后被标记为 Approved 。