Skip to main content

如何运行 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())
}