4. 管理PK账户模式的链

4.1. 从零生成链账户部署PK模式链

如果对链账户的公私钥对无特殊要求则可基于部署PK账户模式的链搭建链,如果有特殊要求则参考此文章。

阅读本章节前,请先阅读部署PK账户模式的链,并确保已完成该章节相关的环境依赖准备。

下文将展示通过长安链cmc工具生成新的公私钥对,并基于此搭建新的链;如果有其他生成公私钥对的工具,用户可自行采用,搭建链的流程相似。

4.1.1. 生成链账户

pk模式无证书概念,因此对于节点、管理员以及用户而言,都是公私钥的形式。 节点账户的地址需要添加到共识列表,管理员账户需要添加到管理员列表; 而普通用户账户,可以直接调用管理员部署的合约,无需注册。

4.1.1.1. 部署cmc命令行工具

长安链命令行工具cmc安装, 请参考长安链命令行工具

4.1.1.2. 生成节点账户

  # 生成节点账户私钥
$ ./cmc key gen -a ECC_P256 -p ./ -n consensus1.key
 
  # 导出节点账户公钥
$ ./cmc key export_pub -k consensus1.key -n consensus1.pem
 
 # 计算节点账户地址
$ ./cmc cert nid --node-pk-path=./consensus1.pem
node id : QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93

4.1.1.3. 生成admin账户

# 生成管理员私钥
 ./cmc key gen -a ECC_P256 -p ./ -n admin.key

# 导出管理员公钥
 ./cmc key export_pub -k admin.key -n admin.pem
 
# 查看管理员公钥(账户)
$ cat admin.pem
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsIYfDrQCt1/H8Yj5KKKD+uO28zz7
nTovDgim/jezoGdpmNOUp6lwrN47pxBUpnxEXIqHBwz8uaVR1z3y9kDvTg==
-----END PUBLIC KEY-----

重复以上步骤分别生成4个节点账户和4个管理员账户。

4.1.2. 修改链配置

先将部署PK账户模式的链文章处所生成的相关配置文件内的链账户信息替换成上文新生成的。

配置文件目录结构说明

./config
└── node1
    ├── admin
       ├── admin1 #optional
          ├── admin1.key 
          └── admin1.pem
       ├── admin2
          ├── admin2.key
          └── admin2.pem
       ├── admin3
          ├── admin3.key
          └── admin3.pem
       ├── admin4
          ├── admin4.key
          └── admin4.pem
    ├── chainconfig
       └── bc1.yml # 更新后的链配置文件,参考上节说明
    ├── chainmaker.yml # 更新后的链配置文件,参考上节说明
    ├── log.yml
    ├── node1.key #节点1密钥
    ├── node1.nodeid #节点1的nodeid
    ├── node1.pem #节点1的公钥
    └── user #optional
        └── client1
            ├── client1.addr
            ├── client1.key
            └── client1.pem

4.1.2.1. 替换公私钥对

在启动节点之前,需要将以上部署过程中用到的各个节点公私钥、管理员公私钥替换为以上用cmc生成的公私钥对。

4.1.2.2. 修改配置文件

将上文获取的节点账户和管理员账户,配置到链配置文件bc1.ymltrust_roots里,并将bc1.ymlchainmaker.yml中的nodes.node_id替换为以上获取的节点nodeId。

配置文件修改位置如下

  • bc1.yml(链配置文件)

#共识配置
consensus:
  # Consensus type: 1-TBFT,5-DPOS
  type: 1
  nodes:
    - org_id: "public"
      node_id:
        - "QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93"
        - "QmSXhWkujKh2PEN5tFuiTBnSbkx7vN6P9zPoa6RViLdpdA"
        - "QmfR4jNLsBK3FedeCLyTmzaCeaECK3VjDRoY6XcjiUpWYJ"
        - "QmRKZyDH89CH3zJaSC5VHn9tgcBbs7jc1mDVd9QgyzmKan"
      
trust_roots:
  - org_id: "public"
    root:
      - "../config/node1/admin/admin1/admin1.pem"
      - "../config/node1/admin/admin2/admin2.pem"
      - "../config/node1/admin/admin3/admin3.pem"
      - "../config/node1/admin/admin4/admin4.pem"
  • chainmaker.yml (节点配置文件)

# Network Settings
net:
  # Network provider, can be libp2p or liquid.
  # libp2p: using libp2p components to build the p2p module.
  # liquid: a new p2p module we build from 0 to 1.
  # This item must be consistent across the blockchain network.
  provider: LibP2P

  # The address and port the node listens on.
  # By default, it uses 0.0.0.0 to listen on all network interfaces.
  listen_addr: /ip4/0.0.0.0/tcp/11301

  # The seeds peer list used to join in the network when starting.
  # The connection supervisor will try to dial seed peer whenever the connection is broken.
  # Example ip format: "/ip4/127.0.0.1/tcp/11301/p2p/"+nodeid
  # Example dns format:"/dns/cm-node1.org/tcp/11301/p2p/"+nodeid
  seeds:
    - "/ip4/127.0.0.1/tcp/11301/p2p/QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93"
    - "/ip4/127.0.0.1/tcp/11302/p2p/QmSXhWkujKh2PEN5tFuiTBnSbkx7vN6P9zPoa6RViLdpdA"
    - "/ip4/127.0.0.1/tcp/11303/p2p/QmfR4jNLsBK3FedeCLyTmzaCeaECK3VjDRoY6XcjiUpWYJ"
    - "/ip4/127.0.0.1/tcp/11304/p2p/QmRKZyDH89CH3zJaSC5VHn9tgcBbs7jc1mDVd9QgyzmKan"

同时各个节点部署目录下的bc.ymlchainmaker.yml配置文件按照以上说明进行修改。

4.1.3. 节点部署和链启动

节点部署启动与部署PK账户模式的链文章一致,可自行参考。

按照以上方式启动org1、org2、org3和org4下的共识节点,等到所有节点建立连接,表明区块链网络部署成功,并可以对外提供区块链服务。
可通过遗下命令查看节点日志,若看到all necessary peers connected则表示节点已经准备就绪。

[INFO]  [Net]   libp2pnet/libp2p_connection_supervisor.go:116   [ConnSupervisor] all necessary peers connected.

4.1.4. 部署/调用智能合约

链部署后,再进行部署/调用合约测试,以验证链是否正常运行。部署合约的使用教程可详见:部署示例合约

4.2. 链节点增删管理

4.2.1. 同步节点的增删

在pk模式下,同步节点可以自由加入和退出网络,并同步账本,但不参与共识。

4.2.1.1. 新增同步节点(待补充)

1、先生成新节点的节点账户,可参考生成节点账户

2、再基于所要加入的链的创世区块配置文件。bc.yml,启动节点,节点启动成功后将自动加入链网络。

4.2.1.2. 更新、删除、查询同步节点

暂不支持同步节点的更新、查询、删除功能,原则上同步节点停止运行则视为自动退出。

4.2.2. 共识节点的增删

如果节点要从同步节点升级为共识节点,则需要用管理员账号进行操作。

4.2.2.1. 通过CMC工具管理共识节点

  • 增加共识节点

./cmc client chainconfig consensusnodeid add \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--user-signkey-file-path=./testdata/crypto-config/node1/admin/admin1/admin1.key \
--admin-key-file-paths=./testdata/crypto-config/node1/admin/admin1/admin1.key,./testdata/crypto-config/node1/admin/admin2/admin2.key,./testdata/crypto-config/node1/admin/admin3/admin3.key \
--node-id=QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93 \  #这里为新添加节点的nodeId
--node-org-id=public
  • 更新共识节点Id

./cmc client chainconfig consensusnodeid update \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--user-signkey-file-path=./testdata/crypto-config/node1/admin/admin1/admin1.key \
--admin-key-file-paths=./testdata/crypto-config/node1/admin/admin1/admin1.key,./testdata/crypto-config/node1/admin/admin2/admin2.key,./testdata/crypto-config/node1/admin/admin3/admin3.key \
--node-id=QmXxeLkNTcvySPKMkv3FUqQgpVZ3t85KMo5E4cmcmrexrC \
--node-id-old=QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93 \ 
--node-org-id=public
  • 删除共识节点

./cmc client chainconfig consensusnodeid remove \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--user-signkey-file-path=./testdata/crypto-config/node1/admin/admin1/admin1.key \
--admin-key-file-paths=./testdata/crypto-config/node1/admin/admin1/admin1.key,./testdata/crypto-config/node1/admin/admin2/admin2.key,./testdata/crypto-config/node1/admin/admin3/admin3.key \
--node-id=QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93 \
--node-org-id=public
  • 查询共识节点
    共识节点可以通过链配置查询,在consensus字段下会返回当前区块链网络中的共识节点列表,命令如下:

./cmc client chainconfig query \
--sdk-conf-path=./testdata/sdk_config_pk.yml

  "consensus": {
    "nodes": [
      {
        "node_id": [
          "QmeqnZEgGeQYyc4qX92XV3SxafqRJqCQ9388jWp2N1oA93",
          "QmSXhWkujKh2PEN5tFuiTBnSbkx7vN6P9zPoa6RViLdpdA",
          "QmfR4jNLsBK3FedeCLyTmzaCeaECK3VjDRoY6XcjiUpWYJ",
          "QmRKZyDH89CH3zJaSC5VHn9tgcBbs7jc1mDVd9QgyzmKan"
        ],
        "org_id": "public"
      }
    ],
    "type": 1
  },

4.3. 链账户的增删

4.3.1. 普通用户的增删

在长安链pk模式下,普通账户无需注册,使用任意工具生成和链保持一致的密码算法的公私钥对,即可为PK模式链的链用户,可直接调用合约。

  • 示例:通过生成普通账户

# 生成普通用户私钥user.key
 ./cmc key gen -a ECC_P256 -p ./ -n user.key

4.3.2. 链管理员账户的增删

目前公钥模式只支持批量更新管理员,新管理员列表会替换旧管理员列表,请谨慎操作。

# 生成管理员私钥
 ./cmc key gen -a ECC_P256 -p ./ -n admin.key

# 导出管理员公钥
 ./cmc key export_pub -k admin.key -n admin.pem
 
# 更新管理员账户
./cmc client chainconfig trustroot update \
--sdk-conf-path=./testdata/sdk_config_pk.yml \
--user-signkey-file-path=./testdata/crypto-config/node1/admin/admin1/admin1.key \
--admin-key-file-paths=./testdata/crypto-config/node1/admin/admin1/admin1.key,./testdata/crypto-config/node1/admin/admin2/admin2.key,./testdata/crypto-config/node1/admin/admin3/admin3.key \
--trust-root-org-id=public \
--trust-root-path=./admin.pem,./testdata/crypto-config/node1/admin/admin1/admin1.pem,./testdata/crypto-config/node1/admin/admin2/admin2.pem,./testdata/crypto-config/node1/admin/admin3/admin3.pem

# 查询管理员列表
```shell
 ./cmc client chainconfig query \
--sdk-conf-path=./testdata/sdk_config_pk.yml 

 "trust_roots": [
    {
      "org_id": "public",
      "root": [
        "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEi95yJxLXrKEeBi5ZJqjk2lEFMKfM\n4pydPq78oTbnHQgQc47eTUENVxBIAEI/mAKjsK82i32amXG0Q9dyqZUWRw==\n-----END PUBLIC KEY-----\n",
        "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfVzW4O+RjSi+0mPl7HE80LfDup+E\n3s1mziNwP/d5r6X5D5pSdtcGhR80+9rOnIaayM2Eb61m147K72HmgH0I5A==\n-----END PUBLIC KEY-----\n",
        "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3cFf3ISXtD+vyc6LjuohlHX8A4yG\nIHlMpbwB+H1411TYCgutRoyjXbUy9kcJrXySLS7UCb+/c/yNZ+tz0a6dmA==\n-----END PUBLIC KEY-----\n",
        "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPuPoOk1otXmNnY0nF0B/eBhIMhEC\niE19OneK0AA4nsk6lsef5PoOG8rI5EljCNIxJQ4pOthTMhX6B0gVjlWoZw==\n-----END PUBLIC KEY-----\n"
      ]
    }
  ],

4.4. 链权限管理

4.4.1. 权限定义

长安链采用三段式语法定义资源的访问权限:规则 (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] 资源所属组织的管理员提供签名才可访问对应资源,例如组织管理员有权修改各自组织的根证书

4.4.2. 支持的共识算法

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

4.4.3. 权限管理

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

4.4.3.1. 交易类型

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

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

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

交易类型 功能
ARCHIVE 数据归档

4.4.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 []} 禁止
ACCOUNT_MANAGER SET_CONTRACT_METHOD_PAYER ACCOUNT_MANAGER-SET_CONTRACT_METHOD_PAYER / {[] FORBIDDEN []} 禁止
ACCOUNT_MANAGER CHARGE_GAS ACCOUNT_MANAGER-CHARGE_GAS 收取gas费用 {[] FORBIDDEN []} 禁止
ACCOUNT_MANAGER CHARGE_GAS_FOR_MULTI_ACCOUNT ACCOUNT_MANAGER-CHARGE_GAS_FOR_MULTI_ACCOUNT 收取多个帐户gas费用 {[CONSENSUS] ANY []} 任意节点可以操作
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 查询证书 {[] 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 UPDATE_VERSION CHAIN_CONFIG-UPDATE_VERSION 更新链版本 {[ADMIN] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG BLOCK_UPDATE CHAIN_CONFIG-BLOCK_UPDATE 更新区块配置 {[ADMIN] ANY []} 任一管理员签名
CHAIN_CONFIG CONSENSUS_EXT_ADD CHAIN_CONFIG-CONSENSUS_EXT_ADD / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG CONSENSUS_EXT_DELETE CHAIN_CONFIG-CONSENSUS_EXT_DELETE / {[] FORBIDDEN []} 禁止
CHAIN_CONFIG CONSENSUS_EXT_UPDATE CHAIN_CONFIG-CONSENSUS_EXT_UPDATE / {[] FORBIDDEN []} 禁止
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 添加权限 {[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_INVOKE_BASE_GAS CHAIN_CONFIG-SET_INVOKE_BASE_GAS 设置基础扣费的Gas大小(单次调用的最少扣除的Gas数量) {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_INVOKE_GAS_PRICE CHAIN_CONFIG-SET_INVOKE_GAS_PRICE 设置调用 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] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG SET_INSTALL_BASE_GAS CHAIN_CONFIG-SET_INSTALL_BASE_GAS 设置安装/升级合约花费gas {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_INSTALL_GAS_PRICE CHAIN_CONFIG-SET_INSTALL_GAS_PRICE 设置安装/升级合约花费gas/byte {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG ENABLE_ONLY_CREATOR_UPGRADE CHAIN_CONFIG-ENABLE_ONLY_CREATOR_UPGRADE 开启只允许创建者升级合约功能 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG DISABLE_ONLY_CREATOR_UPGRADE CHAIN_CONFIG-DISABLE_ONLY_CREATOR_UPGRADE 关闭只允许创建者升级合约功能 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG MULTI_SIGN_ENABLE_MANUAL_RUN CHAIN_CONFIG-MULTI_SIGN_ENABLE_MANUAL_RUN 启用发送者的多重签名执行合约 {[] FORBIDDEN []} 禁止
CONTRACT_MANAGE FREEZE_CONTRACT CONTRACT_MANAGE-FREEZE_CONTRACT 冻结合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE GET_DISABLED_CONTRACT_LIST CONTRACT_MANAGE-GET_DISABLED_CONTRACT_LIST 获取冻结合约列表 {[] ANY []} 无限制
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 []} 禁止
  V2.3.3版本去掉ALTER_ADDR_TYPE(修改地址类型)功能,地址类型需要在链初始化时确定,确定后不支持修改。

4.4.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开关设置
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 []} 半数以上管理员多签
ACCOUNT_MANAGER SET_CONTRACT_METHOD_PAYER ACCOUNT_MANAGER-SET_CONTRACT_METHOD_PAYER 为合约方法设置代付款账户 {[CONSENSUS CLIENT ADMIN] ANY []} 任意CLIENT、ADMIN、ConsensusNode可操作
ACCOUNT_MANAGER CHARGE_GAS ACCOUNT_MANAGER-CHARGE_GAS 收取gas费用 {[] FORBIDDEN []} 禁止
ACCOUNT_MANAGER CHARGE_GAS_FOR_MULTI_ACCOUNT ACCOUNT_MANAGER-CHARGE_GAS_FOR_MULTI_ACCOUNT 收取多个帐户gas费用 {[CONSENSUS] ANY []} 任意节点可以操作
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 查询证书 {[] 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 UPDATE_VERSION CHAIN_CONFIG-UPDATE_VERSION 更新链版本 {[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 添加权限 {[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 SET_INVOKE_GAS_PRICE CHAIN_CONFIG-SET_INVOKE_GAS_PRICE 设置调用 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] MAJORITY []} 半数以上管理员多签
CHAIN_CONFIG SET_INSTALL_BASE_GAS CHAIN_CONFIG-SET_INSTALL_BASE_GAS 设置安装/升级合约花费gas {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG SET_INSTALL_GAS_PRICE CHAIN_CONFIG-SET_INSTALL_GAS_PRICE 设置安装/升级合约花费gas/byte {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG ENABLE_ONLY_CREATOR_UPGRADE CHAIN_CONFIG-ENABLE_ONLY_CREATOR_UPGRADE 开启只允许创建者升级合约功能 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG DISABLE_ONLY_CREATOR_UPGRADE CHAIN_CONFIG-DISABLE_ONLY_CREATOR_UPGRADE 关闭只允许创建者升级合约功能 {[ADMIN] MAJORITY []} 半数以上组织管理员多签
CHAIN_CONFIG MULTI_SIGN_ENABLE_MANUAL_RUN CHAIN_CONFIG-MULTI_SIGN_ENABLE_MANUAL_RUN 启用发送者的多重签名执行合约 {[ADMIN] MAJORITY []} 半数以上管理员多签
CONTRACT_MANAGE FREEZE_CONTRACT CONTRACT_MANAGE-FREEZE_CONTRACT 冻结合约 {[ADMIN] ANY []} 任一管理员签名
CONTRACT_MANAGE GET_DISABLED_CONTRACT_LIST CONTRACT_MANAGE-GET_DISABLED_CONTRACT_LIST 获取冻结合约列表 {[] ANY []} 无限制
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 []} 禁止
  V2.3.3版本去掉ALTER_ADDR_TYPE(修改地址类型)功能,地址类型需要在链初始化时确定,确定后不支持修改。