如何執行一個 Conflux 節點

Conflux中文社群發表於2021-12-30

Conflux 是一個基於 PoW(工作量證明) 的完全去中心化網路,如果想要參與此去中心化網路挖礦,或者擁有自己的 RPC 服務需要自己執行一個 node (也稱 client)。本文將介紹如何執行一個 Conflux 節點。

Archivenode VS fullnode

Conflux 的節點分為三種型別:歸檔節點(archivenode),全節點(fullnode),輕節點(lightnode)。不同型別節點的區別在於保留儲存的資料量不同,歸檔節點最全,輕節點最少。當然儲存資料越多消耗的系統硬體資源越多。關於不同型別節點的詳細介紹參看這裡

通常情況下如果想參與挖礦,執行一個全節點即可,如果想作為 RPC 服務來使用則需要執行一個 Archivenode. 輕節點則主要用於作為錢包來使用。

機器配置

執行一個 archivenode 的機器資源大致如下:

  • CPU:4Core
  • 記憶體:16G
  • 硬碟:200G

fullnode 對機器配置的要求會低一些,如果想參與挖礦出塊的話,需要有單獨的顯示卡

另外: 建議將系統的最大檔案開啟數調高到 10000。一般 Linux 系統預設為 1024, 不太夠用。

如何獲取節點程式和配置

Conflux 網路節點程式的獲取方式,首推到官方 Github Conflux-rust 倉庫的 Release 頁面進行下載, 一般直接下載最新 Release 的版本即可。每個 Release 的版本不僅包含原始碼,還提供 Windows, Mac, Linux 三大平臺預編譯好的節點程式。

image.png

需要注意的是目前主網和測試網節點程式的版本釋出是兩條線: 主網一般是 Conflux-vx.x.x, 測試網則為 Conflux-vx.x.x-testnet. 下載程式時需要根據個人的需求選擇正確的版本線。

下載的 zip 包,解壓後是一個 run 資料夾,裡面包含如下內容:

➜  run tree
.
├── conflux  # 節點程式
├── log.yaml # 日誌配置檔案
├── start.bat # windows 啟動指令碼
├── start.sh # unix 啟動指令碼
├── tethys.toml # 主網配置檔案
└── throttling.toml # 限流配置檔案

0 directories, 6 files

其中主要檔案為 confluxtethys.toml, 如果下載的是 windows 包的話, 節點程式為 conflux.exe

另外一種方式是從原始碼編譯節點程式,如果有興趣的話,可以參考此文件自行編譯。

主要配置項

在執行節點前需要先準備好節點配置檔案,在下載的程式包裡可以找到配置檔案,一般主網是 tethys.toml, 測試網則為 testnet.toml. 兩個配置檔案主要區別在於 bootnodeschainId 的配置值不同。開發者也可以到 conflux-rust Github 倉庫的 run 目錄下面查詢配置檔案。檔名同樣為 tethys.tomltestnet.toml

通常情況使用者不需要修改任何配置,直接執行啟動指令碼即可(不想了解配置細節?直接跳到下一章節執行節點)。但如果想開啟某些功能或自定義節點某些行為,就需要自行設定一些配置引數,以下為最常用的一些配置:

節點型別

  • node_type: 用於設定啟動節點的型別,可選值為 full (預設值), archive, light

chainId

  • chainId 用於配置節點要連線的鏈的ID,主網為 1029, 測試網為 1 (一般不需要修改)

Miner related

  • mining_address: 節點挖礦獎勵接收地址,可以配置 hex40 地址或 CIP-37 地址(注意:地址的 network prefix 需要與當前配置的 chainId 一致),如果配置了該項 minint_type 預設為 stratum
  • mining_type: 可選值為 stratum, cpu, disable
  • stratum_listen_address: stratum 地址
  • stratum_port: stratum 埠號
  • stratum_secret: stratum 連線憑證

RPC related

  • jsonrpc_cors: 用於控制 rpc 域名驗證策略,可選值為 none, all, 或者逗號(無空格)分隔的域名
  • jsonrpc_http_keep_alive: false or true 用於控制是否為 rpc HTTP connections 設定 KeepAlive
  • jsonrpc_ws_port: websocket rpc 埠號
  • jsonrpc_http_port: http rpc 埠號
  • public_rpc_apis: 對外開放訪問的 rpc api,可選值為 all, safe, cfx, debug, pubsub, test, trace (safe=cfx+pubsub)。一般建議設定為 safe
  • persist_tx_index: true or false 如果需要處理 transaction 相關 RPCs 的話,需要同時開啟此配置,不然將只能訪問到最近的交易資訊
  • persist_block_number_index: true or false 如果想要通過 blockNumber 查詢 block 資訊,需要開啟此配置
  • executive_trace: true or false 是否開啟 trace EVM execution 功能,如果開啟 trace 會被記錄到 database 中
  • get_logs_filter_max_epoch_range: Event log 獲取方法 cfx_getLogs 呼叫,對節點效能影響很大,可以通過此選項配置 該方法一次能查詢的 epoch 範圍最大值
  • get_logs_filter_max_limit: cfx_getLogs 方法一次查詢能夠返回 log 數量的最大值

Snapshot

  • additional_maintained_snapshot_count: 用於設定 stable checkpoint 之前 snapshot 需要保留的個數,預設為 0, stable genesis 之前的 snapshot 都會被刪掉。如果使用者想查詢比較久遠的歷史狀態,需要設定此選項。此選項開始後,磁碟用量同樣會增加許多。

directries

  • conflux_data_dir: 資料(block data, state data, node database)的存放目錄
  • block_db_dir: block 資料存放目錄,預設情況會存放到 conflux_data_dir 指定目錄下的 blockchain_db 目錄中
  • netconf_dir: 用於控制 network 相關的持久化目錄,包括 net_key

Log related

  • log_conf: 用於指定 log 詳細配置檔案如 log.yaml,配置檔案中的設定會覆蓋 log_level 設定
  • log_file: 指定 log 的路徑,不設定的話會輸出到 stdout
  • log_level: 日誌列印的級別,可選值為 error, warn, info, debug, trace, off

日誌的 log 級別越高,列印的日誌越多,響應的會佔用貢多的儲存空間,也會影響節點的效能.

開發者(dev)模式

Conflux-rust 還提供一個開發者(dev)模式,該模式下會啟動一個單節點鏈,並預設開啟所有的 RPC 方法。此模式節點非常適合智慧合約開發者快速部署和除錯合約。
其配置方式如下:

  • bootnodes: 註釋掉此配置
  • mode: 將模式選項配置為 dev
  • dev_block_interval_ms: 出塊間隔時間, 單位為毫秒(ms)

配置 genesis 賬戶

在 dev 模式下可以通過一個單獨的 genesis_secrets.txt 檔案,配置 genesis 賬戶,該檔案中需要一行放置一個私鑰(不帶0x字首), 並在配置檔案中新增 genesis_secrets 配置項,將值配置為 該檔案的路徑:

genesis_secrets = './genesis_secrets.txt'

這樣節點啟動之後,每個賬戶初始會有 10000,000,000,000,000,000,000 Drip 也就是 1w CFX。

其他

  • net_key: 是一個 256 bit 的私鑰,用於生成唯一 node id,該選項如果不調會隨機生成,如果設定可以填一個長度為 64 的 hex 字串
  • tx_pool_size: 交易允許存放的最大交易數(預設 50W)
  • tx_pool_min_tx_gas_price: 交易池對交易 gasPrice 的最小限制(預設為 1)

關於完整的配置項,可以直接檢視配置檔案,其中有所有的可配置項,以及詳細的註釋介紹.

執行節點

配置檔案配好了,就可以通過節點程式,執行節點了。

# 執行啟動指令碼
$ ./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:

  • x.x.x-mainnet: 主網映象
  • x.x.x-testnet: 測試網映象
  • x.x.x: 開發模式映象,此模式下會自動初始化十個賬號,可用於本地快速開發

常見問題

為什麼重啟後,同步需要很久?

節點重啟後會從上個 checkpoint 開始同步,並重新 replay 區塊資料,根據當前距離上一 checkpoint 的遠近,需要等待不同的時長,才能開始從最新區塊開始同步.
這是正常現象,一般會等幾分鐘到十幾分鐘不等。

為什麼節點同步的區塊高度卡住,不再增長?

如果發現區塊同步卡住,不再增長。可檢視日誌或終端是否有錯誤,如果沒有錯誤大概率是因為網路原因,可嘗試重啟節點。

修改配置後,重啟節點需要清除資料麼?

分情況,有的需要,有的不需要。如果修改的配置涉及到資料儲存或資料索引,需要清資料重啟節點,比如:

  • persist_tx_index
  • executive_trace
  • persist_block_number_index

修改其他配置不需要清資料,直接重啟即可.

目前的 archive node 資料有多大?

截止到 2021.11.04 區塊資料的壓縮包大小為不到 90 G

如何參與挖礦?

挖礦需要使用 GPU 參與,具體可參看這裡

如何快速同步資料,從而執行一個 archive node

可使用 fullnode-node 下載歸檔節點的資料快照,使用快照的節點資料,可以快速同步到最新資料。

節點執行 error 日誌怎麼看?

如果是通過 start.sh 執行的節點,可以在相同目錄中的 stderr.txt 檢視錯誤原因。

如何執行一個 PoS 節點?

TO BE UPDATE

參考

原文連結:如何執行一個 Conflux 節點

相關資料庫:

相關文章