跳到主要内容

运行私有链

您可能希望在单节点链上运行Conflux以开发和测试智能合约。 您也可以使用多台计算机将Conflux作为私有链来运行。

运行单节点开发链

为了运行一个单节点的Conflux链用于开发,您可以按照以下步骤进行:

  1. Get executable Conflux binary file (use precompiled binary or build from the latest source code). You can refer to the document Downloading.
  2. Create a directory and prepare a configuration file devnode.toml. You can copy the hydra.toml provided in the directory and start from there following the guide Configuration Files.
  3. Set the bootnodes parameter in the configuration file to empty (or comment the setting line).
  4. Set the mode parameter to "dev". If you copy from hydra.toml, you should find the line being commented and you can uncomment it.
  5. Set the dev_block_interval_ms parameter to the block generation interval you want. In the development mode, Conflux will automatically generate a block in a fixed interval.
  6. Generate PoS related configurations according this guide
  7. Set history CIPs enable height to make sure the history CIPs are enabled. Check here for an example.
  8. Run Conflux binary with devnode.toml as the configuration file. 例如:
$ ./conflux --config devnode.toml

You can download all sample configuration file here

运行多节点生产链

要拥有自己的Conflux链,并在生产模式下拥有多个节点,您需要确保您的节点可以连接到这个链中的其他节点,并且不会连接到其他链(如Conflux的测试网)。

为此,您应该设置自己的启动节点,并让其他节点连接到它。 然后,它们将通过我们的发现协议连接到其他节点。

您需要启动节点的IP地址、端口号和节点ID,以便其他节点连接。 The node id is the public key corresponding the node's unique private key for identification at the network layer. 以下是让启动节点自动生成其私钥并通过日志文件获取节点ID的指导。

A Simple Instruction

  1. Get executable Conflux binary file (use precompiled binary or build from the latest source code). You can refer to the document Downloading.

  2. 创建一个目录,并为启动节点准备一个配置文件bootnode.toml(如果未设置,默认端口为32323)。 您可以参考节点配置文件文档。

确保 `bootnode.toml` 不包含 `bootnode` 条目,并且 `network` 的日志级别至少为 `debug` 。

$ mkdir run
$ cd run
# 将Conflux可执行文件`conflux`和配置文件`bootnode.toml`放在`run`下


如果您是基于我们提供的hydra.toml进行编辑,需要注释掉bootnode条目。 否则节点将连接到现有的Conflux网络。
  1. 启动bootnode,并在控制台打印中找到节点ID。 节点ID的信息为Self node id: $ID,其中$ID是此启动节点的0x前缀节点ID。 去掉0x前缀后,您将获得节点ID $NODEID。 如果您错过了屏幕上的行,可以使用以下命令查看日志文件:
grep "Self node id" log/conflux.log|awk '{print $9}'|sed -e "s/^0x//"
  1. 现在我们有启动节点的$IP$PORT$$NODEID,我们可以使用格式cfxnode://$NODEID@$IP:$PORT获取此启动节点的URL。 记为$BOOTNODE_URL

  2. 通过在配置中设置bootnodes="$BOOTNODE_URL"启动其他节点。

注意,根据上述指导,连接到启动节点的其他节点将在一段时间内(默认为3天)保持不受信任状态,并且在我们的发现协议中不受信任的节点不会被广播。 因此,在其他节点被提升为受信任状态之前,网络结构将是以启动节点为中心的星形。 You can change node_table_promotion_timeout_s in the configurations to make this period shorter.

设置多个启动节点(Bootnodes)

您也可以在一开始就设置多个启动节点。 然而,这不能通过简单地多次重复上述启动节点设置步骤来完成,因为您需要在启动每个启动节点之前设置它们的启动节点

一种实现方法是启动这些启动节点然后立即停止它们。 然后收集它们的节点ID,设置它们的配置,并重新启动所有节点。

另一种更好的方法是分别生成它们的私钥,并手动设置它们的net_key以启动。 这可以通过我们的python测试框架中提供的函数来完成,在test目录下。

from conflux.utils import *

num_of_bootnodes=10
for _ in range(num_of_bootnodes):
pri_key, pub_key = ec_random_keys()
node_id = encode_hex(encode_int32(pub_key[0]) + encode_int32(pub_key[1]))
print(encode_hex(pri_key), node_id)

然后您可以用生成的节点ID构建启动节点URL,并通过将net_key="$NET_KEY"字段设置为私钥或通过命令行选项--net-key $NET_KEY来启动每个节点。

设置创世账户(Genesis Accounts)

在生产环境中,您可以通过将genesis_accounts设置为一个帐户文件来初始化初始创世状态,格式如下:

0f947e34fc907008968ec99baa1dbb677b927531="1000000000000"
ab4a32bca7500d94a2cc1f3150e12686c692c590="1000000000000"

每行是一个账户。 键是账户地址,值是表示其余额的字符串(单位为Drip)。 请注意,如果mode测试(test)开发(dev),则genesis_accounts不适用。

如果modetestdev,您可以通过设置genesis_secrets来用它们的私钥设置初始账户。 每行是一个没有0x前缀的账户私钥。 The balance of each account is set to 10000000000000000000000 by default.