2. 身份权限管理

2.1. 概述

在区块链中,身份权限模块负责解决两个问题:

  • 如何标识区块链节点、交易发送者等链上参与成员?

  • 如何管理发送交易、查询交易、配置更新等链上操作权限?

传统的中心化信息系统中,往往采用用户名来标识用户,采用基于角色的权限控制 role based access control, RBAC模型、权限控制列表 access control list, ACL 等来管控操作权限。在区块链中,中心化的用户注册和登录不再可行,需采用基于密码学的方式进行用户标识,而权限控制仍可采用RBAC、ACL等传统方式。

在长安链2.X版本中, 我们实现了三种身份权限管理模型:

  • PermissionedWithCert:基于数字证书的用户标识体系、基于角色的权限控制体系;

  • PermissionedWithKey:基于公钥的用户标识体系、基于角色的权限控制体系。

  • Public:基于公钥的用户标识体系、基于角色的权限控制体系。

其中,PermissionedWithCert和PermissionedWithKey模式面向强权限控制场景(联盟链),Public模式面向弱权限控制场景(公链)

关于不同的身份模式配置,请参考长安链账户整体介绍 。后续迭代中,将支持更为丰富的身份权限管理模型。

2.2. 用户标识体系

2.2.1. 用户标识方法

区块链中,可采用公钥、地址(公钥哈希)、数字证书等方式来标识链上用户身份,具体对比如下表所示:

标识方法 标识长度 外部依赖 附加信息
公钥/地址 不能附加额外信息
数字证书 需依赖CA颁发数字证书 可在证书字段中附加组织、角色等额外信息
分布式数字身份 (DID) 需依赖 DID 支撑平台 可在 DID 文档中附加额外信息

长安链2.X版本可以采用数字证书公钥来标识链上成员。

2.2.2. 长安链用户体系

面向强权限控制场景,长安链的链上用户体系如下图所示:

一条链由多个组织构成,每个组织下拥有一个或多个区块链节点和用户(类型详见下文中角色类型)。

如果采用数字证书的标识方式,每个组织在创世块中的trust roots 字段定义组织根证书,若链上成员拥有某根证书颁发的合法证书,则视为该成员为此组织下的合法用户。

如果采用公钥的标识方式,每个组织在创世块中的trust roots 字段定义组织的管理员公钥。每个组织在创世块中的consensus里定义组织的共识节点列表。其他用户需要在通过合法的交易注册身份才能成为链上的合法用户,详情见下文公钥角色绑定

面向弱权限控制场景,长安链的链上用户体系如下图所示:

一条链上有多个链管理员,在创世块中的trust roots字段定义链管理员。共识节点是由共识算法和创世块中共识算法配置决定的。其他用户可以自由参与发交易,同步数据等链上活动。

2.3. 基于角色的权限控制体系

2.3.1. 角色类型

长安链中,定义了以下几种角色类型:

  • 共识节点 consensus:有权参与区块共识流程的链上节点;

  • 同步节点common:无权参与区块共识流程,但可在链上同步数据的节点;

  • 管理员 admin:可代表组织进行链上治理的用户;

  • 普通用户 client:无权进行链上治理,但可发送和查询交易的用户;

  • 轻节点用户light:无权进行链上治理,无权发送交易,只可查询、订阅自己组织的区块、交易数据,属于SPV轻节点用户(详情见轻节点)。

2.3.2. 权限定义

长安链采用三段式语法定义资源的访问权限:规则 (rule)、组织列表 (orgList)、角色列表 (roleList)

  • 规则:以关键字的形式描述了需要多少个组织的用户共同认可才可访问资源,合法的规则包括:

    • ALL:要求 orgList 列表中所有组织参与,每个组织至少提供一个符合 roleList 要求角色的签名;

    • ANY:要求 orgList 列表中任意一个组织提供符合 roleList 要求角色的签名;

    • MAJORITY:要求联盟链中过半数组织提供各自 admin 角色的签名;

    • 一个以字符串形式表达的整数 (e.g. “3”):要求orgList 列表中大于或等于规定数目的组织提供符合 roleList 要求角色的签名;

    • 一个以字符串形式表达的分数 (e.g. “2/3”) :要求orgList 列表中大于或等于规定比例的组织提供符合 roleList 要求角色的签名;

    • SELF:要求资源所属的组织提供符合 roleList 要求角色的签名,在此关键字下,orgList中的组织列表信息不生效,该规则目前只适用于修改组织根证书、修改组织共识节点地址这两个操作的权限配置;

    • FORBIDDEN:此规则表示禁止所有人访问,在此关键字下,orgListroleList 不生效。

  • 组织列表:合法的组织列表集合,组织需出现在配置文件的 trust root 中,若为空则默认出现在 trust root 中的所有组织;

  • 角色列表:合法的角色列表集合,若为空则默认所有角色。

示例如下:

权限定义 说明
ALL [org1, org2, org3] [admin, client] 三个组织各自提供至少一个管理员或普通用户提供签名才可访问对应资源
1/2 [] [admin] 链上所有组织中过半数组织的管理员提供签名才可访问对应资源(自定义版本的MAJORITY规则)
SELF [] [admin] 资源所属组织的管理员提供签名才可访问对应资源,例如组织管理员有权修改各自组织的根证书

2.3.3. 资源定义

长安链中,资源名称的定义采用 [合约名称]-[方法名称] 的规则。

例如:

  • 修改链上配置的系统合约 CHAIN_CONFIG ,该合约包含添加根证书的方法 TRUST_ROOT_ADD,如果要修改该方法的权限,对应的资源名称为:CHAIN_CONFIG-TRUST_ROOT_ADD。

  • CHAIN_CONFIG-TRUST_ROOT_ADD对应的默认权限定义是{MAJORITY [] [ADMIN]}则表示添加根证书操作需要客户端交易满足半数以上组织管理员多签,才能验证通过。

2.3.4. 权限管理流程

长安链中,权限控制的整体流程为:

  1. 配置加载:链初始化时,加载配置文件中定义的资源名称和权限的对应关系,若无则加载默认配置;

  2. 权限定位:需要鉴权时,根据上下文确定访问的资源名称,找到对应的权限定义;

  3. 签名校验:根据用户提供的签名背书列表,校验签名是否满足权限定义的最低要求,返回鉴权成功或失败。

2.4. PermissionedWithCert

2.4.1. 标识方法

采用数字证书的标识方式,每个加入区块链网络中的节点和用户,需在加入前获得经认可的CA颁发的数字证书,且每条发出的消息需附加数字签名,供其他成员进行合法性校验。

2.4.2. 权限管理

长安链2.X中,PermissionedWithCert模式采用了基于角色的权限控制模型,如下图所示。具体来说,需将用户绑定到某一组织的一个或多个角色上,再将链上资源(即链上需要进行权限管理的操作)绑定至特定的组织、角色,即可完成资源和用户的关联。

目前长安链PermissionWithCert模式内部默认权限列表如下:

合约名 方法名 资源名 功能描述 默认权限 权限描述
ARCHIVE 归档 {[ADMIN] ANY [wx-org1.chainmaker.org]} 本组织任一管理员签名
INVOKE_CONTRACT 调用合约 {[CLIENT ADMIN] ANY []} 任一组织普通用户、管理员签名
QUERY_CONTRACT 查询合约 {[CONSENSUS COMMON CLIENT ADMIN] ANY []} 任一组织共识节点、同步节点、普通用户和管理员签名
SUBSCRIBE 订阅 {[LIGHT CLIENT ADMIN] ANY []} 任一组织轻节点、普通用户和管理员签名
ACCOUNT_MANAGER CHARGE_GAS_FOR_MULTI_ACCOUNT ACCOUNT_MANAGER-CHARGE_GAS_FOR_MULTI_ACCOUNT 统一扣除区块内所有交易的gas {[CONSENSUS] ANY []} 任一组织共识节点签名
ACCOUNT_MANAGER SET_ADMIN ACCOUNT_MANAGER-SET_ADMIN 设置管理员地址 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CERT_MANAGE CERTS_ALIAS_DELETE CERT_MANAGE-CERTS_ALIAS_DELETE 删除证书别名 {[ADMIN] ANY []} 任一组织管理员签名
CERT_MANAGE CERTS_ALIAS_QUERY CERT_MANAGE-CERTS_ALIAS_QUERY 根据别名查询证书 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CERT_MANAGE CERTS_DELETE CERT_MANAGE-CERTS_DELETE 删除证书哈希 {[ADMIN] ANY []} 任一组织管理员签名
CERT_MANAGE CERTS_FREEZE CERT_MANAGE-CERTS_FREEZE 冻结证书 {[ADMIN] ANY []} 任一组织管理员签名
CERT_MANAGE CERTS_QUERY CERT_MANAGE-CERTS_QUERY 查询证书 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CERT_MANAGE CERTS_REVOKE CERT_MANAGE-CERTS_REVOKE 注销证书 {[ADMIN] ANY []} 任一组织管理员签名
CERT_MANAGE CERTS_UNFREEZE CERT_MANAGE-CERTS_UNFREEZE 解冻证书 {[ADMIN] ANY []} 任一组织管理员签名
CERT_MANAGE CERT_ADD CERT_MANAGE-CERT_ADD 上链证书哈希 {[CLIENT ADMIN LIGHT] ANY []} 任一组织普通用户、管理员和轻节点签名
CERT_MANAGE CERT_ALIAS_ADD CERT_MANAGE-CERT_ALIAS_ADD 添加证书别名 {[CLIENT ADMIN LIGHT] ANY []} 任一组织普通用户、管理员和轻节点签名
CERT_MANAGE CERT_ALIAS_UPDATE CERT_MANAGE-CERT_ALIAS_UPDATE 更新证书别名 {[ADMIN] ANY []} 任一组织管理员签名
CHAIN_CONFIG ALTER_ADDR_TYPE CHAIN_CONFIG-ALTER_ADDR_TYPE 更新地址类型 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG BLOCK_UPDATE CHAIN_CONFIG-BLOCK_UPDATE 更新出块配置 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
~~CHAIN_CONFIG~~ ~~CERTS_FREEZE~~ CHAIN_CONFIG-CERTS_FREEZE {[ADMIN] ANY []} 任一组织管理员签名
CHAIN_CONFIG CONSENSUS_EXT_ADD CHAIN_CONFIG-CONSENSUS_EXT_ADD 添加共识扩展字段 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG CONSENSUS_EXT_DELETE CHAIN_CONFIG-CONSENSUS_EXT_DELETE 删除共识扩展字段 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG CONSENSUS_EXT_UPDATE CHAIN_CONFIG-CONSENSUS_EXT_UPDATE 更新共识扩展字段 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG CORE_UPDATE CHAIN_CONFIG-CORE_UPDATE 核心模块配置更新 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG ENABLE_OR_DISABLE_GAS CHAIN_CONFIG-ENABLE_OR_DISABLE_GAS 是否开启全局gas {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG GET_CHAIN_CONFIG CHAIN_CONFIG-GET_CHAIN_CONFIG 获取链配置 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一组织共识节点、同步节点、普通用户、管理员或轻节点签名
CHAIN_CONFIG NODE_ID_ADD CHAIN_CONFIG-NODE_ID_ADD 添加节点ID {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ID_DELETE CHAIN_CONFIG-NODE_ID_DELETE 删除节点ID {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ID_UPDATE CHAIN_CONFIG-NODE_ID_UPDATE 更新节点ID {[ADMIN] SELF []} 本组织管理员签名
CHAIN_CONFIG NODE_ORG_ADD CHAIN_CONFIG-NODE_ORG_ADD 添加共识组织及节点 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ORG_DELETE CHAIN_CONFIG-NODE_ORG_DELETE 删除共识组织 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ORG_UPDATE CHAIN_CONFIG-NODE_ORG_UPDATE 更新共识组织 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG PERMISSION_ADD CHAIN_CONFIG-PERMISSION_ADD 添加权限 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG PERMISSION_DELETE CHAIN_CONFIG-PERMISSION_DELETE 删除权限(恢复默认) {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG PERMISSION_UPDATE CHAIN_CONFIG-PERMISSION_UPDATE 更新权限 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_ACCOUNT_MANAGER_ADMIN CHAIN_CONFIG-SET_ACCOUNT_MANAGER_ADMIN 设置管理员地址 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_INVOKE_BASE_GAS CHAIN_CONFIG-SET_INVOKE_BASE_GAS 设置基础扣费的Gas大小(单次调用的最少扣除的Gas数量) {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_MEMBER_ADD CHAIN_CONFIG-TRUST_MEMBER_ADD 添加第三方用户 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_MEMBER_DELETE CHAIN_CONFIG-TRUST_MEMBER_DELETE 删除第三方用户 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_MEMBER_UPDATE CHAIN_CONFIG-TRUST_MEMBER_UPDATE 更新第三方用户 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_ROOT_ADD CHAIN_CONFIG-TRUST_ROOT_ADD 添加信任根证书 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_ROOT_DELETE CHAIN_CONFIG-TRUST_ROOT_DELETE 删除信任根证书 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_ROOT_UPDATE CHAIN_CONFIG-TRUST_ROOT_UPDATE 更新信任根证书 {[ADMIN] SELF []} 本组织管理员签名
CHAIN_QUERY GET_ARCHIVED_BLOCK_HEIGHT CHAIN_QUERY-GET_ARCHIVED_BLOCK_HEIGHT 查询已归档的区块高度 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_BY_HASH CHAIN_QUERY-GET_BLOCK_BY_HASH 通过哈希查询区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_BY_HEIGHT CHAIN_QUERY-GET_BLOCK_BY_HEIGHT 通过高度查询区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_BY_TX_ID CHAIN_QUERY-GET_BLOCK_BY_TX_ID 通过交易ID查询区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_HEADER_BY_HEIGHT CHAIN_QUERY-GET_BLOCK_HEADER_BY_HEIGHT 通过高度查询区块头 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_HEIGHT_BY_HASH CHAIN_QUERY-GET_BLOCK_HEIGHT_BY_HASH 通过哈希查询区块头 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_HEIGHT_BY_TX_ID CHAIN_QUERY-GET_BLOCK_HEIGHT_BY_TX_ID 通过交易ID查询区块头 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_WITH_TXRWSETS_BY_HASH CHAIN_QUERY-GET_BLOCK_WITH_TXRWSETS_BY_HASH 根据区块哈希查询区块和读写集 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_WITH_TXRWSETS_BY_HEIGHT CHAIN_QUERY-GET_BLOCK_WITH_TXRWSETS_BY_HEIGHT 根据区块高度查询区块和读写集 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_FULL_BLOCK_BY_HEIGHT CHAIN_QUERY-GET_FULL_BLOCK_BY_HEIGHT 根据高度查询区块(区块、读写集、事件) {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_LAST_BLOCK CHAIN_QUERY-GET_LAST_BLOCK 查询最新区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_LAST_CONFIG_BLOCK CHAIN_QUERY-GET_LAST_CONFIG_BLOCK 查询最新配置区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_TX_BY_TX_ID CHAIN_QUERY-GET_TX_BY_TX_ID 根据交易ID查询交易 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CONTRACT_MANAGE FREEZE_CONTRACT CONTRACT_MANAGE-FREEZE_CONTRACT 冻结合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE INIT_CONTRACT CONTRACT_MANAGE-INIT_CONTRACT 安装合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE REVOKE_CONTRACT CONTRACT_MANAGE-REVOKE_CONTRACT 吊销合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE UNFREEZE_CONTRACT CONTRACT_MANAGE-UNFREEZE_CONTRACT 解冻合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE UPGRADE_CONTRACT CONTRACT_MANAGE-UPGRADE_CONTRACT 升级合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
PRIVATE_COMPUTE SAVE_CA_CERT PRIVATE_COMPUTE-SAVE_CA_CERT 保存隐私合约的根证书中 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
PRIVATE_COMPUTE SAVE_ENCLAVE_REPORT PRIVATE_COMPUTE-SAVE_ENCLAVE_REPORT 保存隐私合约Enclave的Report {[ADMIN] MAJORITY []} 半数以上组织管理员多签
PUBKEY_MANAGE PUBKEY_ADD PUBKEY_MANAGE-PUBKEY_ADD 添加公钥 {[] FORBIDDEN []} 禁止
PUBKEY_MANAGE PUBKEY_DELETE PUBKEY_MANAGE-PUBKEY_DELETE 删除公钥 {[] FORBIDDEN []} 禁止

可以通过修改链上配置中的权限定义部分,来自定义或者修改用户合约和系统合约中的某些方法的权限。

参考如下示例:

  - resource_name: CHAIN_CONFIG-TRUST_ROOT_ADD
    policy:
      rule: MAJORITY
      org_list:
      role_list:
        - admin

采用命令行工具或SDK工具修改链上配置参考:命令行工具SDK

2.4.3. 外部证书兼容

长安链中,若采用数字证书作为用户标识,需要在证书字段中,附加组织和角色等信息。

例如,X.509标准的数字证书中的Organization字段,需要填写长安链中的组织信息。OrganizationalUnit字段,需要填写长安链中的角色信息。

若用户采用非长安链CA(chainmaker-ca)或证书生成工具(chainmaker-cryptogen)颁发的数字证书,需要利用外部证书兼容的功能,来参与链上活动。

目前长安链的用户、节点的签名证书(即业务证书)支持使用BJCA、CFCA等国家认可的第三方CA颁发的外部证书。因TLS证书仅作用于通信层,故无需使用外部证书。

具体配置方法参考:外部证书兼容配置手册

2.5. PermissionedWithKey

2.5.1. 标识方法

采用公钥的标识方式,能够避免像数字证书体系那样繁琐的签发流程,使用户加入区块链网络更加简单快捷,但无法承载用户或节点的组织信息以及角色信息。

2.5.2. 权限管理

由于PermissionedWithKey也是面向强权限控制场景的模式,权限管理方案与PermissionedWithCert模式大致相同。差异主要表现在以下两方面:

2.5.2.1. 公钥角色绑定

由于公钥无法承载用户或节点的组织信息以及角色信息,因此需要把这些信息存到链上,并跟节点或者用户的公钥绑定,我们新增了公钥管理的系统合约:PUBKEY_MANAGE,该合约采用SELF的权限控制方案,即需要组织的管理员签名,为该组织下用户或节点的公钥绑定信息至链上。而组织管理员是启动区块链时,默认注册到链上的,通过写到链配置的trust roots字段。另外,共识节点的组织和角色信息,也是通过在链配置中默认注册的。

PUBKEY_MANAGE,该合约拥有下列三个方法:

  • PUBKEY_ADD:增加公钥身份信息方法

  • PUBKEY_DELETE:删除公钥身份信息方法

  • PUBKEY_QUERY:查询公钥身份信息方法

:该合约的三个方法仅在PermissionedWithKey模式下支持使用。

具体操作方法参考命令行工具SDK

2.5.2.2. 系统合约权限差异

PermissionedWithKey模式下,由于采用公钥的标识方式,不再使用数字证书,所以数字证书相关的系统合约外部证书兼容相关的系统合约是被禁止使用的,具体如下:

CERT_MANAGE:证书管理系统合约

方法 功能 备注
CERT_ADD 添加证书 禁止
CERTS_DELETE 删除证书 禁止
CERTS_QUERY 查询证书 禁止
CERTS_FREEZE 冻结证书 禁止
CERTS_UNFREEZE 解冻证书 禁止
CERTS_REVOKE 吊销证书 禁止

CHAIN_CONFIG:链配置更新系统合约

方法 功能 备注
TRUST_MEMBER_ADD 添加外部证书 禁止
TRUST_MEMBER_UPDATE 更新外部证书 禁止
TRUST_MEMBER_DELETE 删除外部证书 禁止

目前长安链PermissionWithKey模式内部默认权限列表如下:

合约名 方法名 资源名 功能描述 默认权限 权限描述
ARCHIVE 归档 {[ADMIN] ANY [wx-org1.chainmaker.org]} 本组织管理员签名
INVOKE_CONTRACT 调用合约 {[CLIENT ADMIN] ANY []} 任一组织普通用户、管理员签名
QUERY_CONTRACT 查询合约 {[CONSENSUS COMMON CLIENT ADMIN] ANY []} 任一组织共识节点、同步节点、普通用户和管理员签名
SUBSCRIBE 订阅 {[LIGHT CLIENT ADMIN] ANY []} 任一组织轻节点、普通用户、管理员签名
ACCOUNT_MANAGER CHARGE_GAS_FOR_MULTI_ACCOUNT ACCOUNT_MANAGER-CHARGE_GAS_FOR_MULTI_ACCOUNT 统一扣除区块内所有交易的gas {[CONSENSUS] ANY []} 任一组织共识节点签名
ACCOUNT_MANAGER SET_ADMIN ACCOUNT_MANAGER-SET_ADMIN 设置Gas管理员地址 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CERT_MANAGE CERTS_ALIAS_DELETE CERT_MANAGE-CERTS_ALIAS_DELETE 删除证书别名 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_DELETE CERT_MANAGE-CERTS_DELETE 删除证书 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_FREEZE CERT_MANAGE-CERTS_FREEZE 冻结证书 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_QUERY CERT_MANAGE-CERTS_QUERY 查询证书 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CERT_MANAGE CERTS_REVOKE CERT_MANAGE-CERTS_REVOKE 撤消证书 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_UNFREEZE CERT_MANAGE-CERTS_UNFREEZE 解冻证书 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ADD CERT_MANAGE-CERT_ADD 添加证书 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ALIAS_ADD CERT_MANAGE-CERT_ALIAS_ADD 添加证书别名 {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ALIAS_UPDATE CERT_MANAGE-CERT_ALIAS_UPDATE 更新证书别名 {[] FORBIDDEN []} 禁止
CHAIN_CONFIG ALTER_ADDR_TYPE CHAIN_CONFIG-ALTER_ADDR_TYPE 修改地址类型 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG BLOCK_UPDATE CHAIN_CONFIG-BLOCK_UPDATE 更新区块配置 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG ~~CERTS_FREEZE~~ CHAIN_CONFIG-CERTS_FREEZE 证书冻结 {[ADMIN] ANY []} 任一组织管理员签名
CHAIN_CONFIG CONSENSUS_EXT_ADD CHAIN_CONFIG-CONSENSUS_EXT_ADD 添加共识扩展字段 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG CONSENSUS_EXT_DELETE CHAIN_CONFIG-CONSENSUS_EXT_DELETE 删除共识扩展字段 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG CONSENSUS_EXT_UPDATE CHAIN_CONFIG-CONSENSUS_EXT_UPDATE 更新共识扩展字段 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG CORE_UPDATE CHAIN_CONFIG-CORE_UPDATE 更新核心模块配置 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG ENABLE_OR_DISABLE_GAS CHAIN_CONFIG-ENABLE_OR_DISABLE_GAS 是否开启gas {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG GET_CHAIN_CONFIG CHAIN_CONFIG-GET_CHAIN_CONFIG 获取链配置 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_CONFIG NODE_ID_ADD CHAIN_CONFIG-NODE_ID_ADD 添加节点ID {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ID_DELETE CHAIN_CONFIG-NODE_ID_DELETE 删除节点ID {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ID_UPDATE CHAIN_CONFIG-NODE_ID_UPDATE 更新节点ID {[ADMIN] SELF []} 本组织管理员签名
CHAIN_CONFIG NODE_ORG_ADD CHAIN_CONFIG-NODE_ORG_ADD 添加共识组织和节点 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ORG_DELETE CHAIN_CONFIG-NODE_ORG_DELETE 删除共识组织 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG NODE_ORG_UPDATE CHAIN_CONFIG-NODE_ORG_UPDATE 更新共识组织 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG PERMISSION_ADD CHAIN_CONFIG-PERMISSION_ADD 添加权限 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG PERMISSION_DELETE CHAIN_CONFIG-PERMISSION_DELETE 删除权限(恢复成默认) {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG PERMISSION_UPDATE CHAIN_CONFIG-PERMISSION_UPDATE 更新权限 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_ACCOUNT_MANAGER_ADMIN CHAIN_CONFIG-SET_ACCOUNT_MANAGER_ADMIN 设置管理员地址 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_INVOKE_BASE_GAS CHAIN_CONFIG-SET_INVOKE_BASE_GAS 设置基础扣费的Gas大小(单次调用的最少扣除的Gas数量) {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_MEMBER_ADD CHAIN_CONFIG-TRUST_MEMBER_ADD 添加可信成员 {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_DELETE CHAIN_CONFIG-TRUST_MEMBER_DELETE 删除可信成员 {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_UPDATE CHAIN_CONFIG-TRUST_MEMBER_UPDATE 更新可信成员 {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_ROOT_ADD CHAIN_CONFIG-TRUST_ROOT_ADD 添加管理员公钥 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_ROOT_DELETE CHAIN_CONFIG-TRUST_ROOT_DELETE 删除管理员公钥 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG TRUST_ROOT_UPDATE CHAIN_CONFIG-TRUST_ROOT_UPDATE 更新管理员公钥 {[ADMIN] SELF []} 本组织管理员签名
CHAIN_QUERY GET_ARCHIVED_BLOCK_HEIGHT CHAIN_QUERY-GET_ARCHIVED_BLOCK_HEIGHT 获取归档区块高度 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_BY_HASH CHAIN_QUERY-GET_BLOCK_BY_HASH 根据哈希查询区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_BY_HEIGHT CHAIN_QUERY-GET_BLOCK_BY_HEIGHT 根据高度查询区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_BY_TX_ID CHAIN_QUERY-GET_BLOCK_BY_TX_ID 根据交易ID查询区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_HEADER_BY_HEIGHT CHAIN_QUERY-GET_BLOCK_HEADER_BY_HEIGHT 根据高度查询区块头 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_HEIGHT_BY_HASH CHAIN_QUERY-GET_BLOCK_HEIGHT_BY_HASH 根据哈希查询区块头 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_HEIGHT_BY_TX_ID CHAIN_QUERY-GET_BLOCK_HEIGHT_BY_TX_ID 根据交易ID查询区块头 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_WITH_TXRWSETS_BY_HASH CHAIN_QUERY-GET_BLOCK_WITH_TXRWSETS_BY_HASH 根据哈希查询区块和读写集 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_BLOCK_WITH_TXRWSETS_BY_HEIGHT CHAIN_QUERY-GET_BLOCK_WITH_TXRWSETS_BY_HEIGHT 根据高度查询区块和读写集 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_FULL_BLOCK_BY_HEIGHT CHAIN_QUERY-GET_FULL_BLOCK_BY_HEIGHT 根据高度查询区块、读写集、事件 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_LAST_BLOCK CHAIN_QUERY-GET_LAST_BLOCK 查询最新区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_LAST_CONFIG_BLOCK CHAIN_QUERY-GET_LAST_CONFIG_BLOCK 查询最新配置区块 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CHAIN_QUERY GET_TX_BY_TX_ID CHAIN_QUERY-GET_TX_BY_TX_ID 根据交易ID查询交易 {[CONSENSUS COMMON CLIENT ADMIN LIGHT] ANY []} 任一共识节点、同步节点、普通用户、管理员和轻节点签名
CONTRACT_MANAGE FREEZE_CONTRACT CONTRACT_MANAGE-FREEZE_CONTRACT 冻结合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE INIT_CONTRACT CONTRACT_MANAGE-INIT_CONTRACT 安装合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE REVOKE_CONTRACT CONTRACT_MANAGE-REVOKE_CONTRACT 注销合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE UNFREEZE_CONTRACT CONTRACT_MANAGE-UNFREEZE_CONTRACT 解冻合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CONTRACT_MANAGE UPGRADE_CONTRACT CONTRACT_MANAGE-UPGRADE_CONTRACT 升级合约 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
PRIVATE_COMPUTE SAVE_CA_CERT PRIVATE_COMPUTE-SAVE_CA_CERT 隐私合约保存根证书 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
PRIVATE_COMPUTE SAVE_ENCLAVE_REPORT PRIVATE_COMPUTE-SAVE_ENCLAVE_REPORT 保存隐私合约Enclave的Report {[ADMIN] MAJORITY []} 半数以上组织管理员多签
PUBKEY_MANAGE PUBKEY_ADD PUBKEY_MANAGE-PUBKEY_ADD 添加公钥 {[ADMIN] SELF []} 本组织管理员签名
PUBKEY_MANAGE PUBKEY_DELETE PUBKEY_MANAGE-PUBKEY_DELETE 删除公钥 {[ADMIN] SELF []} 本组织管理员签名

2.6. Public

2.6.1. 标识方法

采用公钥的标识方式,能够避免像数字证书体系那样繁琐的签发流程,使用户加入区块链网络更加简单快捷,但无法承载用户或节点的组织信息以及角色信息。

2.6.2. 支持的共识算法

Public模式下,目前支持的共识算法及他们对应的权限策略见下:

2.6.3. 权限管理

Public模式下,由于权限开放性很高,而且用户没有组织属性,因此不支持通过配置进行自定义权限策略。在该模式下不再需要的系统合约都会被禁止,而针对不同的共识算法,权限控制策略也会有所差别。

2.6.3.1. 交易类型

任意普通用户都可以调用的交易类型

交易类型 功能
INVOKE_CONTRACT 合约调用
QUERY_CONTRACT 合约查询
SUBSCRIBE 订阅

需要任何一个链管理员签名才可以调用的交易类型

交易类型 功能
ARCHIVE 数据归档

2.6.3.2. DPOS共识

大部分系统合约被禁止使用,仅支持如下系统合约

需要任何一个链管理员签名才可以调用的系统合约

CHAIN_CONFIG:链配置更新系统合约

方法 功能
CORE_UPDATE 核心引擎配置更新
BLOCK_UPDATE 区块设置配置更新

CONTRACT_MANAGE:合约管理系统合约

方法 功能
UPGRADE_CONTRACT 升级合约
FREEZE_CONTRACT 冻结合约
UNFREEZE_CONTRACT 解冻合约
REVOKE_CONTRACT 吊销合约

需要半数以上链管理员签名才可以调用的系统合约

CHAIN_CONFIG:链配置更新系统合约

方法 功能
TRUST_ROOT_UPDATE 链管理员更新

任意普通用户都可以调用的系统合约

CONTRACT_MANAGE:合约管理系统合约

方法 功能
INIT_CONTRACT 初始化合约

DPOS_ERC20:DPOS ERC20系统合约所有方法。

DPOS_STAKE:DPOS STAKE系统合约所有方法

Public-DPOS模式默认权限列表如下:

合约名 方法名 资源名 功能描述 默认权限 权限描述
ARCHIVE 归档 {[ADMIN] ANY []} 任一管理员签名
INVOKE_CONTRACT 执行合约 {[] ANY []} 无限制
SUBSCRIBE 订阅 {[] ANY []} 无限制
QUERY_CONTRACT 查询合约 {[] ANY []} 无限制
ACCOUNT_MANAGER REFUND_GAS_VM ACCOUNT_MANAGER-REFUND_GAS_VM / {[] FORBIDDEN []} 禁止
ACCOUNT_MANAGER SET_ADMIN ACCOUNT_MANAGER-SET_ADMIN / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_ALIAS_DELETE CERT_MANAGE-CERTS_ALIAS_DELETE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_DELETE CERT_MANAGE-CERTS_DELETE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_FREEZE CERT_MANAGE-CERTS_FREEZE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_REVOKE CERT_MANAGE-CERTS_REVOKE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_UNFREEZE CERT_MANAGE-CERTS_UNFREEZE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ADD CERT_MANAGE-CERT_ADD / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ALIAS_ADD CERT_MANAGE-CERT_ALIAS_ADD / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ALIAS_UPDATE CERT_MANAGE-CERT_ALIAS_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG ALTER_ADDR_TYPE CHAIN_CONFIG-ALTER_ADDR_TYPE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG BLOCK_UPDATE CHAIN_CONFIG-BLOCK_UPDATE 更新区块配置 {[ADMIN] ANY []} 任一管理员签名
CHAIN_CONFIG CONSENSUS_EXT_ADD CHAIN_CONFIG-CONSENSUS_EXT_ADD 添加共识扩展参数 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CONSENSUS_EXT_DELETE CHAIN_CONFIG-CONSENSUS_EXT_DELETE 删除共识扩展参数 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CONSENSUS_EXT_UPDATE CHAIN_CONFIG-CONSENSUS_EXT_UPDATE 更新共识扩展参数 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CORE_UPDATE CHAIN_CONFIG-CORE_UPDATE 更新核心模块配置 {[ADMIN] ANY []} 任一管理员签名
CHAIN_CONFIG ENABLE_OR_DISABLE_GAS CHAIN_CONFIG-ENABLE_OR_DISABLE_GAS / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ID_ADD CHAIN_CONFIG-NODE_ID_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ID_DELETE CHAIN_CONFIG-NODE_ID_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ID_UPDATE CHAIN_CONFIG-NODE_ID_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ORG_ADD CHAIN_CONFIG-NODE_ORG_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ORG_DELETE CHAIN_CONFIG-NODE_ORG_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ORG_UPDATE CHAIN_CONFIG-NODE_ORG_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG PERMISSION_ADD CHAIN_CONFIG-PERMISSION_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG PERMISSION_DELETE CHAIN_CONFIG-PERMISSION_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG PERMISSION_UPDATE CHAIN_CONFIG-PERMISSION_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_ADD CHAIN_CONFIG-TRUST_MEMBER_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_DELETE CHAIN_CONFIG-TRUST_MEMBER_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_UPDATE CHAIN_CONFIG-TRUST_MEMBER_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_ROOT_ADD CHAIN_CONFIG-TRUST_ROOT_ADD 添加管理员公钥 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG TRUST_ROOT_DELETE CHAIN_CONFIG-TRUST_ROOT_DELETE 删除管理员公钥 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG TRUST_ROOT_UPDATE CHAIN_CONFIG-TRUST_ROOT_UPDATE 更新管理员公钥 {[ADMIN] SELF []} 管理员签名
CONTRACT_MANAGE FREEZE_CONTRACT CONTRACT_MANAGE-FREEZE_CONTRACT 冻结合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE GET_DISABLED_CONTRACT_LIST CONTRACT_MANAGE-GET_DISABLED_CONTRACT_LIST / {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE GRANT_CONTRACT_ACCESS CONTRACT_MANAGE-GRANT_CONTRACT_ACCESS / {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE REVOKE_CONTRACT CONTRACT_MANAGE-REVOKE_CONTRACT 吊销合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE REVOKE_CONTRACT_ACCESS CONTRACT_MANAGE-REVOKE_CONTRACT_ACCESS / {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE UNFREEZE_CONTRACT CONTRACT_MANAGE-UNFREEZE_CONTRACT 解冻合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE UPGRADE_CONTRACT CONTRACT_MANAGE-UPGRADE_CONTRACT 升级合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE VERIFY_CONTRACT_ACCESS CONTRACT_MANAGE-VERIFY_CONTRACT_ACCESS / {[] FORBIDDEN []} 禁止
MULTI_SIGN QUERY MULTI_SIGN-QUERY / {[] FORBIDDEN []} 禁止
MULTI_SIGN REQ MULTI_SIGN-REQ / {[] FORBIDDEN []} 禁止
MULTI_SIGN VOTE MULTI_SIGN-VOTE / {[] FORBIDDEN []} 禁止
PRIVATE_COMPUTE SAVE_CA_CERT PRIVATE_COMPUTE-SAVE_CA_CERT / {[] FORBIDDEN []} 禁止
PRIVATE_COMPUTE SAVE_ENCLAVE_REPORT PRIVATE_COMPUTE-SAVE_ENCLAVE_REPORT / {[] FORBIDDEN []} 禁止
PUBKEY_MANAGE PUBKEY_ADD PUBKEY_MANAGE-PUBKEY_ADD / {[] FORBIDDEN []} 禁止
PUBKEY_MANAGE PUBKEY_DELETE PUBKEY_MANAGE-PUBKEY_DELETE / {[] FORBIDDEN []} 禁止

2.6.3.3. TBFT共识

大部分系统合约被禁止使用,仅支持如下系统合约

需要任何一个链管理员签名才可以调用的系统合约

CONTRACT_MANAGE:合约管理系统合约

方法 功能
INIT_CONTRACT 创建合约
UPGRADE_CONTRACT 升级合约
FREEZE_CONTRACT 冻结合约
UNFREEZE_CONTRACT 解冻合约
REVOKE_CONTRACT 吊销合约

需要半数以上链管理员签名才可以调用的系统合约

CHAIN_CONFIG:链配置更新系统合约

方法 功能
CORE_UPDATE 核心引擎配置更新
BLOCK_UPDATE 区块设置配置更新
NODE_ID_ADD 共识节点增加
NODE_ID_DELETE 共识节点删除
NODE_ID_UPDATE 共识节点更新
NODE_ORG_UPDATE 共识节点org更新
ENABLE_OR_DISABLE_GAS GAS开关设置
ALTER_ADDR_TYPE 地址类型设置
TRUST_ROOT_UPDATE 链管理员更新

ACCOUNT_MANAGER:审计管理系统合约

方法 功能
SET_ADMIN GAS管理员设置

Public-TBFT模式默认权限列表如下:

合约名 方法名 资源名 功能描述 默认权限 权限描述
ARCHIVE 归档 {[ADMIN] ANY []} 任一管理员签名
INVOKE_CONTRACT 执行合约 {[] ANY []} 无限制
SUBSCRIBE 订阅 {[] ANY []} 无限制
QUERY_CONTRACT 查询合约 {[] ANY []} 无限制
ACCOUNT_MANAGER REFUND_GAS_VM ACCOUNT_MANAGER-REFUND_GAS_VM / {[] FORBIDDEN []} 禁止
ACCOUNT_MANAGER SET_ADMIN ACCOUNT_MANAGER-SET_ADMIN 设置管理员地址 {[ADMIN] MAJORITY []} 半数以上管理员多签
CERT_MANAGE CERTS_ALIAS_DELETE CERT_MANAGE-CERTS_ALIAS_DELETE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_DELETE CERT_MANAGE-CERTS_DELETE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_FREEZE CERT_MANAGE-CERTS_FREEZE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_REVOKE CERT_MANAGE-CERTS_REVOKE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERTS_UNFREEZE CERT_MANAGE-CERTS_UNFREEZE / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ADD CERT_MANAGE-CERT_ADD / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ALIAS_ADD CERT_MANAGE-CERT_ALIAS_ADD / {[] FORBIDDEN []} 禁止
CERT_MANAGE CERT_ALIAS_UPDATE CERT_MANAGE-CERT_ALIAS_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG ALTER_ADDR_TYPE CHAIN_CONFIG-ALTER_ADDR_TYPE 修改地址类型 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG BLOCK_UPDATE CHAIN_CONFIG-BLOCK_UPDATE 更新区块配置 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CONSENSUS_EXT_ADD CHAIN_CONFIG-CONSENSUS_EXT_ADD 添加共识扩展参数 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CONSENSUS_EXT_DELETE CHAIN_CONFIG-CONSENSUS_EXT_DELETE 删除共识扩展参数 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CONSENSUS_EXT_UPDATE CHAIN_CONFIG-CONSENSUS_EXT_UPDATE 更新共识扩展参数 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG CORE_UPDATE CHAIN_CONFIG-CORE_UPDATE 更新核心模块配置 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG ENABLE_OR_DISABLE_GAS CHAIN_CONFIG-ENABLE_OR_DISABLE_GAS 是否开启gas {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG NODE_ID_ADD CHAIN_CONFIG-NODE_ID_ADD 添加节点ID {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG NODE_ID_DELETE CHAIN_CONFIG-NODE_ID_DELETE 删除节点ID {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG NODE_ID_UPDATE CHAIN_CONFIG-NODE_ID_UPDATE 更新节点ID {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG NODE_ORG_ADD CHAIN_CONFIG-NODE_ORG_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ORG_DELETE CHAIN_CONFIG-NODE_ORG_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG NODE_ORG_UPDATE CHAIN_CONFIG-NODE_ORG_UPDATE 更新节点ID列表 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG PERMISSION_ADD CHAIN_CONFIG-PERMISSION_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG PERMISSION_DELETE CHAIN_CONFIG-PERMISSION_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG PERMISSION_UPDATE CHAIN_CONFIG-PERMISSION_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG SET_ACCOUNT_MANAGER_ADMIN CHAIN_CONFIG-SET_ACCOUNT_MANAGER_ADMIN 设置管理员地址 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG SET_INVOKE_BASE_GAS CHAIN_CONFIG-SET_INVOKE_BASE_GAS {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG TRUST_MEMBER_ADD CHAIN_CONFIG-TRUST_MEMBER_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_DELETE CHAIN_CONFIG-TRUST_MEMBER_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_MEMBER_UPDATE CHAIN_CONFIG-TRUST_MEMBER_UPDATE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG TRUST_ROOT_ADD CHAIN_CONFIG-TRUST_ROOT_ADD 添加管理员公钥 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG TRUST_ROOT_DELETE CHAIN_CONFIG-TRUST_ROOT_DELETE 删除管理员公钥 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG TRUST_ROOT_UPDATE CHAIN_CONFIG-TRUST_ROOT_UPDATE 更新管理员公钥 {[ADMIN] SELF []} 管理员签名
CONTRACT_MANAGE FREEZE_CONTRACT CONTRACT_MANAGE-FREEZE_CONTRACT 冻结合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE GET_DISABLED_CONTRACT_LIST CONTRACT_MANAGE-GET_DISABLED_CONTRACT_LIST / {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE GRANT_CONTRACT_ACCESS CONTRACT_MANAGE-GRANT_CONTRACT_ACCESS / {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE INIT_CONTRACT CONTRACT_MANAGE-INIT_CONTRACT 安装合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE REVOKE_CONTRACT CONTRACT_MANAGE-REVOKE_CONTRACT 吊销合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE REVOKE_CONTRACT_ACCESS CONTRACT_MANAGE-REVOKE_CONTRACT_ACCESS / {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE UNFREEZE_CONTRACT CONTRACT_MANAGE-UNFREEZE_CONTRACT 解冻合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE UPGRADE_CONTRACT CONTRACT_MANAGE-UPGRADE_CONTRACT 升级合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE VERIFY_CONTRACT_ACCESS CONTRACT_MANAGE-VERIFY_CONTRACT_ACCESS / {[] FORBIDDEN []} 禁止
PRIVATE_COMPUTE SAVE_CA_CERT PRIVATE_COMPUTE-SAVE_CA_CERT / {[] FORBIDDEN []} 禁止
PRIVATE_COMPUTE SAVE_ENCLAVE_REPORT PRIVATE_COMPUTE-SAVE_ENCLAVE_REPORT / {[] FORBIDDEN []} 禁止
PUBKEY_MANAGE PUBKEY_ADD PUBKEY_MANAGE-PUBKEY_ADD / {[] FORBIDDEN []} 禁止
PUBKEY_MANAGE PUBKEY_DELETE PUBKEY_MANAGE-PUBKEY_DELETE / {[] FORBIDDEN []} 禁止