# 长安链组织和节点管理
## 长安链组织管理
长安链组织管理包括如下接口:
- 添加组织根证书:添加一个组织的根证书,每个组织可以有多个不重复的根证书。
- 更新组织根证书:更新某个组织的根证书,更新根证书之前,需保证该组织没有参与共识,即chainconfig的consensus.node中不包含该组织的名称。
- 删除组织根证书:删除某个组织的所有根证书,删除根证书之前,需保证该组织没有参与共识。
命令行发送交易参考:[添加组织根证书](../dev/命令行工具.html#chainConfig.addOrgRootCA)
## 节点管理
### 节点简介
ChainMaker区块链网络中有三类节点 `共识节点` `同步节点` `轻节点`
下面详细介绍各类型节点的管理操作。
也可使用 [SDK](../dev/SDK.md) 开发自定义管理工具。
## 目录
- [共识节点](#consensusNode)
- [加入网络](#addConsensusNode)
- [退出网络](#delConsensusNode)
- [更新共识节点的 NodeID](#updateConsensusNodeId)
- [同步节点](#syncNode)
- [开始同步](#startSync)
- [停止同步](#stopSync)
- [链配置](#chainConfig)
### 共识节点
- [加入网络](#addConsensusNode)
- [退出网络](#delConsensusNode)
- [更新共识节点的 NodeID](#updateConsensusNodeId)
#### 加入网络
##### BFT类(TBFT、Maxbft)共识、RAFT共识
关于新增节点的具体操作示例,参考[构造新节点加入网络](./典型场景示例.md)
如果新增共识节点所属的组织根证书不存在与区块链网络中,那么请先参考[证书管理](./证书管理.md)获得证书后,从第1步开始。
以创建新组织wx-org5.chainmaker.org为例,具体步骤如下:
- 1.[使用cmc添加组织根证书](../dev/命令行工具.html#chainConfig.addOrgRootCA)
- 2.准备物料包,启动节点程序,等待节点同步至最新高度区块
```sh
1. 复制部署包
$ cd build/release
$ cp -rf chainmaker-v2.0.0-wx-org1.chainmaker.org chainmaker-v2.0.0-wx-org5.chainmaker.org
2. 把chainmaker-v2.0.0-wx-org5.chainmaker.org/bin下所有的.sh脚本中所有wx-org1.chainmaker.org替换为wx-org5.chainmaker.org
3. 重命名
$ cd build/release/chainmaker-v2.0.0-wx-org5.chainmaker.org/config
$ mv wx-org1.chainmaker.org wx-org5.chainmaker.org
4. 使用chainmaker-cryptogen生成的wx-org5.chainmaker.org下的node和user分别覆盖掉chainmaker-v2.0.0-wx-org5.chainmaker.org/config/wx-org5.chainmaker.org/certs下的node和user
5. 修改chainmaker.yml
把chainmaker-v2.0.0-wx-org5.chainmaker.org/config/wx-org5.chainmaker.org/chainmaker.yml中所有wx-org1.chainmaker.org替换为wx-org5.chainmaker.org
修改net模块,把 listen_addr: /ip4/0.0.0.0/tcp/11301 修改为 listen_addr: /ip4/0.0.0.0/tcp/11305
修改rpc模块,把 port: 12301 修改为 port: 12305
修改monitor模块,把 port: 14321 修改为 port: 14325
修改pprof模块,把 port: 24321 修改为 port: 24325
6. 修改chainmaker-v2.0.0-wx-org5.chainmaker.org/config/wx-org5.chainmaker.org/chainconfig/bc1.yml中的trust_roots模块。
把所有 ../config/wx-org1.chainmaker.org 修改为 ../config/wx-org5.chainmaker.org
7. 启动节点
$ cd build/release/chainmaker-v2.0.0-wx-org5.chainmaker.org/bin
$ ./start.sh
8. 通过日志观察节点同步的区块高度
$ cd build/release/chainmaker-v2.0.0-wx-org5.chainmaker.org/log
$ tail -f system.log | grep "commit block \["
```
- 3.[使用cmc添加为共识节点](../dev/命令行工具.html#chainConfig.addConsensusNodeOrg)
##### DPoS 共识
因为【Chainmaker v1.2.0+】的DPoS基于证书体系构建的,所以,当添加新的共识节点时,需要先使用命令将新节点添加到证书体系中。
如果新增节点已经添加到链上的证书体系,请从第3步开始。
具体步骤如下:
- 1.[使用cmc添加组织根证书](../dev/命令行工具.html#chainConfig.addOrgRootCA)
- 2.准备物料包,启动节点程序,等待节点同步至最新高度区块(具体操作见上节)
- 3.[使用cmc添加共识节点](../dev/命令行工具.html#chainConfig.addConsensusNodeOrg)
- 4.[使用工具从新用户证书计算用户的地址](../dev/命令行工具.html#chainConfig.addrFromCert)
- 5.[使用ERC20的管理员证书向新增节点的用户地址增发权益](../dev/命令行工具.html#chainConfig.dposMint)
- 6.[查询新增节点的用户地址的账户余额](../dev/命令行工具.html#chainConfig.dposBalanceOf)
- 7.[在stake合约中设置新节点的线上ID](../dev/命令行工具.html#chainConfig.dposSetNodeID)
- 8.[查询新节点的线上ID](../dev/命令行工具.html#chainConfig.dposGetNodeID)
- 9.[新节点通过抵押变为候选人参与共识](../dev/命令行工具.html#chainConfig.dposDelegate)
#### 退出网络
##### BFT类(TBFT、Maxbft)共识、RAFT共识
具体步骤如下:
- 1.[使用cmc删除共识节点](../dev/命令行工具.html#chainConfig.delConsensusNodeId)
- 2.停止节点程序
```shell
$ kill -15 <节点程序pid>
```
***注**
* 退出网络时,如果要删除组织根证书,则必须先删除共识节点,才能删除组织根证书。
##### DPoS共识
- 1.[查询网络验证人节点的最少抵押数量要求](../dev/命令行工具.html#chainConfig.dposMinSelfDelegation)
- 2.[查询验证人数据](../dev/命令行工具.html#chainConfig.dposValidatorInfo)
- 3.[解除共识节点的抵押](../dev/命令行工具.html#chainConfig.dposUndelegate)
- 4.停止节点程序
```shell
$ kill -15 <节点程序pid>
```
#### 更新共识节点的 NodeID
使用cmc更新共识节点的 NodeID 后,无需重启节点程序。
具体步骤如下:
- 1.[使用cmc更新共识节点的 NodeID](../dev/命令行工具.html#chainConfig.updateConsensusNodeId)
### 同步节点
- [开始同步](#startSync)
- [停止同步](#stopSync)
#### 开始同步
以为组织wx-org1.chainmaker.org新增一个同步节点为例,具体步骤如下:
- 1.生成同步节点的证书
通过 [chainmaker-cryptogen](../instructions/证书生成工具.html#extendCA) 或者自建的 [CA证书服务](./CA证书服务.md) 生成同步节点证书
- 2.启动节点程序
```sh
1. 复制部署包
$ cd build/release
$ cp -rf chainmaker-v2.0.0-wx-org1.chainmaker.org chainmaker-v2.0.0-wx-org1.chainmaker.org_common2
2. 把chainmaker-v2.0.0-wx-org1.chainmaker.org_common2/bin下所有的.sh脚本中所有wx-org1.chainmaker.org替换为wx-org1.chainmaker.org_common2
3. 重命名
$ cd build/release/chainmaker-v2.0.0-wx-org1.chainmaker.org_common2/config
$ mv wx-org1.chainmaker.org wx-org1.chainmaker.org_common2
4. 拷贝chainmaker-cryptogen扩展生成的crypto-config/wx-org1.chainmaker.org/node/common2 到 chainmaker-v2.0.0-wx-org1.chainmaker.org_common2/config/wx-org1.chainmaker.org_common2/certs/node下
5. 修改chainmaker.yml
把chainmaker-v2.0.0-wx-org1.chainmaker.org_common2/config/wx-org1.chainmaker.org_common2/chainmaker.yml中所有路径中包含的wx-org1.chainmaker.org替换为wx-org1.chainmaker.org_common2
修改node模块,把 certs/node/consensus1/consensus1.sign.key 修改为 certs/node/common2/common2.sign.key
修改node模块,把 certs/node/consensus1/consensus1.sign.crt 修改为 certs/node/common2/common2.sign.crt
修改net模块,把 certs/node/consensus1/consensus1.tls.key 修改为 certs/node/common2/common2.tls.key
修改net模块,把 certs/node/consensus1/consensus1.tls.crt 修改为 certs/node/common2/common2.tls.crt
修改net模块,把 listen_addr: /ip4/0.0.0.0/tcp/11301 修改为 listen_addr: /ip4/0.0.0.0/tcp/11306
修改rpc模块,把 port: 12301 修改为 port: 12306
修改monitor模块,把 port: 14321 修改为 port: 14326
修改pprof模块,把 port: 24321 修改为 port: 24326
6. 修改chainmaker-v2.0.0-wx-org1.chainmaker.org_common2/config/wx-org1.chainmaker.org_common2/chainconfig/bc1.yml中的trust_roots模块。
把所有 ../config/wx-org1.chainmaker.org 修改为 ../config/wx-org1.chainmaker.org_common2
7. 启动节点
$ cd build/release/chainmaker-v2.0.0-wx-org1.chainmaker.org_common2/bin
$ ./start.sh
8. End
```
#### 停止同步
停止节点程序即可停止同步。
具体步骤如下:
- 1.停止节点程序
```shell
$ kill -15 <节点程序pid>
```
### 链配置
ChainMaker区块链网络在部署并启动完成后,使用 [cmc](../dev/命令行工具.md) 命令行工具进行链配置的查询、更新。
也可以使用 [SDK](../dev/SDK.md) 开发自定义客户端进行链配置的相关操作。
#### 查询类
- [使用cmc查询链配置](../dev/命令行工具.html#chainConfig.query)
#### 更新类
- [使用cmc更新出块时间](../dev/命令行工具.html#chainConfig.updateBlockInterval)