共识节点管理

CITA作为一个面向企业级应用的区块链框架,需要保证监管方能够获得相关的权限对共识节点进行管理,包括增加、删除共识节点等操作。对于共识服务方面,需要对其提供实时读取共识节点列表的接口,而中心化管理的方式无法保证各个节点的共识节点列表的安全性及一致性。CITA采用合约的方式来实现共识节点的管理,通过区块链上的合约可以保证共识节点的安全性及一致性。

在CITA初始化创世块阶段,需要初始化一个管理员地址,其拥有管理员角色,将其写入到每个节点的创世块文件中,共识节点管理合约拥有的一个固定地址也写入其中。创世块内容在初始化以后不允许被修改。区块链正常启动之后,将合约写入到创世块中。链外的操作人员可以通过调用RPC接口来实现对共识节点的管理。

对于共识节点的管理,包括添加、删除及获得共识节点。

  • 添加操作分为发起和确认,节点先调用发起请求,申请成为共识节点,由管理员(拥有管理员角色的账号)确认才完成了添加操作;
  • 删除操作只可由管理员执行;
  • 共识服务可获得共识节点列表。

只读节点安装生成后申请成为共识节点,需要进行以下操作:

  • 将账号地址提交给管理员;
  • 节点发起由管理员确认完成,合约中记录其为共识节点;
  • 和其他节点共同修改本地节点白名单;
  • 等待区块数据同步完成后即可参与下一次的共识。

共识节点管理合约接口

  • 准备共识节点-newNode
    • 普通角色即可;
    • 成功后新节点准备成为共识节点,并将其记录在合约共识节点列表中,同时节点将处于new状态;
    • 传入参数address,为新增节点地址;
    • 返回类型为bool,可通过其判断操作成功与否。
  • 确认共识节点-approveNode
    • 需要管理员角色;
    • 新节点成功准备后,可调用此方法确认节点成为共识节点,同时节点将处于consensus状态;
    • 传入参数string,为新增共识节点地址;
    • 返回类型为bool,可通过其判断操作成功与否。
  • 删除共识节点-deleteNode
    • 需要管理员角色;
    • 成功后节点将从节点列表中删除,同时节点将处于close状态;
    • 传入参数为address,为节点地址;
    • 返回类型为bool,可通过其判断操作成功与否。
  • 获取共识节点列表-listNode
    • 只读方法,普通角色即可;
    • 态获取共识节点列表,即状态为consensus的节点;
    • 返回结果为string。节点列表中的多个节点会拼接成一个字符串。之后可通过解析会获得节点列表。
  • 获得节点状态-getStatus
    • 只读方法,普通角色即可;
    • 获取共识节点状态;
    • 传入参数为节点公钥;
    • 返回结果为uint8:
      • 0表示close状态
      • 1表示new状态
      • 2表示consensus状态