如何设置独立的conflux区块链
你也许想在单个节点的链上运行Conflux,以开发和测试智能合约。你可以将Conflux以独立链形式与多台机器协同运行。
运行单节点开发链
为了运行单节点Conflux链进行开发,您可以按照 以下步骤进行操作:
获取可执行的Conflux二进制文件(使用预编译的二进制文件或从最新的源代码构建)。您可以参考文档安装。
创建一个目录并准备一个配置文件
development.toml
。可以复制目录中提供的default.toml
文件并遵循指南开始要求进行操作。将配置文件内的
bootnodes
参数设置为空(或注释该设置行)。设置配置文件内的参数
mode
值为"dev"。如果是从default.toml
中拷贝的,应找到被注释的行并取消注释。设置配置文件内的参数
dev_block_interval_ms
为您想要的块生成时间间隔。在开发模式下,Conflux会在固定的时间间隔内自动生成一个区块。以
development.toml
为配置文件运行Conflux二进制文件。例如:$ ../target/release/conflux --config development.toml
运行多节点生产链
若想在生产模式下拥有包含多个节点的独立Conflux链,则需要保证你的节点可以连接到这个链上的其他节点,而不会连接到其他链上(比如我们的testnet)
为了实现这一目标,你应该设置自己的引导节点,并让其他节点连接到它。然后他们会使用我们的发现协议连接到其他节点。
您需要使用引导节点的IP地址、端口号和节点ID让其他节点进行接入。节点id是节点唯一的私钥对应的公钥,用于网络层识别。有一个指令,可以让bootnode自动生成私钥,并通过日志文件获取节点id。
一个简单的例子
获取可执行的Conflux二进制文件(使用预编译的二进制文件或从最新的源代码构建)。您可以参考文档安装。
创建一个目录并为引导节点准备配置文件
bootnode.toml
(如果没有特殊设置,默认端口号为32323),可以参考文档开始.确保配置文件
bootnode.toml
不包含bootnode
字段且network
日志记录级别至少为debug
。$ mkdir run$ cd run# Put Conflux executable `conflux` and the configuration file `bootnode.toml` under `run`如果您是根据我们提供的
default.toml
进行编辑,您需要注释掉bootnode
字段。否则该节点将连接到现有的Conflux网络。运行引导节点并根据控制台输出找到节点id编号。节点id的信息样式为
Self node id: $ID
其中$ID
是0x前缀格式的引导节点编号。移除0x前缀你将会得到这个节点的id号码$NODEID
,如果你错过了屏幕上输出的那一行内容,则可以使用查看日志文件的方案:grep "Self node id" log/conflux.log|awk '{print $9}'|tr -d '0x'现在我们拥有了引导节点的
$IP
、$PORT$
以及$NODEID
我们可以按格式cfxnode://$NODEID@$IP:$PORT
获取引导节点的url地址并使用变量$BOOTNODE_URL
表示它。通过在其他节点配置文件中设置
bootnodes="$BOOTNODE_URL"
启动节点。
需要注意的是,使用上面的指令,连接到引导节点的其他节点将暂时处于不可信状态(默认为3天),在我们的发现协议中不可信节点将不会被广播。因此,在其他节点晋升到受信任状态之前,网络结构将是一个以引导节点为中心的星形结构。您通过修改配置文件内的node_table_promotion_timeout_s
来缩短该周期。
设置多个引导节点
你也可以在一开始就设置多个引导节点。但是,这不能简单地通过多次重复上文提到的引导节点设置步骤来完成。因为你需要在每一个引导节点启动前为其设置bootnodes
。
实现这个目标的一个方法是启动这些引导节点,并立即停止它们。随手收集它们的节点id,设置它们的配置文件,最后全部重启。
另一个比较好的方法是分别生成他们的私钥,并手动设置net_key
以启动节点。该步骤可通过目录test
中提供的python测试框架完成。
然后你可以用生成的节点id来构造引导节点url url,并将私钥通过设置net_key="$NET_KEY"
或使用命令行--net-key $NET_KEY
传递参数的方式启动每一个节点。
设置创世账户
在生产环境中,你可以通过将genesis_accounts
设置为格式如下的账户文件以初始化初始创世状态:
其中,每一行都是一个账户,键为账户地址,值则时用字符串表示的Drip余额。需要注意的是,genesis_accounts
在mode
被设置为test
或dev
时不会生效。
如果mode
被设置为test
或dev
,可以通过设置genesis_secrets
来设置创世账户的私钥。每一行都是一个无0x前缀的账户私钥。账户的余额设置默认为10000000000000000000000
。