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 三大平臺預編譯好的節點程式。
需要注意的是目前主網和測試網節點程式的版本釋出是兩條線: 主網一般是 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
其中主要檔案為 conflux
和 tethys.toml
, 如果下載的是 windows 包的話, 節點程式為 conflux.exe
另外一種方式是從原始碼編譯節點程式,如果有興趣的話,可以參考此文件自行編譯。
主要配置項
在執行節點前需要先準備好節點配置檔案,在下載的程式包裡可以找到配置檔案,一般主網是 tethys.toml
, 測試網則為 testnet.toml
. 兩個配置檔案主要區別在於 bootnodes
和 chainId
的配置值不同。開發者也可以到 conflux-rust
Github 倉庫的 run 目錄
下面查詢配置檔案。檔名同樣為 tethys.toml
或 testnet.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
ortrue
用於控制是否為 rpc HTTP connections 設定 KeepAlivejsonrpc_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
orfalse
如果需要處理 transaction 相關 RPCs 的話,需要同時開啟此配置,不然將只能訪問到最近的交易資訊persist_block_number_index
:true
orfalse
如果想要通過 blockNumber 查詢 block 資訊,需要開啟此配置executive_trace
:true
orfalse
是否開啟 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 的路徑,不設定的話會輸出到 stdoutlog_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 節點
相關資料庫: