Run Conflux Node

如何运行 Conflux 主网节点

Conflux 是一个基于 PoW(工作量证明) + PoS(权益证明) 的完全去中心化网络,如果想要参与此去中心化网络挖矿,或者拥有自己的 RPC 服务需要自己运行一个 node (也称 client)。本文将介绍如何运行一个 Conflux 节点。

ArchiveNode VS FullNode

Conflux 的节点分为三种类型:归档节点(ArchiveNode),全节点(FullNode),轻节点(LightNode)。不同类型节点的区别在于保留存储的数据量不同,归档节点最全,轻节点最少。当然存储数据越多消耗的系统硬件资源越多。关于不同类型节点的详细介绍参看这里

通常情况下如果想参与挖矿,运行一个全节点即可,如果想作为 RPC 服务来使用则需要运行一个 ArchiveNode. 轻节点则主要用于作为钱包来使用。

机器配置

运行一个 ArchiveNode 的机器资源大致如下:

Fullnode 对机器配置的要求会低一些,如果想参与挖矿出块的话,需要有单独的显卡

另外: 建议将系统的最大文件打开数调高到 10000。一般 Linux 系统默认为 1024, 不太够用。

阿里云建议使用通用型 G7 或性能更强配置;AWS推荐 m5.xlarge 或性能更强配置。

作为 RPC 节点时,最好使用高性能磁盘:阿里云推荐磁盘使用 ESSD 盘;AWS 至少使用 GP3 类型,不低于6000IOPS,或者使用 Provisioned IOPS SSD按需求自定义。

如何获取节点程序和配置

Conflux 网络节点程序的获取方式,首推到官方 Github Conflux-rust 仓库的 Release 页面 进行下载, 一般直接下载最新 Release 的版本即可。每个 Release 的版本不仅包含源代码,还提供 Windows, Mac, Linux 三大平台预编译好的节点程序。

需要注意的是目前主网和测试网节点程序的版本发布是两条线: 主网一般是 conflux-vx.x.x, 测试网则为 conflux-vx.x.x-testnet. 下载程序时需要根据个人的需求选择正确的版本线。

下载的 zip 包,解压后是一个 run 文件夹,里面包含如下内容:

➜  tree
.
├── conflux  # 节点程序
├── log.yaml # 日志配置文件
├── pos_config # pos 相关配置
│   ├── genesis_file
│   ├── initial_nodes.json
│   └── pos_config.yaml
├── start.bat # windows 启动脚本
├── start.sh # unix 启动脚本
├── hydra.toml # 主网配置文件
└── throttling.toml # 限流配置文件

0 directories, 6 files

其中主要文件为 confluxhydra.toml(或 tethys.toml), 如果下载的是 windows 包的话, 节点程序为 conflux.exe

另外一种方式是从源码编译节点程序,如果有兴趣的话,可以参考此文档自行编译。

主要配置项

在运行节点前需要先准备好节点配置文件,在下载的程序包里可以找到配置文件,一般主网是 hydra.toml (或 tethys.toml), 测试网则为 testnet.toml. 两个配置文件主要区别在于 bootnodeschainId 的配置值不同。开发者也可以到 conflux-rust Github 仓库的 run 目录下面查找配置文件。文件名同样为 hydra.tomltestnet.toml

通常情况用户不需要修改任何配置,直接运行启动脚本即可(不想了解配置细节?直接跳到下一章节运行节点)。但如果想打开某些功能或自定义节点某些行为,就需要自行设置一些配置参数,以下为最常用的一些配置:

节点类型

chainId

Snapshot

directries

日志的 log 级别越高,打印的日志越多,响应的会占用贡多的存储空间,也会影响节点的性能.

开发者(dev)模式

Conflux-rust 还提供一个开发者(dev)模式,该模式下会启动一个单节点链,并默认打开所有的 RPC 方法。此模式节点非常适合智能合约开发者快速部署和调试合约。 其配置方式如下:

Conflux-rust v2.0 开始,dev 模式不会自动打开 http RPC port,需要用户手动打开

配置 genesis 账户

在 dev 模式下可以通过一个单独的 genesis_secrets.txt 文件,配置 genesis 账户,该文件中需要一行放置一个私钥(不带0x前缀), 并在配置文件中添加 genesis_secrets 配置项,将值配置为 该文件的路径:

genesis_secrets = './genesis_secrets.txt'

这样节点启动之后,每个账户初始会有 10000,000,000,000,000,000,000 Drip 也就是 1w CFX。

其他

关于完整的配置项,可以直接查看配置文件,其中有所有的可配置项,以及详细的注释介绍.

运行节点

配置文件配好了,就可以通过节点程序,运行节点了。第一次启动节点的时候需要设置 pos_key 的加密密码(一次设置,一次确认);之后每次启动节点需要输入此密码。该密码也可以在配置文件中配置(dev_pos_private_key_encryption_password

# 运行启动脚本
$ ./start.sh

如果你在 stdout 或日志文件看到如下内容,表示节点已经成功启动了:

2021-04-14T11:54:23.518634+08:00 INFO  main                 network::thr - throttling.initialize: min = 10M, max = 64M, cap = 256M
2021-04-14T11:54:23.519229+08:00 INFO  main                 conflux      -
:'######:::'#######::'##::: ##:'########:'##:::::::'##::::'##:'##::::'##:
'##... ##:'##.... ##: ###:: ##: ##.....:: ##::::::: ##:::: ##:. ##::'##::
 ##:::..:: ##:::: ##: ####: ##: ##::::::: ##::::::: ##:::: ##::. ##'##:::
 ##::::::: ##:::: ##: ## ## ##: ######::: ##::::::: ##:::: ##:::. ###::::
 ##::::::: ##:::: ##: ##. ####: ##...:::: ##::::::: ##:::: ##::: ## ##:::
 ##::: ##: ##:::: ##: ##:. ###: ##::::::: ##::::::: ##:::: ##:: ##:. ##::
. ######::. #######:: ##::. ##: ##::::::: ########:. #######:: ##:::. ##:
:......::::.......:::..::::..::..::::::::........:::.......:::..:::::..::
Current Version: 1.1.3-testnet

2021-04-14T11:54:23.519271+08:00 INFO  main                 conflux      - Starting full client...

节点启动后会在 run 目录里新建两个文件夹 blockchain_data, log 用于存储节点数据和日志。

启动一个全新的主网或测试网节点后,它会从网络同步历史区块数据,追赶中的节点处于 catch up 模式,可以从日志看到节点的状态和最新的 epoch 数:

2021-04-16T14:49:11.896942+08:00 INFO  IO Worker #1         cfxcore::syn - Catch-up mode: true, latest epoch: 102120 missing_bodies: 0
2021-04-16T14:49:12.909607+08:00 INFO  IO Worker #3         cfxcore::syn - Catch-up mode: true, latest epoch: 102120 missing_bodies: 0
2021-04-16T14:49:13.922918+08:00 INFO  IO Worker #1         cfxcore::syn - Catch-up mode: true, latest epoch: 102120 missing_bodies: 0
2021-04-16T14:49:14.828910+08:00 INFO  IO Worker #1         cfxcore::syn - Catch-up mode: true, latest epoch: 102180 missing_bodies: 0

你也可以通过 cfx_getStatus 方法获取当前节点的最新 epochNumber,并跟 scan 的最新 epoch 比较从而判断数据是否已经同步到了最新。

RPC 服务

节点启动之后,并且打开了 RPC 相关的端口号和配置的话,则钱包,Dapp 可以通过 RPC url 访问节点. 例如

http://node-ip:12537

Portal 钱包中添加网络,或者 SDK 实例的时候可以使用此地址.

使用 Docker 运行节点

对 Docker 比较熟悉的小伙伴也可以使用 Docker 来运行一个节点。官方提供了各个版本的 Docker image 可以自行 pull image 并运行。

因为节点数据比较大,所以建议在运行 image 时,挂载一个数据目录用于存放节点数据。

目前发布的镜像 tag 有三条 pipeline:

Conflux v2.0 Updates

Conflux v2.0 (Hydra) 是一个重大版本升级,通过 8 个不同的 CIP 引入了一系列新功能。其中最重要的是 PoS 机制和 eSpace 空间。该版本升级也给节点的运营带来一些变化

配置

配置文件命名从 tethys.toml 改为了 hydra.toml

新增配置项

另外配置文件中的 bootnodes 配置也进行了更新。

pos_config 目录

V2.0 hardfork 后,下载的程序包中会包含一个新的目录 pos_config 该目录中存放 PoS 链的 genesis 信息包含三个文件

节点运营者无需对这些文件做任何处理,只要确保运行节点的目录中包含 pos_config 文件夹即可.

节点首次启动会在该目录下创建一个 pos_key, 该文件存储了节点参与 PoS 的私钥,请妥善保管,不要错误删掉或意外泄漏

节点启动

节点的启动方式没有发生变化,还是通过 conflux binary 程序加配置文件启动。若配置文件中未配置 dev_pos_private_key_encryption_password 配置项,则节点第一次启动时,会要求设置 pos_key 密码, 以后节点每次重启也需要通过命令行输入密码。若配置文件中加了此配置项,则启动体验跟之前保持一致。

节点硬盘要求

由于 Conflux 网络已运行超过 1 年时间,节点数据增多不少,因此节点机器的建议硬盘大小从 200G 调整为 1T(ArchiveNode)

PoS 节点运行注意事项

如果参与到 PoS 机制当中(获取 PoS 收益),需要运行一个 PoS 节点,运行 PoS 节点需要注意一下事项

PoS 节点更新或重启如何避免被 forceRetired

PoS 投票节点重启防止被强制退出的操作流程:

  1. 在PoS节点上运行./conflux rpc local pos stop_election,会返回null或者返回一个未来的PoS区块编号。此时节点不再申请加入PoS委员会。
  2. 如果返回了区块编号,则保持节点运行。在返回的PoS区块已经生成之后(几个小时后),再次运行相同命令,此时应该返回null。在这个区块之后节点不再获得PoS奖励。
  3. 如果命令返回值为null,则节点可以安全关闭。在节点重启之后会自动再次加入PoS投票过程(需要2-3个小时才会获得新的PoS挖矿奖励)。

PoS 节点如何更换 pos_key 文件

PoS 节点的账户由 pos_key 生成并控制,该文件在节点初次启动时会自动创建,并由密码保护。一个 pos_key 只能绑定一个 PoW 账户。 如果想更换一个现有节点的 pos_key 文件,或者重新生成 pos_key 文件,除了替换或删除原有文件以外,还需要同时对另外一个文件 pos_db/secure_storage.json 进行相同的操作

常见问题

为什么重启后,同步需要很久?

节点重启后会从上个 checkpoint 开始同步,并重新 replay 区块数据,根据当前距离上一 checkpoint 的远近,需要等待不同的时长,才能开始从最新区块开始同步. 这是正常现象,一般会等几分钟到十几分钟不等。从 conflux-rust v2.0.3 版本开始节点重启过程做了优化,可在十分钟内完成重启。

为什么节点同步的区块高度卡住,不再增长?

如果发现区块同步卡住,不再增长。可查看日志或终端是否有错误,如果没有错误大概率是因为网络原因,可尝试重启节点。

修改配置后,重启节点需要清除数据么?

分情况,有的需要,有的不需要。如果修改的配置涉及到数据存储或数据索引,需要清数据重启节点,比如:

修改其他配置不需要清数据,直接重启即可.

目前的 archive node 数据有多大?

截止到 2022.8.1 区块数据的压缩包大小为不到 300 G

如何参与挖矿?

挖矿需要使用 GPU 参与,具体可参看这里

如何快速同步数据,从而运行一个 archive node

可使用 fullnode-node 下载归档节点的数据快照,使用快照的节点数据,可以快速同步到最新数据。

节点运行 error 日志怎么看?

如果是通过 start.sh 运行的节点,可以在相同目录中的 stderr.txt 查看错误原因。

运行节点是否需要公网 IP?

如果不对外提供 RPC 服务,运行一个 Conflux 节点不需要公网IP。

节点升级 v2 错误

No such device or address

若节点从 v1.x 版本升级到 v2 遇到如下错误,则可能节点是通过 Supervisor 等方式启动. 节点启动时无法正确读取 pos_key 加密密码。 此种情况可在配置文件中添加配置项 dev_pos_private_key_encryption_password

Error: "failed to start full client: \"Os { code: 6, kind: Uncategorized, message: \\\"No such device or address\\\" }\""

参考

如何运行 Conflux 开发(local)节点

安装环境

下载依赖

基于开发者文档安装环境https://developer.confluxnetwork.org/conflux-doc/docs/installation/ (推荐使用linux与osx, windows需要安装vs2015及其余包, 过于繁琐)

编译源码

下载conflux源码

$ git clone https://github.com/Conflux-Chain/conflux-rust
$ cd conflux-rust
$ git checkout v2.0.0

构建

$ cargo build --release

运行单节点

进入conflux的run目录

$ cd conflux-rust/run

将主网toml文件复制为dev下的toml文件

$ cp hydra.toml develpoment.toml

修改development.toml

# 删去boostnode字段
# mode = "dev"取消注释
# dev_block_interval_ms = 250 取消注释

根据以下脚本进行本地单节点运行

export RUST_BACKTRACE=1
export RUST_BACKTRACE=full
../target/release/conflux --config development.toml

当看到如下样式, 并稳定出块, 则启动成功

2022-06-13T14:14:37.433135500+08:00 INFO  main                 network::thr - throttling.initialize: min = 10M, max = 64M, cap = 256M
2022-06-13T14:14:37.435180+08:00 INFO  main                 conflux      -
:'######:::'#######::'##::: ##:'########:'##:::::::'##::::'##:'##::::'##:
'##... ##:'##.... ##: ###:: ##: ##.....:: ##::::::: ##:::: ##:. ##::'##::
 ##:::..:: ##:::: ##: ####: ##: ##::::::: ##::::::: ##:::: ##::. ##'##:::
 ##::::::: ##:::: ##: ## ## ##: ######::: ##::::::: ##:::: ##:::. ###::::
 ##::::::: ##:::: ##: ##. ####: ##...:::: ##::::::: ##:::: ##::: ## ##:::
 ##::: ##: ##:::: ##: ##:. ###: ##::::::: ##::::::: ##:::: ##:: ##:. ##::
. ######::. #######:: ##::. ##: ##::::::: ########:. #######:: ##:::. ##:
:......::::.......:::..::::..::..::::::::........:::.......:::..:::::..::
Current Version: 2.0.0

获取初始代币

由于sdk中发送交易与部署合约账户中需要有cfx, 上述的环境并未给账户中分发代币, 因此需要给账户增加代币

首先获得keystore文件

# 从github的项目中直接复制内容
https://github.com/conflux-fans/conflux-abigen-example/tree/main/keystore

以go-sdk为例, 调用sdk来创建账户并产生私钥

func main(){
	createAcc()
   exportPriKeys()
}

func createAcc(){
	client, err := conflux.NewClient(local_url, conflux.ClientOption{
    KeystorePath: ".keystore"}) //local_url = "http://127.0.0.1:12537"
    if err != nil {
        panic(err)
    }
    defer client.Close()
	acc1,err := client.AccountManager.Create("test")
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(acc1.String())

	acc2,err := client.AccountManager.Create("test")
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(acc2.String())
}

func exportPriKeys(){
	client, err := conflux.NewClient(local_url, conflux.ClientOption{
    KeystorePath: ".keystore"}) //local_url = "http://127.0.0.1:12537"
    if err != nil {
        panic(err)
    }
    defer client.Close()
   list := client.GetAccountManager().List()
   priv1, err := client.GetAccountManager().Export(list[0], "test")
   if err != nil {
   panic(err)
   }
   priv2, err := client.GetAccountManager().Export(list[1], "test")
   if err != nil {
   panic(err)
   }
   fmt.Println(priv2)
   fmt.Println(priv1)
}

记录输出的私钥

在conflux-rust/run目录下创建密钥文件

vim key.txt

# 将输出的私钥去掉前缀0x, 并复制到该文件中, 示例为:
# 931fffc586b7596b3f40bf67f4a38150c54d4cf98a96d25e8e679ba0825545cf
# 628819aeb8c48d044de86706ae17f7a8675af563582aea27502f40bf1ccdd35c

在development.toml文件中加入

genesis_secrets = "key.txt"

清除链上数据, 并重启

sh clear_state.sh

sh test.sh

再次调用sdk查询可以发现账户中有了代币

func queryBalance(){
	client, err := conflux.NewClient(local_url, conflux.ClientOption{
    KeystorePath: ".keystore"}) //local_url = "http://127.0.0.1:12537"
    if err != nil {
        panic(err)
    }
    defer client.Close()
	t, err := client.GetAccountManager().GetDefault()
	if err != nil {
		panic(err)
	}
	fmt.Println(t.String())


	m, err := client.GetBalance(*t)
	if err != nil {
		panic(err)
	}
	fmt.Println(m.String())
}

如何参与 PoW 挖矿

显卡挖矿教程

如何运行 PoS 节点

Conflux-rust v2.0 引入了 PoS 机制,用于提高网络的 finality,从而提高网络的安全性,并且 CFX 持有者可以通过参与 PoS 获取一定(至少年化10%以上)的收益。 参与 PoS 机制需要运行一个 Fullnode/Archivenode, 并将 Conflux 账户地址与该节点进行绑定。绑定之后 CFX 持有者可以通过与 PoSRegister 内置合约交互增加或减少投票。 获取的收益将直接发送至绑定的 Conflux PoW 账户地址。

运行 PoS 节点

PoS 节点的运行方式与 Conflux 普通节点运行方式 基本一致,

需要说明的是节点在首次启动时会自动生成 pos_key 文件(pos_config 目录中),并要求用户为该文件设置密码(一次设置,一次确认)。pos_key 文件保存了节点参与 pos 机制账号的私钥,因此需要妥善保管。

之后每次节点重启都会要求输入 pos_key 密码,如果输入错误节点启动将会失败。另外也可将该密码配置到配置文件中,配置项为 dev_pos_private_key_encryption_password

也可以通过环境变量 CFX_POS_KEY_ENCRYPTION_PASSWORD 进行设置

运行 PoS 节点的风险

PoS 节点运营者,需要保证 PoS 节点的稳定性,节点越稳定收益越高。

forceRetired

如果 PoS 节点当选成为了委员会委员,但又没有正常履行委员的职责(参与 PoS 投票),且持续超过一定时间(三小时),则节点将会被强制退休(forceRetired)。 通常以下三种情况会导致节点被强制退休:

如果节点被强制退休,该节点的所有 PoS 投票会被自动进行解锁操作,解锁的票需要经过 1-14 天的时间才会变成解锁状态,解锁的票无法获取 PoS 收益。 节点的强制退休状态会持续 1 天,七天之后才会变为正常状态。

节点发生强制退休,其质押的 CFX 本金不会丢失,只是会被锁定 1-14 天,期间无法获取收益。

CFX 被罚没

参与 PoS 共识,只有一种情况 CFX 会被罚没:同一个节点参与投票时,对同一个投票选项(比如 PoS 区块)投出了不同的票,此种情况节点会被认为恶意攻击 PoS 共识。 该节点所质押的所有 CFX 将会被永久锁死,无法取出.

导致此种情况发生只有一种 case:两个 PoS node 使用同一个 pos_key 同时参与 PoS 共识。

运营 PoS 节点注意事项

运行 PoS 节点除了正确的配置 pos_config 并运行节点外,需要注意一下事项:

除此之外建议增加以下监控:

另外如果想重新生成 pos_config/pos_key 文件,需要将 pos_db/secure_storage.json 文件一并删除,然后重启即可。

如何升级节点保证不被强制退休

PoS 节点非不必要,不建议进行升级操作,如果的确需要进行升级操作,建议在升级前,先通知节点停止参与选举,待节点状态变为不参与状态后再关停节点并进行升级操作。 节点重启后会自动重新开始参与 PoS 选举。具体操作步骤如下:

  1. 运行命令 ./conflux rpc local pos stop_election 通知节点停止参与选举,但节点不会立刻结束参与选举,整个停止参选过程可能需要几个小时。该命令会返回节点停止参与投票的区块号
  2. 每隔一段时间重复执行此命令以查看节点的状态,如果命令返回为 null 则节点已完成停止参与投票,此时可进行节点关闭操作。
  3. 升级完成后重启节点,节点会自动重新参与投票。(节点重启时会自动重新执行从最近 checkpoint 到最新的区块,此过程可能持续较长(几个小时),也可能很快)

如何实现 PoS 节点不停机更新

Conflux-rust 最新版本 v2.0.1 允许节点启动时不参与 PoS 投票,并通过命令控制节点停止/开始参与投票,通过此特性可以实现节点的宕机切换和无缝升级,从而保证 PoS 节点的持续运行。

注意:此模式下主备两台机器会使用同一个 pos_key, 因此操作时千万不能让两台机子同时参与 PoS 投票,否则会有 CFX 被锁死的风险。

该模式是通过 PR2438 添加进来的,在 PR 中有主备升级操作的英文介绍。大致步骤如下:

假设已经获取了 pos_config/pos_key 文件

此时我们搭建了两个节点,一主一备,并且只有一个节点参与 PoS 共识,如果需要进行节点升级可进行主备切换操作:

至此我们就完成了主备切换操作,此时可对为参与共识的节点进行升级操作。

再次提醒: 进行主备切换一定要再三检查确保主节点已停止参与 PoS 共识

如果主节点直接宕掉了,可以手动把节点的 pos_db/secure_storage.json 重命名为 pos_db/secure_storage.json.save,并复制到备节点的 pos_db 目录中,然后让备节点开始参与投票。

资源链接

PoS 注册操作教程

如何运行 eSpace 节点

eSpace 与 Core space 共用一个节点程序,启动方式相同。因此可参照 Core 节点搭建启动的方式启动一个 eSpace 的节点。

另外 eSpace 有几个单独配置需要设置:

如何使用快照文件快速运行节点

Archive-tool 是社区维护的一份 Conflux 网络节点数据快照,可用来快速同步数据,启动节点。详细用法参看工具使用说明。

使用Docker运行节点

用户能够借助Docker便捷地搭建Conflux节点的运行环境。 以下我们假定docker的环境配置已经完成。

获取镜像

可以从docker hub中获取Conflux的镜像。但需要注意tag的选取。我们以2.0.2版本为例进行说明。不同tag可大致分为三个系列,如:

// 我们推荐先使用无后缀的版本用于测试,之后有需要也可以使用其他版本
docker pull confluxchain/conflux-rust:2.0.2

运行镜像

使用默认配置启动

使用以下命令可以快速启动用于本地开发的镜像。

docker run -p 12537:12537 --rm --name cfx-node confluxchain/conflux-rust:2.0.2

启动后可以尝试是否能使用钱包连接到本地网络。如使用Fluent钱包,在设置页的“网络管理”页面中进行配置。在RPC URL填写完成后如果能自动获取区块链ID,则说明上述步骤运行成功。

此外也可以直接借助命令行查看是否有正常响应。

curl --data '{ "jsonrpc": "2.0", "method": "cfx_getStatus", "params": [], "id": 0 }' localhost:12537 -H 'content-type: application/json' 

使用自定义配置启动

除了使用默认配置启动外,还能够使用指定的配置文件启动。我们以启动测试网为例进行说明。

首先我们需要获得启动测试网节点的示例配置文件。

git clone https://github.com/Conflux-Chain/conflux-docker.git
cd conflux-docker/fullnode-configs/hydra/testnet
cp testnet.toml conflux.toml

docker需要的配置文件名为conflux.toml(与直接在宿主机中运行Conflux的需求不同)。我们使用上述项目的fullnode-configs/hydra/testnet/testnet.toml文件作为配置文件的模版,获得conflux.toml文件。接下来还需要对conflux.toml进行若干修改。

  1. 取消jsonrpc_http_port=12537行的注释。
  2. 在配置文件最后增加一行dev_pos_private_key_encryption_password = "your-pos-pwd"。(设置保护pos_key的口令)

接下来运行下述的命令

// 注意当前目录为conflux-docker/fullnode-configs/hydra/testnet
docker run -p 12537:12537 -v $PWD:/root/run --rm --name cfx-node confluxchain/conflux-rust:2.0.2-fix-testnet
curl --data '{ "jsonrpc": "2.0", "method": "cfx_getStatus", "params": [], "id": 0 }' localhost:12537 -H 'content-type: application/json' 

如果有正常响应且chainId为1则说明测试网节点运行正常。

Misc

Misc

如何运行Fullstate node

enable_single_mpt_storage=true
single_mpt_space="evm"  # 如果只需要打开 eSpace fullstate 则添加此配置

注意:如果需要打开 core space 的 fullstate 则需要自行编译 binary 程序,编译时打开 --features u64-mpt-db-key 配置项,否则内存使用会超过系统最大值

Misc

节点同步停止的常见原因

如何判断节点数据同步到最新

根据节点运行日志中的 Catch-up mode 信息可以知道节点是否同步到最新,如果 Catch-up mode 为 true,则表示节点还在追赶同步数据,为 false 则表示节点已同步到最新数据。

如何判断节点是否在正常同步数据

可根据节点运行日志 Catch-up mode 后边的 latest epoch 数值判断节点是否在进行同步,正常情况该数字会不断增长。

如果该数值不增长,也可根据 Statistics: StatisticsInner 的数值判断节点是否在正常工作,如果 inserted_block_countinserted_header_countinserted_block_countactivated_block_countprocessed_block_count 几个数值中任一数值在增长,都表示节点在正常工作。

2022-10-11T22:00:32.918557596+08:00 INFO  IO Worker #1         cfxcore::sta - Statistics: StatisticsInner { sync_graph: SyncGraphStatistics { inserted_block_count: 198117, inserted_header_count: 371367 }, consensus_graph: ConsensusGraphStatistics { inserted_block_count: 136125, activated_block_count: 371361, processed_block_count: 371366 } }

另外节点在重启时,会需要花费大量时间重建状态,此操作过程中,上述数值不会变化,但此为正常现象。此过程最长可能持续数小时。可耐心等待。

停止数据同步的常见原因

硬盘空间不够

首先可查看机器是否还有空间可用,正常情况下 Conflux 节点空间使用情况为:

网络问题

如果节点网络状况不好,导致无法连接到 peer 节点,则同步也会停止。如果是网络偶发,可尝试重启节点

系统最大文件打开数过低

系统该默认值为 1024, 节点运行需要调整为 65536

配置文件错误

如果启动节点时使用的配置文件错误(主网节点程序使用测试网配置文件;测试网节点程序使用主网配置文件)或未指定配置文件,此种情况会导致节点无法找到 bootnode,也就无法连接到其他网络节点。

节点数据文件损坏

如果节点数据文件损坏也会导致节点数据同步停止。此种情况在节点升级时出现可能性比较大:正确的升级方式是用最新的节点程序,替换原节点目录中的 conflux binary。一种错误的升级方式是,将原节点目录中的 blockchain 等数据目录拷贝到新下载的程序目录中,此种操作容易发生目录遗漏,拷贝不全的问题,大概率会导致节点无法继续同步

同步测试网 archivenode

如果是从头开始同步 archivenode,建议打开 additional_maintained_snapshot_count 并设置为 100

其他

使用官方下载的程序目录中的 start.sh 或 start.bat 启动节点,会在该目录下生成一个 stderr.txt 如果节点运行发生异常错误,会出现在该文件中,这些错误日志有助于排查节点同步失败原因。

如何部署一个 PoS Pool 服务

如何部署一个 PoS Pool 服务

搭建 PoS 矿池服务

conflux-fans 社区开源了 PoS Pool 矿池代码 任何人都可以拿来部署一个 PoS 矿池服务,该项目包含两部分:合约代码和 Dapp UI前端。

PoS 矿池部署大致分为以下四步:

  1. 运行一个 Conflux 节点
  2. 部署矿池合约
  3. 注册 PoS
  4. 部署 Pool 前端页面

Conflux PoS 节点创建

具体参看 PoS 节点运行文档

合约部署和注册

参看 pos-pool 合约部署文档

Pool 前端UI 搭建

参看 pos-pool UI 部署文档

如何部署一个 PoS Pool 服务

矿池维护

PoS 节点升级

PoS Pool 节点需要保持持续稳定运行,因为他们被选进委员会的概率很大,委员会中的节点在任期内,需要负责 PoS 出块投票工作,如果节点出现异常将会影响 PoS 共识工作。目前的 PoS 机制,如果节点当选为委员会成员,但不正常参与投票,持续超过 3 小时,节点将会被强制退休 (ForceRetire)。

ForceRetire 节点的所有 PoS 票会自动被 unlock,unlock 需要经过 7-14天时间才能 withdraw 出来。意味着你将会损失 7- 14 天的 PoS 奖励。

因此要保持 PoS 节点的稳定,做好监控。如果需要做节点升级有以下两种方式:

  1. 单节点停机升级防 forceRetire
  2. 主备节点升级无缝升级

合约升级

pos-pool 合约采用 Proxy1967 模式,可实现合约升级。如果需要增加功能,优化代码,或修复问题,可进行合约升级操作

注意:合约升级是一个复杂操作,请确保你了解合约升级的原理和注意事项再操作,否则可能导致合约数据的损坏。

ForceRetire 处理

目前该 pos-pool 实现在遇到节点被 forceRetire 的情况,需要管理员手动处理,才能恢复正常,具体参看

如何部署一个 PoS Pool 服务

eSpace 矿池部署

eSpace 矿池部署参考 pos-pool 相关文档

FAQs

节点运行常见问题

跳转链接

使用 ./conflux account new 创建的账号从哪可以找到

该命令创建的账号以 keystore 的形式存储在系统的固定目录中:

Keystore 的命名规则为 UTC--日期--哈希, 因此 Linux 系统也可使用如下命令查找:

find / -name UTC--*

备注:该目录实际存放位置使用 app_dirs v1.2.1 获取

节点启动后一直连不上 peer

有可能使用了错误的配置文件,比如主网的 binary + 测试网配置,测试网 binary + 主网配置,或者启动节点时没有指定配置文件。

连接不到 peer 本质原因一种是没有正确的指定 bootnodes

GLIBC_2.27 not found

./conflux: /lib64/libc.so.6: version GLIBC_2.27 not found (required by ./conflux)

此种错误是 GLIBC 未安装或版本错误