场景分析

按照一般业务分析,可以将场景分为以下四种,分别是以下四种场景

起始组网

ABC三个对等机构需要沟通搭建一条链,开始时只需要一个账本,需要生成安装包,启动节点,初始化一个业务。操作步骤如下:

  1. A B C三个机构共享自己的节点证书,节点信息(包括hostip,p2pip,端口号等),由某一机构统一收集(或都收集)
  2. 假设A收集所有资料后,将证书按照cert_p2pip_lport.crt的格式放在meta目录下,并配置mchain.ini中的node信息,指定配置文件中的groupid
  3. A机构执行build命令,指定生成安装包的目录,会在指定目录下生成多个名为node_p2pip_port.tar.gz如 node_127.0.0.1_30301.tar.gz的安装包(或就是一个文件夹)
  4. A机构将生成的安装包分发给BC机构,并将自己的安装包推送至对应服务器,拷贝node.key至安装包的/conf文件夹下,启动节点,默认节点加入的群组为mchain.ini的groupid

考虑场景:是否每个机构都收集信息,生成所有包,但是只推送自己的(地位对等),该操作对generator的实现没有影响

新节点加入网络

新节点加入网络有两种情况,场景如下:

新节点加入现有group

在本场景中,节点需要与所有原有节点进行网络连接,并且需要加入现有群组,以上述起始组网为例,操作步骤如下: 假设D机构需要新加入节点到ABC的组网的group1中(ABC加入节点在网络中同理)

  1. D机构收集ABC组网生成的config.ini 与 group.1.genesis,group.1.ini文件,统一放置与某一文件夹下,如./node_conf
  2. D机构配置[mexpand.ini]中的节点信息(包括hostip,p2pip,端口号等),将证书按照cert_p2pip_lport.crt的格式放在meta目录下
  3. D机构使用expand命令指定./node_conf路径和输出路径,在输出路径生成多个名为node_p2pip_port的文件夹
  4. D机构将导入私钥,将安装包推送至指定服务器,启动节点
  5. D机构请求ABC中的某一个机构将自己的节点注册如group1中,完成新节点入网操作

新节点创建新group

在本场景中,节点只需要与链中的某几个节点进行网络连接,并且不需要加入原有群组,以上述起始组网为例,假设EF机构需要与C机构组网,新建一个group,对于C机构而言,不需要再从新搭建一条链,直接服用[起始组网]中的节点,新建群组即可满足需求

操作步骤类似于[起始组网]:

  1. C E F三个机构共享自己的节点证书,节点信息(包括hostip,p2pip,端口号等),由某一机构统一收集(或都收集)
  2. 假设C收集所有资料后,将证书按照cert_p2pip_lport.crt的格式放在meta目录下,并配置mchain.ini中的node信息,指定配置文件中的groupid(注意,不能与C在group1中的相同)
  3. C机构执行build命令,指定生成安装包的目录,会在指定目录下生成多个名为node_p2pip_port.tar.gz如 node_127.0.0.1_30301.tar.gz的安装包(或就是一个文件夹)
  4. C机构将生成的安装包分发给EF机构,EF收到安装包之后,启动节点
  5. C机构将新生成的group信息如group.2.genesis,group.2.ini文件,放置与原有节点的conf文件夹下,完成新节点创建和新群组建立操作

节点新建群组

在本场景中,链中的已有节点需要建立新群组,如何已经生成链接的节点之前没有建立网络链接,则交换config.ini文件,同步网络链接列表

假设节点均已建立为网络链接,先要建立新群组,如上述场景中ABCD要新建立group3,则需要进行的操作如下:

  1. ABCD中交换节点证书,设A收集完成后,按照cert_p2pip_lport.crt的格式放在meta目录下
  2. A配置[mgroup.ini]中的信息,(是否要在这里填写groupmember信息)
  3. A执行create命令,生成group.i.genesis和group.i.ini,将group.i.genesis和group.i.ini交换给BCD
  4. ABCD将生成group.i.genesis和group.i.ini拷贝到节点的conf/文件夹下,完成新群组的建立